summaryrefslogtreecommitdiff
path: root/biblio/bibtex/utils
diff options
context:
space:
mode:
Diffstat (limited to 'biblio/bibtex/utils')
-rw-r--r--biblio/bibtex/utils/BibBuild/Bibliography Builder.fp7bin0 -> 684032 bytes
-rw-r--r--biblio/bibtex/utils/BibBuild/README84
-rw-r--r--biblio/bibtex/utils/BibTexMng/README30
-rw-r--r--biblio/bibtex/utils/JavaBib/JavaBib1.jpgbin0 -> 83258 bytes
-rw-r--r--biblio/bibtex/utils/JavaBib/describe.html142
-rw-r--r--biblio/bibtex/utils/JavaBib/docs.html270
-rw-r--r--biblio/bibtex/utils/JavaBib/index.html47
-rw-r--r--biblio/bibtex/utils/JavaBib/screen.html29
-rw-r--r--biblio/bibtex/utils/Synapsen/README30
-rw-r--r--biblio/bibtex/utils/Synapsen/SynManual.pdfbin0 -> 1982173 bytes
-rw-r--r--biblio/bibtex/utils/Synapsen/info.html1
-rw-r--r--biblio/bibtex/utils/alphabib/GPL.TXT341
-rw-r--r--biblio/bibtex/utils/alphabib/Makefile12
-rw-r--r--biblio/bibtex/utils/alphabib/README11
-rw-r--r--biblio/bibtex/utils/alphabib/alphabib338
-rw-r--r--biblio/bibtex/utils/alphabib/alphabib.pdfbin0 -> 124025 bytes
-rw-r--r--biblio/bibtex/utils/alphabib/example.bib76
-rw-r--r--biblio/bibtex/utils/alphabib/example.pdfbin0 -> 71897 bytes
-rw-r--r--biblio/bibtex/utils/alphabib/example.tex32
-rw-r--r--biblio/bibtex/utils/ams2bib/README46
-rw-r--r--biblio/bibtex/utils/ams2bib/ams2bib287
-rw-r--r--biblio/bibtex/utils/ams2bib/ams2bib.1100
-rw-r--r--biblio/bibtex/utils/ams2bib/ams2bib.txt77
-rw-r--r--biblio/bibtex/utils/bib2dvi/bib2dvi173
-rw-r--r--biblio/bibtex/utils/bib2dvi/bib2dvi.bak156
-rw-r--r--biblio/bibtex/utils/bib2dvi/bib2dvi.sty224
-rw-r--r--biblio/bibtex/utils/bib2dvi/bib2dvi1.awk60
-rw-r--r--biblio/bibtex/utils/bib2dvi/bib2dvi2.awk10
-rw-r--r--biblio/bibtex/utils/bib2dvi/dutch.sty14
-rw-r--r--biblio/bibtex/utils/bib2dvi/english.sty8
-rw-r--r--biblio/bibtex/utils/bib2ml/AUTHORS14
-rw-r--r--biblio/bibtex/utils/bib2ml/COPYING341
-rw-r--r--biblio/bibtex/utils/bib2ml/Changelog389
-rw-r--r--biblio/bibtex/utils/bib2ml/INSTALL2
-rw-r--r--biblio/bibtex/utils/bib2ml/NEWS2
-rw-r--r--biblio/bibtex/utils/bib2ml/README13
-rw-r--r--biblio/bibtex/utils/bib2ml/TODO3
-rw-r--r--biblio/bibtex/utils/bib2ml/VERSION1
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/deb-specific/checkinstall.pl81
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2html.docs2
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2html.install28
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2html.manpages2
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2html.postinst16
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2html.prerm16
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2ml-common.docs2
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2ml-common.install28
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2sql.docs2
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2sql.install2
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2sql.manpages2
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2sql.postinst16
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2sql.prerm16
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2xml.docs2
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2xml.install4
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/bib2xml.manpages2
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2xml.postinst16
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/bib2xml.prerm16
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/changelog475
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/compat1
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/control48
-rw-r--r--biblio/bibtex/utils/bib2ml/debian/copyright9
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/debian/rules75
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/bibtexml_dtd.html173
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/capture.pngbin0 -> 203295 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/capture2.pngbin0 -> 219500 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/index.html1320
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/mustwork.gifbin0 -> 1245 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/not-validated.gifbin0 -> 1280 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/optional.gifbin0 -> 1326 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/required.gifbin0 -> 1385 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/requiredor.pngbin0 -> 1954 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/requiredor2.pngbin0 -> 1848 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/sql_schema.pngbin0 -> 24379 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/sql_schema_small.pngbin0 -> 8129 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/validated.gifbin0 -> 1301 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/doc/work.gifbin0 -> 1326 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2html_en.pod209
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2html_fr.pod206
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2sql_en.pod215
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2sql_fr.pod212
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2xml_en.pod214
-rw-r--r--biblio/bibtex/utils/bib2ml/man/bib2xml_fr.pod211
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Checker/Names.pm251
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Encode.pm138
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Error.pm443
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/HTML.pm1539
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Misc.pm1554
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Title.pm145
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Verbose.pm241
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/AbstractGenerator.pm1226
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/DomainGen.pm564
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/ExtendedGen.pm714
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/FileWriter.pm307
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/HTMLGen.pm2334
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang.pm319
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English86
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.HTMLGen54
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.Theme.Dyna22
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French86
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.HTMLGen55
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.Theme.Dyna22
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian86
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.HTMLGen56
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.Theme.Dyna22
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese86
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.HTMLGen56
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.Theme.Dyna22
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish87
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.HTMLGen55
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.Theme.Dyna23
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/LangManager.pm382
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SQLGen.pm746
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/MySql.pm214
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/PgSql.pm214
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/StdOutWriter.pm163
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme.pm1418
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna.pm1401
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/child.gifbin0 -> 91 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/emptychild.gifbin0 -> 53 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/lastchild.gifbin0 -> 88 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/minus.gifbin0 -> 54 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/plus.gifbin0 -> 56 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/samechild.gifbin0 -> 64 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/stylesheet.css180
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Simple.pm678
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Writer.pm211
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/XMLGen.pm1364
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML-ext.dtd161
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML.dtd816
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/drive.pngbin0 -> 926 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/loupe.gifbin0 -> 1194 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-css.gifbin0 -> 1134 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-html401.gifbin0 -> 2328 bytes
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/JabRef/JabRef.pm209
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Main.pm433
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/BibScanner.pm817
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Parser.pm477
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Scanner.pm490
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/StateMachine.pm643
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Release.pm89
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXEntry.pm498
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXName.pm931
-rw-r--r--biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/TeX.pm2603
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/src/bib2html.php41
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/src/bib2html.pl55
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/src/bib2sql.pl57
-rwxr-xr-xbiblio/bibtex/utils/bib2ml/src/bib2xml.pl57
-rw-r--r--biblio/bibtex/utils/bib2ml/test.bib5
-rw-r--r--biblio/bibtex/utils/bib2xhtml/COPYING339
-rw-r--r--biblio/bibtex/utils/bib2xhtml/ChangeLog892
-rw-r--r--biblio/bibtex/utils/bib2xhtml/Makefile118
-rw-r--r--biblio/bibtex/utils/bib2xhtml/README83
-rwxr-xr-xbiblio/bibtex/utils/bib2xhtml/bib2xhtml1279
-rw-r--r--biblio/bibtex/utils/bib2xhtml/bib2xhtml.html767
-rw-r--r--biblio/bibtex/utils/bib2xhtml/bib2xhtml.man534
-rw-r--r--biblio/bibtex/utils/bib2xhtml/bib2xhtml.pdfbin0 -> 16902 bytes
-rw-r--r--biblio/bibtex/utils/bib2xhtml/bib2xhtml.txt299
-rwxr-xr-xbiblio/bibtex/utils/bib2xhtml/bibsearch333
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-c-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-c.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-n.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r-k.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha-u.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/alpha.html154
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-n.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/empty.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-c-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-c-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-c-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-c.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-c-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-c.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n-u.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-n.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-c-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-c.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-r-k.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u-r.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named-u.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/named.html161
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-n.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/paragraph.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-c-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-c-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-n.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-c.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-r-k.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u-r.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain-u.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/plain.html149
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-k.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-n-k.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u-k.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-n.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-u-k.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort-u.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsort.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n-u.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsortlist-u.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/eg/unsortlist.html150
-rw-r--r--biblio/bibtex/utils/bib2xhtml/example.bib201
-rwxr-xr-xbiblio/bibtex/utils/bib2xhtml/gen-bst135
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-a.bst1406
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-aa.bst1411
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ac.bst1407
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-aca.bst1412
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-acr.bst1408
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-acra.bst1413
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ar.bst1407
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ara.bst1412
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-btxbst.doc2900
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-n.bst1388
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-na.bst1393
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-nc.bst1389
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-nca.bst1394
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ncr.bst1390
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ncra.bst1395
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-nr.bst1389
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-nra.bst1394
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-u.bst1044
-rw-r--r--biblio/bibtex/utils/bib2xhtml/html-ua.bst1049
-rw-r--r--biblio/bibtex/utils/bib2xhtml/index.html117
-rw-r--r--biblio/bibtex/utils/bib2xhtml/showeg.js32
-rw-r--r--biblio/bibtex/utils/bib2xhtml/static.html151
-rw-r--r--biblio/bibtex/utils/bibclean/README778
-rw-r--r--biblio/bibtex/utils/bibclean/bibclean-2.11.3.tar-lst219
-rw-r--r--biblio/bibtex/utils/bibclean/bibclean.pdfbin0 -> 55589 bytes
l---------biblio/bibtex/utils/bibdb1
-rw-r--r--biblio/bibtex/utils/bibexport/README27
-rw-r--r--biblio/bibtex/utils/bibexport/bibexport.dtx1569
-rw-r--r--biblio/bibtex/utils/bibexport/bibexport.ins76
-rw-r--r--biblio/bibtex/utils/bibexport/bibexport.pdfbin0 -> 256849 bytes
-rw-r--r--biblio/bibtex/utils/bibextract/COPYING340
-rw-r--r--biblio/bibtex/utils/bibextract/Makefile.in245
-rw-r--r--biblio/bibtex/utils/bibextract/README46
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.awk261
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.man214
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.pdfbin0 -> 32689 bytes
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.sh126
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.sok52
-rw-r--r--biblio/bibtex/utils/bibextract/bibextract.txt345
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.awk163
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.man169
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.pdfbin0 -> 23364 bytes
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.sh106
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.sok45
-rw-r--r--biblio/bibtex/utils/bibextract/citefind.txt294
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.awk107
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.man126
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.pdfbin0 -> 21719 bytes
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.sh68
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.sok47
-rw-r--r--biblio/bibtex/utils/bibextract/citetags.txt258
-rw-r--r--biblio/bibtex/utils/bibextract/configure2301
-rw-r--r--biblio/bibtex/utils/bibextract/configure.in50
-rw-r--r--biblio/bibtex/utils/bibfile-reformat-pages/README5
-rw-r--r--biblio/bibtex/utils/bibfile-reformat-pages/bibfile-reformat-pages147
-rw-r--r--biblio/bibtex/utils/bibgene/bibgene122.hqx6657
-rw-r--r--biblio/bibtex/utils/bibindex/Makefile189
-rw-r--r--biblio/bibtex/utils/bibindex/README47
-rw-r--r--biblio/bibtex/utils/bibindex/bibindex.c1062
-rw-r--r--biblio/bibtex/utils/bibindex/bibindex.man112
-rw-r--r--biblio/bibtex/utils/bibindex/bibindex.txt132
-rw-r--r--biblio/bibtex/utils/bibindex/biblook.c1245
-rw-r--r--biblio/bibtex/utils/bibindex/biblook.h113
-rw-r--r--biblio/bibtex/utils/bibindex/biblook.man122
-rw-r--r--biblio/bibtex/utils/bibindex/biblook.txt132
-rw-r--r--biblio/bibtex/utils/bible/BIBLE.HLPbin0 -> 20620 bytes
-rw-r--r--biblio/bibtex/utils/bible/bible.ini85
-rw-r--r--biblio/bibtex/utils/bible/readme.txt38
-rw-r--r--biblio/bibtex/utils/bible/versions.txt20
-rw-r--r--biblio/bibtex/utils/bibsort/Makefile157
-rw-r--r--biblio/bibtex/utils/bibsort/README15
-rw-r--r--biblio/bibtex/utils/bibsort/bibsort.hlp200
-rw-r--r--biblio/bibtex/utils/bibsort/bibsort.man291
-rw-r--r--biblio/bibtex/utils/bibsort/bibsort.sh163
-rw-r--r--biblio/bibtex/utils/bibsort/bibsort.txt264
-rw-r--r--biblio/bibtex/utils/bibsort/rofvms.awk60
-rw-r--r--biblio/bibtex/utils/bibtool/README.md125
-rw-r--r--biblio/bibtex/utils/bibtool/bibtool.pdfbin0 -> 583816 bytes
-rw-r--r--biblio/bibtex/utils/bibtool/c_lib.pdfbin0 -> 411431 bytes
-rw-r--r--biblio/bibtex/utils/bibtool/ref_card.pdfbin0 -> 160993 bytes
-rw-r--r--biblio/bibtex/utils/bibtools/README51
-rw-r--r--biblio/bibtex/utils/bibtools/abstract.bst1345
-rw-r--r--biblio/bibtex/utils/bibtools/aux2bib68
-rw-r--r--biblio/bibtex/utils/bibtools/bib.html37
-rw-r--r--biblio/bibtex/utils/bibtools/bib2html271
-rw-r--r--biblio/bibtex/utils/bibtools/bibify37
-rw-r--r--biblio/bibtex/utils/bibtools/bibkey56
-rw-r--r--biblio/bibtex/utils/bibtools/bibkey.awk33
-rw-r--r--biblio/bibtex/utils/bibtools/bibkey.sed32
-rw-r--r--biblio/bibtex/utils/bibtools/bibtex-extras.el22
-rw-r--r--biblio/bibtex/utils/bibtools/citekeys52
-rw-r--r--biblio/bibtex/utils/bibtools/citekeys.bst60
-rw-r--r--biblio/bibtex/utils/bibtools/cleantex19
-rw-r--r--biblio/bibtex/utils/bibtools/demo.bib81
-rw-r--r--biblio/bibtex/utils/bibtools/demo.html83
-rw-r--r--biblio/bibtex/utils/bibtools/html-alpha.bst1286
-rw-r--r--biblio/bibtex/utils/bibtools/html-cv.bst1330
-rw-r--r--biblio/bibtex/utils/bibtools/html-long.bst1356
-rw-r--r--biblio/bibtex/utils/bibtools/html-longp.bst1363
-rw-r--r--biblio/bibtex/utils/bibtools/html-short.bst1305
-rw-r--r--biblio/bibtex/utils/bibtools/looktex53
-rw-r--r--biblio/bibtex/utils/bibtools/looktex.awk39
-rw-r--r--biblio/bibtex/utils/bibtools/makebib95
-rw-r--r--biblio/bibtex/utils/bibtools/printbib68
-rw-r--r--biblio/bibtex/utils/bibtools/subset-dfk.bst281
-rw-r--r--biblio/bibtex/utils/bibtools/subset-nocomment.bst272
-rw-r--r--biblio/bibtex/utils/bibtools/subset.bst271
-rw-r--r--biblio/bibtex/utils/bibview-2.0/README35
-rw-r--r--biblio/bibtex/utils/bibview-2.0/bibview-patch.gzbin0 -> 30002 bytes
-rw-r--r--biblio/bibtex/utils/bibview-2.0/bibview.pdfbin0 -> 61422 bytes
-rw-r--r--biblio/bibtex/utils/bibview/bibview.pl-0.2.2538
-rw-r--r--biblio/bibtex/utils/bibweb/COPYING340
-rw-r--r--biblio/bibtex/utils/bibweb/ChangeLog213
-rw-r--r--biblio/bibtex/utils/bibweb/HOW_TO293
-rw-r--r--biblio/bibtex/utils/bibweb/INSTALL89
-rw-r--r--biblio/bibtex/utils/bibweb/README41
-rw-r--r--biblio/bibtex/utils/bibweb/bibweb529
-rw-r--r--biblio/bibtex/utils/bibweb/bibweb.html824
-rw-r--r--biblio/bibtex/utils/bibweb/bibweb.info594
-rw-r--r--biblio/bibtex/utils/bibweb/bibweb.texi776
-rw-r--r--biblio/bibtex/utils/bibweb/bibweb_toc.html33
-rw-r--r--biblio/bibtex/utils/bibweb/test.tex44
-rw-r--r--biblio/bibtex/utils/bids/bids.to.bibtex390
-rw-r--r--biblio/bibtex/utils/ebib/ChangeLog1118
-rw-r--r--biblio/bibtex/utils/ebib/INSTALL1
-rw-r--r--biblio/bibtex/utils/ebib/README14
-rw-r--r--biblio/bibtex/utils/ebib/VERSION1
-rw-r--r--biblio/bibtex/utils/ebib/doc/ebib-manual.pdfbin0 -> 257344 bytes
-rw-r--r--biblio/bibtex/utils/ebib/doc/html/ebib-manual.css61
-rw-r--r--biblio/bibtex/utils/ebib/doc/html/ebib-manual.html2224
-rw-r--r--biblio/bibtex/utils/ebib/ebib.el3606
-rw-r--r--biblio/bibtex/utils/ebib/info/ebib-manual.info2444
-rw-r--r--biblio/bibtex/utils/findbib/README73
-rw-r--r--biblio/bibtex/utils/findbib/addbib281
-rw-r--r--biblio/bibtex/utils/findbib/documentation.pdfbin0 -> 47947 bytes
-rw-r--r--biblio/bibtex/utils/findbib/documentation.tex82
-rw-r--r--biblio/bibtex/utils/findbib/example.pdfbin0 -> 57041 bytes
-rw-r--r--biblio/bibtex/utils/findbib/example.tex26
-rw-r--r--biblio/bibtex/utils/findbib/findbib474
-rw-r--r--biblio/bibtex/utils/findbib/utphys.bst1066
-rw-r--r--biblio/bibtex/utils/fixbbl/README28
-rw-r--r--biblio/bibtex/utils/fixbbl/fixbbl.py67
-rw-r--r--biblio/bibtex/utils/hyperbibtex/hyperbibtex098a.sea_hqx6101
-rw-r--r--biblio/bibtex/utils/ietfbibs/CHANGELOG.md11
-rw-r--r--biblio/bibtex/utils/ietfbibs/LICENSE.md19
-rw-r--r--biblio/bibtex/utils/ietfbibs/Makefile20
-rw-r--r--biblio/bibtex/utils/ietfbibs/README.md9
-rwxr-xr-xbiblio/bibtex/utils/ietfbibs/id2bib30
-rw-r--r--biblio/bibtex/utils/ietfbibs/id2bib.awk96
-rw-r--r--biblio/bibtex/utils/ietfbibs/ids.tex16
-rwxr-xr-xbiblio/bibtex/utils/ietfbibs/rfc2bib30
-rw-r--r--biblio/bibtex/utils/ietfbibs/rfc2bib.awk117
-rw-r--r--biblio/bibtex/utils/ietfbibs/rfcs.tex16
-rw-r--r--biblio/bibtex/utils/isi2bibtex/README77
-rw-r--r--biblio/bibtex/utils/isi2bibtex/isi2bibtex1325
-rw-r--r--biblio/bibtex/utils/isi2bibtex/isi2bibtex.1443
-rw-r--r--biblio/bibtex/utils/isi2bibtex/isi2bibtexrc110
-rw-r--r--biblio/bibtex/utils/isi2bibtex/manual.htm464
-rw-r--r--biblio/bibtex/utils/isi2bibtex/manual.txt263
-rw-r--r--biblio/bibtex/utils/lookbibtex/Makefile69
-rw-r--r--biblio/bibtex/utils/lookbibtex/README61
-rw-r--r--biblio/bibtex/utils/lookbibtex/bibdestringify.147
-rw-r--r--biblio/bibtex/utils/lookbibtex/bibdestringify.dist48
-rw-r--r--biblio/bibtex/utils/lookbibtex/lookbibtex.1129
-rw-r--r--biblio/bibtex/utils/lookbibtex/lookbibtex.dist220
-rw-r--r--biblio/bibtex/utils/lookbibtex/release1
-rw-r--r--biblio/bibtex/utils/ltb2bib/README58
-rw-r--r--biblio/bibtex/utils/ltb2bib/bibdest.bib17
-rw-r--r--biblio/bibtex/utils/ltb2bib/doltb2bib.tex5
-rw-r--r--biblio/bibtex/utils/ltb2bib/ltb2bib.dtx359
-rw-r--r--biblio/bibtex/utils/ltb2bib/ltb2bib.ins57
-rw-r--r--biblio/bibtex/utils/ltb2bib/ltb2bib.pdfbin0 -> 42074 bytes
-rw-r--r--biblio/bibtex/utils/ltb2bib/ltbsource.ltb14
-rw-r--r--biblio/bibtex/utils/mab2bib/README143
-rw-r--r--biblio/bibtex/utils/mab2bib/latex.py531
-rw-r--r--biblio/bibtex/utils/mab2bib/mab2bib.py218
-rwxr-xr-xbiblio/bibtex/utils/mab2bib/utf8_to_latex.py129
-rw-r--r--biblio/bibtex/utils/mathsci2bibtex/mathsci2bibtex786
-rw-r--r--biblio/bibtex/utils/mathscinet/README4
-rw-r--r--biblio/bibtex/utils/mathscinet/mathscinet.PL85
-rw-r--r--biblio/bibtex/utils/misc/README5
-rw-r--r--biblio/bibtex/utils/misc/bbl2html.awk495
-rw-r--r--biblio/bibtex/utils/misc/bibfind38
-rw-r--r--biblio/bibtex/utils/misc/noTeX.bst1091
-rw-r--r--biblio/bibtex/utils/mkbib/ABOUT-NLS1068
-rw-r--r--biblio/bibtex/utils/mkbib/AUTHORS3
-rw-r--r--biblio/bibtex/utils/mkbib/COPYING674
-rw-r--r--biblio/bibtex/utils/mkbib/ChangeLog10
-rw-r--r--biblio/bibtex/utils/mkbib/INSTALL370
-rw-r--r--biblio/bibtex/utils/mkbib/Makefile.am55
-rw-r--r--biblio/bibtex/utils/mkbib/Makefile.in1029
-rw-r--r--biblio/bibtex/utils/mkbib/NEWS29
-rw-r--r--biblio/bibtex/utils/mkbib/README17
-rw-r--r--biblio/bibtex/utils/mkbib/aclocal.m41728
-rwxr-xr-xbiblio/bibtex/utils/mkbib/autogen.sh31
-rwxr-xr-xbiblio/bibtex/utils/mkbib/build-aux/compile342
-rwxr-xr-xbiblio/bibtex/utils/mkbib/build-aux/depcomp707
-rwxr-xr-xbiblio/bibtex/utils/mkbib/build-aux/install-sh527
-rwxr-xr-xbiblio/bibtex/utils/mkbib/build-aux/missing330
-rwxr-xr-xbiblio/bibtex/utils/mkbib/build-aux/ylwrap232
-rw-r--r--biblio/bibtex/utils/mkbib/config.h.in32
-rwxr-xr-xbiblio/bibtex/utils/mkbib/config.rpath666
-rwxr-xr-xbiblio/bibtex/utils/mkbib/configure7651
-rw-r--r--biblio/bibtex/utils/mkbib/configure.ac56
-rw-r--r--biblio/bibtex/utils/mkbib/data/Makefile.am12
-rw-r--r--biblio/bibtex/utils/mkbib/data/Makefile.in466
-rw-r--r--biblio/bibtex/utils/mkbib/data/main-window.ui133
-rw-r--r--biblio/bibtex/utils/mkbib/data/mkbib.desktop.in13
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/contacts.page23
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/feature.page80
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/google.page26
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/images/entry_pane.pngbin0 -> 33434 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/images/left_pane.pngbin0 -> 46578 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/images/mkbib.pngbin0 -> 4514 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/images/right_pane.pngbin0 -> 48246 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/index.page30
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/install.page58
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/interface.page51
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/introduction.page25
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/keyboard-shortcuts.page90
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/legal.xml3
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/new.page33
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/old.page41
-rw-r--r--biblio/bibtex/utils/mkbib/help/C/trouble.page28
-rw-r--r--biblio/bibtex/utils/mkbib/help/Makefile.am28
-rw-r--r--biblio/bibtex/utils/mkbib/help/Makefile.in404
-rw-r--r--biblio/bibtex/utils/mkbib/images/icon.pngbin0 -> 6816 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/images/icon.svg71
-rw-r--r--biblio/bibtex/utils/mkbib/images/mkbib.pngbin0 -> 4514 bytes
-rw-r--r--biblio/bibtex/utils/mkbib/images/mkbib.svg71
-rw-r--r--biblio/bibtex/utils/mkbib/m4/codeset.m421
-rw-r--r--biblio/bibtex/utils/mkbib/m4/gettext.m4381
-rw-r--r--biblio/bibtex/utils/mkbib/m4/glibc2.m430
-rw-r--r--biblio/bibtex/utils/mkbib/m4/glibc21.m430
-rw-r--r--biblio/bibtex/utils/mkbib/m4/gtk-doc.m467
-rw-r--r--biblio/bibtex/utils/mkbib/m4/iconv.m4180
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intdiv0.m484
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intl.m4285
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intldir.m419
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intlmacosx.m451
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intltool.m4237
-rw-r--r--biblio/bibtex/utils/mkbib/m4/intmax.m433
-rw-r--r--biblio/bibtex/utils/mkbib/m4/inttypes-pri.m436
-rw-r--r--biblio/bibtex/utils/mkbib/m4/inttypes_h.m426
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lcmessage.m430
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lib-ld.m4110
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lib-link.m4709
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lib-prefix.m4185
-rw-r--r--biblio/bibtex/utils/mkbib/m4/libtool.m47986
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lock.m4316
-rw-r--r--biblio/bibtex/utils/mkbib/m4/longlong.m4109
-rw-r--r--biblio/bibtex/utils/mkbib/m4/ltoptions.m4384
-rw-r--r--biblio/bibtex/utils/mkbib/m4/ltsugar.m4123
-rw-r--r--biblio/bibtex/utils/mkbib/m4/ltversion.m423
-rw-r--r--biblio/bibtex/utils/mkbib/m4/lt~obsolete.m498
-rw-r--r--biblio/bibtex/utils/mkbib/m4/nls.m431
-rw-r--r--biblio/bibtex/utils/mkbib/m4/po.m4449
-rw-r--r--biblio/bibtex/utils/mkbib/m4/printf-posix.m444
-rw-r--r--biblio/bibtex/utils/mkbib/m4/progtest.m492
-rw-r--r--biblio/bibtex/utils/mkbib/m4/size_max.m468
-rw-r--r--biblio/bibtex/utils/mkbib/m4/stdint_h.m426
-rw-r--r--biblio/bibtex/utils/mkbib/m4/uintmax_t.m430
-rw-r--r--biblio/bibtex/utils/mkbib/m4/visibility.m452
-rw-r--r--biblio/bibtex/utils/mkbib/m4/wchar_t.m420
-rw-r--r--biblio/bibtex/utils/mkbib/m4/wint_t.m428
-rw-r--r--biblio/bibtex/utils/mkbib/m4/xsize.m413
-rw-r--r--biblio/bibtex/utils/mkbib/po/Makefile.in.in222
-rw-r--r--biblio/bibtex/utils/mkbib/po/POTFILES.in9
-rw-r--r--biblio/bibtex/utils/mkbib/src/bib.c1774
-rw-r--r--biblio/bibtex/utils/mkbib/src/bib.h102
-rw-r--r--biblio/bibtex/utils/mkbib/src/bib.y153
-rw-r--r--biblio/bibtex/utils/mkbib/src/biblst361
-rw-r--r--biblio/bibtex/utils/mkbib/src/caution.c34
-rw-r--r--biblio/bibtex/utils/mkbib/src/file_util.c156
-rw-r--r--biblio/bibtex/utils/mkbib/src/help.c76
-rw-r--r--biblio/bibtex/utils/mkbib/src/main.h54
-rw-r--r--biblio/bibtex/utils/mkbib/src/mkbib.c457
-rw-r--r--biblio/bibtex/utils/mkbib/src/scan.c1805
-rw-r--r--biblio/bibtex/utils/mkbib/src/scan.l33
-rw-r--r--biblio/bibtex/utils/mkbib/src/search.c119
-rw-r--r--biblio/bibtex/utils/mkbib/src/update_file.c134
-rw-r--r--biblio/bibtex/utils/mkbib/src/view.c262
-rw-r--r--biblio/bibtex/utils/mrcheckbib/README4
-rw-r--r--biblio/bibtex/utils/mrcheckbib/mrcheckbib.sh241
-rw-r--r--biblio/bibtex/utils/printbib/printbib87
-rw-r--r--biblio/bibtex/utils/printbib/printbibkey8
-rw-r--r--biblio/bibtex/utils/pybib/BibEntry.py662
-rw-r--r--biblio/bibtex/utils/pybib/BibTeX.py456
-rw-r--r--biblio/bibtex/utils/pybib/Bibliography.py167
-rw-r--r--biblio/bibtex/utils/pybib/README19
-rw-r--r--biblio/bibtex/utils/pybib/bib2html146
-rw-r--r--biblio/bibtex/utils/pybib/bibcat86
-rw-r--r--biblio/bibtex/utils/pybib/bibdvi110
-rw-r--r--biblio/bibtex/utils/pybib/bibfilter110
-rw-r--r--biblio/bibtex/utils/pybib/bibgoogle264
-rw-r--r--biblio/bibtex/utils/pybib/bibkey112
-rw-r--r--biblio/bibtex/utils/pybib/biblint79
-rw-r--r--biblio/bibtex/utils/pybib/biblist78
-rw-r--r--biblio/bibtex/utils/pybib/bibmerge116
-rw-r--r--biblio/bibtex/utils/pybib/bibnames89
-rw-r--r--biblio/bibtex/utils/pybib/bibsort100
-rw-r--r--biblio/bibtex/utils/pybib/bibsummary81
-rw-r--r--biblio/bibtex/utils/qbibman/README43
-rw-r--r--biblio/bibtex/utils/r2bib/ChangeLog42
-rw-r--r--biblio/bibtex/utils/r2bib/EndNote2bib.1101
-rw-r--r--biblio/bibtex/utils/r2bib/EndNote2bib.c600
-rw-r--r--biblio/bibtex/utils/r2bib/EndNoteTag.187
-rw-r--r--biblio/bibtex/utils/r2bib/EndNoteTag.cxx148
-rw-r--r--biblio/bibtex/utils/r2bib/INSTALL30
-rw-r--r--biblio/bibtex/utils/r2bib/Makefile.am21
-rw-r--r--biblio/bibtex/utils/r2bib/Makefile.in937
-rw-r--r--biblio/bibtex/utils/r2bib/README70
-rw-r--r--biblio/bibtex/utils/r2bib/aclocal.m41057
-rw-r--r--biblio/bibtex/utils/r2bib/ansel2uni.144
-rw-r--r--biblio/bibtex/utils/r2bib/ansel2uni.cc13365
-rw-r--r--biblio/bibtex/utils/r2bib/ansel2uni.ll4456
-rw-r--r--biblio/bibtex/utils/r2bib/config.h.in62
-rwxr-xr-xbiblio/bibtex/utils/r2bib/configure6095
-rw-r--r--biblio/bibtex/utils/r2bib/configure.ac24
-rwxr-xr-xbiblio/bibtex/utils/r2bib/depcomp791
-rw-r--r--biblio/bibtex/utils/r2bib/dosToTex.154
-rw-r--r--biblio/bibtex/utils/r2bib/dosToTex.c463
-rwxr-xr-xbiblio/bibtex/utils/r2bib/install-sh527
-rwxr-xr-xbiblio/bibtex/utils/r2bib/missing215
-rw-r--r--biblio/bibtex/utils/r2bib/r2bib.149
-rw-r--r--biblio/bibtex/utils/r2bib/r2bib.c334
-rw-r--r--biblio/bibtex/utils/r2bib/risDateAdj.cc1960
-rw-r--r--biblio/bibtex/utils/r2bib/risDateAdj.ll190
-rw-r--r--biblio/bibtex/utils/r2bib/wileyEndNoteFilt.154
-rw-r--r--biblio/bibtex/utils/r2bib/wileyEndNoteFilt.cc2075
-rw-r--r--biblio/bibtex/utils/r2bib/wileyEndNoteFilt.ll332
-rwxr-xr-xbiblio/bibtex/utils/r2bib/ylwrap249
-rw-r--r--biblio/bibtex/utils/refer-tools/ref2bib.shar1838
-rw-r--r--biblio/bibtex/utils/refer-tools/refer-to-bibtex.el575
-rw-r--r--biblio/bibtex/utils/refer-tools/refer.bst387
-rw-r--r--biblio/bibtex/utils/refer-tools/refer2bibtex-0.9.4.pl1745
-rw-r--r--biblio/bibtex/utils/refer-tools/tex2refer151
-rw-r--r--biblio/bibtex/utils/refer-tools/tib-to-bibtex.shar420
-rw-r--r--biblio/bibtex/utils/tex2bib/README74
-rw-r--r--biblio/bibtex/utils/tex2bib/tex2bib448
-rw-r--r--biblio/bibtex/utils/text2bib/INSTALL44
-rw-r--r--biblio/bibtex/utils/text2bib/README21
-rw-r--r--biblio/bibtex/utils/text2bib/docs/COPYING123
-rw-r--r--biblio/bibtex/utils/tkbibtex/tkbibtex2337
-rw-r--r--biblio/bibtex/utils/tkbibtex/tkbibtex.1151
-rw-r--r--biblio/bibtex/utils/xbibfile/INSTALL11
-rw-r--r--biblio/bibtex/utils/xbibfile/Makefile106
-rw-r--r--biblio/bibtex/utils/xbibfile/README69
-rw-r--r--biblio/bibtex/utils/xbibfile/article.c476
-rw-r--r--biblio/bibtex/utils/xbibfile/book.c522
-rw-r--r--biblio/bibtex/utils/xbibfile/booklet.c444
-rw-r--r--biblio/bibtex/utils/xbibfile/cleanup.c100
-rw-r--r--biblio/bibtex/utils/xbibfile/conference.c569
-rw-r--r--biblio/bibtex/utils/xbibfile/count.pl14
-rw-r--r--biblio/bibtex/utils/xbibfile/default.bib99
-rw-r--r--biblio/bibtex/utils/xbibfile/error.c72
-rw-r--r--biblio/bibtex/utils/xbibfile/filing.c146
-rw-r--r--biblio/bibtex/utils/xbibfile/historical.note105
-rw-r--r--biblio/bibtex/utils/xbibfile/inbook.c581
-rw-r--r--biblio/bibtex/utils/xbibfile/incol.c605
-rw-r--r--biblio/bibtex/utils/xbibfile/inproc.c571
-rw-r--r--biblio/bibtex/utils/xbibfile/linking.c140
-rw-r--r--biblio/bibtex/utils/xbibfile/listall.c177
-rw-r--r--biblio/bibtex/utils/xbibfile/listauthors.c204
-rw-r--r--biblio/bibtex/utils/xbibfile/listpubyear.c214
-rw-r--r--biblio/bibtex/utils/xbibfile/listref.c156
-rw-r--r--biblio/bibtex/utils/xbibfile/listuplinks.c189
-rw-r--r--biblio/bibtex/utils/xbibfile/listword.c239
-rw-r--r--biblio/bibtex/utils/xbibfile/listwriter.c234
-rw-r--r--biblio/bibtex/utils/xbibfile/listyears.c203
-rw-r--r--biblio/bibtex/utils/xbibfile/manual.c457
-rw-r--r--biblio/bibtex/utils/xbibfile/masters.c456
-rw-r--r--biblio/bibtex/utils/xbibfile/misc.c432
-rw-r--r--biblio/bibtex/utils/xbibfile/penguin.bib75
-rw-r--r--biblio/bibtex/utils/xbibfile/phd.c455
-rw-r--r--biblio/bibtex/utils/xbibfile/probes.c163
-rw-r--r--biblio/bibtex/utils/xbibfile/proceedings.c523
-rw-r--r--biblio/bibtex/utils/xbibfile/ramblings.txt15
-rw-r--r--biblio/bibtex/utils/xbibfile/searchrefs.pl47
-rw-r--r--biblio/bibtex/utils/xbibfile/selecting.c208
-rw-r--r--biblio/bibtex/utils/xbibfile/showrefs.pl33
-rw-r--r--biblio/bibtex/utils/xbibfile/techreport.c475
-rw-r--r--biblio/bibtex/utils/xbibfile/unpublished.c403
-rw-r--r--biblio/bibtex/utils/xbibfile/xbibfile.c165
-rw-r--r--biblio/bibtex/utils/xbibfile/xbibfile.h18
-rw-r--r--biblio/bibtex/utils/xbibtex/README22
-rw-r--r--biblio/bibtex/utils/xbibtex/bibutils.shar.gzbin0 -> 17332 bytes
-rw-r--r--biblio/bibtex/utils/xbibtex/man.shar.gzbin0 -> 1722 bytes
-rw-r--r--biblio/bibtex/utils/xbibtex/userguide.ps4322
-rw-r--r--biblio/bibtex/utils/xbibtex/xbibtex.shar.gzbin0 -> 28547 bytes
689 files changed, 242188 insertions, 0 deletions
diff --git a/biblio/bibtex/utils/BibBuild/Bibliography Builder.fp7 b/biblio/bibtex/utils/BibBuild/Bibliography Builder.fp7
new file mode 100644
index 0000000000..2e6dda3a5f
--- /dev/null
+++ b/biblio/bibtex/utils/BibBuild/Bibliography Builder.fp7
Binary files differ
diff --git a/biblio/bibtex/utils/BibBuild/README b/biblio/bibtex/utils/BibBuild/README
new file mode 100644
index 0000000000..15adc4757f
--- /dev/null
+++ b/biblio/bibtex/utils/BibBuild/README
@@ -0,0 +1,84 @@
+READ ME File for Bibliography Builder
+
+Version 1.0, August, 2005
+
+Steven Harrod
+828 Summerville Dr.
+Lexington, KY 40504
+
+harrodss@email.uc.edu
+
+Copyright 2005, All rights reserved
+
+###############################################
+
+This database will record your bibliography entries and any notes you have, and allow you to group them by project. Entries that are used in more than one project need only be entered once. The database will then format the entries into BibTex compatible files, and provide other handy references such as a short index of citiation names or a LaTeX format summary of notes. Operation of the database is intended to be as self evident as possible.
+
+To start, you must name at least one project, by typing that name at the next blank line on the Main Menu. To each project, add entries for your bibliographic items. Data entry fields appear and disappear according to the bibliographic entry type chosen. Starred fields are usually required for BibTex.
+
+The database attempts to choose a LaTeX citation reference for you, but when the same author(s) occur in the same year, you will have to manually eliminate duplicate references. Also, you must manually encode special characters (% ~ $) within your entries. The database performs some very basic testing for bad characters in the BibTex output, but this test is not robust.
+
+You may email questions to harrodss@email.uc.edu, but remember this is an unpaid effort!
+
+LICENSE ############
+
+Bibliography Builder was created by Steven Harrod. You may contact the author by sending an email to the address displayed above.
+
+Concept and implementation remain the sole copyright of the author. Permission is hereby granted to non-profit organisations, academic societies, schools, and public service organizations only to redistribute this application, provided all files and acknowledgements are retained.
+
+Re-distribution in any commercial form including CD-ROM or any other media is hereby forbidden, unless with the express written permission of the author. What follows below is a formal license statement.
+
+BY INSTALLING THIS SOFTWARE:
+
+YOU AGREE TO BECOME BOUND BY THE TERMS OF THIS LICENSE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, DO NOT INSTALL OR USE THIS SOFTWARE AND PROMPTLY DESTROY ALL COPIES.
+
+The attached program ("Software") is licensed, not sold or given, to you by Steven Harrod for use only under the terms of this License, and Steven Harrod reserves any rights not expressly granted to you. You own the media on which the Software is recorded or fixed, but Steven Harrod and its licensors retain ownership of the Software itself.
+
+1. License.
+
+This License allows you to:
+
+(a) Use the software on any computer for individual use or academic publishing purposes only. To "use" the Software means that the Software is either loaded in the temporary memory (i.e., RAM) of a computer or installed on the permanent memory of a computer (i.e., hard disk, etc.).
+
+(b) Distribute copies of the complete, unmodified software directly to persons known by you, fellow members of a society or organization, or students, and the charging of any fee is prohibited. As an express condition of this License, you must reproduce on each copy any copyright notice or other proprietary notice that is on the original copy supplied by Steven Harrod.
+
+2. Restrictions.
+
+The Software contains trade secrets in its human perceivable form and, to protect them, you may not REVERSE ENGINEER, DECOMPILE, DISASSEMBLE OR OTHERWISE REDUCE THE SOFTWARE TO ANY HUMAN PERCEIVABLE FORM. YOU MAY NOT MODIFY, ADAPT, TRANSLATE, RENT, LEASE, LOAN OR CREATE DERIVATIVE WORKS BASED UPON THE SOFTWARE OR ANY PART THEREOF.
+
+2a.) You may modify or adapt this software for your individual use.
+
+2b.) You MAY NOT distribute, rent, lease, or loan derivative works based upon the software or any part thereof.
+
+2c) You may not distribute copies of this software, in any form, as part of a commercial product, publication, shareware selection, or other collection of programs.
+
+3. Termination.
+
+This License is effective until terminated. This License will terminate immediately without notice from Steven Harrod or judicial resolution if you fail to comply with any provision of this License. Upon such termination you must destroy the Software, all accompanying written materials and all copies thereof, and Sections 6, 7 and 8 will survive any termination.
+
+4. Passwords.
+
+The Software licensed to you contains features which are protected by certain passwords. Unless permitted in writing, you are not authorized to enter, remove or change such passwords, and only Steven Harrod is authorized to enter, remove or change such passwords.
+
+5. Export Law Assurances.
+
+You agree that neither the Software nor any direct product thereof is being or will be shipped, transferred or re-exported, directly or indirectly, into any country prohibited by the United States Export Administration Act and the regulations thereunder or will be used for any purpose prohibited by the Act.
+
+6. Limited Warranty.
+
+Steven Harrod warrants for a period of ninety (90) days from your date of purchase that (i) the media on which the Software is recorded will be free from defects in materials and workmanship under normal use, and (ii) the Software as provided by Steven Harrod will substantially conform to Steven Harrod's published specifications for the Software. Steven Harrod's entire liability and your sole and exclusive remedy for any breach of the foregoing limited warranty will be, at Steven Harrod's option, replacement of the media, refund of the purchase price or repair or replacement of the Software.
+
+THIS LIMITED WARRANTY IS THE ONLY WARRANTY PROVIDED BY Steven Harrod AND Steven Harrod AND ITS LICENSORS EXPRESSLY DISCLAIM ALL OTHER WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE WITH REGARD TO THE SOFTWARE AND ACCOMPANYING WRITTEN MATERIALS. BECAUSE SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.
+
+7. Limitation of Remedies and Damages.
+
+In no event will Steven Harrod, its parent or subsidiaries or any of the licensors, directors, officers, employees or affiliates of any of the foregoing be liable to you for any consequential, incidental, indirect or special damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information and the like), whether foreseeable or unforeseeable, arising out of the use of or inability to use the Software or accompanying written materials, regardless of the basis of the claim and even if Steven Harrod or a Steven Harrod representative has been advised of the possibility of such damage. Steven Harrod's liability to you for direct damages for any cause whatsoever, and regardless of the form of the action, will be limited to the greater of $500 or the money paid for the Software that caused the damages.
+
+THIS LIMITATION WILL NOT APPLY IN CASE OF PERSONAL INJURY ONLY WHERE AND TO THE EXTENT THAT APPLICABLE LAW REQUIRES SUCH LIABILITY. BECAUSE SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.
+
+8. General.
+
+This License will be construed under the laws of the Commonwealth of Kentucky, except for that body of law dealing with conflicts of law. If any provision of this License shall be held by a court of competent jurisdiction to be contrary to law, that provision will be enforced to the maximum extent permissible, and the remaining provisions of this License will remain in full force and effect. If the Software is supplied to the United States Government, the Software is classified as "restricted computer software" as defined in clause 52.227-19 of the FAR. The United States Government's rights to the Software are as provided in clause 52.227-19 of the FAR.
+
+__________
+version 07-98, free demo distribution document
diff --git a/biblio/bibtex/utils/BibTexMng/README b/biblio/bibtex/utils/BibTexMng/README
new file mode 100644
index 0000000000..64b9828b76
--- /dev/null
+++ b/biblio/bibtex/utils/BibTexMng/README
@@ -0,0 +1,30 @@
+BibTexMng
+Version 6.0
+
+BibTexMng is a very easy to use product of bibliographic software for Windows. BibTexMng combines online searching, reference management, bibliography making, and information sharing into a single user-friendly environment. It was written to be used with LaTeX, using BibTeX.
+
+BibTexMng is a program for manipulating BibTeX database files. These files contain all the relevant data, and sometimes additional information such as abstracts and keywords, but do not specify the final format in which this data will be presented. The data is organized into records, in which each record is identified by a unique key or label.
+
+BibTexMng requires Windows XP or Vista, or later editions of MS Windows.
+
+We do not warrant that the software is error free.
+
+This is not free software. Subject to the terms below, you are hereby.
+
+Licensed to use Shareware Version of this software for evaluation purposes without charge for a period of 30 days. The free evaluation period starts at the moment of installation of the software.
+
+New features in version 6.0:
+• The program rewritten to use the WinForm components in the language C#
+• Internal Xml format used for bibliographic records
+• Support for advanced search capabilities of bibliographic records in the database
+• Import bibliographical data on the basis of Google Scholar service
+
+Installation
+
+BibTexMng is distributed as BibTexMngSetup.exe. Run BibTexMngSetup.exe and simply follow the on-screen instructions to install BibTexMng.
+
+BibTexMng is copyright (C) 2000-2009, by VNP Comp.
+
+Contact:
+Home Page: http://www.latexsoft.com
+e-mail: bibtexmng@latexsoft.com
diff --git a/biblio/bibtex/utils/JavaBib/JavaBib1.jpg b/biblio/bibtex/utils/JavaBib/JavaBib1.jpg
new file mode 100644
index 0000000000..09379f87fc
--- /dev/null
+++ b/biblio/bibtex/utils/JavaBib/JavaBib1.jpg
Binary files differ
diff --git a/biblio/bibtex/utils/JavaBib/describe.html b/biblio/bibtex/utils/JavaBib/describe.html
new file mode 100644
index 0000000000..30581cbaf6
--- /dev/null
+++ b/biblio/bibtex/utils/JavaBib/describe.html
@@ -0,0 +1,142 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="John Janmaat">
+ <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<center>
+<h1>
+JavaBib III</h1></center>
+
+<h2>
+Background</h2>
+JavaBib is my attempt to make it easy to manage BibTeX files for the LaTeX
+document processing environment.&nbsp; BibTeX files are files which contain
+bibliographic information which the BibTeX program can use to generate
+citation and reference information in LaTeX documents.&nbsp; As for everything
+else associated with TeX, the data files themselves are bare text.&nbsp;
+This has the tremendous advantage of making the documents system independent.&nbsp;
+However, flat text files are a rather unwieldy way to manage a database.
+<p>My own experience with document preparation has been in part an exercise
+in locating references lost under a stack of papers in some office of mine.&nbsp;
+I have found that I waste a lot of time looking for that perfect reference,
+and often just give up in the search.&nbsp; To make this situation a little
+better, I have tried to write a reference manager.&nbsp; The first incarnation
+was a simple database under MicroSoft Access.&nbsp; This was O.K. for storing
+the information, but rather useless for anything else.&nbsp; When I began
+to use LaTeX, I found that the Access program was just a waste of hard
+disk space, as I ended up working in Linux.&nbsp; Thus began my attempt
+to build a nice GUI front end for BibTeX.
+<p>The first incarnation of JavaBib was a command line based processor
+that could search and modify databases.&nbsp; I stuck some GUI components
+on top of this, but overall it was not all that effective.&nbsp; A second
+pass was built from the ground up to be a GUI application.&nbsp; It was
+somewhat better, but remained a little buggy.&nbsp; Rather than fix the
+bugs, I vowed to develop a third version that both fixed the bugs and dealt
+with some issues not appropriately handled in the first version.&nbsp;
+These issues included the fact that Java can be quite slow when filling
+memory with arrays of non-native Java objects.&nbsp; JavaBib and JavaBib
+II both loaded an entire JavaBib file into memory as a vector of BibTeX
+records.&nbsp; This can be quite slow to load.&nbsp; Since most of the
+time using JavaBib is simply adding extra entries to an existing file,
+the speed issue proved to be a great inconvenience.
+<p>JavaBib III follows a completely different format.&nbsp; Rather than
+reading an entire file into memory, it builds an index for the file.&nbsp;
+This index allows access to specific entries in the file.&nbsp; Once the
+index has been built, it is all that is loaded for subsequent uses, so
+long as the underlying data file is not changed.&nbsp; Startup is much
+faster this way, and most operations are not slowed up too much by accessing
+the file on the disk.&nbsp; The two operations that are considerably slowed
+by this approach are finding and searching.&nbsp; However, I think this
+is an appropriate tradeoff given the other benefits.
+<h2>
+How It Works</h2>
+A JavaBib session begins by invoking the program.&nbsp; This is usually
+done from the command line, as I have not yet figured out an easy way to
+run it as a click-able icon on a desktop.&nbsp; On startup, JavaBib looks
+for a configuration file.&nbsp; This configuration file contains a history
+of files that have been worked on and dimensions for the JavaBib window.&nbsp;
+The parameters are loaded if found, or default values are set if the configuration
+file is missing.
+<p>At this point, JavaBib displays a blank main window.&nbsp; In front
+of this window a startup dialog is shown.&nbsp; This dialog lists the names
+of up to ten previously opened files.&nbsp; You can select one of these,
+or choose to open a new or unlisted file.&nbsp; Once it has a file name,
+JavaBib checks to see if there is an index file to go along with the file
+you selected.&nbsp; Index files have the extension '.bdx'.&nbsp; If it
+finds an index file, the index information is loaded.&nbsp; The index file
+stores the last modification time and file size of the BibTeX file to which
+it refers.&nbsp; If these match the conditions of the file, then the index
+is used to locate the first entry, which is displayed in the main window.
+<p>If an index file is invalid or cannot be found, then JavaBib will construct
+one.&nbsp; To construct an index, JavaBib reads the entire BibTeX file.&nbsp;
+The index contains the file position of the first character after a valid
+record, the key of the next record in the file and the key of the last
+record in the file.&nbsp; Once the index is built, then the first record
+is displayed.&nbsp; If the file itself cannot be found, then a new file
+is opened and made ready to receive records.
+<p>Records are copied from the file to the display panel.&nbsp; One copy
+is maintained in memory, and another displayed.&nbsp; When the user chooses
+to add a new record or display a different record, the information in the
+display panel is converted into a BibTeX record which is compared to the
+one in memory.&nbsp; If they do not match, then the user is asked about
+saving the changes.&nbsp; Before saving, the record is checked for validity.&nbsp;
+All required fields must contain information, and the record must have
+a unique key.&nbsp; If there is a cross reference entry, it must exist
+and it must not be nested.
+<p>When writing new entries or changes, these are appended to the end of
+the file.&nbsp; For records that have been changed, the record in the file
+is deleted.&nbsp; Deleting an entry consists of replacing its information
+with a line of '%' symbols.&nbsp; TeX and BibTeX consider the '%' as a
+marker for comments, and thus ignores these lines.&nbsp; If the new record
+contains a cross reference entry, then the information for the cross reference
+is deleted from the inside of the file and rewritten at the end of the
+file.&nbsp; This operation is required to ensure that any entry which is
+referred to in a cross reference appears after the reference.&nbsp; Also,
+when a referenced record is moved, the field 'BOOKTITLE' is added.&nbsp;
+Clearly, using cross references extensively will result in a file that
+is full of empty records.&nbsp; To clean up such a file, the compress operation
+recreates the file and removes any extraneous material between records.&nbsp;
+Since BibTeX records are written to the file with each edit, if JavaBib
+does crash, only the record being worked on will not be recorded.&nbsp;
+All previous work will have been added to the file.
+<p>Search and find operations proceed through the file.&nbsp; Find operations
+move forward from record to record as they are displayed in the list on
+the left side of the main window.&nbsp; Since the alphabetical list need
+not reflect the order in the file, this operation involves much disk access.&nbsp;
+The search operation is a little more efficient.&nbsp; It begins by constructing
+its own index with the keys ordered by file position.&nbsp; The search
+then begins at the beginning of the file and reads forward through this
+index list.&nbsp; The file pointer is always moving in one direction.&nbsp;
+If the system on which JavaBib is run reads ahead and buffers disk information,
+this search should not be too slow.
+<p>Cutting, copying, and pasting records is done via a clipboard.&nbsp;
+On a Windows system, the system clipboard is used.&nbsp; Thus, the text
+representation of BibTeX records can be copied and pasted between JavaBib
+and other applications.&nbsp; Note that this can be dangerous if information
+being pasted into JavaBib does not conform with the required BibTeX record
+format.
+<p>When JavaBib shuts down, it closes the BibTeX file.&nbsp; It then reads
+the last modification date and file size which it stores in the index file.&nbsp;
+The index file is written to the disk as a text file.&nbsp; Once completed,
+the window is closed.&nbsp; On exiting the program, the parameter file
+is written to the disk.
+<h2>
+Download</h2>
+JavaBib is packaged as a .jar file.&nbsp; These files are readable by Java
+directly.&nbsp; Thus, to install and run JavaBib, just download JavaBib.jar.&nbsp;
+To run the program, simply type "java -jar JavaBib.jar" at the command
+line.&nbsp; I leave the installation of a Java runtime environment to you.&nbsp;
+To find out about this, go to <a href="www.sunsoft.com">www.sunsoft.com</a>.
+<p><a href="JavaBib.jar">JavaBib.jar</a>
+<p>Note: You may need to right click on the link and then select 'save
+link as' to get the download to work.
+<h2>
+Feedback</h2>
+If you have any comments about this program, please feel free to contact
+me at <a href="mailto:jjanmaat@acadiau.ca">jjanmaat@acadiau.ca</a>.
+</body>
+</html>
diff --git a/biblio/bibtex/utils/JavaBib/docs.html b/biblio/bibtex/utils/JavaBib/docs.html
new file mode 100644
index 0000000000..729d577e40
--- /dev/null
+++ b/biblio/bibtex/utils/JavaBib/docs.html
@@ -0,0 +1,270 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="John Janmaat">
+ <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<center>
+<h1>
+JavaBib III Documentation</h1></center>
+
+<h2>
+Contents</h2>
+
+<ul>
+<li>
+<b><font size=+1><a href="#startup">Startup</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file">File Menu</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#edit">Edit Menu</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#records">Records Menu</a></font></b></li>
+
+<li>
+<b><font size=+1>Search Menu</font></b></li>
+
+<li>
+<b><font size=+1>Cite Menu</font></b></li>
+
+<li>
+<b><font size=+1>Window Menu</font></b></li>
+
+<li>
+<b><font size=+1>Help Menu</font></b></li>
+</ul>
+
+<h2>
+<a NAME="startup"></a>Startup</h2>
+The method by which JavaBib is started depends on the installation you
+choose.&nbsp; If you are running the program from a '.jar' file, type '<b>java
+-jar JavaBib.jar</b>'&nbsp; The '.jar' file contains a manifest file which
+indicates which class contains the 'main' method.&nbsp; Alternatively,
+you can unpack the '.jar' file into a directory.&nbsp; The class files
+will then be present as separate files.&nbsp; This method of loading the
+files may be slightly faster as each file does not need to be unpacked.&nbsp;
+However, since the Java interpreter only loads each class once, the performance
+benefit will be quite small.&nbsp; If you have installed JavaBib in this
+way, execute it by typing '<b>java JavaBib</b>'.&nbsp; For both types of
+execution, one can add a file name to indicate which file JavaBib is to
+open.
+<p>Once JavaBib has been launched, the main window with a blank edit panel
+appears.&nbsp; In front of this the startup dialog is displayed.&nbsp;
+The startup dialog shows a list of files that have previously been opened.&nbsp;
+To open one of the listed files, you can either double click on it or select
+it, choose 'open listed file', and press continue.&nbsp; The selected file
+is then opened.&nbsp; If the file you want to edit is not listed, or you
+want to start a new file, select 'open new or unlisted file' and press
+continue.&nbsp; A file dialog will be displayed, where you can select a
+file to open or type in a new file name.&nbsp; Note that the file name
+must have a '.bib' extension.&nbsp; If the selected file does not have
+a '.bib' or '.bdx' extension, then the selected file name will have '.bib'
+appended to it.
+<p>JavaBib tries to open the named file.&nbsp; The first step in opening
+the file is to look for an index file.&nbsp; Index files have the extension
+'.bdx'.&nbsp; The index file contains the name of the associated BibTeX
+file as well as the length of the file and the date when it was lasted
+edited.&nbsp; If the index file is found, it is opened.&nbsp; If the matching
+BibTeX file exists and if the length and last modified date are correct,
+the index is loaded into memory.&nbsp; The index file contains the location
+of each entry in the '.bib' file, as well as pointers to the previous and
+next entry.&nbsp; If the index file is not present, then the BibTeX file
+itself is checked for.&nbsp; If it is found, then an index is generated
+for the file.&nbsp; If the BibTeX file is also missing, then a new BibTeX
+file is opened and made ready for writing.
+<h2>
+<a NAME="file"></a>File Menu</h2>
+
+<ul>
+<li>
+<b><font size=+1><a href="#file->open">Open</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file->close">Close</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file->compact">Compact</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file->import">Import</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file->export">Export</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#file->exit">Exit</a></font></b></li>
+</ul>
+
+<h3>
+<a NAME="file->open"></a>Open</h3>
+Opening a file repeats the operation that occurs when JavaBib is first
+launched.&nbsp; Upon selecting open, a startup dialog is displayed.&nbsp;
+This dialog lists the names of recently opened files.&nbsp; The user may
+select one of these or open a new file.&nbsp; Note that only one file can
+be accessed at one time.&nbsp; JavaBib does not load the BibTeX file into
+memory.&nbsp; Rather, the file is accessed one record at a time, as needed.&nbsp;
+Simultaneous access on the same file can lead to problems whenever new
+records are added.&nbsp; Thus, it is not advisable to have one file open
+more than once.
+<h3>
+<a NAME="file->close"></a>Close</h3>
+The close operation closes the displayed window.&nbsp; If the file does
+not have any records, it is deleted from the disk and the index is not
+written.&nbsp; If the file has records, then after the file is closed the
+index file is also written.&nbsp; If the window being closed is the last
+window, then the application is closed.&nbsp; On closing, the properties
+file is also written to the disk, storing the dimensions of the window
+and the list of files that have been worked on.
+<h3>
+<a NAME="file->compact"></a>Compact</h3>
+The compact operation removes extra space from the database.&nbsp; When
+records are deleted or modified, they are overwritten with a line of comment
+characters.&nbsp; New records are always added to the end of the file.&nbsp;
+Records which contain cross references are added to the end of the file,
+after which the referred to record is moved to the new end of the file.&nbsp;
+This ensures that BibTeX conventions are satisfied.&nbsp; However, it also
+means that files will end up full of spaces.&nbsp; The compact operation
+removes this extraneous space from between the records.
+<h3>
+<a NAME="file->import"></a>Import</h3>
+Records from other BibTeX files can be imported into an open file.&nbsp;
+To this point, text files are the only source of import.&nbsp; When this
+option is selected, a file dialog is displayed so that the user can select
+which file to open from.&nbsp; Note that if you try to import records from
+a file which is not a BibTeX data file, you may crash JavaBib.&nbsp; Be
+careful importing data.
+<h3>
+<a NAME="file->export"></a>Export</h3>
+The export operation writes selected entries to a new file.&nbsp; When
+export is selected, a file dialog is opened.&nbsp; Enter the name of the
+file to export to.&nbsp; The selected entries will then be written to this
+file.
+<h3>
+<a NAME="file->exit"></a>Exit</h3>
+Selecting exit closes all windows and shuts down JavaBib.&nbsp; On exit,
+the index files for each open database is written.
+<h2>
+<a NAME="edit"></a>Edit Menu</h2>
+
+<ul>
+<li>
+<b><font size=+1><a href="#edit->new">New</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#edit->clear">Clear</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#edit->reset">Reset</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#edit->cancel">Cancel</a></font></b></li>
+
+<li>
+<b><font size=+1><a href="#edit->options">Options</a></font></b></li>
+</ul>
+
+<h3>
+<a NAME="edit->new"></a>New</h3>
+Selecting New clears the entry panel and presents a blank record for to
+record a new entry.&nbsp; Before displaying the new entry however, any
+currently displayed information is checked for changes.&nbsp; If changes
+have been made, then the user is prompted for confirmation on writing or
+trashing any changed.&nbsp; If the record is to be written, it is checked
+for consistency with the requirements for this record type.&nbsp; The checks
+include the presence of all required fields as well as a unique key.&nbsp;
+If this entry is a cross reference, the presence of a cross reference key
+is checked, and a check is made to ensure that the cross reference does
+not itself contain a cross reference.&nbsp; Once all checks are passed,
+the record is written.
+<h3>
+<a NAME="edit->clear"></a>Clear</h3>
+Clears the information in the active record.&nbsp; All data fields are
+cleared.&nbsp; The record type, citation key and crossreference field are
+not changed by this operation.
+<h3>
+<a NAME="edit->reset"></a>Reset</h3>
+Restore the initial values for this field, before any changes were made.
+<h3>
+<a NAME="edit->cancel"></a>Cancel</h3>
+Cancel the current edit operation.&nbsp; If an existing record is being
+acted upon, then this operation is the same as reset.&nbsp; If a new record
+is being created, cancel causes the edits to be lost and displays the most
+recently selected record.
+<h3>
+<a NAME="edit->options"></a>Options</h3>
+Not yet implemented.&nbsp; In future, this selection will enable various
+program options to be modified.
+<h2>
+<a NAME="records"></a>Records Menu</h2>
+
+<ul>
+<li>
+<b><font size=+1>Cut</font></b></li>
+
+<li>
+<b><font size=+1>Copy</font></b></li>
+
+<li>
+<b><font size=+1>Paste</font></b></li>
+
+<li>
+<b><font size=+1>Delete</font></b></li>
+
+<li>
+<b><font size=+1>Select All</font></b></li>
+
+<li>
+<b><font size=+1>Deselect All</font></b></li>
+</ul>
+
+<h3>
+Cut</h3>
+The records cut menu option deletes the selected records from this file
+and puts the contents of the deleted records into the clipboard.&nbsp;
+All the selected records are transferred to the clipboard as well as any
+required cross referenced records which are not included in the selection.&nbsp;
+This ensures that any pasted records will take with them the cross references
+that are needed.&nbsp; When the records are deleted, they are removed permanently
+from the file.&nbsp; They are overwritten with '%' characters, permanently
+removing the record information from the file.
+<h3>
+Copy</h3>
+Copy the information in the selected records into the clipboard.&nbsp;
+Any additional cross reference information is also copied into the clipboard.&nbsp;
+The records that are placed in the clipboard are passed as plain text.&nbsp;
+The records can thereby be pasted into any other application that shares
+the system clipboard.&nbsp; On the Windows operating system, this works.&nbsp;
+On Linux, the X windows system clipboard does not seem to be the same clipboard
+that Java accesses.
+<h3>
+Paste</h3>
+Paste takes the contents of the system clipboard and reads it as BibTeX
+records.&nbsp; If any records are found, they are added to the file.&nbsp;
+On addition, duplicate keys are checked for.&nbsp; If a duplicate key is
+found, then the user is asked to enter a new key.&nbsp; Selecting cancel
+in response to this operation results in the record not being added.&nbsp;
+If the key is changed, then any records with a cross reference pointing
+at this record will also have their key changed.
+<h3>
+Delete</h3>
+Delete removes the selected entries from the file.&nbsp; The selected records
+are replaced by TeX comment characters, '%'.&nbsp; Selecting delete removes
+the records permanently from the file.
+<h3>
+Select All</h3>
+Select the keys for all the records.&nbsp; When all the records are selected,
+cut, copy, paste, and delete operations can be performed on all the records
+in the file.&nbsp; Selecting this menu option will switch the selection
+mode to multiple if that has not already been done.
+<h3>
+Deselect All</h3>
+Deselct all the records in the file.&nbsp; This method is useful to ensure
+that records in a large file are not subject to undesired operations.
+</body>
+</html>
diff --git a/biblio/bibtex/utils/JavaBib/index.html b/biblio/bibtex/utils/JavaBib/index.html
new file mode 100644
index 0000000000..3b03cce7c3
--- /dev/null
+++ b/biblio/bibtex/utils/JavaBib/index.html
@@ -0,0 +1,47 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="John Janmaat">
+ <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<center>
+<h1>
+<b><font size=+4>JavaBib III</font></b></h1></center>
+
+<ul>
+<li>
+<font size=+2><a href="describe.html">Description</a></font></li>
+
+<br>&nbsp;
+<li>
+<font size=+2><a href="docs.html">Documentation</a> - in process.</font></li>
+
+<br>&nbsp;
+<li>
+<font size=+2><a href="screen.html">Screen Shots</a></font></li>
+
+<br>&nbsp;
+<li>
+<font size=+2>Download</font></li>
+
+<br>&nbsp;
+<ul>
+<li>
+<font size=+2><a href="JavaBib.jar">JavaBib.jar</a> - run from command
+line with "java -jar JavaBib.jar".</font></li>
+
+<br>&nbsp;
+<li>
+<font size=+2>JavaBib.zip - MS Windows zip file, JavaBib.jar and the documentation.</font></li>
+
+<br>&nbsp;
+<li>
+<font size=+2>JavaBib.tar.gz - Gzipped tar file, JavaBib.jar and the documentation.</font></li>
+</ul>
+</ul>
+
+</body>
+</html>
diff --git a/biblio/bibtex/utils/JavaBib/screen.html b/biblio/bibtex/utils/JavaBib/screen.html
new file mode 100644
index 0000000000..484ff7491f
--- /dev/null
+++ b/biblio/bibtex/utils/JavaBib/screen.html
@@ -0,0 +1,29 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="John Janmaat">
+ <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<center>
+<h1>
+JavaBib III Screen Shots</h1></center>
+
+<h3>
+Main Window</h3>
+<img SRC="JavaBib1.jpg" height=597 width=707>
+<p>The main window is where most of the work on BibTeX records is conducted.&nbsp;
+The menu bar provides a range of options, from opening new files to modifying
+the existing record.&nbsp; On the left, one can choose which records to
+view.&nbsp; Selecting a record updates the edit panel on the right.&nbsp;
+The control panel at the bottom of the window allows you to move between
+records and some shortcut buttons for record editing.&nbsp; The text field
+at the bottom of the control panel displays a LaTeX citation entry.&nbsp;
+This entry can be copied from this text field.&nbsp; Alternatively, it
+can be copied to the system clipboard by using the 'cite' menu.&nbsp; Unfortunately,
+on some systems Java does not access the same system clipboard as the application
+into which you might want to paste the entry.
+</body>
+</html>
diff --git a/biblio/bibtex/utils/Synapsen/README b/biblio/bibtex/utils/Synapsen/README
new file mode 100644
index 0000000000..8620ec1920
--- /dev/null
+++ b/biblio/bibtex/utils/Synapsen/README
@@ -0,0 +1,30 @@
+Welcome to Synapsen, version 3.0
+
+Synapsen is a hypertextual card index or reference organizer, which is to say a storage system on the basis of an electronic literature database that enables the management of bibliographies. It is especially designed for BibTeX, but it also works without a running TeX system.
+
+In contrast to normal literature management software, synapsen offers a very distinct advantage: with catchwords entered by the user, the program connects individual cards automatically and creates not only a network of cards whose relation to each other might have been forgotten, but also creates completely unexpected connections and relations between individual entries. synapsen is therefore not only for electronic literature management, but also a helping hand when writing scientific texts, which participates in communication with the author in order to augment lines of argumentation and the generation of ideas.
+
+synapsen is written in JAVA. It is shareware: you can use it without any time limitation, but if you really work with the program you are invited to get a personal license code.
+
+What's new:
+
+* New categories for movies, music, and proceedings * Printing of cards with many user settings, extensive printing interface* Improved editing functions for cards * Direct export of the bibliography into a pdf file* Enhancements of the OPAC interface (including articles and papers, new catalogues like bnf.fr)
+
+The main features are (in short):
+
+* Runs on all major operating systems (Windows, Mac OS X, Linux, Unix).
+* Automatic or individual connections between all cards through common headwords.
+* Extensive printing capabilities
+* Direct connection to Open Office 2.2 and MS Word, in order to insert footnotes per mouse click
+* Produces fully BibTeX compliant output, tight connection to LaTeX, but also to word processors via RTF and copy & paste.
+* Support of Philipp Lehman's biblatex-package
+* Direct search and download from OPACs like Library of Congress, Bibliothque Nationale or GBV via the z39.50 interface.
+* Data import and export via BibTeX, PDF and RTF.
+* Complete support of Unicode, i.e. you can simultaneosly work with many different alphabets like cyrillic, hebrew or chinese etc.
+* Support of SQL for the internal database server in order to procure future compatibility of your data. Linkage to external databases like mySQL also possible.
+
+Updates, further information, screen shots, faq's and so on you will find at:
+
+http://www.verzetteln.de/synapsen/
+
+Current version on 2007/11/25: Synapsen 3.0, (c) by Dr. Markus Krajewski, Weimar, Germany \ No newline at end of file
diff --git a/biblio/bibtex/utils/Synapsen/SynManual.pdf b/biblio/bibtex/utils/Synapsen/SynManual.pdf
new file mode 100644
index 0000000000..58edca1ed9
--- /dev/null
+++ b/biblio/bibtex/utils/Synapsen/SynManual.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/Synapsen/info.html b/biblio/bibtex/utils/Synapsen/info.html
new file mode 100644
index 0000000000..e50835a3fc
--- /dev/null
+++ b/biblio/bibtex/utils/Synapsen/info.html
@@ -0,0 +1 @@
+<html> <BASE HREF="http://www.verzetteln.de/synapsen/index.html"> <!-- #BeginTemplate "/Templates/synapsen_e.dwt" --><!-- DW6 --> <!-- DW6 --> <!-- DW6 --> <head> <title>synapsen. An hypertextual card index</title> <link rel="stylesheet" href="synapsen.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true); // --> </script> </head> <body bgcolor="#FFFFFF" text="#000000" background="images/hinterb.gif" link="#336699"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <th bgcolor="#FFFFFF" height="70" align="center" valign="middle" width="620" nowrap background="images/hinterb.gif"> <div align="left"><img src="images/synapsen_headline_e.gif" width="708" height="74" usemap="#Map" border="0" hspace="15" vspace="0"> <map name="Map"><area shape="rect" coords="618,5,701,69" href="synapsen_e.html" target="_self"> </map> </div> </th> </tr> </table> <div align="left"></div> <table width="715" border="0" cellspacing="0" cellpadding="0" align="left" height="537"> <tr> <td width="167" align="left"> <div align="left"></div> </td> <td width="533">&nbsp;</td> </tr> <tr> <td valign="top" width="167" align="left" height="522"> <div align="left"> <table width="155" border="0" cellspacing="7" class="verdana"> <tr> <td width="126"> <div align="right"> <font size="+1" color="#0000FF">synapsen</font></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"> <a href="konzept_e.html">The Concept</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="shots_e.html">Some Screenshots</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="SynManual.pdf" target="_blank">Manual</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="downloads_e.html">Downloads</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="register_e.html">Register</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="faq_e.html">FAQ</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="postliste_e.html">Mailing list</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="history_e.html">History of the program</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="literatur_e.html">References</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td width="126"> <div align="right"><a href="kontakt_e.html">Contact</a></div> </td> <td width="19">&nbsp;</td> </tr> <tr> <td><div align="right"><a href="synapsen.html">Informationen in Deutsch <img src="images/dland.gif" width="20" height="15" border="0" align="absmiddle"> </a></div></td> <td>&nbsp;</td> </tr> <tr> <td><div align="right"></div></td> <td>&nbsp;</td> </tr> <tr> <td><div align="right"> <!-- BlogCounter Code START --> <a href="http://www.blogcounter.de/" id="bclink" title="kostenloser Counter fuer Weblogs"><span id="bccount" style="font-size:8px">kostenloser Counter</span></a> <p></p> <script type="text/javascript" src="http://track.blogcounter.de/js.php?user=rotwelsch&amp;style=1"></script> <noscript> <p><a href="http://www.blogcounter.de/"><img style="border: 0px;" alt="Weblog counter" src="http://track.blogcounter.de/log.php?id=rotwelsch"/></a><br> <a href="http://der-finanz-ratgeber.de">Finanz-Ratgeber</a> </noscript> <!-- BlogCounter Code END --> </div></td> <td>&nbsp;</td> </tr> </table> </div> <p>&nbsp;</p> <div align="right"> </div> </td> <td valign="top" width="533" align="left" height="522"> <h1 class="verdana">&nbsp;</h1> <div align="justify"><!-- #BeginEditable "Content" --> <h1 class="verdana">What is synapsen?</h1> <p class="verdana">synapsen is a hypertextual card index or reference organizer, which is to say a storage system on the basis of an electronic literature database that enables the management of bibliographies. However, in contrast to normal literature management software, synapsen offers a very distinct advantage: with catchwords entered by the user, the program connects individual cards automatically and creates not only a network of cards whose relation to each other might have been forgotten, but also creates completely unexpected connections and relations between individual entries. synapsen is therefore not only for electronic literature management, but also a helping hand when writing scientific texts, which participates in communication with the author in order to augment lines of argumentation and the generation of ideas.</p> <p class="verdana">synapsen is a hypertextual card catalog or reference management software written in JAVA, that is housed on a SQL-database based in the literature networking structure from <a href="http://en.wikipedia.org/wiki/Luhmann" target="_blank">Niklas Luhmann</a>.</p> <h1 class="verdana">Features</h1> <ul> <li><span class="verdana"> Runs on all major operating systems (Windows, Mac OS X, Linux, Unix).</span></li> <li><span class="verdana"> Easy installation procedure.</span></li> <li><span class="verdana"> Automatic or individual connections between all cards through common headwords.</span></li> <li><span class="verdana"> Easy editing, searching and viewing of reference entries.</span></li> <li class="verdana">Direct connection to <span style="font-style: italic">MS Word</span> and <span style="font-style: italic">Open Office 2.2</span> in order to support footnote insertion by one click</li> <li class="verdana"><span class="verdana"> Direct search and download from OPACs like Library of Congress or GBV via the z39.50 interface.</span></li> <li class="verdana">Extensive printing capabilities</li> <li class="verdana">Embedding of your pdf-documents</li> <li class="verdana">Extensive printing interface</li> <li><span class="verdana"> Produces fully BibTeX compliant output, tight connection to LaTeX, but also to word processors via RTF and copy &amp; paste.</span></li> <li><span class="verdana"> Many individual formatting features while creating the bibliographical output</span></li> <li><span class="verdana"> Data import and export via BibTeX, PDF and RTF.</span></li> <li class="verdana">Support of the biblatex package </li> <li><span class="verdana"> Complete support of Unicode, i.e. you can simultaneosly work with many different alphabets like cyrillic, hebrew or chinese etc.</span></li> <li><span class="verdana"> Support of SQL for the internal database server in order to procure future compatibility of your data. Linkage to external databases like mySQL also possible.</span></li> </ul> <h1 class="verdana">Target Audience and Field of Application</h1> <p class="verdana">The program is targeted at students and scientists that have to manage a large body of literature. First and foremost it is dedicated to researchers and students in the humanities and sciences, especially philologists in every language, art history, social- and cultural studies, philosophy etc., scholars and historians in general, but also business, library, information and communication scientists or lawyers and all those who maintain a bibliography over a long period of time. </p> <p class="verdana">For application in research projects with multiple useres and a decentralized entry from various PCs in a central database there is also a network version of synapsen, with which various users can simultaneously work on a database. Details available upon request.</p> <p class="verdana">synapsen functions under all popular operating systems, which includes Linux, Unix, and also under Mac OS X and Windows systems. Furthermore, synapsen has a comfortable interface to LaTeX via BibTex. And since Version 1.9p, synapsen is especially optimized for Apple and offers an ideal slip box or card catalog for Mac OS X!</p> <p class="verdana" align="center"><img src="images/LaTeX_logo.svg.png" alt="LaTeX" width="70" height="29" hspace="15" align="middle"> <img src="images/BibTeX_logo.png" alt="BibTeX" width="83" height="23" hspace="15" align="middle"><img src="images/win.png" alt="Windows" width="33" height="29" hspace="15" align="middle"><img src="images/unix.png" alt="unix" width="71" height="35" hspace="15" align="middle"><img src="images/linux.png" alt="Linux" width="31" height="37" hspace="15" align="middle"><img src="images/MacOSX.png" alt="Mac OS X" width="28" height="38" hspace="15" align="middle"></p> <!--<p class="verdana" align="left">See also <a href="http://en.wikipedia.org/wiki/Synapsen" target="_blank">synapsen's entry</a> at WikiPedia.</p>--> <p align="justify" class="verdana" style="font-weight: bold"><font face="Verdana, Arial, Helvetica, sans-serif">Roadmap to forthcoming versions of synapsen</font></p> <p class="verdana">Synapsen are always under construction. The next updates plan to contain enhancements and functions as follow:</p> <p align="justify" class="verdana"><em><font face="Verdana, Arial, Helvetica, sans-serif">Version 3.1 (mid of 2008) </font></em></p> <div align="justify"> <ul> <li class="verdana">Redesign of the import interface (via XML)</li> <li class="verdana">Mind Map: displaying the connections between cards in a diagramm</li> </ul> </div> <hr> <h1 class="verdana"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif"><font size="-2">&copy; Dr. <a href="http://www.verzetteln.de">Markus Krajewski</a>, last revision: 2007/06/09;<br> Current version of synapsen: 3.0 of 2007/11/25.</font><font size="-1"><br> </font></font></h1> <!-- #EndEditable --></div></td> </tr> </table> </body> <!-- #EndTemplate --></html> \ No newline at end of file
diff --git a/biblio/bibtex/utils/alphabib/GPL.TXT b/biblio/bibtex/utils/alphabib/GPL.TXT
new file mode 100644
index 0000000000..54b7562930
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/GPL.TXT
@@ -0,0 +1,341 @@
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/biblio/bibtex/utils/alphabib/Makefile b/biblio/bibtex/utils/alphabib/Makefile
new file mode 100644
index 0000000000..a1c25d97e8
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/Makefile
@@ -0,0 +1,12 @@
+all: example clean
+
+example:
+ pdflatex example.tex
+ bibtex example
+ alphabib -bs example.bbl
+ pdflatex example.tex
+ pdflatex example.tex
+
+clean:
+ rm -f example.aux example.bbl example.blg example.log example.out
+
diff --git a/biblio/bibtex/utils/alphabib/README b/biblio/bibtex/utils/alphabib/README
new file mode 100644
index 0000000000..8b17039426
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/README
@@ -0,0 +1,11 @@
+Copyright (c) 2006, Mael Hillereau.
+cxBib performs addition of alphabetical headers into BibTeX '.bbl' files.
+
+This program is released under the GNU General Public Licence (see file
+'GPL.TXT' for details).
+
+Type 'alphabib -h' for usage.
+
+See the user manual (file 'alphabib.pdf') for more information.
+
+Send bug reports to mael.hillereau at free dot fr.
diff --git a/biblio/bibtex/utils/alphabib/alphabib b/biblio/bibtex/utils/alphabib/alphabib
new file mode 100644
index 0000000000..24ed88f7b3
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/alphabib
@@ -0,0 +1,338 @@
+#!/bin/bash
+#
+# Copyright (c) 2006 Mael Hillereau
+#
+# This file is part of alphabib.
+#
+# alphabib is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# alphabib is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with alphabib; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# cxBib -- Addition of alphabetical headers into BibTeX '.bbl' files.
+# Author: Mael Hillereau <mael.hillereau@free.fr>
+# Created: 12.apr.2006
+# Last modified: 14.may.2006
+version="1.0";
+author="Mael Hillereau <mael.hillereau@free.fr>";
+name=`basename $0`;
+
+# default definitions for LaTeX macros
+defaultpenalty="\penalty-200";
+defaultskip="\bigskip";
+defaultlabel="\Large\bfseries#1\hfill";
+defaultcontent="\ \\\\[-1ex]\hrule\medskip";
+pdfbookmarks="";
+pdfbookmarkscodewithoutlevel="\expandafter\ifx\csname firstpdfbookmark\endcsname\relax\
+\subpdfbookmark{#1}{alphabib.#1}\
+\def\firstpdfbookmark{}\
+\else\
+\currentpdfbookmark{#1}{alphabib.#1}\
+\fi";
+pdfbookmarkslevel="";
+pdfbookmarkscodewithlevelB="\pdfbookmark[";
+pdfbookmarkscodewithlevelE="]{#1}{alphabib.#1}";
+novon=0;
+
+# display errors
+function error()
+{
+ echo -ne "Error:\t$1\n\tYou may try '$name -h' for further help.\n";
+}
+
+# display usage
+function usage()
+{
+ echo "";
+ echo "SYNTAX";
+ echo " $name [-hsv] [-b [-l level]] <input-file.bbl> [<output-file.bbl>]";
+ echo "";
+ echo "DESCRIPTION";
+ echo " Addition of alphabetical headers into BibTeX '.bbl' files. Input and output";
+ echo " files may be identical, which is equivalent to no output file given. Input";
+ echo " file must be a '.bbl' file generated by BibTeX (so you have to run bibtex";
+ echo " before running $name).";
+ echo "";
+ echo "OTIONS";
+ echo " -b";
+ echo " This option will cause insertion of bookmarks into PDF files. Of course, it";
+ echo " requires using 'hyperref' package. Bookmarks level is set automatically if";
+ echo " option -l is not given.";
+ echo " -h";
+ echo " Displays this help.";
+ echo " -l";
+ echo " This option allows specifying level of bookmarks into PDF files. It must be";
+ echo " used with -b option.";
+ echo " -s";
+ echo " Choose this option if your BibTeX style sorts entries using the 'von' part";
+ echo " of names. For instance, 'alpha.bst' behaves like this (e.g. 'Ludwig van";
+ echo " Beethoven' will result in a key begining with 'vB' and will thus be sorted";
+ echo " like 'VB' would).";
+ echo " -v";
+ echo " Displays version information.";
+ echo "";
+ echo "See the manual for more detailed information.";
+ echo "";
+}
+
+# deletion of temporary files
+function cleanfiles()
+{
+ rm -f "$inputfile.working";
+}
+
+# test the class of a letter (upper/lowercase, backslash, or other)
+function testletter()
+{
+ case "$1" in
+ [[:lower:]])
+ return 0;;
+ [[:upper:]])
+ return 1;;
+ "\\")
+ return 2;;
+ *)
+ return 3;;
+ esac
+}
+
+echo "This is cxBib version $version";
+echo "Bash script written by $author";
+
+# options processing
+while getopts "bhl:sv" arg
+do
+ case $arg in
+ b)
+ echo "PDF bookmarks option selected.";
+ pdfbookmarks=$pdfbookmarkscodewithoutlevel;;
+ h)
+ usage;
+ exit 0;;
+ l)
+ echo "Bookmarks level $OPTARG selected.";
+ pdfbookmarkslevel=$OPTARG;;
+ s)
+ echo "Assume that sorting is performed using the 'von' part.";
+ novon=1;;
+ v)
+ exit 0;;
+ ?)
+ error "Problem while processing options.";
+ exit 1;;
+ esac
+done
+shift $(($OPTIND - 1));
+
+# input and output files
+if [ $# -eq 1 ]
+then
+ outputfile=$1;
+elif [ $# -eq 2 ]
+then
+ outputfile=$2;
+else
+ error "Invalid number of arguments!";
+ exit 1;
+fi
+if [ ! -f "$1" ]
+then
+ error "'$1' is not a valid file!";
+ exit 2;
+fi
+inputfile=$1;
+
+# test dependence between -b and -l and adjust bookmarks code if needed
+if [ ! -z "$pdfbookmarkslevel" ]
+then
+ if [ -z "$pdfbookmarks" ]
+ then
+ error "-l option used without -b option!";
+ exit 1;
+ fi
+ pdfbookmarks=$pdfbookmarkscodewithlevelB$pdfbookmarkslevel$pdfbookmarkscodewithlevelE;
+fi
+
+# make a working copy of input file
+cp -i $inputfile $inputfile.working;
+if [ $? -ne 0 ]
+then
+ error "Unable to create a temporary file. You must have write permission into\n\tthe current directory!";
+ exit 3;
+fi
+
+# test wether input file contains a bibliography environment
+grep -n -e '\\begin{thebibliography}' "$inputfile.working" > /dev/null 2>&1;
+bbibenv=$?;
+grep -n -e '\\end{thebibliography}' "$inputfile.working" > /dev/null 2>&1;
+ebibenv=$?;
+if [ $bbibenv -ne 0 -o $ebibenv -ne 0 ]
+then
+ error "'$inputfile' is not a valid BibTeX file: 'thebibliography' not found!";
+ cleanfiles;
+ exit 4;
+fi
+
+# let's scan input file
+nblines=`wc -l $inputfile.working | cut -f 1 -d " "`;
+# spaces are replaced by '%' so that lines can be separated with spaces
+rawentries=`grep -n -e '.*\\\\bibitem' $inputfile.working | tr " " "%" | tr "\n" " "`;
+if [ -z "$rawentries" ]
+then
+ # wow! where are the entries?
+ error "'$inputfile' is not a valid BibTeX file: No entry found!";
+ cleanfiles;
+ exit 4;
+fi
+
+unknownformmesage="Sorry, your BibTeX style is not supported!\n\tIf it should be (see supported styles in the manual), please send a bug\n\treport to the maintainer.";
+nbentries=0;
+tmpstr="";
+tmpint=1;
+# we now scan each entry
+for rawentry in $rawentries
+do
+ # firstly, we get the line number
+ line[$nbentries]=`echo $rawentry | cut -f 1 -d ":"`;
+ # for all entries but the first, we set the line of the next entry (this one)
+ # for the previous entry. For the last entry this number is set outside the
+ # loop
+ if [ $nbentries -ne 0 ]
+ then
+ next[`expr $nbentries - 1`]=${line[$nbentries]};
+ fi
+ # now we look at the bib items...
+ # usually, bib entries are in the form '\bibitem[A...' (with 'A' being the
+ # entry initial)
+ # so first, we get the optionnal argument of '\bibitem' macro
+ tmpstr=`expr match "$rawentry" '.*\\\\bibitem\[\([^]]*\)\].*'`;
+ # then, we look if there are some additional macros to remove (i.e. first
+ # character is '\')
+ letter[$nbentries]=`expr match "$tmpstr" '\(.\).*'`;
+ testletter "${letter[${nbentries}]}";
+ tmpint=$?;
+ if [ $tmpint -eq 2 ]
+ then
+ # these styles must have their bib entries in one of the forms
+ # '\bibitem[\foo\bar A...', or '\bibitem[\foo\bar{A...', so we check this
+ # by now...
+ tmpstr=`echo "$tmpstr" | grep -E -o "[%{][[:alpha:]]+" | head -n 1 | grep -o "[^%{].*"`;
+ if [ -z "$tmpstr" ]
+ then
+ # the bib entry is not in a known form...
+ error "$unknownformmesage";
+ cleanfiles;
+ exit 4;
+ else
+ # we can update the first letter...
+ letter[$nbentries]=`expr match "$tmpstr" '\(.\).*'`;
+ testletter "${letter[${nbentries}]}";
+ tmpint=$?;
+ fi
+ fi
+ if [ $tmpint -eq 0 ] # lower case
+ then
+ # we test wether von part must be considered or not
+ if [ $novon -eq 0 ]
+ then
+ # we have a von part, so we now look for the first capital (which should
+ # be the name initial)
+ theinitial=`expr match "$tmpstr" '[^[:upper:]]*\([[:upper:]]\).*'`;
+ if [ ! -z "$theinitial" ]
+ then
+ # we found it!
+ letter[$nbentries]=$theinitial;
+ else
+ error $unknownformmesage;
+ cleanfiles;
+ exit 4;
+ fi
+ else
+ # we keep the von initial letter but we translate it in uppercase
+ letter[$nbentries]=`echo ${letter[${nbentries}]} | tr 'a-z' 'A-Z'`;
+ fi
+ elif [ $tmpint -ne 1 ] # no letter so we can't do anything more!
+ then
+ error "$unknownformmesage";
+ cleanfiles;
+ exit 4;
+ fi
+ nbentries=`expr $nbentries + 1`;
+done
+
+next[`expr $nbentries - 1`]=$nblines;
+echo "$nbentries bib entries found in input file '$inputfile'.";
+
+# read again and write output file
+endpreamb=`expr ${line[0]} - 1`;
+preamb=`head -n$endpreamb $inputfile.working`;
+echo "$preamb" > $outputfile;
+
+# write '\alphabibitem' macro definition
+echo "\def\alphabibitem#1{\
+\expandafter\ifx\csname firstalphabibitem\endcsname\relax\
+\def\firstalphabibitem{}\
+\else\
+\expandafter\ifx\csname alphabibitemskip\endcsname\relax\
+$defaultskip\
+\else\
+\alphabibitemskip\
+\fi\
+\fi\
+\expandafter\ifx\csname alphabibitempenalty\endcsname\relax\
+\alphabibitempenalty\
+\else\
+$defaultpenalty\
+\fi\
+$pdfbookmarks\
+\expandafter\ifx\csname alphabibitemlabel\endcsname\relax\
+\expandafter\ifx\csname alphabibitemcontent\endcsname\relax\
+\item[$defaultlabel]$defaultcontent\
+\else\
+\item[$defaultlabel]\alphabibitemcontent{#1}\
+\fi\
+\else\
+\expandafter\ifx\csname alphabibitemcontent\endcsname\relax\
+\item[\alphabibitemlabel{#1}]$defaultcontent\
+\else\
+\item[\alphabibitemlabel{#1}]\alphabibitemcontent{#1}\
+\fi\
+\fi}" >> $outputfile;
+
+n=0;
+precletter="_";
+for rawentry in $rawentries
+do
+ currentletter=${letter[$n]};
+ currentline=${line[$n]};
+ nextline=${next[$n]};
+ last=`expr $nblines - $currentline + 1`;
+ first=`expr $nextline - $currentline`;
+ bibentry=`tail -n$last $inputfile.working | head -n$first`;
+ if [ ! $currentletter == $precletter ]
+ then
+ echo -ne "$currentletter ";
+ echo -ne "\n\\\\alphabibitem{$currentletter}\n" >> $outputfile;
+ precletter=$currentletter;
+ fi
+ echo -ne "\n" >> $outputfile;
+ echo "$bibentry" >> $outputfile;
+ n=`expr $n + 1`;
+done
+
+echo -ne "\n\\\\end{thebibliography}\n" >> $outputfile;
+
+# delete temp files
+cleanfiles;
+
+echo -ne "\nOutput written in '$outputfile'.\n";
+exit 0;
diff --git a/biblio/bibtex/utils/alphabib/alphabib.pdf b/biblio/bibtex/utils/alphabib/alphabib.pdf
new file mode 100644
index 0000000000..99071543dc
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/alphabib.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/alphabib/example.bib b/biblio/bibtex/utils/alphabib/example.bib
new file mode 100644
index 0000000000..93f5a18cc5
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/example.bib
@@ -0,0 +1,76 @@
+@String{pub-AW = "Ad{\-d}i{\-s}on-Wes{\-l}ey"}
+@String{pub-AW:adr = "Reading, MA, USA"}
+@String{TUGboat = "TUGBoat"}
+
+
+@Article{beebe93,
+ author = "Beebe, Nelson H. F.",
+ title = "Bibliography Prettyprinting and Syntax Checking",
+ journal = TUGboat,
+ year = "1993",
+ volume = "14",
+ number = "4",
+ pages = "395-419"
+}
+
+@Article{higham94,
+ author = "Higham, Nicholas J.",
+ title = "{BibTeX}: {A} Versatile Tool for {\LaTeX} Users",
+ journal = "SIAM News",
+ year = "1994",
+ volume = "27",
+ number = "1",
+ pages = "10, 11, 19",
+ month = "January"
+}
+
+@Book{knuth86,
+ author = "Knuth, Donald E.",
+ title = "The {\TeX}book",
+ publisher = pub-AW,
+ year = "1986",
+ series = "Computers and Typesetting",
+ pages = "ix + 483",
+}
+
+@Book{lamport85,
+ author = "Lamport, Leslie",
+ title = "{\LaTeX} -- A Document Preparation System --
+ User's Guide and Reference Manual",
+ publisher = pub-AW,
+ address = pub-AW:adr,
+ year = "1985",
+ pages = "xiv + 242",
+}
+
+@Book{lamport94,
+ author = "Lamport, Leslie",
+ title = "{\LaTeX} -- {A} Document Preparation System -- User's
+ Guide and Reference Manual",
+ publisher = pub-AW,
+ year = "1994",
+ address = pub-AW:adr,
+ edition = "Second",
+ pages = "xvi + 272",
+ acknowledgement = ack-nhfb,
+}
+
+@Manual{patashnik88,
+ title = {Bib{\TeX}ing},
+ author = {Patashnik, Oren},
+ month = feb,
+ year = 1988,
+ note = {Bib{\TeX} distribution (\texttt{btxdoc.tex})},
+}
+
+@Article{wonneberger91,
+ author = "Wonneberger, Reinhard and Mittelbach, Frank",
+ title = "{{Bib\TeX{} reconsidered}}",
+ journal = TUGboat,
+ year = "1991",
+ volume = "12",
+ number = "1",
+ pages = "111-124",
+ month = Mar,
+}
+
diff --git a/biblio/bibtex/utils/alphabib/example.pdf b/biblio/bibtex/utils/alphabib/example.pdf
new file mode 100644
index 0000000000..283bc83eef
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/example.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/alphabib/example.tex b/biblio/bibtex/utils/alphabib/example.tex
new file mode 100644
index 0000000000..b06fed0a9d
--- /dev/null
+++ b/biblio/bibtex/utils/alphabib/example.tex
@@ -0,0 +1,32 @@
+% cxBib example file
+\documentclass{article}
+
+\usepackage[bookmarksopen=true]{hyperref}
+\usepackage{tocbibind}
+
+\def\alphabibitempenalty{\penalty-1000}
+\def\alphabibitemskip{\vspace{0.6cm}}
+\def\alphabibitemlabel#1{}
+\def\alphabibitemcontent#1{\hspace{-\leftmargin}\hfill{\large\bfseries\sffamily--$\sim$~#1~$\sim$--}\hfill\hbox{}\\[-0.4cm]}
+
+\newcommand{\alphabib}{$\alpha$B{\scshape ib}}
+
+\begin{document}
+
+\title{Example file using \alphabib{}}
+\author{Mael Hill\'{e}reau}
+\date{18\textsuperscript{th} April 2006}
+
+\maketitle
+
+This file demonstrates the use of \alphabib{} script. In order to
+produce output, you will have to run \texttt{[pdf]latex},
+\texttt{bibtex}, \texttt{alphabib}, \texttt{[pdf]latex}, and then
+\texttt{[pdf]latex} again so as to get cross references.
+
+\nocite{*}
+
+\bibliographystyle{alpha}
+\bibliography{example}
+
+\end{document}
diff --git a/biblio/bibtex/utils/ams2bib/README b/biblio/bibtex/utils/ams2bib/README
new file mode 100644
index 0000000000..b8dcddc4de
--- /dev/null
+++ b/biblio/bibtex/utils/ams2bib/README
@@ -0,0 +1,46 @@
+ams2bib, version 1.0: convert AmSTeX bibliography into BibTeX
+
+Copyright (C) Arthur G. Werschulz <agw@cs.columbia.edu>
+May be freely redistributed under the Gnu Public License.
+
+ams2bib is a Perl script. Its input is a file consisting of AmSTeX
+bibliography entries. It produces a file consisting of the same
+bibliographic entries, but in BibTeX format.
+
+Since ams2bib is written in Perl, it should run on any system on which
+Perl is installed. It has been tested on the following platforms:
+
+ RedHat Linux
+ Solaris
+ Macintosh
+
+Using ams2bib is very simple: If you have a file "foo.tex" consisting
+of AmSTeX bibliographic references, the command "ams2bib foo" produces
+a file "foo.bib" containing the translations of these references into
+BibTeX. Keys are automatically generated, based on the authors' names
+and yuear of publication.
+
+Note: AmSTeX does not support the wide variety of reference types that
+BibTeX does. For example, the only way to indicate a technical report
+in AmSTeX is to use the \paper referece, with the \paperinfo field
+giving the technical report information. Hence, a tool such as
+ams2bib would be hard-pressed to produce a @TechReport bibliographic
+entry. Indeed, ams2bib only produces @Article, @Book, and @InBook
+entries. This means that it may be necessary to hand-edit the
+resulting BibTeX file, looking for these kinds of corrections.
+
+This package consists of the following files:
+
+ README this file
+ ams2bib the program itself
+ ams2bib.1 the Unix man page for ams2bib
+ ams2bib.txt a plain text version of the Unix man page
+
+One final comment: TeX has been a major part of my professional life
+over the last (almost) twenty years. Although ams2bib is a tiny
+little utility that only a few people may actually find useful,
+I am glad to be able to make a contribution (no matter how small) to
+the TeX community.
+
+ Art Werschulz
+
diff --git a/biblio/bibtex/utils/ams2bib/ams2bib b/biblio/bibtex/utils/ams2bib/ams2bib
new file mode 100644
index 0000000000..967bcb6f04
--- /dev/null
+++ b/biblio/bibtex/utils/ams2bib/ams2bib
@@ -0,0 +1,287 @@
+#!/usr/bin/perl
+
+# ams2bib: convert AmSTeX bibliography into BibTeX
+# usage: ams2bib [-o file.bib] file[.tex]
+#
+# author: A. G. Werschulz <agw@cs.columbia.edu>
+# date: 10 September 2000
+# version: 1.0
+#
+# Copyright (C) Arthur G. Werschulz 2000 (agw@cs.columbia.edu)
+#
+# May be freely redistributed under the Gnu Public License.
+# Send me mail if you like it or if you have any questions or suggestions.
+
+# modules I use:
+
+use strict;
+use vars qw($opt_h $opt_o);
+use Getopt::Std;
+
+my($prog, $usage, $bibfile, $still_more);
+
+# I should really clean this up, given the unpleasantness of
+# global variables ...
+
+my $current_author;
+my %keys = ();
+
+# ye olde error msg
+
+$prog = $0;
+$usage="Usage: $prog [-o file.bib] file[.tex]";
+
+# handle options
+
+if (!getopts('ho:')) {
+ print STDERR $usage, "\n";
+ exit 1;
+}
+
+if ($opt_h) {
+ print STDERR $usage, "\n";
+ exit 0;
+}
+
+$bibfile = $opt_o if ($opt_o);
+
+# there should be exactly one input filename at this point
+# default extension is ".tex" if no extension is explicitly given
+
+die $usage if ($#ARGV != 0);
+
+# set up input (AmSTeX) and output (BibTeX) files
+
+my $dotspot = index($ARGV[0], ".");
+if ($dotspot > 0) {
+ my $root = substr($ARGV[0], 0, $dotspot);
+ $bibfile = $root . ".bib" unless defined $bibfile;
+}
+else {
+ $bibfile = $ARGV[0] . ".bib";
+ $ARGV[0] .= ".tex";
+}
+
+open (INFILE, $ARGV[0]) || die "$prog: can't read $ARGV[0]: $!\n";
+open (OUTFILE, ">$bibfile") ||
+ die "$prog: can't open $bibfile for output: $!\n";
+
+# main processing loop
+
+do {
+ $still_more = process_one_ref();
+} while $still_more;
+
+# bring 'em all home, now
+
+close INFILE;
+close OUTFILE;
+
+exit 0;
+
+#
+# process a single entry from the INFILE filehandle
+# an entry has the form
+# \ref
+# \keyword blah blah blah
+# \endref
+#
+# keywords are listed below
+# assumption: a keyword can only appear at the beginning of a line
+# (possibly preceded by whitespac)
+# blank lines are ignored, as are instances of \pointer
+# returns false when eof occurs on INFILE
+#
+# this subroutine does no error checking ... it assumes that the entry
+# has the stated form
+#
+
+sub process_one_ref()
+{
+ my $keywords =
+ "\\book \\bookinfo \\by \\bysame \\endref \\inbook \\jour
+ \\manyby \\pages \\paper \\paperinfo \\publ \\publaddr
+ \\toappear \\vol \\yr";
+
+ my (%bibentry, $currentword, $firstword, @remainder,
+ $current_keyword, $rhs, $keyword);
+
+ # if there's nothing there, we're done
+
+ return 0 if (eof(INFILE));
+
+ # first, go past anything that doesn't match \ref
+ # (blank lines, \\pointer, etc.)
+
+ while (<INFILE>) {
+ s/%.+//; # strip out comments
+ last if index($_, "\\ref") >= 0;
+ }
+ return 0 if (eof(INFILE));
+
+ # store contents of entry into a hash, indexed by the keywords
+
+ while (<INFILE>) {
+ s/%.+//; # again with the comments??
+ last if index($_, "\\endref") >= 0;
+ ($firstword, @remainder) = split;
+ if (index($keywords, $firstword) >= 0) {
+ $firstword = substr($firstword, 1); # strip off leading slash
+ $current_keyword = $firstword;
+ $rhs = join(" ", @remainder);
+ #
+ # handle the various different fields
+ #
+ # here we deal with the \manyby ... \bysame construction
+ if ($current_keyword eq "manyby") {
+ $bibentry{"by"} = $rhs;
+ $current_author = $rhs;
+ } elsif ($current_keyword eq "bysame") {
+ $bibentry{"by"} = $current_author;
+ } else {
+ # handle all remaining keywords
+ $bibentry{$current_keyword} = $rhs;
+ }
+ } else { # firstword not a keyword, so this is a continuation line
+ $bibentry{$current_keyword} .=
+ " " . join(" ", $firstword, @remainder);
+ }
+ }
+
+ if (exists $bibentry{"book"}) {
+ handle_book(%bibentry);
+ } elsif (exists $bibentry{"inbook"}) {
+ handle_inbook(%bibentry);
+ } elsif (exists $bibentry{"paper"}) {
+ handle_paper(%bibentry);
+ } else {
+ print STDERR "$prog: unknown bibliographic entry\n";
+ foreach $keyword (keys(%bibentry)) {
+ print STDERR "$keyword: ", $bibentry{$keyword}, "\n";
+ }
+ }
+
+ return 1;
+
+}
+
+#
+# a book appearing in the bibliography
+#
+
+sub handle_book
+{
+ my %bibentry = @_;
+ my $author = adjust_author($bibentry{"by"});
+ my $bibkey = bib_key($author, $bibentry{"yr"});
+ print OUTFILE '@Book{', $bibkey, ",\n",
+ " author = {$author},\n",
+ " title = {", $bibentry{"book"}, "},\n",
+ " publisher = {", $bibentry{"publ"}, "},\n",
+ " address = {", $bibentry{"publaddr"}, "},\n",
+ " year = {", $bibentry{"yr"}, "},\n";
+ if (exists $bibentry{"bookinfo"}) {
+ print OUTFILE " note = {", $bibentry{"bookinfo"}, "},\n";
+ }
+ print OUTFILE "}\n\n";
+}
+
+#
+# part of a book (e.g., a contributed paper or a chapter) appearing
+# in the bibliography
+#
+
+sub handle_inbook
+{
+ my %bibentry = @_;
+ my $author = adjust_author($bibentry{"by"});
+ my $bibkey = bib_key($author, $bibentry{"yr"});
+ print OUTFILE '@InCollection{', $bibkey, ",\n",
+ " author = {$author},\n",
+ " title = {", $bibentry{"paper"}, "},\n",
+ " booktitle = {", $bibentry{"inbook"}, "},\n",
+ " pages = {", $bibentry{"pages"}, "},\n",
+ " publisher = {", $bibentry{"publ"}, "},\n",
+ " address = {", $bibentry{"publaddr"}, "},\n",
+ " year = {", $bibentry{"yr"}, "},\n";
+ if (exists $bibentry{"bookinfo"}) {
+ print OUTFILE " note = {", $bibentry{"bookinfo"}, "},\n";
+ }
+ print OUTFILE "}\n\n";
+}
+
+#
+# a paper appearing in the bibliography
+#
+
+sub handle_paper
+{
+ my %bibentry = @_;
+ my $author = adjust_author($bibentry{"by"});
+ my $bibkey = bib_key($author, $bibentry{"yr"});
+ print OUTFILE '@Article{', $bibkey, ",\n",
+ " author = {$author},\n",
+ " title = {", $bibentry{"paper"}, "},\n",
+ " journal = {", $bibentry{"jour"}, "},\n",
+ " volume = {", $bibentry{"vol"}, "},\n",
+ " year = {", $bibentry{"yr"}, "},\n",
+ " pages = {", $bibentry{"pages"}, "},\n";
+ if (exists $bibentry{"paperinfo"}) {
+ print OUTFILE " note = {", $bibentry{"paperinfo"}, "},\n";
+ }
+ print OUTFILE "}\n\n";
+}
+
+#
+# fix the author
+#
+# If a reference has more than two authors, then the AmSTeX file will
+# have a comma separating the authors (with the exception of the last two).
+# BibTeX requires "and" to separate the authors.
+#
+# Example:
+# Aziz, A. K., Kellogg, R. B., and Stephens, A. B.
+# becomes
+# Aziz, A. K. and Kellogg, R. B. and Stephens, A. B.
+#
+
+sub adjust_author
+{
+ my ($orig_author) = @_;
+ my @parsed_list = split(",", $orig_author);
+ my $length = scalar(@parsed_list);
+ return $orig_author if $length < 4;
+ my $author = "";
+ for (my $i = 0; $i < $length - 2; $i += 2) {
+ $author .= $parsed_list[$i] . "," . $parsed_list[$i+1]. " and";
+ }
+ $author .= $parsed_list[$length - 2] . "," . $parsed_list[$length - 1];
+ $author =~ s/and and/and/;
+
+ return $author;
+}
+
+#
+# generate a key from the author(s) and publication year
+#
+
+sub bib_key
+{
+ my ($author, $year) = @_;
+ $author =~ s/(.+),.+$/$1/; # clean out stuff that's not in last names
+ $author =~ s/,.+ and//g; # clean out separators: comma, " and"
+ $author =~ s/\W//g;
+ $author =~ s/\\[^\s{]+([\s{])/$1/g; # clean out TeX control sequences
+ my $key_sofar = $author . $year ;
+#
+# has this key already appeared?
+#
+ if (! exists $keys{$key_sofar}) {
+ $keys{$key_sofar} = 1;
+ return $key_sofar;
+ }
+ my $key;
+ my $addon = $keys{$key_sofar}++;
+ $addon =~ tr/1-9/b-j/;
+ return $key_sofar . $addon;
+}
diff --git a/biblio/bibtex/utils/ams2bib/ams2bib.1 b/biblio/bibtex/utils/ams2bib/ams2bib.1
new file mode 100644
index 0000000000..075938b284
--- /dev/null
+++ b/biblio/bibtex/utils/ams2bib/ams2bib.1
@@ -0,0 +1,100 @@
+.TH ams2bib 1 "September 10, 2000"
+.LO 1
+
+.SH NAME
+ams2bib \- convert AmSTeX bibliography into BibTeX
+
+.SH SYNOPSIS
+ams2bib [\-o file.bib] file[.tex]
+
+.SH DESCRIPTION
+.B ams2bib
+takes a file consisting of AmSTeX bibliography entries
+and produces a file consisting of the same bibliographic entries,
+but in BibTeX format.
+
+.SH OPTIONS
+.TP
+.B \-\^o " file[.bib]"
+Specify the name of the BibTeX file to produce. The default is to use
+.I name.bib,
+where
+.I name
+is
+.I file,
+stripped of any filename extension.
+.TP
+.B \-\^h
+Display a brief help message.
+
+.SH USAGE
+The only non-option command-line parameter is the name of an
+input file. If no filename extension is given, the default extension
+.I tex
+is assumed. This file must consist of AmSTeX bibliography entries.
+
+The output file consists of BibTeX bibliographic entries. The kind of
+BibTeX entry produced depends on the corresponding AmSTeX entry. If
+the AmSTeX entry contains
+.I \\\\book,
+then a
+.I Book
+BibTeX entry is produced.
+Otherwise, if the AmSTeX entry contains
+.I \\\\inbook,
+then a
+.I InCollection
+BibTeX entry is produced.
+Otherwise, if the AmSTeX entry contains
+.I \\\\paper,
+then an
+.I Article
+BibTeX entry is produced.
+If none of these three AmSTeX control sequence is contained, then the
+AmSTeX entry is considered to be in error.
+
+Note that a key is automatically generated for each BibTeX entry.
+This key consists of all the authors' names catenated together,
+followed by the date found in the
+.I \\\\year
+field. If this would result in duplicate keys, then an alphabetic
+letter ("b", "c", etc.) is appended to the key. Users who want to use
+other kinds of automatically-generated keys should consider using
+Gerd Neugebauer's
+.B bibtool,
+which is available via CTAN (http://www.ctan.org).
+
+.SH "SEE ALSO"
+amstex(1), bibtool(1), bibtex(1), latex(1), tex(1).
+
+.SH LIMITATIONS
+One of the main differences between AmSTeX and BibTeX is that BibTeX
+provides a greater variety bibliographic entries than does AmSTeX.
+This means that an AmSTeX bibliography will often use ad hoc methods
+in cases where a BibTeX bibliography can be more straightforward. In
+such situations, the user will have to make corrections by hand. For
+example, unpublished articles and technical reports have standard
+BibTeX bibliographic entries, but are usually done in AmSTeX by adding
+information to the
+.I \\\\paperinfo
+field; hence, unpublished articles and technical reports will need to
+be edited by hand.
+
+Error checking is minimal.
+.B ams2bib
+only does the usual command-line parameter checking. In particular,
+the syntax of the AmSTeX file is not checked.
+
+As mentioned above, duplicate keys would normally result if the
+authors and year match for more than one entry. This is resolved by
+appending an alphabetic letter to the key. At most nine such
+additional letters ("b" through "j") are added.
+
+.SH "AUTHOR"
+Copyright (c) Arthur G. Werschulz 2000.
+.B ams2bib
+may be freely redistributed under the Gnu Public License.
+Send mail to agw@cs.columbia.edu if you have any questions or
+suggestions.
+
+
diff --git a/biblio/bibtex/utils/ams2bib/ams2bib.txt b/biblio/bibtex/utils/ams2bib/ams2bib.txt
new file mode 100644
index 0000000000..26bbcc4b00
--- /dev/null
+++ b/biblio/bibtex/utils/ams2bib/ams2bib.txt
@@ -0,0 +1,77 @@
+User Commands ams2bib(1)
+
+NAME
+ ams2bib - convert AmSTeX bibliography into BibTeX
+
+SYNOPSIS
+ ams2bib [-o file.bib] file[.tex]
+
+DESCRIPTION
+ ams2bib takes a file consisting of AmSTeX bibliography
+ entries and produces a file consisting of the same biblio­
+ graphic entries, but in BibTeX format.
+
+OPTIONS
+ -o file[.bib]
+ Specify the name of the BibTeX file to produce. The
+ default is to use name.bib, where name is file,
+ stripped of any filename extension.
+
+ -h Display a brief help message.
+
+USAGE
+ The only non-option command-line parameter is the name of an
+ input file. If no filename extension is given, the default
+ extension tex is assumed. This file must consist of AmSTeX
+ bibliography entries.
+
+ The output file consists of BibTeX bibliographic entries.
+ The kind of BibTeX entry produced depends on the correspond­
+ ing AmSTeX entry. If the AmSTeX entry contains \book, then
+ a Book BibTeX entry is produced. Otherwise, if the AmSTeX
+ entry contains \inbook, then a InCollection BibTeX entry is
+ produced. Otherwise, if the AmSTeX entry contains \paper,
+ then an Article BibTeX entry is produced. If none of these
+ three AmSTeX control sequence is contained, then the AmSTeX
+ entry is considered to be in error.
+
+ Note that a key is automatically generated for each BibTeX
+ entry. This key consists of all the authors' names cate­
+ nated together, followed by the date found in the \year
+ field. If this would result in duplicate keys, then an
+ alphabetic letter ("b", "c", etc.) is appended to the key.
+ Users who want to use other kinds of automatically-generated
+ keys should consider using Gerd Neugebauer's bibtool, which
+ is available via CTAN (http://www.ctan.org).
+
+SEE ALSO
+ amstex(1), bibtool(1), bibtex(1), latex(1), tex(1).
+
+LIMITATIONS
+ One of the main differences between AmSTeX and BibTeX is
+ that BibTeX provides a greater variety bibliographic entries
+ than does AmSTeX. This means that an AmSTeX bibliography
+ will often use ad hoc methods in cases where a BibTeX bibli­
+ ography can be more straightforward. In such situations,
+ the user will have to make corrections by hand. For exam­
+ ple, unpublished articles and technical reports have stan­
+ dard BibTeX bibliographic entries, but are usually done in
+ AmSTeX by adding information to the \paperinfo field; hence,
+ unpublished articles and technical reports will need to be
+ edited by hand.
+
+ Error checking is minimal. ams2bib only does the usual com­
+ mand-line parameter checking. In particular, the syntax of
+ the AmSTeX file is not checked.
+
+ As mentioned above, duplicate keys would normally result if
+ the authors and year match for more than one entry. This is
+ resolved by appending an alphabetic letter to the key. At
+ most nine such additional letters ("b" through "j") are
+ added.
+
+AUTHOR
+ Copyright (c) Arthur G. Werschulz 2000. ams2bib may be
+ freely redistributed under the Gnu Public License. Send
+ mail to agw@cs.columbia.edu if you have any questions or
+ suggestions.
diff --git a/biblio/bibtex/utils/bib2dvi/bib2dvi b/biblio/bibtex/utils/bib2dvi/bib2dvi
new file mode 100644
index 0000000000..32d3c2f65e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/bib2dvi
@@ -0,0 +1,173 @@
+#!/bin/sh
+#
+# bib2dvi - generates a .dvi file from a .bib file
+#
+# Version 0.13 (October 22, 1992)
+#
+# Copyright (c) L.L. Frederiks, 1992
+#
+# Usage: bib2dvi [<file.bib>] [-d|-e] [-s <style>] [-h] [-v]
+#
+# Purpose: Converts a BibTeX .bib file directly into a by LaTeX
+# formatted .dvi file.
+#
+# Output: file.dvi
+#
+# History: 0.10 June 22, 1992 original version 0.11.
+# 0.12 October 21, 1992 options -d,-e and -s.
+# 0.13 October 22, 1992 improved interpretation of option parameters,
+# they can used in any order. Extra -h option for
+# providing help information and -v option which
+# disables the suppression of latex and bibtex
+# messages.
+#
+# Please report bugs to: L.L. Frederiks
+# Runmolen 88A
+# 1823 GM Alkmaar
+# The Netherlands
+# e-mail: loek@nt.eltn.utwente.nl
+#
+
+USAGE='Usage: '`basename $0`' [<file.bib>] [-d|-e] [-s <style>] [-h] [-v]'
+BIB2DVIDIR=//dino/users/cad/loek/postscript/bib2ps
+TEXINPUTDIR=//dino/arbortext/inputs
+STYLE=english
+BSTYLE=plain
+NAMES="abbrv alpha plain unsrt"
+VERBOSE=false
+
+if [ "$1" = "" ]
+then
+ echo bib2dvi 0.13 \(October 22, 1992\)
+ echo Copyright \(c\) L.L. Frederiks, 1992
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1
+fi
+
+if [ -f $1 ]
+then
+ BIBALL=$1
+else
+ echo "Argument not an existing file." 1>&2
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1
+fi
+
+for arg in $*
+do
+ case $arg in
+ -h) echo bib2dvi 0.13 \(October 22, 1992\)
+ echo Copyright \(c\) L.L. Frederiks, 1992
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1;;
+ -d) STYLE=dutch;;
+ -e) STYLE=english;;
+ -v) VERBOSE=true;;
+ -s) for NAME in $* ; do
+ for SUBNAME in $NAMES ; do
+ if [ $SUBNAME = $NAME ]
+ then
+ BSTYLE=$SUBNAME
+ fi
+ done
+ done
+ esac
+done
+
+BIBLIO=`basename $BIBALL .bib`
+
+echo bib2dvi, version 0.12 \(October 22, 1992\)....
+
+sed -e "s/xxx/${BIBALL}/" -e "s/yyy/${USER}/" -e "s/ddd/${STYLE}/" > $BIBLIO.tmp1 << PART1
+\documentstyle[11pt,twoside,${BIB2DVIDIR}/bib2dvi,${BIB2DVIDIR}/ddd]{report}
+\pagestyle{plain}
+
+\begin{document}
+\noindent
+
+\title{xxx}
+PART1
+
+sed -e "s/ggg/${USER}/" > $BIBLIO.awk1 << PART2
+{
+ creator="ggg";\\
+ FS = ":,";\\
+ str= "\author{";\\
+ acco3 = "}";\\
+ if (\$1 == creator)
+ {print \$5};\\
+}
+PART2
+
+cat /etc/passwd > $BIBLIO.pass
+
+awk -f $BIBLIO.awk1 $BIBLIO.pass > $BIBLIO.tmp0
+
+awk -f $BIB2DVIDIR/bib2dvi2.awk $BIBLIO.tmp0 > $BIBLIO.tmp2
+
+sed -e "s/zzz/${BIBLIO}/" -e "s/uuu/${BSTYLE}/" > $BIBLIO.tmp3 << PART2
+
+\bibliographystyle{${TEXINPUTDIR}/uuu}
+\bibliography{zzz}
+
+\end{document}
+PART2
+
+echo Generating .tex file....
+awk -f $BIB2DVIDIR/bib2dvi1.awk $BIBALL > $BIBLIO.tmp4
+
+cat $BIBLIO.tmp1 $BIBLIO.tmp2 $BIBLIO.tmp4 $BIBLIO.tmp3 > $BIBLIO.tex
+
+echo Latex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | latex $BIBLIO > /dev/null
+else
+ echo bye | latex $BIBLIO
+fi
+
+echo Bibtex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | bibtex $BIBLIO > /dev/null
+else
+ echo bye | bibtex $BIBLIO
+fi
+
+echo Latex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | latex $BIBLIO > /dev/null
+else
+ echo bye | latex $BIBLIO
+fi
+
+# cleaning up ....
+
+rm -f $BIBLIO.tmp0 $BIBLIO.tmp1 $BIBLIO.tmp2 $BIBLIO.tmp3 $BIBLIO.tmp4 \
+ $BIBLIO.pass $BIBLIO.tex $BIBLIO.aux $BIBLIO.bbl $BIBLIO.blg \
+ $BIBLIO.log $BIBLIO.awk1
+
+echo Done....
+
diff --git a/biblio/bibtex/utils/bib2dvi/bib2dvi.bak b/biblio/bibtex/utils/bib2dvi/bib2dvi.bak
new file mode 100644
index 0000000000..99acdeaa0f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/bib2dvi.bak
@@ -0,0 +1,156 @@
+#!/bin/sh
+#
+# bib2dvi - generates a .dvi file from a .bib file
+#
+# Version 0.13 (October 22, 1992)
+#
+# Copyright (c) L.L. Frederiks, 1992
+#
+# Usage: bib2dvi [file.bib] [-d|-e] [-s plain|abbrv|alpha|unsrt] [-v]
+#
+# Output: filename.dvi
+#
+
+USAGE='Usage: '`basename $0`' <file.bib> [-d|-e] [-s <style>] [-h] [-v]'
+BIB2DVIDIR=//dino/users/cad/loek/postscript/bib2ps
+TEXINPUTDIR=//dino/arbortext/inputs
+STYLE=english
+BSTYLE=plain
+NAMES="abbrv alpha plain unsrt"
+VERBOSE=false
+
+if [ "$1" = "" ]
+then
+ echo bib2dvi 0.13 \(October 22, 1992\)
+ echo Copyright \(c\) L.L. Frederiks, 1992
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1
+fi
+
+if [ -f $1 ]
+then
+ BIBALL=$1
+else
+ echo "Argument not an existing file." 1>&2
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1
+fi
+
+for arg in $*
+do
+ case $arg in
+ -h) echo bib2dvi 0.13 \(October 22, 1992\)
+ echo Copyright \(c\) L.L. Frederiks, 1992
+ echo "$USAGE" 1>&2
+ echo " "where options are:
+ echo " "-d Dutch
+ echo " "-e English \(default\)
+ echo " "-s Bibtex style: abbrv,alpha,unsrt,plain \(default\)
+ echo " "-h help
+ echo " "-v verbose
+ exit 1;;
+ -d) STYLE=dutch;;
+ -e) STYLE=english;;
+ -v) VERBOSE=true;;
+ -s) for NAME in $* ; do
+ for SUBNAME in $NAMES ; do
+ if [ $SUBNAME = $NAME ]
+ then
+ BSTYLE=$SUBNAME
+ fi
+ done
+ done
+ esac
+done
+
+BIBLIO=`basename $BIBALL .bib`
+
+echo bib2dvi, version 0.12 \(October 22, 1992\)....
+
+sed -e "s/xxx/${BIBALL}/" -e "s/yyy/${USER}/" -e "s/ddd/${STYLE}/" > $BIBLIO.tmp1 << PART1
+\documentstyle[11pt,twoside,${BIB2DVIDIR}/bib2dvi,${BIB2DVIDIR}/ddd]{report}
+\pagestyle{plain}
+
+\begin{document}
+\noindent
+
+\title{xxx}
+PART1
+
+sed -e "s/ggg/${USER}/" > $BIBLIO.awk1 << PART2
+{
+ creator="ggg";\\
+ FS = ":,";\\
+ str= "\author{";\\
+ acco3 = "}";\\
+ if (\$1 == creator)
+ {print \$5};\\
+}
+PART2
+
+cat /etc/passwd > $BIBLIO.pass
+
+awk -f $BIBLIO.awk1 $BIBLIO.pass > $BIBLIO.tmp0
+
+awk -f $BIB2DVIDIR/bib2dvi2.awk $BIBLIO.tmp0 > $BIBLIO.tmp2
+
+sed -e "s/zzz/${BIBLIO}/" -e "s/uuu/${BSTYLE}/" > $BIBLIO.tmp3 << PART2
+
+\bibliographystyle{${TEXINPUTDIR}/uuu}
+\bibliography{zzz}
+
+\end{document}
+PART2
+
+echo Generating .tex file....
+awk -f $BIB2DVIDIR/bib2dvi1.awk $BIBALL > $BIBLIO.tmp4
+
+cat $BIBLIO.tmp1 $BIBLIO.tmp2 $BIBLIO.tmp4 $BIBLIO.tmp3 > $BIBLIO.tex
+
+echo Latex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | latex $BIBLIO > /dev/null
+else
+ echo bye | latex $BIBLIO
+fi
+
+echo Bibtex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | bibtex $BIBLIO > /dev/null
+else
+ echo bye | bibtex $BIBLIO
+fi
+
+echo Latex....
+
+if [ $VERBOSE = false ]
+then
+ echo bye | latex $BIBLIO > /dev/null
+else
+ echo bye | latex $BIBLIO
+fi
+
+# cleaning up ....
+
+rm -f $BIBLIO.tmp0 $BIBLIO.tmp1 $BIBLIO.tmp2 $BIBLIO.tmp3 $BIBLIO.tmp4 \
+ $BIBLIO.pass $BIBLIO.tex $BIBLIO.aux $BIBLIO.bbl $BIBLIO.blg \
+ $BIBLIO.log $BIBLIO.awk1
+
+echo Done....
+
diff --git a/biblio/bibtex/utils/bib2dvi/bib2dvi.sty b/biblio/bibtex/utils/bib2dvi/bib2dvi.sty
new file mode 100644
index 0000000000..43afe59571
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/bib2dvi.sty
@@ -0,0 +1,224 @@
+%------------------------------------------------------------------------
+% Set default counters
+%------------------------------------------------------------------------
+
+\setlength{\parindent}{0em}
+\setlength{\parskip}{2ex}
+\setlength{\topmargin}{-2cm}
+\setlength{\headheight}{0cm}
+\setlength{\textheight}{23cm}
+\setlength{\textwidth}{15cm}
+\setlength{\oddsidemargin}{0.5cm}
+\setlength{\evensidemargin}{0.5cm}
+
+
+%------------------------------------------------------------------------
+% enu: my own enumeration environment
+%------------------------------------------------------------------------
+
+\newcounter{enu}
+\newenvironment {enu}%
+ {\begin{list}
+ {\arabic{enu}.}%
+ {\usecounter{enu}
+ \setlength {\parskip}{0ex}
+ \setlength {\itemsep} {-1ex}
+ \setlength {\topsep} {-1.5ex}}}%
+ {\end{list}
+ \vspace{1.5ex}}
+
+
+%------------------------------------------------------------------------
+% dotlist: my own itemize environment
+%------------------------------------------------------------------------
+
+\newenvironment {dotlist}%
+ {\begin{list}
+ {$ \bullet $}%
+ {\setlength {\itemsep} {-1ex}
+ \setlength {\parskip}{0ex}
+ \setlength {\topsep} {-1.5ex}}}%
+ {\end{list}
+ \vspace{1.5ex}}
+
+%------------------------------------------------------------------------
+% varlist: my own variable list environment
+%------------------------------------------------------------------------
+
+\newenvironment {varlist}%
+ {\begin{list}
+ {{\bf You forgot the label}}%
+ {\setlength {\itemsep} {-1ex}
+ \setlength {\parskip}{0ex}
+ \setlength {\topsep} {-1.5ex}}}%
+ {\end{list}
+ \vspace{1.5ex}}
+
+
+%------------------------------------------------------------------------
+% putcross: put a figure's cross reference name instead of the figure
+% itself
+%
+% args: - #1: the height of the figure in inches
+% - #2: the cross reference keyword for the figure.
+%------------------------------------------------------------------------
+
+\setlength {\unitlength} {1in}
+
+\newcommand{\putcross}[2]%
+ {\begin{picture}(3,#1)
+ \put(0.5,0.5){#2}
+ \end{picture}}
+
+
+%------------------------------------------------------------------------
+% some commands necessary because '<' and '>' are not available in Roman
+% font: left hook (lh) and right hook (rh).
+%------------------------------------------------------------------------
+
+\newcommand {\lh} {{\sc <}}
+\newcommand {\rh} {{\sc >}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file should be 'input' into a tex file to change from
+% using the computer modern fonts to using the postscript
+% printer esident Times-Roman font.
+%
+% Only the roman, bold and italic typefaces are changed. You can
+% redefine other fonts in a similar fashion or create other files
+% that use other postscript fonts.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Times-Roman at 5pt
+%
+\font\fivrm = psmtimr at 5pt
+\font\fivbf = psmtimb at 5pt
+\font\fivit = psmtimi at 5pt
+%
+% Times-Roman at 6pt
+%
+\font\sixrm = psmtimr at 6pt
+\font\sixbf = psmtimb at 6pt
+\font\sixit = psmtimi at 6pt
+%
+% Times-Roman at 7pt
+%
+\font\sevrm = psmtimr at 7pt
+\font\sevbf = psmtimb at 7pt
+\font\sevit = psmtimi at 7pt
+%
+% Times-Roman at 8pt
+%
+\font\egtrm = psmtimr at 8pt
+\font\egtbf = psmtimb at 8pt
+\font\egtit = psmtimi at 8pt
+%
+% Times-Roman at 9pt
+%
+\font\ninrm = psmtimr at 9pt
+\font\ninbf = psmtimb at 9pt
+\font\ninit = psmtimi at 9pt
+\font\nintt = psmcou at 9pt % typewriter mapped on Courier
+ \hyphenchar\nintt = -1 % suppress hyphenation
+%
+% Times-Roman at 10pt
+%
+\font\tenrm = psmtimr at 10pt
+\font\tenbf = psmtimb at 10pt
+\font\tenit = psmtimi at 10pt
+\font\tensl = psmhlvo at 10pt % mapped on Helvetica-Oblique
+\font\tensf = psmhlv at 10pt % mapped on Helvetica
+\font\tentt = psmcou at 10pt % typewriter mapped on Courier
+ \hyphenchar\tentt = -1 % suppress hyphenation
+%
+% Times-Roman at 11pt
+%
+\font\elvrm = psmtimr at 11pt
+\font\elvbf = psmtimb at 11pt
+\font\elvit = psmtimi at 11pt
+\font\elvsl = psmhlvo at 11pt % mapped on Helvetica-Oblique
+\font\elvsf = psmhlv at 11pt % mapped on Helvetica
+\font\elvtt = psmcou at 11pt % typewriter mapped on Courier
+ \hyphenchar\elvtt = -1 % suppress hyphenation
+%
+% Times-Roman at 12pt
+%
+\font\twlrm = psmtimr at 12pt
+\font\twlbf = psmtimb at 12pt
+\font\twlit = psmtimi at 12pt
+\font\twlsl = psmhlvo at 12pt % mapped on Helvetica-Oblique
+\font\twlsf = psmhlv at 12pt % mapped on Helvetica
+\font\twltt = psmcou at 12pt % typewriter mapped on Courier
+ \hyphenchar\twltt = -1 % suppress hyphenation
+%
+% Times-Roman at 14pt
+%
+\font\frtnrm = psmtimr at 14pt
+\font\frtnbf = psmtimb at 14pt
+\font\frtnit = psmtimi at 14pt
+%
+% Times-Roman at 17pt
+%
+\font\svtnrm = psmtimr at 17pt
+\font\svtnbf = psmtimb at 17pt
+\font\svtnit = psmtimi at 17pt
+%
+% Times-Roman at 20pt
+%
+\font\twtyrm = psmtimr at 20pt
+\font\twtybf = psmtimb at 20pt
+\font\twtyit = psmtimi at 20pt
+%
+% Times-Roman at 25pt
+%
+\font\twfvrm = psmtimr at 25pt
+\font\twfvbf = psmtimb at 25pt
+\font\twfvit = psmtimi at 25pt
+%
+% visible fourteen point fonts
+\font\fourteenrm = psmtimr at 14pt
+\font\fourteenit = psmtimi at 14pt
+\font\fourteenbf = psmtimb at 14pt
+\font\fourteentt = psmcou at 14pt
+ \hyphenchar\fourteentt = -1 % suppress hyphenation in \tt font
+%
+% visible seventeen point fonts
+\font\seventeenrm = psmtimr at 17pt
+\font\seventeenit = psmtimi at 17pt
+\font\seventeenbf = psmtimb at 17pt
+\font\seventeentt = psmcou at 17pt
+ \hyphenchar\seventeentt = -1 % suppress hyphenation in \tt font
+%
+% visible twenty point fonts
+\font\twentyrm = psmtimr at 20pt
+\font\twentyit = psmtimi at 20pt
+\font\twentybf = psmtimb at 20pt
+\font\twentytt = psmcou at 20pt
+ \hyphenchar\twentytt = -1 % suppress hyphenation in \tt font
+%
+% visible twentyfour point fonts -- \magstep 6
+\font\twentyfourrm = psmtimr at 24pt
+\font\twentyfourit = psmtimi at 24pt
+\font\twentyfourbf = psmtimb at 24pt
+\font\twentyfourtt = psmcou at 24pt
+ \hyphenchar\twentyfourtt = -1 % suppress hyphenation in \tt font
+%
+% visible twentynine point fonts -- \magstep 7
+\font\twentyninerm = psmtimr at 29pt
+\font\twentynineit = psmtimi at 29pt
+\font\twentyninebf = psmtimb at 29pt
+\font\twentyninett = psmcou at 29pt
+ \hyphenchar\twentyninett = -1 % suppress hyphenation in \tt font
+%
+% visible thirtyfour point fonts -- \magstep 8
+% \font\thirtyfourrm = psmtimr at 34pt
+% \font\thirtyfourit = psmtimi at 34pt
+% \font\thirtyfourbf = psmtimb at 34pt
+% \font\thirtyfourtt = psmcou at 34pt
+% \hyphenchar\thirtyfourtt = -1 % suppress hyphenation in \tt font
+%
+% fortyone point fonts
+% \font\fortyonerm = psmtimr at 41pt
+
diff --git a/biblio/bibtex/utils/bib2dvi/bib2dvi1.awk b/biblio/bibtex/utils/bib2dvi/bib2dvi1.awk
new file mode 100644
index 0000000000..0088576e06
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/bib2dvi1.awk
@@ -0,0 +1,60 @@
+{
+ acco1="{";\
+ acco2="}";\
+ nocite="\\nocite"
+ b = substr($1,1,1);\
+ if (b == "@")
+ { c = substr($1,2,8);\
+ if ((c == "article{") || (c == "ARTICLE{"))
+ { d = substr($1,10,length($1)-10);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,14);\
+ if ((c == "inproceedings{") || (c == "INPROCEEDINGS{"))
+ { d = substr($1,16,length($1)-16);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,5);\
+ if ((c == "book{") || (c == "BOOK{"))
+ { d = substr($1,7,length($1)-7);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,14);\
+ if ((c == "mastersthesis{") || (c == "MASTERSTHESIS{"))
+ { d = substr($1,16,length($1)-16);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,10);\
+ if ((c == "phdthesis{") || (c == "PHDTHESIS{"))
+ { d = substr($1,12,length($1)-12);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,12);\
+ if ((c == "unpublished{") || (c == "UNPUBLISHED{"))
+ { d = substr($1,14,length($1)-14);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,11);\
+ if ((c == "conference{") || (c == "CONFERENCE{"))
+ { d = substr($1,13,length($1)-13);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,13);\
+ if ((c == "incollection{") || (c == "INCOLLECTION{"))
+ { d = substr($1,15,length($1)-15);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,11);\
+ if ((c == "techreport{") || (c == "TECHREPORT{"))
+ { d = substr($1,13,length($1)-13);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,7);\
+ if ((c == "manual{") || (c == "MANUAL{"))
+ { d = substr($1,9,length($1)-9);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,8);\
+ if ((c == "booklet{") || (c == "BOOKLET{"))
+ { d = substr($1,10,length($1)-10);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,5);\
+ if ((c == "misc{") || (c == "MISC{"))
+ { d = substr($1,7,length($1)-7);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ c = substr($1,2,12);\
+ if ((c == "proceedings{") || (c == "PROCEEDINGS{"))
+ { d = substr($1,14,length($1)-14);\
+ printf "%s%s%s%s\n",nocite,acco1,d,acco2 };\
+ };\
+}
diff --git a/biblio/bibtex/utils/bib2dvi/bib2dvi2.awk b/biblio/bibtex/utils/bib2dvi/bib2dvi2.awk
new file mode 100644
index 0000000000..768b3b57e0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/bib2dvi2.awk
@@ -0,0 +1,10 @@
+{
+ FS = ","
+ name = $1
+ auth="\author"
+ maket="\maketitle"
+ acco1="{"
+ acco2="}"
+ printf "\n%s%s%s%s\n\n",auth,acco1,name,acco2
+ printf "%s\n\n",maket
+}
diff --git a/biblio/bibtex/utils/bib2dvi/dutch.sty b/biblio/bibtex/utils/bib2dvi/dutch.sty
new file mode 100644
index 0000000000..4ba9ac75d7
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/dutch.sty
@@ -0,0 +1,14 @@
+\def\thebibliography#1{\chapter*{Literatuur\@mkboth
+ {LITERATUUR}{LITERATUUR}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\renewcommand{\today}{\number\day \space \ifcase\month\or januari\or
+ februari\or maart\or
+ april\or mei\or juni\or juli\or augustus\or september\or oktober\or
+ november\or december\fi \space \number\year}
+
diff --git a/biblio/bibtex/utils/bib2dvi/english.sty b/biblio/bibtex/utils/bib2dvi/english.sty
new file mode 100644
index 0000000000..8930243dcb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2dvi/english.sty
@@ -0,0 +1,8 @@
+\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
diff --git a/biblio/bibtex/utils/bib2ml/AUTHORS b/biblio/bibtex/utils/bib2ml/AUTHORS
new file mode 100644
index 0000000000..075f3145ac
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/AUTHORS
@@ -0,0 +1,14 @@
+Authors:
+Stéphane GALLAND <galland@arakhne.org>
+
+Contributors:
+Aurel GABRIS <gabrisa@optics.szfki.kfki.hu>
+Gasper JAKLIC <gasper.jaklic@fmf.uni-lj.si>
+Tobias LOEW <loew@mathematik.tu-darmstadt.de>
+Joao LOURENCO <joao.lourenco@di.fct.unl.pt>
+Dimitris MICHAIL <michail@mpi-sb.mpg.de>
+Luca PAOLINI <paolini@di.unito.it>
+Norbert PREINING <preining@logic.at>
+Cristian RIGAMONTI <cri@linux.it>
+Sebastian RODRIGUEZ <sebastian.rodriguez@utbm.fr>
+Martin P.J. ZINSER <zinser@zinser.no-ip.info>
diff --git a/biblio/bibtex/utils/bib2ml/COPYING b/biblio/bibtex/utils/bib2ml/COPYING
new file mode 100644
index 0000000000..1942c4334c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/biblio/bibtex/utils/bib2ml/Changelog b/biblio/bibtex/utils/bib2ml/Changelog
new file mode 100644
index 0000000000..2943616466
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/Changelog
@@ -0,0 +1,389 @@
+2011-07-31 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.7
+ * bib2sql: Bug fix: the bibtex_entrytype table is not filled with the types
+ of the entries due to an error in a boolean condition.
+ * bib2sql: Notify with a warning when the same author seems to appear many times
+ for the same entry.
+ * bib2sql: add command line parameter 'sql-engine' which permits to specify
+ the SQL engine for which the SQL script should be generated.
+ * bib2sql: create the MySQL support.
+ * bib2sql: create the PostgreSQL support.
+
+2011-07-27 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.6
+ * bib2sql: the word "order" could not be used as variable name because it is a
+ reserved word in SQL syntax. Rename it as "order_id".
+ * bib2sql: Ensure that the numerical identifiers of the authors and editors are unique.
+
+2009-03-21 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.5
+ * Extend the syntax supported for the bibtex keys, but output a warning.
+ * Add warning message when a language file was not found (verbose mode 2 or higher).
+
+2009-03-15 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.4
+ * Add function which remove the accents from an HTML string. This function is used to have consistent sorting outputs.
+ * Changes the labels of the trees' root nodes.
+ * The C and c acute characters are now correctly substitued.
+ * Bug fix: the caron TeX characters are not translated into well-formated HTML characters. Fixed
+ * Bug fix: in Simple.pm, some hash references have not a generic syntax which cause invalid invalid hash refs exceptions.
+ * Change the official website address from "www.arakhne.org/bib2html" to "www.arakhne.org/bib2ml".
+
+2008-08-01 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.3
+ * Add the support for the TeX command \url.
+ * Major bug fix: the locale support of the Theme were not loaded. Fixed.
+
+2008-05-28 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.2
+ * Bug fix: several thrid-party tools declare BibTeX fields
+ with a name composed of the special characters "-_0-9:.".
+ The BibTeX parser now supports this kind of field name.
+
+2007-07-25 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.1
+ * Rename the tool Bib2HTML into Bib2ML which is more
+ closer to the different available translations.
+ And it will prepare the submission to CTAN.
+
+2007-04-16 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.1
+ * Feature:
+ - When the 'pdf' field contains a local file reference, it
+ will be replaced by the 'localfile' field.
+
+2007-03-21 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 6.0
+ * Feature:
+ - Add the BibTeX field "doi".
+ - Add the support of JabRef's groups.
+
+2006-10-06 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 5.1
+ * Feature:
+ - Add new LaTeX commands: \mathbb, \{, \}
+ * Bug fixes:
+ - in the XML generator, the quotation, the ampersand
+ and the less-then and greater-than characters are
+ not properly processed.
+ - The sorting functions was re-implemented to
+ tackle problems one accentuated characters.
+ - The 'inbook' entries will be proceeded as the
+ "book" entries.
+
+2006-08-31 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 5.0
+ * Feature:
+ - Add the SQL generator.
+ - Add the generator parameter 'xml-encoding'
+ - Add the command line options '--protect', '--cvs', '--svn'
+ * Bug fixes:
+ - Rewrite some error messages to be more understandable.
+
+2006-05-31 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 4.4
+ * Feature:
+ - Add the support for the TeX commands \string, \edef, \xdef
+ - Add the generator parameter 'html-encoding'
+
+2006-05-29 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 4.3
+ * Feature:
+ - Tobia adds the support for some roman characters.
+
+2006-05-03 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 4.2
+ * Feature:
+ - Add the support of the BibTeX field 'adsurl' which permits
+ to link to the standard Astrophysics Citation Reference Database.
+
+2006-04-12 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 4.1
+ * Bug:
+ - When the BibTeX parser find multi-definition of BibTeX strings,
+ it dies on an undefined subroutine error.
+
+2006-04-10 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 4.0
+ * Feature:
+ - Do not display in verbatim mode the BibTeX fields with
+ a name starting with "opt".
+ - Luca patches the TeX translator for supporting more letters
+ with the caron accent.
+ - From a Luca's request, the generator parameter 'hideindex'
+ is introduced to allow hiding of the indexes.
+ - Aurel introduces the generator parameters 'max-titlelength-overview'
+ and 'show-journalparams-overview'.
+ - Stephane introduces the generator parameter 'doc-repository'.
+ - Stephane introduces the command 'bib2xml' as a specialization
+ of bib2html (with the option -g XML).
+ * Bug:
+ - The translator does not produce the right default value for
+ the TeX command \v.
+ - The HTML function which permits to extract author initials
+ was fixed to support in entry name's initials.
+ - The list of generators was ot properly displayed if
+ the absolute path to bib2html contains a directory name
+ with a space character.
+ - The list of support languages was ot properly displayed if
+ the absolute path to bib2html contains a directory name
+ with a space character.
+ - The editors was not displayed when the author's list was empty.
+ - The BibTeX references [???] now support HTML characters.
+
+2005-02-14 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 3.3
+ * Feature:
+ - Add some norvegian characters.
+ * Bug:
+ - The parameter of @preamble is now entirely
+ parsed as a string. You don't need any more
+ to enclose the TeX command by braces.
+ - the parser for the author's names know support
+ HTML entities inside the firstnames.
+
+2005-01-25 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 3.2
+ * Feature:
+ - Add the field 'pdf' which must contains the name
+ of a PDF file (an URL or a local filename).
+ - Add the parameter 'backslash' for the Extended
+ generator.
+ * Bug:
+ - In the parser, The token 'string' could be preceeded
+ by a set of space from the start of the line.
+ - Remove the required display of the field 'date'. In
+ BibTeX, the fields 'year' and 'month' replace it.
+ - Be sure that some characters will not be used
+ inside the filnames (e.g. ':').
+ - Major bug fix inside the parser. Multiple specification
+ of BibTeX filename on the command line is now truly
+ supported.
+
+2004-12-06 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 3.1
+ * Features:
+ - Portuguese is included into the generators by Joao.
+ * Bug:
+ - The name of the language passed with '--lang' is now
+ case-insensitive.
+
+2004-12-03 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 3.0
+ * Features:
+ - More TeX commands are added by Dimitris:
+ \epsilon, \Epsilon, \mathbf, \mathit, \mathrm,
+ \mathsf, \mathtt, \mathnormal, \sqrt
+ - Create a XML generator which respect the DTD from
+ BibTeXML.
+ - Add an XML output inside the HTML generator.
+ * Bug:
+ - The character '+' is not allowed inside the entry keys.
+
+2004-11-26 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 2.0
+ * Features:
+ - Spanish is included into the generators by Sebastian.
+ - Links to the author's list of publication was
+ added for each other inside the entry's field
+ list.
+ - The option '--checknames' permits to check if
+ some author's names are duplicated or contain
+ mistakes.
+ * Bug:
+ - the year does not appears inside the table of
+ the fields.
+ - the language support for theme only applies
+ the English definitions, not the other
+ languages (French, Spanish).
+
+2004-11-12 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.5
+ * Bug:
+ - sometimes the carriage return characters was
+ not supported by the BibTeX parser.
+ - Generation of the BibTeX short labels (eg. [ABC04])
+ produces too long labels in case a lot of
+ names was proposed to the function.
+ - The names of the authors are not well upper-cased
+ for each first letter of the words.
+ - if an error occurs during the copy of a pdf file,
+ bib2html will not failed but only warm the user.
+
+2004-09-22 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.4
+ * Bug: do not copy the electronical file with
+ the generator parameter 'target-url' was specified
+ for the Extended generator.
+
+2004-08-23 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.3
+ * Features:
+ - the generator parameter 'type-matching' has its
+ value's syntax extended.
+ - Add the new BibTeX entry type 'proceedings' and
+ 'unpublished'.
+ * Bugs:
+ - The values of the fields 'localfile' and 'url'
+ were not properly extracted.
+ - Fix the indentation of the generated BibTeX section.
+ - Updates some language's strings
+ - Assumes that the characters '-' and '_' are aliases
+ for the character '-' inside the generator
+ parameter's names.
+ - Fix the output to be validable by the W3C validators
+ (HTML 4.01 and CSS).
+
+2004-08-17 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.2
+ * Bugs:
+ - rhe special section @comment{} was not properly
+ parsed. Fix it with an update of the regular
+ expression which matches "@COMMENT".
+ - Allow the state "line_comment" to finish the
+ BibTeX file's parsing.
+
+2004-03-27 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.1
+ * Features:
+ - enhances the generator parameters 'author-regexp',
+ etc: add many new types instead of one.
+ - add the support of the BibTeX field 'crossref':
+ it permits to implement a kind of inheritance
+ between two entries
+ - add the generation of a BibTeX code verbatim
+ (and the command line parameter which permits
+ to set it on/off)
+ * Bugs:
+ - in indexes, regroup the reference with the same label
+ - put a better header title inside the HTML files of
+ the entries
+ - w3c norm fix: generates the <body> tags
+ - add a white background color for the theme Simple
+ - in ExtendedGen.pm, DomainGen.pm: fix a syntactical
+ error and update to be compliant with fixes that
+ occurs inside HTMLGen.pm
+ - in HTMLGen.pm, Norbert fixes some bug due to the
+ bad inclusion of their patchs for the release 1.0
+ - in Parser.pm: Norbert fixes a infinite loop recusion
+ bug. This bug is due to the definition of a constant
+ with same name and value (in a lowercase comparison).
+ For example: @STRING{springer=Springer} generates a
+ infinite loop.
+ - some code cleaning
+
+2004-03-17 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 1.0
+ * Features:
+ - add generator parameters for the HTMLGen generator:
+ author-regexp, max-names-overview, max-names-list,
+ newtype, type-matching (added by Norbert)
+ * Bugs:
+ - an exception was generated when an entry has no
+ author nor editor.
+ - in bibtex parsing: now support syntax as foo #
+ " and " # bla
+ - applies patchs from Norbert in TeX.pm, Misc.pm
+ and HTMLGen.pm
+
+2004-02-02 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.11
+ * Features:
+ - add an index of authors and of author's publications
+ inside the two left frames
+ - add the class AbstractGenerator.pm
+ - add ExtendedGen.pm which permits to generate HTML
+ page with:
+ a) isbn, issn, and readers
+ b) abstract and keywords
+ c) the support for downloading an electronic
+ document ('localfile')
+ - add the support of LaTeX environments (\begin,\end)
+ - add the generator Domain which permits to support
+ domain for documents (domain, nddomain, rddomain,
+ domains)
+ * Bugs:
+ - in HTMLGen.pm, fixes not initialized variable uses
+ - changes the behavior of some command line options
+ - in Parser.pm, support recursive merging operator for strings
+
+2003-12-11 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.10
+ * Bugs:
+ - in BibScanner.pm, did not recognized correctly the
+ @STRING commands
+ - in BibScanner.pm, the concatened strings was too
+ early merged (before any replacement by the
+ @STRING's values)
+ - in BibScanner.pm, the parsed field labels must
+ be automatically lower cased. Ut permits to support
+ case-independent label for BibTeX fields
+ - in Scanner.pm, ungetpattern() does not its job well.
+
+2003-09-19 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.9
+ * Features:
+ - Adds the generator 'Extended' which support the
+ bibtex tags:
+ * 'url' : URL to informational web page
+ * 'isbn'
+ * 'issn'
+ * 'localfile' : relative path to a file to download
+ * 'abstract'
+ * 'keywords'
+ * 'readers' : informational tag that indicates who
+ read this entry (according to the bibtex name syntax)
+ - Adds the support of "et al." inside the bibtex names.
+ - Adds some command line arguments
+ * Bugs:
+ - in the HTML filename translations.
+ - get the editor field when the author one is empty.
+ - ignore TeX parsing for the fields 'localfile' and 'url'
+ - support more formats for the bibtex author's names:
+ [von] Last, jr, First [and ...]
+ First [von] Last, jr [and ...]
+ [von] Last, First [jr] [and ...]
+ First [von] Last [jr] [and ...]
+ name, [name, ...] [and name]
+
+2003-08-01 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.8
+ * Feature: adds the support of the LaTeX commands
+ \cite[]{}
+ * Bugs:
+ - recognizes the character '-' inside the bibkeys
+ - some other minor bug fixes
+
+2003-07-09 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.7
+ * Features:
+ - add the support of mathematical modes (not the support
+ of all TeX commands inside the mathematical mode)
+ - partial support of Math-ML
+ * Bugs:
+ - add support of some TeX commands( \i, \~, ...)
+ - ignore text between bibtex entries
+ - better recognition for author names.
+ - warm the user when the "year" is not a number.
+ - suppress redondant error messages.
+ - bug in the verbosing level calculation
+ - some syntaxic fixes
+
+2003-06-26 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.6
+ * Features:
+ - adds the multi-language support
+ - adds theme for the HTML generators
+ * Bugs:
+ - some uses of the function sort inside
+ a return are improper. Fixed to be
+ sure that the return statement takes
+ only one value.
+ - adds the function notempty() to permit to
+ have strings which contain only "0"
+
+2003-03-04 Stéphane GALLAND <galland@arakhne.org>
+ * Release: 0.5
+ This is the first public release on the version
+ entirely based on perl.
+
diff --git a/biblio/bibtex/utils/bib2ml/INSTALL b/biblio/bibtex/utils/bib2ml/INSTALL
new file mode 100644
index 0000000000..35b08e392b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/INSTALL
@@ -0,0 +1,2 @@
+File not used.
+See ./doc/index.html instead.
diff --git a/biblio/bibtex/utils/bib2ml/NEWS b/biblio/bibtex/utils/bib2ml/NEWS
new file mode 100644
index 0000000000..2d8c65b2b6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/NEWS
@@ -0,0 +1,2 @@
+File not used.
+See Changelog instead.
diff --git a/biblio/bibtex/utils/bib2ml/README b/biblio/bibtex/utils/bib2ml/README
new file mode 100644
index 0000000000..bfd7c3dee3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/README
@@ -0,0 +1,13 @@
+bib2ml (ex bib2html) from Arakhne.org is a Perl script which permits to create a set of HTML pages, an XML file or a SQL script from a BibTeX file.
+It proposes a convenient look and a lot of features (PDF downloading, scientifical domain tree...).
+
+Official website: http://www.arakhne.org/bib2html/
+
+DISLAIMER FROM AUTHORS:
+I’ve come across mention of other bib2html programs. This program is in no way related to any of them. Other BibTeX-to-HTML tools (non-exhautive list) :
+ * bib2html from Kiri Wagstaff
+ * bib2html from David Kotz (also on CTAN)
+ * bib2html from Eric Marchand
+ * bib2html from Mark Moll and Patrick Riley
+
+See ./doc/index.html for more details.
diff --git a/biblio/bibtex/utils/bib2ml/TODO b/biblio/bibtex/utils/bib2ml/TODO
new file mode 100644
index 0000000000..78b2aa0a6a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/TODO
@@ -0,0 +1,3 @@
+- work on the parsing/generation performances
+- implements croossrefs inside the BibTeX file
+- add translations for console messages
diff --git a/biblio/bibtex/utils/bib2ml/VERSION b/biblio/bibtex/utils/bib2ml/VERSION
new file mode 100644
index 0000000000..a640cad24a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/VERSION
@@ -0,0 +1 @@
+bib2ml 6.7
diff --git a/biblio/bibtex/utils/bib2ml/deb-specific/checkinstall.pl b/biblio/bibtex/utils/bib2ml/deb-specific/checkinstall.pl
new file mode 100755
index 0000000000..a35ce5957b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/deb-specific/checkinstall.pl
@@ -0,0 +1,81 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use File::Spec;
+
+sub readInstallFile($) {
+ my $installFile = shift;
+ my @files = ();
+ local *FILE;
+ open(*FILE, "<$installFile") or die("$installFile: $!\n");
+ while (my $line = <FILE>) {
+ if ($line =~ /^\s*([^\s]+)/i) {
+ my $filename = "$1";
+ push @files, $filename;
+ }
+ }
+ close(*FILE);
+ return @files
+}
+
+sub readDir($$) {
+ my $dir = shift;
+ my $pattern = shift;
+ my @subfiles = ();
+ local *DIR;
+ opendir(*DIR,"$dir") or die("$dir: $!\n");
+ while (my $file = readdir(*DIR)) {
+ if ($file ne File::Spec->curdir() && $file ne File::Spec->updir()) {
+ if ($file =~ /^$pattern$/i) {
+ push @subfiles, File::Spec->catfile($dir,$file);
+ }
+ }
+ }
+ closedir(*DIR);
+ return @subfiles;
+}
+
+my @installFiles = readDir("debian", ".*\.install");
+my @toInstall = ();
+
+foreach my $installFile (@installFiles) {
+
+ my @files = readInstallFile($installFile);
+ push @toInstall, @files;
+
+}
+
+my @dirs = ( "src" );
+my $erroroccured = 0;
+
+while (@dirs) {
+ my $dir = pop @dirs;
+ local *DIR;
+ opendir(*DIR, "$dir") or die("$dir: $!\n");
+ while (my $file = readdir(*DIR)) {
+ if ($file ne File::Spec->curdir() && $file ne File::Spec->updir()) {
+ my $fName = File::Spec->catfile($dir,$file);
+ if (-d $fName) {
+ push @dirs, $fName;
+ }
+ else {
+ my $found = 0;
+ foreach my $if (@toInstall) {
+ if ($if eq $fName || $fName =~ /^\Q$if\E/) {
+ $found = 1;
+ last;
+ }
+ }
+ if (!$found) {
+ $erroroccured = 1;
+ print STDERR "FILE $fName IS NOT INSTALLABLE\n";
+ }
+ }
+ }
+ }
+ closedir(*DIR);
+}
+
+exit($erroroccured ? 1 : 0);
+
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2html.docs b/biblio/bibtex/utils/bib2ml/debian/bib2html.docs
new file mode 100644
index 0000000000..ad1ca2d2e9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2html.docs
@@ -0,0 +1,2 @@
+man/bib2html_en.pod
+man/bib2html_fr.pod
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2html.install b/biblio/bibtex/utils/bib2ml/debian/bib2html.install
new file mode 100644
index 0000000000..b0e182c185
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2html.install
@@ -0,0 +1,28 @@
+src/Bib2HTML/Generator/DomainGen.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/drive.png usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/ExtendedGen.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/HTMLGen.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/loupe.gif usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/Theme.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/valid-css.gif usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/valid-html401.gif usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/Lang/English.HTMLGen usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/French.HTMLGen usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Spanish.HTMLGen usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Italian.HTMLGen usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Portuguese.HTMLGen usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Theme/Dyna.pm usr/lib/bib2ml/Bib2HTML/Generator/Theme
+src/Bib2HTML/Generator/Theme/Simple.pm usr/lib/bib2ml/Bib2HTML/Generator/Theme
+src/Bib2HTML/Generator/Theme/Dyna/child.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/emptychild.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/lastchild.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/minus.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/plus.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/samechild.gif usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Theme/Dyna/stylesheet.css usr/lib/bib2ml/Bib2HTML/Generator/Theme/Dyna
+src/Bib2HTML/Generator/Lang/English.Theme.Dyna usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/French.Theme.Dyna usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Italian.Theme.Dyna usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Portuguese.Theme.Dyna usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Spanish.Theme.Dyna usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/bib2html.pl usr/lib/bib2ml
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2html.manpages b/biblio/bibtex/utils/bib2ml/debian/bib2html.manpages
new file mode 100644
index 0000000000..01324bbede
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2html.manpages
@@ -0,0 +1,2 @@
+man/bib2html.1.gz
+man/bib2html.fr.1.gz
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2html.postinst b/biblio/bibtex/utils/bib2ml/debian/bib2html.postinst
new file mode 100755
index 0000000000..53f5f5ea05
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2html.postinst
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+if [ "$1" = configure ]; then
+
+ echo -n "Installing bib2html... "
+
+ update-alternatives --install /usr/bin/bib2html bib2html /usr/lib/bib2ml/bib2html.pl 500 --slave /usr/bin/bibtex2html bibtex2html /usr/lib/bib2ml/bib2html.pl
+ update-alternatives --auto bib2html
+
+ echo "done."
+
+fi
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2html.prerm b/biblio/bibtex/utils/bib2ml/debian/bib2html.prerm
new file mode 100755
index 0000000000..73da216f13
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2html.prerm
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+ remove | deconfigure)
+
+ echo -n "Unstalling bib2html... "
+
+ update-alternatives --remove bib2html /usr/lib/bib2ml/bib2html.pl
+
+ echo "done."
+ ;;
+esac
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.docs b/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.docs
new file mode 100644
index 0000000000..1090c5fd5b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.docs
@@ -0,0 +1,2 @@
+doc/*
+src/bib2html.php
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.install b/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.install
new file mode 100644
index 0000000000..de2152aa2f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2ml-common.install
@@ -0,0 +1,28 @@
+src/Bib2HTML/Checker/Names.pm usr/lib/bib2ml/Bib2HTML/Checker
+src/Bib2HTML/General/Encode.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/General/Error.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/General/HTML.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/General/Misc.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/General/Title.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/General/Verbose.pm usr/lib/bib2ml/Bib2HTML/General
+src/Bib2HTML/Parser/BibScanner.pm usr/lib/bib2ml/Bib2HTML/Parser
+src/Bib2HTML/Parser/Parser.pm usr/lib/bib2ml/Bib2HTML/Parser
+src/Bib2HTML/Parser/Scanner.pm usr/lib/bib2ml/Bib2HTML/Parser
+src/Bib2HTML/Parser/StateMachine.pm usr/lib/bib2ml/Bib2HTML/Parser
+src/Bib2HTML/Translator/BibTeXEntry.pm usr/lib/bib2ml/Bib2HTML/Translator
+src/Bib2HTML/Translator/BibTeXName.pm usr/lib/bib2ml/Bib2HTML/Translator
+src/Bib2HTML/Translator/TeX.pm usr/lib/bib2ml/Bib2HTML/Translator
+src/Bib2HTML/Main.pm usr/lib/bib2ml/Bib2HTML
+src/Bib2HTML/Release.pm usr/lib/bib2ml/Bib2HTML
+src/Bib2HTML/Generator/AbstractGenerator.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/FileWriter.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/Lang.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/LangManager.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/StdOutWriter.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/Writer.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/Lang/English usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/French usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Spanish usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Italian usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/Generator/Lang/Portuguese usr/lib/bib2ml/Bib2HTML/Generator/Lang
+src/Bib2HTML/JabRef/JabRef.pm usr/lib/bib2ml/Bib2HTML/JabRef
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2sql.docs b/biblio/bibtex/utils/bib2ml/debian/bib2sql.docs
new file mode 100644
index 0000000000..73cb6bbd8c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2sql.docs
@@ -0,0 +1,2 @@
+man/bib2sql_en.pod
+man/bib2sql_fr.pod
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2sql.install b/biblio/bibtex/utils/bib2ml/debian/bib2sql.install
new file mode 100644
index 0000000000..46523093af
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2sql.install
@@ -0,0 +1,2 @@
+src/Bib2HTML/Generator/SQLGen.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/bib2sql.pl usr/lib/bib2ml
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2sql.manpages b/biblio/bibtex/utils/bib2ml/debian/bib2sql.manpages
new file mode 100644
index 0000000000..cc79e41f6f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2sql.manpages
@@ -0,0 +1,2 @@
+man/bib2sql.1.gz
+man/bib2sql.fr.1.gz
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2sql.postinst b/biblio/bibtex/utils/bib2ml/debian/bib2sql.postinst
new file mode 100755
index 0000000000..f4b1b490bf
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2sql.postinst
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+if [ "$1" = configure ]; then
+
+ echo -n "Installing bib2sql... "
+
+ update-alternatives --install /usr/bin/bib2sql bib2sql /usr/lib/bib2ml/bib2sql.pl 500 --slave /usr/bin/bibtex2sql bibtex2sql /usr/lib/bib2ml/bib2sql.pl
+ update-alternatives --auto bib2sql
+
+ echo "done."
+
+fi
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2sql.prerm b/biblio/bibtex/utils/bib2ml/debian/bib2sql.prerm
new file mode 100755
index 0000000000..fd9c8a0682
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2sql.prerm
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+ remove | deconfigure)
+
+ echo -n "Unstalling bib2sql... "
+
+ update-alternatives --remove bib2sql /usr/lib/bib2ml/bib2sql.pl
+
+ echo "done."
+ ;;
+esac
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2xml.docs b/biblio/bibtex/utils/bib2ml/debian/bib2xml.docs
new file mode 100644
index 0000000000..c88903004b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2xml.docs
@@ -0,0 +1,2 @@
+man/bib2xml_en.pod
+man/bib2xml_fr.pod
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2xml.install b/biblio/bibtex/utils/bib2ml/debian/bib2xml.install
new file mode 100644
index 0000000000..3f5287483c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2xml.install
@@ -0,0 +1,4 @@
+src/Bib2HTML/Generator/XMLGen.pm usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/bibteXML.dtd usr/lib/bib2ml/Bib2HTML/Generator
+src/Bib2HTML/Generator/bibteXML-ext.dtd usr/lib/bib2ml/Bib2HTML/Generator
+src/bib2xml.pl usr/lib/bib2ml
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2xml.manpages b/biblio/bibtex/utils/bib2ml/debian/bib2xml.manpages
new file mode 100644
index 0000000000..d4e054cd04
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2xml.manpages
@@ -0,0 +1,2 @@
+man/bib2xml.1.gz
+man/bib2xml.fr.1.gz
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2xml.postinst b/biblio/bibtex/utils/bib2ml/debian/bib2xml.postinst
new file mode 100755
index 0000000000..7d176b1749
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2xml.postinst
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+if [ "$1" = configure ]; then
+
+ echo -n "Installing bib2xml... "
+
+ update-alternatives --install /usr/bin/bib2xml bib2xml /usr/lib/bib2ml/bib2xml.pl 500 --slave /usr/bin/bibtex2xml bibtex2xml /usr/lib/bib2ml/bib2xml.pl
+ update-alternatives --auto bib2xml
+
+ echo "done."
+
+fi
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/bib2xml.prerm b/biblio/bibtex/utils/bib2ml/debian/bib2xml.prerm
new file mode 100755
index 0000000000..abd2a3306d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/bib2xml.prerm
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+ remove | deconfigure)
+
+ echo -n "Unstalling bib2xml... "
+
+ update-alternatives --remove bib2xml /usr/lib/bib2ml/bib2xml.pl
+
+ echo "done."
+ ;;
+esac
+
+exit 0
diff --git a/biblio/bibtex/utils/bib2ml/debian/changelog b/biblio/bibtex/utils/bib2ml/debian/changelog
new file mode 100644
index 0000000000..a3a254b42c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/changelog
@@ -0,0 +1,475 @@
+bib2ml (6.7-0arakhne0) natty; urgency=low
+
+ * bib2sql: Bug fix: the bibtex_entrytype table is not filled with the types
+ of the entries due to an error in a boolean condition.
+ * bib2sql: Notify with a warning when the same author seems to appear many times
+ for the same entry.
+ * bib2sql: add command line parameter 'sql-engine' which permits to specify
+ the SQL engine for which the SQL script should be generated.
+ * bib2sql: create the MySQL support.
+ * bib2sql: create the PostgreSQL support.
+
+ -- Stephane GALLAND <galland@arakhne.org> Sun, 31 Jul 2011 18:16:02 +0200
+
+bib2ml (6.6-0arakhne0) natty; urgency=low
+
+ * intrepid -> natty
+ * bib2sql: the word "order" could not be used as variable name because it is a
+ reserved word in SQL syntax. Rename it as "order_id".
+ * bib2sql: Ensure that the numerical identifiers of the authors and editors are unique.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 27 Jul 2011 08:15:25 +0200
+
+bib2ml (6.5-0arakhne2) intrepid; urgency=low
+
+ * Put missed files in the Debian packages (language files for Dyna theme).
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 25 Mar 2009 10:39:05 +0100
+
+bib2ml (6.5-0arakhne1) intrepid; urgency=low
+
+ * Do not recommend any more the teTeX packages. Recommend TeXLive in place.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 23 Mar 2009 00:22:46 +0100
+
+bib2ml (6.5-0arakhne0) intrepid; urgency=low
+
+ * Extend the syntax supported for the bibtex keys, but output a warning.
+ * Add warning message when a language file was not found (verbose mode 2 or higher).
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 23 Mar 2009 00:08:56 +0100
+
+bib2ml (6.4-0arakhne0) intrepid; urgency=low
+
+ * Add function which remove the accents from an HTML string. This function is used to have consistent sorting outputs.
+ * Changes the labels of the trees' root nodes.
+ * The C and c acute characters are now correctly substitued.
+ * Bug fixes:
+ - the caron TeX characters are not translated into well-formated HTML characters;
+ - in Simple.pm, some hash references have not a generic syntax which cause invalid invalid hash refs exceptions;
+ * Change the official website address from "www.arakhne.org/bib2html" to "www.arakhne.org/bib2ml".
+
+ -- Stephane GALLAND <galland@arakhne.org> Sun, 15 Mar 2009 15:24:50 +0100
+
+bib2ml (6.3-0arakhne0) unstable; urgency=low
+
+ * Add the support for the TeX command \url.
+ * Major bug fix: the locale support of the Theme were not loaded. Fixed.
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 01 Aug 2008 10:30:37 +0200
+
+bib2ml (6.2-0arakhne0) unstable; urgency=low
+
+ * Bug fix: several thrid-party tools declare BibTeX fields
+ with a name composed of the special characters "-_0-9:.".
+ The BibTeX parser now supports this kind of field name.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 28 May 2008 08:55:24 +0200
+
+bib2ml (6.1-4) unstable; urgency=low
+
+ * Use Debian alternatives instead of direct links from /usr/bin to the Perl scripts.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 25 Jul 2007 08:43:22 +0200
+
+bib2ml (6.1-3) unstable; urgency=low
+
+ * Not enough file included into the bib2ml-common package.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 25 Jul 2007 07:01:49 +0200
+
+bib2ml (6.1-2) unstable; urgency=low
+
+ * Rename the tool Bib2HTML into Bib2ML which is more
+ closer to the different available translations.
+ And it will prepare the submission to CTAN.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 25 Jul 2007 06:08:43 +0200
+
+bib2html (6.1-1) unstable; urgency=low
+
+ * Feature:
+ - When the 'pdf' field contains a local file reference, it
+ will be replaced by the 'localfile' field.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 16 Apr 2007 10:49:53 +0200
+
+bib2html (6.0-1) unstable; urgency=low
+
+ * Feature:
+ - Add the field 'doi' inside the Extended generator.
+ - Add the support of the JabRef's groups.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 21 Mar 2007 13:33:13 +0100
+
+bib2html (5.1-1) unstable; urgency=low
+
+ * Feature:
+ - Add new latex commands: \mathbb, \{, \}
+ * Bug fixes:
+ - in the XML generator, the quotation, the ampersand
+ and the less-then and greater-than characters are
+ not properly processed.
+ - The sorting functions was re-implemented to
+ tackle problems one accentuated characters.
+ - The 'inbook' entries will be proceeded as the
+ "book" entries.
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 06 Oct 2006 21:16:14 +0200
+
+bib2html (5.0-1) unstable; urgency=low
+
+ * Feature:
+ - Add the SQL generator.
+ - Add several generator's parameters in the HTML and the XML generators.
+ - Add the command line options '--protect', '--cvs', '--svn'
+ * Bug fixes:
+ - Rewrite some error messages to be more understandable.
+ * Packaging:
+ - Split the original bib2html Debian package into more dedicated packages.
+
+ -- Stephane GALLAND <galland@arakhne.org> Thu, 31 Aug 2006 15:01:24 +0200
+
+bib2html (4.3-1) unstable; urgency=low
+
+ * Feature:
+ - Tobia adds the support for some roman characters.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 29 May 2006 21:38:18 +0200
+
+bib2html (4.2-1) unstable; urgency=low
+
+ * Feature:
+ - Add the support of the BibTeX field 'adsurl' which permits
+ to link to the standard Astrophysics Citation Reference Database.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 03 May 2006 13:59:37 +0200
+
+bib2html (4.1-1) unstable; urgency=low
+
+ * Bugs:
+ - When the BibTeX parser find multi-definition of BibTeX strings,
+ it dies on an undefined subroutine error.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 12 Apr 2006 15:47:52 +0200
+
+bib2html (4.0-1) unstable; urgency=low
+
+ * Features:
+ - Do not display in verbatim mode the BibTeX fields with
+ a name starting with "opt".
+ - Luca patches the TeX translator for supporting more letters
+ with the caron accent.
+ - From a Luca's request, the generator parameter 'hideindex'
+ is introduced to allow hiding of the indexes.
+ - Aurel introduces the generator parameters 'max-titlelength-overview'
+ and 'show-journalparams-overview'.
+ - Stephane introduces the generator parameter 'doc-repository'.
+ - Stephane introduces the command 'bib2xml' as a specialization
+ of bib2html (with the option -g XML).
+ * Bugs:
+ - The translator does not produce the right default value for
+ the TeX command \v.
+ - The HTML function which permits to extract author initials
+ was fixed to support in entry name's initials.
+ - The list of generators was ot properly displayed if
+ the absolute path to bib2html contains a directory name
+ with a space character.
+ - The list of support languages was ot properly displayed if
+ the absolute path to bib2html contains a directory name
+ with a space character.
+ - The editors was not displayed when the author's list was empty.
+ - The BibTeX references [???] now support HTML characters.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 10 Apr 2006 18:28:32 +0200
+
+bib2html (3.3-1) unstable; urgency=low
+
+ * Features:
+ - Add some norvegian characters.
+ * Bugs:
+ - The parameter of @preamble is now entirely
+ parsed as a string. You don't need any more
+ to enclose the TeX command by braces.
+ - the parser for the author's names know support
+ HTML entities inside the firstnames.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 14 Feb 2005 18:28:32 +0200
+
+bib2html (3.2-1) unstable; urgency=low
+
+ * Features:
+ - Add the field 'pdf' which must contains the name
+ of a PDF file (an URL or a local filename).
+ - Add the parameter 'backslash' for the Extended
+ generator.
+ * Bugs:
+ - In the parser, The token 'string' could be preceeded
+ by a set of space from the start of the line.
+ - Remove the required display of the field 'date'. In
+ BibTeX, the fields 'year' and 'month' replace it.
+ - Be sure that some characters will not be used
+ inside the filnames (e.g. ':').
+ - Major bug fix inside the parser. Multiple specification
+ of BibTeX filename on the command line is now truly
+ supported.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 05 Jan 2005 18:28:32 +0200
+
+bib2html (3.1-1) unstable; urgency=low
+
+ * Features:
+ - Portuguese is included into the generators by Joao.
+ * Bugs:
+ - The name of the language passed with '--lang' is now
+ case-insensitive.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 06 Dec 2004 18:28:32 +0200
+
+bib2html (3.0-1) unstable; urgency=low
+
+ * Features:
+ - More TeX commands are added by Dimitris:
+ \epsilon, \Epsilon, \mathbf, \mathit, \mathrm,
+ \mathsf, \mathtt, \mathnormal, \sqrt
+ - Create a XML generator which respect the DTD from
+ BibTeXML.
+ - Add an XML output inside the HTML generator.
+ * Bugs:
+ - The character '+' is not allowed inside the entry keys.
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 03 Dec 2004 18:28:32 +0200
+
+bib2html (2.0-1) unstable; urgency=low
+
+ * Features:
+ - Spanish is included into the generators by Sebastian.
+ - Links to the author's list of publication was
+ added for each other inside the entry's field
+ list.
+ - The option '--checknames' permits to check if
+ some author's names are duplicated or contain
+ mistakes.
+ * Bugs:
+ - the year does not appears inside the table of
+ the fields.
+ - the language support for theme only applies
+ the English definitions, not the other
+ languages (French, Spanish).
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 26 Nov 2004 18:28:32 +0200
+
+bib2html (1.5-1) unstable; urgency=low
+
+ * Bugs:
+ - sometimes the carriage return characters was
+ not supported by the BibTeX parser.
+ - Generation of the BibTeX short labels (eg. [ABC04])
+ produces too long labels in case a lot of
+ names was proposed to the function.
+ - The names of the authors are not well upper-cased
+ for each first letter of the words.
+ - if an error occurs during the copy of a pdf file,
+ bib2html will not failed but only warm the user.
+
+ -- Stephane GALLAND <galland@arakhne.org> Thu, 12 Nov 2004 18:28:32 +0200
+
+bib2html (1.4-1) unstable; urgency=low
+
+ * Bugs:
+ - do not copy the electronical file with
+ the generator parameter 'target-url' was specified
+ for the Extended generator.
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 22 Sep 2004 18:28:32 +0200
+
+bib2html (1.3-1) unstable; urgency=low
+
+ * Features:
+ - the generator parameter 'type-matching' has its
+ value's syntax extended.
+ - Add the new BibTeX entry type 'proceedings' and
+ 'unpublished'.
+ * Bugs:
+ - The values of the fields 'localfile' and 'url'
+ were not properly extracted.
+ - Fix the indentation of the generated BibTeX section.
+ - Updates some language's strings
+ - Assumes that the characters '-' and '_' are aliases
+ for the character '-' inside the generator
+ parameter's names.
+ - Fix the output to be validable by the W3C validators
+ (HTML 4.01 and CSS).
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 23 Aug 2004 18:28:32 +0200
+
+bib2html (1.2-1) unstable; urgency=low
+
+ * Bugs:
+ - the special section @comment{} was not properly
+ parsed. Fix it with an update of the regular
+ expression which matches "@COMMENT".
+ - Allow the state "line_comment" to finish the
+ BibTeX file's parsing.
+
+ -- Stephane GALLAND <galland@arakhne.org> Tue, 17 Aug 2004 18:28:32 +0200
+
+bib2html (1.1-1) unstable; urgency=low
+
+ * Features:
+ - enhances the generator parameters 'author-regexp',
+ etc: add many new types instead of one.
+ - add the support of the BibTeX field 'crossref':
+ it permits to implement a kind of inheritance
+ between two entries
+ - add the generation of a BibTeX code verbatim
+ (and the command line parameter which permits
+ to set it on/off)
+ * Bugs:
+ - in indexes, regroup the reference with the same label
+ - put a better header title inside the HTML files of
+ the entries
+ - w3c norm fix: generates the <body> tags
+ - add a white background color for the theme Simple
+ - in ExtendedGen.pm, DomainGen.pm: fix a syntactical
+ error and update to be compliant with fixes that
+ occurs inside HTMLGen.pm
+ - in HTMLGen.pm, Norbert fixes some bug due to the
+ bad inclusion of their patchs for the release 1.0
+ - in Parser.pm: Norbert fixes a infinite loop recusion
+ bug. This bug is due to the definition of a constant
+ with same name and value (in a lowercase comparison).
+ For example: @STRING{springer=Springer} generates a
+ infinite loop.
+ - some code cleaning
+
+ -- Stephane GALLAND <galland@arakhne.org> Sat, 27 Mar 2004 18:28:32 +0200
+
+bib2html (1.0-1) unstable; urgency=low
+
+ * Features:
+ - add generator parameters for the HTMLGen generator:
+ author-regexp, max-names-overview, max-names-list,
+ newtype, type-matching (added by Norbert)
+ * Bugs:
+ - an exception was generated when an entry has no
+ author nor editor.
+ - in bibtex parsing: now support syntax as foo #
+ " and " # bla
+ - applies patchs from Norbert in TeX.pm, Misc.pm
+ and HTMLGen.pm
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 17 Mar 2004 18:28:32 +0200
+
+bib2html (0.11-1) unstable; urgency=low
+
+ * Features:
+ - add an index of authors and of author's publications
+ inside the two left frames
+ - add the class AbstractGenerator.pm
+ - add ExtendedGen.pm which permits to generate HTML
+ page with:
+ a) isbn, issn, and readers
+ b) abstract and keywords
+ c) the support for downloading an electronic
+ document ('localfile')
+ - add the support of LaTeX environments (\begin,\end)
+ - add the generator Domain which permits to support
+ domain for documents (domain, nddomain, rddomain,
+ domains)
+ * Bugs:
+ - in HTMLGen.pm, fixes not initialized variable uses
+ - changes the behavior of some command line options
+ - in Parser.pm, support recursive merging operator for strings
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 02 Feb 2004 18:28:32 +0200
+
+bib2html (0.10-1) unstable; urgency=low
+
+ * Bugs:
+ - in BibScanner.pm, did not recognized correctly the
+ @STRING commands
+ - in BibScanner.pm, the concatened strings was too
+ early merged (before any replacement by the
+ @STRING's values)
+ - in BibScanner.pm, the parsed field labels must
+ be automatically lower cased. Ut permits to support
+ case-independent label for BibTeX fields
+ - in Scanner.pm, ungetpattern() does not its job well.
+
+ -- Stephane GALLAND <galland@arakhne.org> Thu, 11 Dec 2003 18:28:32 +0200
+
+bib2html (0.9-1) unstable; urgency=low
+
+ * Features:
+ - Adds the generator 'Extended' which support the
+ bibtex tags:
+ * 'url' : URL to informational web page
+ * 'isbn'
+ * 'issn'
+ * 'localfile' : relative path to a file to download
+ * 'abstract'
+ * 'keywords'
+ * 'readers' : informational tag that indicates who
+ read this entry (according to the bibtex name syntax)
+ - Adds the support of "et al." inside the bibtex names.
+ - Adds some command line arguments
+ * Bugs:
+ - in the HTML filename translations.
+ - get the editor field when the author one is empty.
+ - ignore TeX parsing for the fields 'localfile' and 'url'
+ - support more formats for the bibtex author's names:
+ [von] Last, jr, First [and ...]
+ First [von] Last, jr [and ...]
+ [von] Last, First [jr] [and ...]
+ First [von] Last [jr] [and ...]
+ name, [name, ...] [and name]
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 19 Sep 2003 18:28:32 +0200
+
+bib2html (0.8-1) unstable; urgency=low
+
+ * Features:
+ - adds the support of the LaTeX commands \cite[]{}
+ * Bugs:
+ - recognizes the character '-' inside the bibkeys
+ - some other minor bug fixes
+
+ -- Stephane GALLAND <galland@arakhne.org> Fri, 01 Aug 2003 18:28:32 +0200
+
+bib2html (0.7-1) unstable; urgency=low
+
+ * Features:
+ - add the support of mathematical modes (not the support
+ of all TeX commands inside the mathematical mode)
+ - partial support of Math-ML
+ * Bugs:
+ - add support of some TeX commands( \i, \~, ...)
+ - ignore text between bibtex entries
+ - better recognition for author names.
+ - warm the user when the "year" is not a number.
+ - suppress redondant error messages.
+ - bug in the verbosing level calculation
+ - some syntaxic fixes
+
+ -- Stephane GALLAND <galland@arakhne.org> Wed, 09 Jul 2003 18:28:32 +0200
+
+bib2html (0.6-1) unstable; urgency=low
+
+ * Features:
+ - adds the multi-language support.
+ - adds theme for the HTML generators.
+ * Bugs:
+ - some uses of the function sort inside a
+ return are improper. Fixed to be sure
+ that the return statement takes only one value.
+ - adds the function notempty() to permit to
+ have strings which contain only "0".
+
+ -- Stephane GALLAND <galland@arakhne.org> Thu, 26 Jun 2003 18:28:32 +0200
+
+bib2html (0.5-1) unstable; urgency=low
+
+ * This is the first public release on the version entirely based on perl.
+
+ -- Stephane GALLAND <galland@arakhne.org> Mon, 03 Mar 2003 18:28:32 +0200
diff --git a/biblio/bibtex/utils/bib2ml/debian/compat b/biblio/bibtex/utils/bib2ml/debian/compat
new file mode 100644
index 0000000000..b8626c4cff
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/biblio/bibtex/utils/bib2ml/debian/control b/biblio/bibtex/utils/bib2ml/debian/control
new file mode 100644
index 0000000000..e60859688f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/control
@@ -0,0 +1,48 @@
+Source: bib2ml
+Section: universe/tex
+Priority: optional
+Maintainer: Stephane GALLAND <galland@arakhne.org>
+Build-Depends-Indep: debhelper (>= 4.1.0), perl (>= 5.8), perl-modules (>= 5.8)
+Standards-Version: 3.7.3
+Homepage: http://www.arakhne.org/bib2ml/
+
+Package: bib2ml-common
+Architecture: all
+Depends: perl (>= 5.8), perl-modules (>= 5.8)
+Conflicts: bib2html-common (<= 6.1-1)
+Recommends: texlive
+Description: Translator from BibTeX files to HTML
+ bib2ml is a powerfull translator of
+ BibTeX files into HTML, XML or SQL files.
+ .
+ This package provides the common libraries.
+
+Package: bib2html
+Architecture: all
+Depends: perl (>= 5.8), perl-modules (>= 5.8), bib2ml-common (= ${Source-Version})
+Provides: bib2ml
+Description: Translator from BibTeX files to HTML
+ bib2ml is a powerfull translator of
+ BibTeX files into HTML, XML or SQL files.
+ .
+ This package provides bib2html.
+
+Package: bib2xml
+Architecture: all
+Depends: perl (>= 5.8), perl-modules (>= 5.8), bib2ml-common (= ${Source-Version})
+Provides: bib2ml
+Description: Translator from BibTeX files to HTML
+ bib2ml is a powerfull translator of
+ BibTeX files into HTML, XML or SQL files.
+ .
+ This package provides bib2xml.
+
+Package: bib2sql
+Architecture: all
+Depends: perl (>= 5.8), perl-modules (>= 5.8), bib2ml-common (= ${Source-Version})
+Provides: bib2ml
+Description: Translator from BibTeX files to HTML
+ bib2ml is a powerfull translator of
+ BibTeX files into HTML, XML or SQL files.
+ .
+ This package provides bib2sql.
diff --git a/biblio/bibtex/utils/bib2ml/debian/copyright b/biblio/bibtex/utils/bib2ml/debian/copyright
new file mode 100644
index 0000000000..487817878b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/copyright
@@ -0,0 +1,9 @@
+This package was debianized by Stephane GALLAND <galland@arakhne.org>
+on Tue, 11 Mar 2006.
+
+Copyright:
+This package is licensed under the GNU General Public License.
+
+ You can find the full text of the GPL in
+ /usr/share/common-licenses/GPL in your Debian system.
+ Look there for details not shown above.
diff --git a/biblio/bibtex/utils/bib2ml/debian/rules b/biblio/bibtex/utils/bib2ml/debian/rules
new file mode 100755
index 0000000000..2006e7602e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/debian/rules
@@ -0,0 +1,75 @@
+#!/usr/bin/make -f
+
+build: build-stamp
+
+build-stamp:
+ dh_testdir
+
+ pod2man --section=1 --center=Bib2HTML --name=Bib2HTML man/bib2html_en.pod man/bib2html.1
+ gzip man/bib2html.1
+
+ pod2man --section=1 --center=Bib2HTML --name=Bib2HTML man/bib2html_fr.pod man/bib2html.fr.1
+ gzip man/bib2html.fr.1
+
+ pod2man --section=1 --center=Bib2XML --name=Bib2XML man/bib2xml_en.pod man/bib2xml.1
+ gzip man/bib2xml.1
+
+ pod2man --section=1 --center=Bib2XML --name=Bib2XML man/bib2xml_fr.pod man/bib2xml.fr.1
+ gzip man/bib2xml.fr.1
+
+ pod2man --section=1 --center=Bib2XML --name=Bib2XML man/bib2sql_en.pod man/bib2sql.1
+ gzip man/bib2sql.1
+
+ pod2man --section=1 --center=Bib2XML --name=Bib2XML man/bib2sql_fr.pod man/bib2sql.fr.1
+ gzip man/bib2sql.fr.1
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp
+
+ rm -f man/bib2html.1*
+ rm -f man/bib2html.*.1*
+
+ rm -f man/bib2xml.1*
+ rm -f man/bib2xml.*.1*
+
+ rm -f man/bib2sql.1*
+ rm -f man/bib2sql.*.1*
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ dh_install
+
+ dh_link
+
+ dh_installman
+
+ dh_installdocs
+
+binary-arch:
+
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs README
+ dh_installdefoma
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+
+.PHONY: build clean install binary-arch binary-indep binary
diff --git a/biblio/bibtex/utils/bib2ml/doc/bibtexml_dtd.html b/biblio/bibtex/utils/bib2ml/doc/bibtexml_dtd.html
new file mode 100644
index 0000000000..f4e97dfde0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/bibtexml_dtd.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "http:/www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>BibteXML DTD</title>
+ </head>
+ <body bgcolor='#dae6e6'>
+ <pre>
+<font color="gray">&lt;!--
+ - File: $Id: bibteXML-ext.dtd, 2003.06.26 13:52:00 vbg Exp $
+ -
+ - This DTD expresses XML markup similar to the BibTeX language
+ - specified for LaTeX, or actually its content model.
+ - For documentation on BibTeX, see
+ - http://www.ctan.org/tex-archive/biblio/bibtex/distribs/doc/
+ -
+ - Suggested invocation:
+ -
+ - &lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ - &lt;!DOCTYPE bibtex:file PUBLIC
+ - "-//BibTeXML//DTD XML for BibTeX (extended) v1.0//EN"
+ - "bibteXML-ext.dtd" &gt;
+ - &lt;bibtex:file xmlns:bibtex="http://bibtexml.sf.net/"&gt;
+ - ...
+ - &lt;/bibtex:file&gt;
+ -
+ - Available from http://bibtexml.sf.net/
+ -
+ - This code originally developed by
+ - Vidar Bronken Gundersen
+ - Zeger W. Hendrikse
+ -
+ - This program is free software; you can redistribute it and/or
+ - modify it under the terms of the GNU General Public License.
+ - See http://www.gnu.org/copyleft/gpl.html
+ -
+--&gt;</font>
+
+
+<font color="gray">&lt;!-- popular user fields --&gt;</font>
+
+<b>&lt;!ENTITY</b> % user.fields
+ "( bibtex:abstract?, bibtex:affiliation?,
+ bibtex:contents?, bibtex:copyright?,
+ (bibtex:isbn | bibtex:issn)?, bibtex:doi?,
+ bibtex:keywords?, bibtex:language?, bibtex:lccn?,
+ bibtex:location?, bibtex:mrnumber?, bibtex:price?,
+ bibtex:size?, bibtex:url?, bibtex:category? )"<b>&gt;</b>
+
+<b>&lt;!ENTITY</b> % BibTeXML.common.standard.fields
+ ", bibtex:key?, bibtex:crossref?, %user.fields;"<b>&gt;</b>
+
+
+<font color="gray">&lt;!-- ..................................................................... --&gt;</font>
+<font color="gray">&lt;!-- Other popular fields
+ -
+ - BibTeX is extremely popular, and many people have used it to store
+ - information. Here is a list of some of the more common fields:
+ -
+ - [affiliation] The authors affiliation.
+ - [abstract] An abstract of the work.
+ - [contents] A Table of Contents
+ - [copyright] Copyright information.
+ - [ISBN] The International Standard Book Number.
+ - [ISSN] The International Standard Serial Number.
+ - Used to identify a journal.
+ - [keywords] Key words used for searching or possibly for annotation.
+ - [language] The language the document is in.
+ - [location] A location associated with the entry,
+ - such as the city in which a conference took place.
+ - [LCCN] The Library of Congress Call Number.
+ - I've also seen this as lib-congress.
+ - [mrnumber] The Mathematical Reviews number.
+ - [price] The price of the document.
+ - [size] The physical dimensions of a work.
+ - [URL] The WWW Universal Resource Locator that points to the item being
+ - referenced. This often is used for technical reports to point to the
+ - ftp site where the postscript source of the report is located.
+ -
+ - When using BibTeX with LaTeX you need
+ - BibTeX style files to print these data.
+ -
+ - Ref: www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html
+--&gt;</font>
+
+<b>&lt;!ELEMENT</b> bibtex:abstract (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:affiliation (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:contents (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:copyright (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:isbn (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:issn (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:language (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:lccn (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:location (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:mrnumber (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:price (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:size (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:url (#PCDATA) <b>&gt;</b>
+
+
+<font color="gray">&lt;!-- User requested fields
+ - [category] Category of this bibitem
+ - [DOI] The Digital Object Identifier (www.doi.org)
+ - used to redirect to articles, a key like 10.1000/203
+--&gt;</font>
+
+<b>&lt;!ELEMENT</b> bibtex:category (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:doi (#PCDATA) <b>&gt;</b>
+
+
+<font color="gray">&lt;!-- ..................................................................... --&gt;</font>
+<font color="gray">&lt;!-- Alternative syntax for compound fields
+ - for author, editor, keywords and title fields.
+ - Backwards compatible syntax.
+--&gt;</font>
+
+<b>&lt;!ENTITY</b> % BibTeXML.author.element "IGNORE"<b>&gt;</b>
+<b>&lt;!ENTITY</b> % BibTeXML.editor.element "IGNORE"<b>&gt;</b>
+
+<b>&lt;!ENTITY</b> % author.qname "(bibtex:author | bibtex:authorlist)"<b>&gt;</b>
+<b>&lt;!ENTITY</b> % editor.qname "(bibtex:editor | bibtex:editorlist)"<b>&gt;</b>
+
+<b>&lt;!ELEMENT</b> bibtex:authorlist (bibtex:person+) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:editorlist (bibtex:person+) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:author (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:editor (#PCDATA) <b>&gt;</b>
+
+<b>&lt;!ELEMENT</b> bibtex:person ( ( bibtex:initials |
+ (bibtex:first, bibtex:middle?)),
+ bibtex:prelast?, bibtex:last,
+ bibtex:lineage?)<b>&gt;</b>
+
+<font color="gray">&lt;!-- first, middle and last name should be obvious
+ - preLast is for names like Thomas *de* Burghes,
+ - lineage is used for "Jr" in names like "James T. Kirk, Jr."
+ --&gt;</font>
+<b>&lt;!ATTLIST</b> bibtex:person email CDATA #IMPLIED
+ url CDATA #IMPLIED
+<b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:first (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:initials (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:last (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:middle (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:prelast (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:lineage (#PCDATA) <b>&gt;</b>
+
+
+<b>&lt;!ENTITY</b> % BibTeXML.title.element "IGNORE"<b>&gt;</b>
+<b>&lt;!ENTITY</b> % title.qname "(bibtex:title | bibtex:titlelist)"<b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:titlelist (bibtex:title, bibtex:subtitle?)<b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:subtitle (#PCDATA) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:title (#PCDATA) <b>&gt;</b>
+
+<b>&lt;!ENTITY</b> % BibTeXML.keywords.element "IGNORE"<b>&gt;</b>
+<b>&lt;!ENTITY</b> % keywords.qname "bibtex:keywords"<b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:keywords (bibtex:keyword+) <b>&gt;</b>
+<b>&lt;!ELEMENT</b> bibtex:keyword (#PCDATA) <b>&gt;</b>
+
+
+<font color="gray">&lt;!-- ..................................................................... --&gt;</font>
+<font color="gray">&lt;!-- reuse the strict BibTeXML DTD --&gt;</font>
+<b>&lt;!ENTITY</b> % BibTeXML-strict PUBLIC
+ "-//BibTeXML//DTD XML for BibTeX v1.0//EN"
+ "bibteXML.dtd"<b>&gt;</b>
+%BibTeXML-strict;
+
+
+<font color="gray">&lt;!-- ..................................................................... --&gt;</font>
+<font color="gray">&lt;!-- End of bibtex dtd --&gt;</font>
+
+ </pre>
+ </body>
+</html>
diff --git a/biblio/bibtex/utils/bib2ml/doc/capture.png b/biblio/bibtex/utils/bib2ml/doc/capture.png
new file mode 100644
index 0000000000..55d9cc4f20
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/capture.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/capture2.png b/biblio/bibtex/utils/bib2ml/doc/capture2.png
new file mode 100644
index 0000000000..06ca4954a9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/capture2.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/index.html b/biblio/bibtex/utils/bib2ml/doc/index.html
new file mode 100644
index 0000000000..1d593ea834
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/index.html
@@ -0,0 +1,1320 @@
+<!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "http:/www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Documentation of Bib2ML (aka. Bib2HTML)</title>
+ </head>
+ <body bgcolor='#dae6e6'>
+
+ <h1 align="center">Documentation of Bib2ML (aka. Bib2HTML)</h1>
+
+ <p align="center"><small>Written by <a href="mailto:galland@arakhne.org">Stéphane GALLAND</a><br>
+ Version: 2011-07-31<br>
+ Documentation for bib2ml 6.7 and later</small></p>
+
+ <hr width="100%">
+
+ <p><a href="#introduction">1. Introduction/Overview</a></p>
+ <p><a href="#install">2. How to install Bib2ML?</a><ul>
+ <li><a href="#install_require">2.1 Prerequires</a></li>
+ <li><a href="#install_reports">2.2 Installation Reports on Several Operating Systems</a></li>
+ <li><a href="#install_download">2.3 Download</a></li>
+ <li><a href="#install_unix">2.4 Install on Unix Systems</a><ul>
+ <li><a href="#install_unix_uncompress">2.4.1 Uncompress</a></li>
+ <li><a href="#install_unix_copy">2.4.2 Copy the files</a></li>
+ <li><a href="#install_unix_finalize">2.4.3 Finalize the installation</a></li>
+ <li><a href="#install_unix_packages">2.4.4 Simplify your life: use a Linux packages</a></li>
+ </ul></li>
+ <li><a href="#install_win">2.5 Install on Windows&reg; Systems without CygWin</a></li>
+ <li><a href="#install_cygwin">2.6 Install on Windows&reg; Systems with CygWin</a></li>
+ </ul></p>
+ <p><a href="#run">3. How to run Bib2ML?</a></p>
+ <p><a href="#format">4. Some words about the BibTeX format supported by Bib2ML</a><ul>
+ <li><a href="#format_recall">4.1 Short Recall on Bib2TeX's File Format</a></li>
+ <li><a href="#format_types">4.2 Recognized Entry Types</a></li>
+ <li><a href="#format_fields">4.2 Recognized Fields</a></li>
+ <li><a href="#format_string">4.4 Definition of Strings and Preambles</a></li>
+ <li><a href="#format_names">4.5 Definition of the Lists of Names</a></li>
+ </ul></p>
+ <p><a href="#generators">5. Supported Generators</a><ul>
+ <li><a href="#generator_HTML">5.1. Generator HTML</a></li>
+ <li><a href="#generator_Extended">5.2. Generator Extended</a></li>
+ <li><a href="#generator_Domain">5.3. Generator Domain</a></li>
+ <li><a href="#generator_XML">5.4. Generator XML</a></li>
+ <li><a href="#generator_SQL">5.5. Generator SQL</a></li>
+ </ul></p>
+ <p><a href="#themes">6. Supported Themes</a><ul>
+ <li><a href="#theme_Simple">6.1 Theme Simple</a></li>
+ <li><a href="#theme_Dyna">6.2 Theme Dyna</a></li>
+ <li><a href="#theme_contrib">6.3 Contribute</a></li>
+ </ul></p>
+ <p><a href="#languages">7. Supported Languages</a><ul>
+ <li><a href="#languages_contrib">7.1 Contribute</a></li>
+ </ul></p>
+ <p><a href="#license">8. License</a></p>
+ <p><a href="#contributor">9. Contributors</a></p>
+ <p><a href="#bugreport">10. Bug Reporting</a></p>
+
+ <hr width="100%">
+
+ <a name="introduction"></a><h2>1. Introduction/Overview</h2>
+
+ <p>Many researchers make use of <a href="http://www.cc.gatech.edu/classes/RWL/Projects/citation/Docs/UserManuals/Reference_Pages/bibtex_doc.html">BibTeX</a> for maintaining a comprehensive bibliography which they can then draw on at will when writing papers.</p>
+
+ <p>Bib2ML is a handy utility that converts BibTeX files into HTML pages. You can use it to easily maintain an updated online bibliography. In addition, it is possible to specify, for each bibfile entry, a set of additional information that will appears inside the generated pages.</p>
+
+ <p>The output depends of the used theme. But the pages' hierarchy has a similar structure that the <a href="http://java.sun.com/j2se/javadoc/">JavaDoc</a>'s ones (see the two screenshots generated with the theme <a href="#theme_Simple">Simple</a> and the theme <a href="#theme_Dyna">Dyna</a>). It includes a overview page, an index, an list of scientifical domains in which the BibTeX's entries are...</p>
+
+ <p><strong>Disclaimer:</strong> I've come across mention of other Bib2ML programs. This program is in no way related to any of them. For the curious, it was implemented using Perl.</p>
+
+ <hr width="100%">
+
+ <a name="install"></a><h2>2. How to install Bib2ML?</h2>
+
+ <a name="install_require"></a><h3>2.1. Prerequires</h3>
+
+ <p>To run BibHTML you must install a Perl interpreter. Bib2ML was tested with Perl v5.8.3 under Linux.</p>
+
+ <p>You must also install the following Perl packages (mostly included inside the default Perl distributions):<ul>
+ <li><code>File::Basename</code></li>
+ <li><code>File::Path</code></li>
+ <li><code>File::Spec</code></li>
+ <li><code>Getopt::Long</code></li>
+ <li><code>Pod::Usage</code></li>
+ </ul></p>
+
+ <a name="install_reports"></a><h3>2.2 Installation Reports on Several Operating Systems</h3>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%" cols="4">
+ <tr><td bgcolor="#cccccc" colspan="4" align="center"><i>Bib2ML and the Operating System's Supports</i></td></tr>
+ <tr><td valign="middle" align="center">GNU/Linux Mandrake</td>
+ <td valign="middle" align="center"><img src="./validated.gif" alt="ok"></td>
+ <td valign="middle" align="center">GNU/Linux Debian</td>
+ <td valign="middle" align="center"><img src="./validated.gif" alt="ok"></td></tr>
+ <tr><td valign="middle" align="center">GNU/Linux Ubuntu<sup>[<a href="#note1">1</a>]</sup></td>
+ <td valign="middle" align="center"><img src="./validated.gif" alt="ok"></td>
+ <td valign="middle" align="center">GNU/Linux Slackware</td>
+ <td valign="middle" align="center"><img src="./work.gif" alt="work"></td></tr>
+ <tr><td valign="middle" align="center">GNU/Linux RedHat</td>
+ <td valign="middle" align="center"><img src="./work.gif"alt="must work"></td>
+ <td valign="middle" align="center">Mac OS X</td>
+ <td valign="middle" align="center"><img src="./work.gif" alt="work"></td></tr>
+ <tr><td valign="middle" align="center">Windows&reg; without Cygwin</td>
+ <td valign="middle" align="center"><img src="./work.gif" alt="work"></td>
+ <td valign="middle" align="center">Windows&reg; with Cygwin</td>
+ <td valign="middle" align="center"><img src="./validated.gif" alt="ok"></td></tr>
+ <tr><td valign="middle" align="center">GNU/Linux Suze</td>
+ <td valign="middle" align="center"><img src="./not-validated.gif" alt="not validated"></td>
+ <td valign="middle" align="center">GNU/Linux Mandrivia</td>
+ <td valign="middle" align="center"><img src="./not-validated.gif" alt="ok"></td></tr>
+ <tr><td valign="middle" align="center">Other UNIX</td>
+ <td valign="middle" align="center"><img src="./not-validated.gif" alt="not validated"></td>
+ <td valign="middle" align="center"></td>
+ <td valign="middle" align="center"></td></tr>
+ <tr><td colspan="4"><img src="./validated.gif" align="center" alt="not validated">:<small> I'd tested Bib2ML and validated it</small><br>
+ <img src="./work.gif" align="center" alt="work">:<small> one user has reported a success for Bib2ML</small><br>
+ <img src="./not-validated.gif" align="center" alt="not validated">:<small> No test nor report for a successfull installation and a successfull use of Bib2ML</small><br>
+ <img src="./mustwork.gif" align="center" alt="must work">:<small> Bib2ML must work as for another operating system</small><br><br>
+ <small><a name="note1"></a>[1] GNU/Linux Ubuntu is the reference operating system for Bib2ML</td></tr>
+ </table></p>
+
+ <a name="install_download"></a><h3>2.3. Download</h3>
+
+ <p>You could download the lastest sources from the Bib2ML web page: <a href="http://www.arakhne.org/bib2ml/">http://www.arakhne.org/bib2ml/</a> or <a href="http://download.tuxfamily.org/arakhne/pool/b/bib2ml/">http://download.tuxfamily.org/arakhne/pool/b/bib2ml/</a>.</p>
+
+ <p>The sources are commonly stored inside an archive called <code>bib2ml-x.x.tar.gz</code> where <code>x.x</code> is the number of the Bib2ML's version.</p>
+
+ <a name="install_unix"></a><h3>2.4 Install on Unix Systems</h3>
+
+ <a name="install_unix_uncompress"></a><h4>2.4.1. Uncompress</h4>
+
+ <p>After downloading the sources' archive, you could uncompress it:
+ <pre><code>
+ $ gzip -d -c bib2ml-x.x.tar.gz | tar -x
+ </code></pre></p>
+
+ <p>This command will create the directory <code>./bib2ml-x.x</code> in which all the sources are.</p>
+
+ <a name="install_unix_copy"></a><h4>2.4.2 Copy the files</h4>
+
+ <p>The main step of the installation is the copy of all the files required by Bib2ML. In fact, only a copy was necessary to install Bib2ML, <i>no compilation</i>.</p>
+
+ <p>I assume that you want to install Bib2ML into the directory <code>/usr/local/lib/bib2ml</code>. Type the following commands to install Bib2ML:<ul>
+ <li>installation of the Perl's packages, copy all the content of the subdirectory <code>./src</code>:
+ <pre><code>
+ $ cd bib2ml-x.x
+ $ mkdir /usr/local/lib/bib2ml
+ $ cp -R -f ./src/* /usr/local/lib/bib2ml/
+ </code></pre></li>
+ <li>Be sure that the Perl's script was runable:
+ <pre><code>
+ $ chmod ugo+x /usr/local/lib/bib2ml/bib2html.pl
+ </code></pre></li>
+ <li>Copy some additional documentation's files, if you want:
+ <pre><code>
+ $ cp -f ./COPYING /usr/local/lib/bib2ml/
+ $ cp -f ./Changelog /usr/local/lib/bib2ml/
+ $ cp -f ./AUTHORS /usr/local/lib/bib2ml/
+ $ cp -f ./AUTHORS /usr/local/lib/bib2ml/
+ $ cp -f ./VERSION /usr/local/lib/bib2ml/
+ </code></pre></li>
+ </ul></p>
+
+ <p>From now you could launch Bib2ML by typing one of the following commands:<ul>
+ <li>if the Perl interpreter is <code>/usr/bin/perl</code>:
+ <pre><code>
+ $ /usr/local/lib/bib2ml/bib2html.pl
+ </code></pre></li>
+ <li>if the Perl interpreter is not <code>/usr/bin/perl</code>:
+ <pre><code>
+ $ path_to_perl/perl /usr/local/lib/bib2ml/bib2html.pl
+ </code></pre></li>
+ </ul></p>
+
+ <p>Inside the section where I explain <a href="#run">how to run Bib2ML</a>, I assume that the launching command was <code>bib2html</code>. If you don't apply the commands from the section <a href="#install_unix_finalize">2.4.3</a>, you must replace <code>bib2html</code> by one of the above commands.
+
+ <a name="install_unix_finalize"></a><h4>2.4.3. Finalize the installation</h4>
+
+ <p>To finalize the installation, you could create a symbolic link to the Bib2ML's script from one of the directories inside your <code>PATH</code> (I assume that <code>/usr/local/bin</code> was in your <code>PATH</code>):
+ <pre><code>
+ $ cd /usr/local/bin
+ $ ln -s -f /usr/local/lib/bib2ml/bib2html.pl bib2html
+ </code></pre></p>
+
+ <p>This recommendation will permits to all the users to run Bib2ML very simply.</p>
+
+ <p><u><i>Warning:</i></u> this recommendation works only if the Perl's interpreter was <code>/usr/bin/perl</code>.</p>
+
+ <a name="install_unix_packages"></a><h4>2.4.4. Simplify your life: use a Linux packages</h4>
+
+ <p>You could simplify your life by installing Bib2ML with one of the proposed packages (see the <a href="http://www.arakhne.org/bib2ml/">download page</a> or the <a href="http://download.tuxfamily.org/arakhne.org/pool/b/bib2ml/">download repository</a>) for a Linux distributions.</p>
+
+ <a name="install_win"></a><h3>2.5 Install on Windows&reg; Systems without CygWin</h3>
+
+<p>This section explains how to install Bib2ML on a Windows&reg; operating system <strong>without CygWin</strong> installed. Bib2ML was successfully installed on WinXP with TeXLive2007 and ActivePerl 5.8.8.</p>
+
+<p>The installation steps are the steps (thanks to Dan Luecking for his report):
+<ul>
+<li>Create a directory named <code>scripts\</code> in one of the <code>texmf</code> trees (if one doesn't exist). Make a subdirectory named <code>bib2ml\</code> in <code>scripts\</code> and a subdirectory named <code>man\</code> in <code>scripts\bib2ml\</code>. The obtained directory tree should be:<pre><code>C:\path_to_texmf\texmf\
+ |
+ \- scripts\
+ |
+ \-- man\
+</code></pre></li>
+<li>Copy the contents of <code>src\</code> from the Bib2ML archive and all subdirectories to <code>scripts\bib2ml\</code> preserving the subdirectory structure.</li>
+<li>Copy the contents of <code>man\</code> from the Bib2ML archive to <code>scripts\bib2ml\man\</code>.</li>
+<li>Copy the contents of <code>doc\</code> to the documentation area of the texmf tree.</li>
+<li>create links:<pre><code>C:\path_to_texmf\texmf\scripts\bib2ml\> irun bib2html.pl bib2html.exe
+C:\path_to_texmf\texmf\scripts\bib2ml\> irun bib2sql.pl bib2sql.exe
+C:\path_to_texmf\texmf\scripts\bib2ml\> irun bib2xml.pl bib2xml.exe
+</code></pre></li>
+<li>Copy <code>*.exe</code> to <code>C:\TeXLive\bin\win32\</code></li>
+<li>run <code>texhash</code></li>
+</ul></p>
+
+<p>The links created by <code>irun</code> (part of TeXLive) use the <code>kpsewhich</code> libraries
+and <code>texmf.cnf</code> to find the perl scripts. The default setup should work
+since the search path for scripts is <code>%TEXMF%/scripts/</code>.</p>
+
+ <a name="install_cygwin"></a><h3>2.6 Install on Windows&reg; Systems with CygWin</h3>
+
+<p>This section explains how to install Bib2ML on a Windows&reg; operating system <strong>with CygWin</strong> installed. Bib2ML was successfully installed on WinXP with CygWin 1.5.24.</p>
+
+<p>Bib2ML should be installed on Windows&reg; Systems with CygWin in the same way as for Unix operating systems. Please see the section <a href="#install_unix">2.4 Install on Unix Systems</a> for the details.</p>
+
+ <hr width="100%">
+
+ <a name="run"></a><h2>3. How to run Bib2ML?</h2>
+
+ <p>Bib2ML takes a list of arguments: the names of the bibfiles you wish to process, e.g.
+ <pre><code>
+ $ bib2html firstfile.bib secondfile.bib
+ </code></pre></p>
+
+ <p>The output is written by default is the directory <code>./bib2html</code>.</p>
+
+ <p><strong>SYNOPSYS</strong>
+ <pre><code>
+ bib2html [options] file [file ...]
+ </code></pre></p>
+
+ <p><strong>OPTIONS</strong>
+ <table border="1" cellspacing="0" cellpadding="5" width="100%">
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>General options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>-[no]b</code><br>
+ <code> --[no]bibtex</code></td><td valign="top">
+ These options permit to generate (or not) a verbatim of the BibTeX entry.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--cvs</code></td><td valign="top">
+ If specified, this option disables the deletion of the subfiles
+ <code>.cvs</code>, <code>CVS</code> and <code>CVSROOT</code> in
+ the output directory.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--doctitle text</code></td><td valign="top">
+ Sets the title that appears in the main page.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>-f</code><br>
+ <code>--force</code></td><td valign="top">
+ Forces to overwrite into the output directory.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>-?</code><br>
+ <code>-h</code></td><td valign="top">
+ Show the list of supported options.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--help</code><br>
+ <code>--man</code><br>
+ <code>--manual</code></td><td valign="top">
+ Show the manual page.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>-o directory</code><br>
+ <code>--output&bnsp;directory</code></td><td valign="top">
+ Sets the <code>directory</code> in which the pages will be generated.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--protect shell_wildcard</code></td><td valign="top">
+ If specified, this option disables the deletion of the subfiles
+ that match the specified shell's wildcard in the output directory.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--svn</code></td><td valign="top">
+ If specified, this option disables the deletion of the subfiles
+ <code>.svn</code> and <code>svn</code> in the output directory.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--version</code></td><td valign="top">
+ Show the version of Bib2ML.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--windowtitle text</code></td><td valign="top">
+ Sets the text that appears as the window's title.
+ </td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>Generator options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>--d name[=value]</code><br>
+ <code>--generatorparam name[=value]</code></td><td valign="top">
+ Sets a generator param. It must be a <code>key=value</code> pair or simply a name. Example: "<code>target=thisdirectory</code>" defines the parameter <code>target</code> with corresponding value "<code>thisdirectory</code>". The specified parameters which are not supported by the generator are ignored.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--g class</code><br>
+ <code>--generator class</code></td><td valign="top">
+ Specify the generator to use. <code>class</code> must be a predefined generator's identifier of a valid Perl classname. See <code>--genlist</code> to obtain the list of the predefined generators. The default generator is <code>HTML</code>. See the <a href="#generators">list of supported generators</a> for more details.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--generatorparams</code></td><td valign="top">
+ Shows the list of supported parameters, and their semantics for the selected generator.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--genlist</code></td><td valign="top">
+ Shows the list of the supported generators.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--jabref</code></td><td valign="top">
+ The generator will translate JabRef's groups into Bib2ML domains.
+ </td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>Checker options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>--[no]checknames</code></td><td valign="top">
+ Force Bib2ML to check the author's names. This checking includes:<ul>
+ <li>only the second first names of two authors differ</li>
+ <li>two last names are a similar syntax (90% or more similar)</li>
+ </ul></td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>Theme options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>--theme name</code></td><td valign="top">
+ Specify the theme used by the generator. See the option <code>--themelist</code> to obtain the complete list of supported themes. See the <a href="#themes">list of the supported themes</a> for more details about them.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--themelist</code></td><td valign="top">
+ Shows the list of supported themes. See the <a href="#themes">list of the supported themes</a> for more details about them.
+ </td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>Localization options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>--lang name</code></td><td valign="top">
+ Sets the language used by the generator. See <code>--langlist</code> to obtain the list of the supported languages.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--langlist</code></td><td valign="top">
+ Shows the list of supported language.
+ </td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>TeX options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>-p file</code><br>
+ <code>--preamble file</code></td><td valign="top">
+ Sets the name of the file to read to include some TeX preambles. You could use this option to dynamicaly defined some unsupported LaTeX commands (see <a href="#format_string">how to define and use a preamble</a>).
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--texcmd</code></td><td valign="top">
+ Shows the list of supported LaTeX commands. The supported TeX commands permits to create a specific HTML output accordingly to the TeX semantic.
+ </td></tr>
+
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>Logging options</i></td></tr>
+
+ <tr><td valign="top">
+ <code>-q</code></td><td valign="top">
+ Don't be verbose: only error messages are displayed.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--[no]sortw</code></td><td valign="top">
+ Shows (or not) a sorted list of warnings by appearence line. For example, this could be use to obtain a better output for a parsing program.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>-v</code></td><td valign="top">
+ Be more verbose. Each time this option was specified, the verbosing level was increazed.
+ </td></tr>
+
+ <tr><td valign="top">
+ <code>--[no]warning</code></td><td valign="top">
+ If false, the warning are converted to errors. An error stops the program when it occurs. A warning does not stops the program.
+ </td></tr>
+
+ </table></p>
+
+ <hr width="100%">
+
+ <a name="format"></a><h2>4. Some words about the BibTeX format supported by Bib2ML</h2>
+
+ Bib2ML use as input files which respest as much as possible the <a href="http://www.cc.gatech.edu/classes/RWL/Projects/citation/Docs/UserManuals/Reference_Pages/bibtex_doc.html">BibTeX file format</a>. It add more restrictive constraints than this <i>official</i> format, and includes some additional fields.
+
+ <a name="format_recall"></a><h3>4.1 Short Recall on Bib2TeX's File Format</h3>
+
+ <p>To be recognized by Bib2ML, each entry must begin with an '<code>@</code>', immediately followed by the type of entry it is (see the <a href="#format_types">list of recognized entry types</a>), immediately followed by a '<code>{</code>'. It will then process the fields you've specified for that entry until it hits the closing '<code>}</code>' (see the <a href="#format_fields">list of recognized fields</a>). The format then looks something like this:
+ <pre><code>
+ @entrytype{entry_key,
+ fieldname1 = "Contents",
+ fieldname2 = {Contents},
+ fieldname3 = contents,
+ ...
+ }
+ </code></pre></p>
+
+ <p>The first information required by the BibTeX's file format is the identifier of the entry. This <code>entry_key</code> must be unique and, in most of the cases, it is composed by the author's name, the publication year... In <a href="http://www.latex-project.org/">LaTeX</a>, this key was used to reference this bibliographical entry.</p>
+
+ <p>Three types of field contents are valid, as shown here. In <code>fieldname1</code>, the contents are enclosed in quotes; in <code>fieldname2</code> they are enclosed in curly braces, and in <code>fieldname3</code> there are no surrounding characters. The third type is often used to specify pre-defined <a href="#format_string">string values</a>, and any value specified in this way will be compared to the list of <code>@strings</code> you've defined for a possible match (if there is a match, it will be expanded out to the full value of the <code>@string</code>).</p>
+
+ <p>Any amount of whitespace can come between the <code>fieldname</code> and the '<code>=</code>', or between the '<code>=</code>' and the contents. In addition, Bib2ML can handle nested <code>{}</code>'s in the contents of a field.</p>
+
+ <hr width="100%">
+
+ <a name="format_recall"></a><h3>4.2 Recognized Entry Types</h3>
+
+ <p>Bib2ML recognizes the following bibliography entry types (by the generator <a href="#generator_HTML">HTML</a>):<ul>
+ <li><code>@article</code>: an article inside a national or international <i>journal</i>, e.g. <i>International Journal of Production Economics</i>.</li>
+ <li><code>@book</code>: a <i>book</i>, e.g. <i>Les Systèmes Multi-Agents</i> by Professor Jacques Ferber.</li>
+ <li><code>@booklet</code>: a <i>standalone part</i> of a book, i.e. a part with its own author, title...</li>
+ <li><code>@inbook</code>: a <i>chapter</i> or a <i>part</i> of a book.</li>
+ <li><code>@incollection</code>: an article inside a <i>collection</i> of national or international journals, e.g. <i>Lecture Notes on Artificial Intelligence</i>.</li>
+ <li><code>@inproceedings</code>: a <i>paper</i> inside the proceedings of an national ou international conference, e.g. <i>European Simulaton Multiconferences</i>.</li>
+ <li><code>@manual</code>: a <i>technical manual</i> published (or not) by an university. <i>Don't be confused</i> with the technical report which is a report, not a manual.</li>
+ <li><code>@mastersthesis</code>: a <i>student thesis</i> made under the authority of an university of a school, e.g. engineering's report.</li>
+ <li><code>@misc: see the note below</code></li>
+ <li><code>@phdthesis</code>: a <i>research thesis</i> made under the authority of a laboratory, an institution, an university, e.g. PhD thesis, Doctorat thesis...</li>
+ <li><code>@proceedings</code>: a book that contains <i>all the papers</i> of a conference. <i>Don't choose</i> if you want a paper inside a conference (see the <code>@inproceedings</code> instead), e.g. <i>Proceedings of the International Conference on Multi-Agent Systems</i>.</li>
+ <li><code>@techreport</code>: a <i>technical report</i> published by an university. In general a technical report has a internal number which is specific to the institution. <i>Don't be confused</i> with the technical manual which is a manual, not a report.</li>
+ <li><code>@unpublished: a document which are never published.</code></li>
+ </ul></p>
+
+ <p>Any other entry type will be proceeded as <code>@misc</code>.</p>
+
+ <p><u>Note about the type <code>@misc</code>:</u><br>
+ this entry type is considered as the default. It requires the following fields: <code>author</code> and <code>year</code>. This constraint is not from the definition of the standard BibTeX file format. But it was introduced for the page's generation of Bib2ML.</p>
+
+ <p>I welcome requests to support other entry types. The generators could support their own entry types. See the section about <a href="#generators">supported generator</a> for more details</p>
+
+ <hr width="100%">
+
+ <a name="format_fields"></a><h3>4.3 Recognized Fields</h3>
+
+ <p>Bib2ML recognizes the following bibliography field types (by the generator <a href="#generator_HTML">HTML</a>):<ul>
+ <li><code>address</code></li>
+ <li><code>annote</code></li>
+ <li><code>author</code> (see the <a href="#format_names">definitions of the names</a>)</li>
+ <li><code>booktitle</code></li>
+ <li><code>chapter</code></li>
+ <li><code>comments</code> (alias <code>annote</code>)</li>
+ <li><code>edition</code></li>
+ <li><code>editor</code> (see the <a href="#format_names">definitions of the names</a>)</li>
+ <li><code>howpublished</code></li>
+ <li><code>institution</code></li>
+ <li><code>month</code></li>
+ <li><code>note</code></li>
+ <li><code>number</code></li>
+ <li><code>organization</code></li>
+ <li><code>pages</code></li>
+ <li><code>publisher</code></li>
+ <li><code>school</code></li>
+ <li><code>series</code></li>
+ <li><code>title</code></li>
+ <li><code>type</code></li>
+ <li><code>volume</code></li>
+ <li><code>year</code></li>
+ </ul></p>
+
+ <p>The real support of a field depends on the entry type in which it appears. The following table explains where the fields are needed and where they are optional.</p>
+
+ <p><a name="table_HTMLfields"></a><table border="1" cellspacing="0" cellpadding="2" width="100%">
+ <tr bgcolor="#cccccc"><td colspan="13" align="center"><small><i>Supported Fields by the Generator HTML</i></small></td></tr>
+ <tr bgcolor="#cccccc"><td><!-- --></td>
+ <td align="center"><small>article</small></td>
+ <td align="center"><small>book</small></td>
+ <td align="center"><small>booklet</small></td>
+ <td align="center"><small>inbook</small></td>
+ <td align="center"><small>inproceeding<br>incollection</small></td>
+ <td align="center"><small>manual</small></td>
+ <td align="center"><small>masterthesis</small></td>
+ <td align="center"><small>misc</small></td>
+ <td align="center"><small>phdthesis</small></td>
+ <td align="center"><small>proceedings</small></td>
+ <td align="center"><small>techreport</small></td>
+ <td align="center"><small>unpublished</small></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>address</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>annote</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- misc --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- phdthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --><img src="./optional.gif" alt="O"></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>author</small></td>
+ <td align="center"><!-- article --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- book --><img src="./requiredor.png" alt="RO"></td>
+ <td align="center"><!-- booklet --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inbook --><img src="./requiredor.png" alt="RO"></td>
+ <td align="center"><!-- inproceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- manual --><img src="./required.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- misc --><img src="./requiredor.png" alt="RO"></td>
+ <td align="center"><!-- phdthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- proceedings --><img src="./requiredor.png" alt="RO"></td>
+ <td align="center"><!-- techreport --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- unpublished --><img src="./required.gif" alt="R"></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>booktitle</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>chapter</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>edition</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>editor</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --><img src="./requiredor2.png" alt="RO"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./requiredor2.png" alt="RO"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --><img src="./requiredor2.png" alt="RO"></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./requiredor2.png" alt="RO"></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>howpublished</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>institution</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>journal</small></td>
+ <td align="center"><!-- article --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>month</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- misc --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- phdthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>note</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- misc --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- phdthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --><img src="./required.gif" alt="R"></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>number</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>organization</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>pages</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>publisher</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>school</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>series</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>title</small></td>
+ <td align="center"><!-- article --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- book --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- booklet --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inbook --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inproceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- manual --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- masterthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- misc --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- phdthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- proceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- techreport --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- unpublished --><img src="./required.gif" alt="R"></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>type</small></td>
+ <td align="center"><!-- article --></td>
+ <td align="center"><!-- book --></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- proceedings --></td>
+ <td align="center"><!-- techreport --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>volume</small></td>
+ <td align="center"><!-- article --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- book --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- booklet --></td>
+ <td align="center"><!-- inbook --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- inproceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- manual --></td>
+ <td align="center"><!-- masterthesis --></td>
+ <td align="center"><!-- misc --></td>
+ <td align="center"><!-- phdthesis --></td>
+ <td align="center"><!-- proceedings --><img src="./optional.gif" alt="O"></td>
+ <td align="center"><!-- techreport --></td>
+ <td align="center"><!-- unpublished --></td>
+ </tr>
+ <tr><td bgcolor="#cccccc"><small>year</small></td>
+ <td align="center"><!-- article --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- book --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- booklet --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inbook --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- inproceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- manual --><img src="./required.gif" alt="O"></td>
+ <td align="center"><!-- masterthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- misc --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- phdthesis --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- proceedings --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- techreport --><img src="./required.gif" alt="R"></td>
+ <td align="center"><!-- unpublished --><img src="./required.gif" alt="R"></td>
+ </tr>
+
+ <tr><td colspan="13"><img src="./required.gif" alt="R" align="center">: this field was required by Bib2ML<br>
+ <img src="./requiredor.png" alt="RO" align="center">: this field was required by Bib2ML if the other required field was not given<br>
+ <img src="./requiredor2.png" alt="RO" align="center">: this field was required by Bib2ML if the other required field was not given<br>
+ <img src="./optional.gif" alt="O" align="center">: this field was not required by Bib2ML<br>
+ When a cell was empty, this field is ignored by Bib2ML</td></tr></table></p>
+
+ <p>I welcome requests to support other fields. The generators could support their own. See the section about <a href="#generators">supported generator</a> for more details</p>
+
+ <a name="format_string"></a><h3>4.4 Definition of Strings and Preambles</h3>
+
+ <p>Like BibTeX, Bib2ML also handles arbitrary <code>@string</code> definitions, which can be used in any entry field, e.g.
+ <pre><code>
+ @string{acl = "Association for Computational Linguistics"}
+ ...
+ @proceedings{PROC,
+ publisher = acl,
+ ...
+ }
+ </code></pre></p>
+
+ <p>Bib2ML also supports the definition of TeX preambles. The TeX preambles are TeX commands which are evaluated and ran before any treatement on the BibTeX entries. The definition of a preamble is done with <code>@preamble</code>, e.g.
+ <pre><code>
+ @preamble{\def\th{\ensuremath{^{th}}}}
+ ...
+ </code></pre></p>
+
+ <p>The TeX commands which can be put inside a <code>@preamble</code> are limited to the commands supported by Bib2ML (see the command-line option <code>--texcmd</code> to obtain a list).</p>
+
+ <a name="format_names"></a><h3>4.5 Definition of the Lists of Names</h3>
+
+ <p>In some fields (e.g. <code>author</code> and <code>editor</code>) you must specify a list of names. This list is composed of names separated by the keyword <code>AND</code>. Each name must respect one of the following syntaxes:<ul>
+ <li><code>[von] Last, jr, First</code></li>
+ <li><code>First [von] Last, jr</code></li>
+ <li><code>[von] Last, First [jr]</code></li>
+ <li><code>First [von] Last [jr]</code></li>
+ </ul></p>
+
+ <p>If present the <code>jr</code> part must be one of '<code>junior</code>', '<code>jr.</code>', '<code>jr</code>', '<code>senior</code>', '<code>sen.</code>', '<code>sen</code>', '<code>esq.</code>', '<code>esq</code>', '<code>phd.</code>' and '<code>phd</code>'.
+
+ <p><u>Good Example:</u> <code>DUPONT, Henri and Pierre, Alain Michel and Jim WASHINGTON jr.
+ <table border="1" cellspacing="0" cellpadding="0">
+ <tr><td><code>DUPONT, </code></td><td><code>Henri</code></td><td><code> and </code></td><td><code>Pierre, </code></td><td><code>Alain Michel</code></td><td><code> and </code></td><td><code>Jim </code></td><td><code>WASHINGTON </code></td><td><code>jr.</code></td></tr>
+ <tr><td><code>last</code></td><td><code>first</code></td><td><code></code></td><td><code>last</code></td><td><code>first</code></td><td><code></code></td><td><code>first</code></td><td><code>fast</code></td><td><code>jr</code></td></tr>
+ </table></p>
+
+ <p><u>Bad Example:</u> <code>Henri DUPONT, Alain Michel Pierre and Jim WASHINGTON jr.
+ <table border="1" cellspacing="0" cellpadding="0">
+ <tr><td><code>Henri DUPONT, </code></td><td><code>Alain Michel Pierre</code></td><td><code> and </code></td><td><code>Jim </code></td><td><code>WASHINGTON </code></td><td><code>jr.</code></td></tr>
+ <tr><td><code>last</code></td><td><code>first</code></td><td><code></code></td><td><code>first</code></td><td><code>fast</code></td><td><code>jr</code></td></tr>
+ </table></p>
+
+ <hr width="100%">
+
+ <a name="generators"></a><h2>5. Supported Generators</h2>
+
+ <p>The generator is one of the major module of Bib2ML (with the BibTeX parser). It aims to create the HTML files from the internal data structure given by the parser. It is the generator which apply the canvas of the generated pages (use of 3 frames, links to the overview the index from the header of each entry's page...).</p>
+
+ <p>In addition to the usable generator listed below, Bib2ML includes an abstract generator which is the basis of all the others.</p>
+
+ <a name="generator_HTML"></a><h3>5.1. Generator HTML</h3>
+
+ <p>The generator called <code>HTML</code> is the default HTML generator of Bib2ML. Its purpose is to generate a basic content which is quiet similar to a lot of BibTeX to HTML tools (such as the LaTeX distribution's <code>bib2html</code>).</p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>SUPPORTED FIELDS</i></td></tr>
+ <tr><td valign="top">
+ See this <a href="#table_HTMLfields">table</a>.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>FEATURES</i></td></tr>
+ <tr><td valign="top">
+ The generated result in based on <i>three frames</i>:<ul>
+ <li>upper-left frame: a brief overview which permits to do some high-level selection,</li>
+ <li>lower-left frame: a overview of all the entries which are selected accordingly to the selection made inside the upper-left frame,</li>
+ <li>right frame: the main frame which aims to display all the informations (overview, entry's pages...).</li>
+ </ul>
+ </td></tr>
+ <tr><td valign="top">
+ One page per <i>entry</i>:<ul>
+ <li>All the required and optional fields listed in <a href="#table_HTMLfields">this table</a> are displayed inside a table (except the field <code>annote</code>).</li>
+ <li>Display the content of the field <code>annote</code> (or <code>comments</code>) inside a section just below the field's table.</li>
+ <li>If the command-line option <code>--bitex</code> was specified (default), a verbatim output of the BibTeX entry was generated in its own section.</li>
+ </ul>
+ </td></tr>
+ <tr><td valign="top">
+ One short-overview page (inside the upper-left frame) which contains all the entry's types.
+ </td></tr>
+ <tr><td valign="top">
+ One short-overview page (inside the lower-left frame) which contains all the entries grouped by year and sorted by authors and publication date.
+ </td></tr>
+ <tr><td valign="top">
+ One <i>overview</i> page (inside the right frame) which contains a list of all the entries grouped by year and sorted by authors and publication date.
+ </td></tr>
+ <tr><td valign="top">
+ One <i>tree-view</i> page which contains all the entries grouped by publication's type and sorted by authors and publication date. This page could be overwriting by subclasses of this generator to provide antoher kind of tree-view.
+ </td></tr>
+ <tr><td valign="top">
+ A set of <i>index</i> pages. The index lists the significant words found inside the BibTeX file and propose a link to the entry's page where this word is. The generator produces one HTML page for each letter of the alphabet.<br>
+ A significant word is a word which has more than 2 letters and which are not known are not-significant by the Bib2ML's internal database.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>GENERATOR'S PARAMETERS</i></td></tr>
+ <tr><td valign="top"><code>author-regexp=<u>expr</u></code></td>
+ <td valign="top">
+ A <a href="http://www.perldoc.com/perl5.8.4/pod/perlre.html">Perl's regular expression</a> (which is case-insensitive) against which the
+ lastname of an author is matched. If the author matches, (s)he is included in the overview window author list.
+ </td></tr>
+ <tr><td valign="top"><code>hideindex</code></td>
+ <td valign="top">
+ If presents, hide the index link and do not generate the index files.
+ </td></tr>
+ <tr><td valign="top"><code>html-generator=<u>encoding</u></code></td>
+ <td valign="top">
+ This parameter is a string that correspond to the character encoding of the generated HTML pages.
+ The default encoding is <code>ISO-8859-1</code>.
+ </td></tr>
+ <tr><td valign="top"><code>max-names-overview=<u>integer</u></code></td>
+ <td valign="top">
+ An integer which is the maximal count of authors in the overview page.
+ </td></tr>
+ <tr><td valign="top"><code>max-names-list=<u>integer</u></code></td>
+ <td valign="top">
+ An integer which is the maximal count of authors on the listing in the lower-left frame.
+ </td></tr>
+ <tr><td valign="top"><code>newtype=<u>expr</u></code></td>
+ <td valign="top">
+ A comma separated list of new publication's types, with singular and plural label.<br>
+ <p>The value must respect the format: <code>type:Singular:Plural[,type:Singular:Plural...]</code><br>
+ where <code>type</code> is the identifier of the new type, <code>Singular</code> is the label used
+ when this type has zero or one entry, <code>Plurial</code> is the label used when this type
+ has two or more entries.</p>
+ Each new type will appears inside the overview's pages. But this feature does not explain
+ how to generate the content of the corresponding entry's pages. So, the entry's pages will
+ be generated as for <code>@misc</code> entries (except if you define your own generator).
+ </td></tr>
+ <tr><td valign="top"><code>stdout</code></td>
+ <td valign="top">
+ If presents, this option force Bib2ML to output the files onto the standard output instead of files.
+ </td></tr>
+ <tr><td valign="top"><code>type-matching=<u>expr</u></code></td>
+ <td valign="top">
+ A coma separated list of items which inititalizes an associative array of type entry mappings.<br>
+ Each item must respect one of the following syntaxes:<ul>
+ <li><code>type =&gt; type</code> (since the version 1.3)</li>
+ <li><code>type -&gt; type</code> (since the version 1.3)</li>
+ <li><code>type &gt; type</code> (since the version 1.3)</li>
+ <li><code>type , type</code> (original syntax)</li>
+ </ul>
+ For example <code>incollection,article,inproceedings,article</code> means that all the
+ BibTeX's <code>@incollection</code> entries will be displayed as <code>@article</code> entries.
+ The same thing for the <code>@inproceedings</code>.<br>
+ So, the specified value for this parameters <strong>must</strong> be a list of pairs.<br>
+ An alternative syntax is: <code>type=&gt;type[,type=&gt;type...]</code>. With the same example a above,
+ the value should be <code>incollection=&gt;article,inproceedings=&gt;article</code>.
+ </td></tr>
+ <tr><td valign="top"><code>xml-verbatim</code></td>
+ <td valign="top">
+ If this parameter was given, Bib2ML will generate a verbatim text that corresponds to the XML specification of the entries. This text is put just below the BibTeX verbatim text.
+ </td></tr>
+ </table></p>
+
+ <a name="generator_Extended"></a><h3>5.2. Generator Extended</h3>
+
+ <p>The generator <code>Extended</code> is an extension of <code>HTML</code>. Its purpose is to provide some additional features.</p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>NEW SUPPORTED FIELDS</i></td></tr>
+ <tr><td valign="top"><code>abstract</code></td>
+ <td valign="top">is the abstract associated to the entry (in most of the case, it is written
+ at the begining of the paper's article).
+ </td></tr>
+ <tr><td valign="top"><code>adsurl</code></td>
+ <td valign="top">is an URL from the Astrophysics Citation Reference System which is corresponds
+ to the entry. This field supports the URL's protocols
+ <code>ftp:</code>, <code>file:</code>, <code>https:</code>,
+ <code>gopher:</code>, <code>mailto:</code> and <code>http:</code> (this last is the default).
+ </td></tr>
+ <tr><td valign="top"><code>doi</code></td>
+ <td valign="top">is the Document Object Identifier (DOI) which is assumed to be an URL
+ linked to a document on Internet. This field supports the URL's protocols
+ <code>ftp:</code>, <code>file:</code>, <code>https:</code>,
+ <code>gopher:</code>, <code>mailto:</code> and <code>http:</code> (this last is the default).
+ </td></tr>
+ <tr><td valign="top"><code>isbn</code></td>
+ <td valign="top">is the <a href="http://www.isbn.org/">ISBN number</a> of the entry.
+ </td></tr>
+ <tr><td valign="top"><code>issn</code></td>
+ <td valign="top">is the <a href="http://www.issn.org/">ISSN number</a> of the entry.
+ </td></tr>
+ <tr><td valign="top"><code>keywords</code></td>
+ <td valign="top">is list of the keywords associated to the entry (in most of the case, they
+ are mentionned at the begining of the paper's article).
+ </td></tr>
+ <tr><td valign="top"><code>localfile</code></td>
+ <td valign="top">is the path (on your local host) to a electronical version of
+ the document that is described by the entry (I recommended to put only
+ a PDF or a Postscript file here).<br>
+ If this field was present and the corresponding file was found, Bib2ML
+ generates a link to this into the entry's page.<br>
+ See the parameters of this generator to influence the default location of the
+ electronical files.
+ </td></tr>
+ <tr><td valign="top"><code>readers</code></td>
+ <td valign="top">is a list of people who read this entry. The value of this field <strong>must</strong>
+ support the <a href="#format_names">BibTeX's syntax for names</a>.
+ </td></tr>
+ <tr><td valign="top"><code>url</code></td>
+ <td valign="top">is an URL associated to the entry. This field supports the URL's protocols
+ <code>ftp:</code>, <code>file:</code>, <code>https:</code>,
+ <code>gopher:</code>, <code>mailto:</code> and <code>http:</code> (this last is the default).
+ </td></tr>
+ <tr><td valign="top"><code>pdf</code></td>
+ <td valign="top">is an URL associted to the entry with
+ corresponds to a PDF file. This field supports the URL's protocols
+ <code>ftp:</code>, <code>file:</code>, <code>https:</code>,
+ <code>gopher:</code>, <code>mailto:</code> and <code>http:</code>.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>NEW FEATURES</i></td></tr>
+ <tr><td valign="top">
+ In the entry's pages:<ul>
+ <li>The new fields are added into the generated table (except for <code>abstract</code> and <code>keywords</code>).</li>
+ <li>The values of the fields <code>abstract</code> and <code>keywords</code> are put inside a specific section.</li>
+ </ul>
+ </td></tr>
+ <tr><td valign="top">
+ The overview page is extended with the list of all the authors.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>NEW GENERATOR'S PARAMETERS</i></td></tr>
+ <tr><td valign="top"><code>absolute-source=<u>path</u></code></td>
+ <td valign="top">
+ is the absolute path of the directory where the downloadable documents could be found
+ (see the field <code>localfile</code> for details about the downloadable documents).<br>
+ The parameters <code>absolute-source</code>, <code>relative-source</code> and
+ <code>target-url</code> are mutually exclusive.
+ </td></tr>
+ <tr><td valign="top"><code>backslash</code></td>
+ <td valign="top">
+ if presents, indicates that backslashes will be removed from the link fields (url,ftp...).
+ </td></tr>
+ <tr><td valign="top"><code>doc-repository=<u>path</u></code></td>
+ <td valign="top">
+ if presents, indicates the directory where are stored the electronical documents. This option assumes hat electronical documents have a name similar to the BibTeX key. For example the entry with the key <code>Galland.esm00</code> could have an associated electronical document with its name equals to one of <code>Galland.esm00.pdf</code>, <code>Galland.esm00.PDF</code>, <code>Galland.esm00.ps</code> or <code>Galland.esm00.PS</code>.
+ </td></tr>
+ <tr><td valign="top"><code>nodownload</code></td>
+ <td valign="top">
+ if presents, indicates that no link to the electronic
+ documents will be generated. By extension, if
+ presents no copy of there files will be made.
+ </td></tr>
+ <tr><td valign="top"><code>relative-source=<u>path</u></code></td>
+ <td valign="top">
+ is the relative path of the directory where the downloadable documents could be found
+ (see the field <code>localfile</code> for details about the downloadable documents).
+ This path is relative to the directory where the BibTeX file is located.<br>
+ The parameters <code>absolute-source</code>, <code>relative-source</code> and
+ <code>target-url</code> are mutually exclusive.
+ </td></tr>
+ <tr><td valign="top"><code>target-url=<u>url</u></code></td>
+ <td valign="top">
+ is an URL where the downloadable documents could be find. It means that
+ if this URL was specified, Bib2ML assumes that all the files
+ could be download from the specified URL. It means also that
+ no copy will be made by Bib2ML.<br>
+ The parameters <code>absolute-source</code>, <code>relative-source</code> and
+ <code>target-url</code> are mutually exclusive.
+ </td></tr>
+ </table></p>
+
+ <a name="generator_Domain"></a><h3>5.3. Generator Domain</h3>
+
+ <p>The generator <code>Domain</code> is an extension of <code>Extended</code>. Its purpose is to provide some additional features about the scientifical domains of the entries.</p>
+
+ <p>This generator introduces the concept of &laquo;domain&raquo; which corresponds to the name of a scientifical context/domain. An entry could be inside one or more domains.</p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>NEW SUPPORTED FIELDS</i></td></tr>
+ <tr><td valign="top"><code>domain</code></td>
+ <td valign="top">is the first domain in which this entry was.<br>
+ This field does not overset the previous domain's setting (except for
+ <code>domain</code>).
+ </td></tr>
+ <tr><td valign="top"><code>domains</code></td>
+ <td valign="top">is a list of domains in which this entry was. The domain's separator is the character '<code>:</code>'.<br>
+ This field does not overset the previous domain's setting (except for
+ <code>domains</code>).
+ </td></tr>
+ <tr><td valign="top"><code>nddomain</code></td>
+ <td valign="top">is the second domain in which this entry was.<br>
+ This field does not overset the previous domain's setting (except for
+ <code>nddomain</code>).
+ </td></tr>
+ <tr><td valign="top"><code>rddomain</code></td>
+ <td valign="top">is the third domain in which this entry was.<br>
+ This field does not overset the previous domain's setting (except for
+ <code>rddomain</code>).
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>NEW FEATURES</i></td></tr>
+ <tr><td valign="top">
+ Inside the entry's page, a section with the other entries inside the same domains was added. The entries of this list are grouped by domains and sorted by authors.
+ </td></tr>
+ <tr><td valign="top">
+ One <i>domain-view</i> page which contains all the entries grouped by domain and sorted by authors and publication date. This page could be overwriting by subclasses of this generator to provide antoher kind of domain-view.
+ </td></tr>
+ </table></p>
+
+ <a name="generator_XML"></a><h3>5.4. Generator XML</h3>
+
+ <p>The generator called <code>XML</code> is the default XML generator of Bib2ML. Its purpose is to generate a basic content which respects the XML <a href="./bibtexml_dtd.html">DTD</a> defined by <a href="http://bibtexml.sf.net/">BibteXML</a>.</p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>SUPPORTED FIELDS</i></td></tr>
+ <tr><td valign="top">
+ See this <a href="#table_HTMLfields">table</a> and the definition of the BibteXML's <a href="./bibtexml_dtd.html">DTD</a>.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>GENERATOR'S PARAMETERS</i></td></tr>
+ <tr><td valign="top"><code>stdout</code></td>
+ <td valign="top">
+ If presents, this option force Bib2ML to output the files onto the standard output instead of files.
+ </td></tr>
+ <tr><td valign="top"><code>xml-encoding=<u>encoding</u></code></td>
+ <td valign="top">
+ is character encoding which will be put into the header of the generated XML file.
+ All values for the character encoding supported by the XML specifications are allowed (<code>ISO-8859-1</code>, <code>UTF8</code>...). The default value is <code>ISO-8859-1</code>.
+ </td></tr>
+ </table></p>
+
+ <a name="generator_SQL"></a><h3>5.5. Generator SQL</h3>
+
+ <p>The generator called <code>SQL</code> is the default SQL generator of Bib2ML. Its purpose is to generate a basic content which respects the SQL schema illustrated by the following figure.</p>
+
+ <p style="text-align: center;"><a href="./sql_schema.png"><img src="./sql_schema_small.png"></a></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" align="center"><i>SUPPORTED FIELDS</i></td></tr>
+ <tr><td valign="top">
+ See this <a href="#table_HTMLfields">table</a>.
+ </td></tr>
+ </table></p>
+
+ <p><table border="1" cellspacing="0" cellpadding="5" width="100%">
+ <tr><td bgcolor="#cccccc" colspan="2" align="center"><i>GENERATOR'S PARAMETERS</i></td></tr>
+ <tr><td valign="top"><code>sql-encoding=<u>name</u></code></td>
+ <td valign="top">
+ Defines the character encoding used to generate the SQL script.
+ </td></tr>
+ <tr><td valign="top"><code>sql-engine=<u>name</u></code></td>
+ <td valign="top">
+ Defines the SQL engine for which the SQL script should be generated.
+ The supported engines are: "mysql" and "pgsql".
+ </td></tr>
+ <tr><td valign="top"><code>stdout</code></td>
+ <td valign="top">
+ If presents, this option force Bib2ML to output the files onto the standard output instead of files.
+ </td></tr>
+ </table></p>
+
+ <hr width="100%">
+
+ <a name="themes"></a><h2>6. Supported Themes</h2>
+
+ Bib2ML permits to select a theme which influence the look of the generated pages. You could select a theme which the command-line option <code>--theme</code> and list all the supported themes which <code>--themelist</code>.</p>
+
+ <a name="theme_Simple"></a><h2>6.1. Theme Simple</h2>
+
+ <p>The theme <code>Simple</code> is the default theme. It is quiet similar to the default output of <a href="http://java.sun.com/j2se/javadoc/">JavaDoc</a>.</p>
+ <center><a href="./capture2.png"><img src="./capture2.png" width="50%"></a></center>
+
+ <a name="theme_Dyna"></a><h2>6.2. Theme Dyna</h2>
+
+ <p>The theme <code>Dyna</code> is an experimental theme. It uses its own look policy and includes some dynamical features such a collapsing lists...</p>
+
+ <center><a href="./capture.png"><img src="./capture.png" width="50%"></a></center>
+
+ <a name="theme_contrib"></a><h2>6.3. Contribute</h2>
+
+ <p>Do you want to have your own theme for the HMTL generators? If yes, you should write your own theme in Perl.</p>
+
+ <p>Create a Perl class which extends the class <code>Bib2HTML::Generator::Theme</code> and implements the required functions. To have any example of implementation, see the two default themes: <code>Bib2HTML::Generator::Theme::Simple</code> and <code>Bib2HTML::Generator::Theme::Dyna</code>. Caution: you must put your theme class inside the same directory as <code>Simple</code> and <code>Dyna</code>.</p>
+
+ <hr width="100%">
+
+ <a name="languages"></a><h2>7. Supported Languages</h2>
+
+ <p>Bib2ML supports the French, the English, Spanish (thanks to Sebastian), Portuguese (thanks to João) and Italian (thanks to Cristian).</p>
+
+ <a name="languages_contrib"></a><h2>7.1. Contribute</h2>
+
+ <p>If you want to add the support for a specifical language, you need to create the following files inside the language directory (<code>/path/to/bib2ml/Bib2HTML/Generator/Lang</code>):<ul>
+ <li>copy the file <code>ENGLISH</code> as <code>LANGUAGE</code> (where <code>LANGUAGE</code> is the name of your language);</li>
+ <li>edit the file <code>LANGUAGE</code>; each line must start with the string identifier, which must be unchanged, followed by the string to display (see below for the syntax);</li>
+ <li>Repeat the two previous steps for each file for which the name starts by <code>ENGLISH</code>.</li>
+ <li>The file associated to an HTML generation has the name <code>&lt;LANGUAGE&gt;.&lt;GENERATION_NAME&gt;</code>.</li>
+ <li>The file associated to an HTML theme has the name <code>&lt;LANGUAGE&gt;.Theme.&lt;THEME_NAME&gt;</code>.</li>
+ </ul></p>
+
+ <p>The syntax of the language files is:<ul>
+ <li>Each line starting with '<code>#</code>' is a comment</li>
+ <li>Each language line must respect the syntax: <code>IDENTIFIER = STRING</code> where <code>IDENTIFIER</code> is the name of the string specified inside the Perl source code of Bib2ML, and <code>STRING</code> is the value of the string</li>
+ <li>Empty lines are ignored</li>
+ <li>If the string value finished by the character backslash (<code>\</code>), the value is assumed to continue on the next line (the spaces characters starting the next line will be ignored)</li>
+ <li>If the string value contains a substring of the form <code>{{NAME}}</code>, the substring will be replaced by the result of a call to the Perl function called <code>NAME</code></li>
+ <li>If the string value contains a substring of the form <code>#NUMBER</code>, the substring will be dynamically replaced by the value of the <code>NUMBER</code>-th parameter passed to the Perl function which permits to get the value.</li>
+ </ul></p>
+
+ <hr width="100%">
+
+ <a name="license"></a><h2>8. License</h2>
+
+ <p>Bib2ML is under the GNU GPL</a> license.</p>
+
+ <p>Bib2ML is a converter of BibTeX data files into HTML pages.<br>
+ Copyright &copy; 1998-2006 Stéphane GALLAND &lt;galland@arakhne.org&gt;</p>
+
+ <p>This program is free software; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a> as published by the <a href="http://www.fsf.org/">Free Software Foundation</a>; either version 2 of the License, or (at your option) any later version.</p>
+
+ <p> This program is distributed in the hope that it will be useful, but <strong>WITHOUT ANY WARRANTY</strong>; without even the implied warranty of <strong>MERCHANTABILITY</strong> or <strong>FITNESS FOR A PARTICULAR PURPOSE</strong>. See the GNU General Public License for more details.</p>
+
+ <p>You should have received a copy of the GNU General Public License along with this program; see the file <code>COPYING</code>. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</p>
+
+ <hr width="100%">
+
+ <a name="contributor"></a><h2>9. Contributors</h2>
+
+ <p>I would like to thank the following people for generously taking the
+ time to point out bugs, suggest improvements, or send me Bib2ML
+ patches. Many thanks to:<ul>
+ <li><a href="mailto:joao.lourenco@di.fct.unl.pt">João LOURENCO</a> has:<ul>
+ <li>submited the Portuguese translations.</li>
+ </ul></li>
+ <li><a href="mailto:michail@mpi-sb.mpg.de">Dimitris MICHAIL</a> has:<ul>
+ <li>added TeX commands.</li>
+ </ul></li>
+ <li><a href="mailto:preining@logic.at">Norbert PREINING</a> has:<ul>
+ <li>added the function <code>uniq</code> to eliminate redundant
+ values from a sorted list.</li>
+ <li>added the TeX's commands '<code>\#</code>' and '<code>\L</code>'.</li>
+ <li>added a warning message inside <code>__texcommand_map_to</code> when
+ a accentuated TeX command was encoutered but
+ Bib2ML does not known any corresponding HTML character
+ (e.g. <code>\'b</code>).</li>
+ <li>fixed a bug inside <code>__texcommand_map_to</code> which does not
+ return the right variable's value.</li>
+ <li>fixed two bugs inside <code>save_generator_parameter</code> which prevent
+ to properly set the parameters' values.</li>
+ </ul></li>
+ <li><a href="mailto:sebastian.rodriguez@utbm.fr">Sebastian RODRIGUEZ</a> has:<ul>
+ <li>reported bugs and submited the Spanish translations.</li>
+ </ul></li>
+ <li><a href="mailto:zinser@zinser.no-ip.info">Martin P.J. ZINSER</a> has:<ul>
+ <li>fixed a bug inside the function <code>addentry</code>
+ which permits to add an BibTeX's field.
+ All the fields' names are lower-cased to avoid
+ setting problems.</li>
+ </ul></li>
+ <li><a href="mailto:cri@linux.it">Cristian RIGAMONTI</a> has:<ul>
+ <li>submited the Italian translations.</li>
+ </ul></li>
+ <li><a href="mailto:paolini@di.unito.it">Luca PAOLINI</a> has:<ul>
+ <li>submited a patch that permits to support more letters with the caron accent.</li>
+ </ul></li>
+ <li><a href="mailto:gabrisa@optics.szfki.kfki.hu">Aurel GABRIS</a> has:<ul>
+ <li>submited a patch that add the generator parameters <code>max-titlelength-overview</code> and <code>show-journalparams-overview</code>.</li>
+ </ul></li>
+ <li><a href="mailto:loew@mathematik.tu-darmstadt.de">Tobias LOEW</a> has:<ul>
+ <li>patched the TeX parser to support some roman characters.</li>
+ </ul></li>
+ <li><a href="mailto:gasper.jaklic@fmf.uni-lj.si">Gasper JAKLIC</a> has:<ul>
+ <li>patched the TeX parser to support some locale characters;</li>
+ <li>reproduced high priority bugs and mismatches.</li>
+ </ul></li>
+ <li><a href="mailto:olivier.hugues@gmail.com">Olivier HUGUES</a> has:<ul>
+ <li>reported bugs in bib2sql tool.</li>
+ </ul></li>
+
+ </ul></p>
+
+ <hr width="100%">
+
+ <a name="bugreport"></a><h2>10. Bug Reporting</h2>
+
+ <p>You could submit bugs, suggest improvements, or send Bib2ML patches by using one of the following methods:<ul>
+ <li>send an email to <a href="mailto:galland@arakhne.org"><code>galland@arakhne.org</code></a>;</li>
+ </ul></p>
+
+ <p align="right"><small>Copyright 2004-11 &copy; Stéphane GALLAND<br><code>&lt;galland@arakhne.org&gt;</code></small></p>
+
+ </body>
+</html>
diff --git a/biblio/bibtex/utils/bib2ml/doc/mustwork.gif b/biblio/bibtex/utils/bib2ml/doc/mustwork.gif
new file mode 100644
index 0000000000..8f643bcc02
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/mustwork.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/not-validated.gif b/biblio/bibtex/utils/bib2ml/doc/not-validated.gif
new file mode 100644
index 0000000000..7a07946fc6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/not-validated.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/optional.gif b/biblio/bibtex/utils/bib2ml/doc/optional.gif
new file mode 100644
index 0000000000..5fb591bef3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/optional.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/required.gif b/biblio/bibtex/utils/bib2ml/doc/required.gif
new file mode 100644
index 0000000000..447dd84312
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/required.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/requiredor.png b/biblio/bibtex/utils/bib2ml/doc/requiredor.png
new file mode 100644
index 0000000000..6bc13934eb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/requiredor.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/requiredor2.png b/biblio/bibtex/utils/bib2ml/doc/requiredor2.png
new file mode 100644
index 0000000000..b7d98879c8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/requiredor2.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/sql_schema.png b/biblio/bibtex/utils/bib2ml/doc/sql_schema.png
new file mode 100644
index 0000000000..e2bda8d8e6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/sql_schema.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/sql_schema_small.png b/biblio/bibtex/utils/bib2ml/doc/sql_schema_small.png
new file mode 100644
index 0000000000..85080ac85f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/sql_schema_small.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/validated.gif b/biblio/bibtex/utils/bib2ml/doc/validated.gif
new file mode 100644
index 0000000000..12b60befe7
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/validated.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/doc/work.gif b/biblio/bibtex/utils/bib2ml/doc/work.gif
new file mode 100644
index 0000000000..5fb591bef3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/doc/work.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2html_en.pod b/biblio/bibtex/utils/bib2ml/man/bib2html_en.pod
new file mode 100644
index 0000000000..a84355fb61
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2html_en.pod
@@ -0,0 +1,209 @@
+=head1 NAME
+
+bib2html - A perl script that generates an HTML documentation for a BibTeX database
+
+
+=head1 SYNOPSYS
+
+bib2html [options] F<file> [F<file> ...]
+
+=head1 DESCRIPTION
+
+bib2html is a script which permits to generate a set of HTML pages for
+the entries of BibTeX files.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+This option permits to generate, or not, a verbatim of the
+BibTeX entry code.
+
+=item B<--[no]checknames>
+
+This option permits to check if the some author's names are
+similar and generates a set of warnings about each of them.
+
+=item B<--cvs>
+
+If specified, this option disables the deletion of the subfiles
+'.cvs', 'CVS' and 'CVSROOT' in the output directory.
+
+=item B<-d> I<name>[=I<value>]
+
+See B<--generatorparam>.
+
+=item B<--doctitle> I<text>
+
+Sets the title that appears in the main page.
+
+=item B<-f>
+
+=item B<--force>
+
+Forces to overwrite into the output directory.
+
+=item B<-g> I<class>
+
+=item B<--generator> I<class>
+
+Sets the generator to use. I<class> must be a valid Perl class.
+
+=item B<--generatorparam> I<name>[=I<value>]
+
+Sets a generator param. It must be a I<key>=I<value> pair or
+simply a I<name>.
+Example: "target=thisdirectory" defines the parameter target
+with corresponding value "thisdirectory". The specified
+parameters which are not supported by the generator are
+ignored.
+
+=item B<--generatorparams>
+
+Shows the list of supported parameters, and their
+semantics for the current generator.
+
+=item B<--genlist>
+
+Shows the list of supported generators.
+
+=item B<-?>
+
+=item B<-h>
+
+Show the list of available options.
+
+=item B<--help>
+
+See B<--man>.
+
+=item B<--jabref>
+
+The generator will translate JabRef's groups
+into Bib2HTML's domains.
+
+=item B<--lang> I<name>
+
+Sets the language used by the generator.
+
+=item B<--langlist>
+
+Shows the list of supported language.
+
+=item B<--man>
+
+=item B<--manual>
+
+Show the manual page.
+
+=item B<-o> F<file>
+
+=item B<--output> F<file>
+
+Sets the directory or the F<file> in which the documentation will be put.
+
+=item B<-p> F<file>
+
+=item B<--preamble> F<file>
+
+Sets the name of the F<file> to read to include some TeX preambles.
+You could use this option to dynamicaly defined some unsupported
+LaTeX commands.
+
+=item B<--protect> F<shell_wildcard>
+
+If specified, this option disables the deletion in the target
+directory of the subfiles that match the specified shell
+expression.
+
+=item B<-q>
+
+Don't be verbose: only error messages are displayed.
+
+=item B<--[no]sortw>
+
+Shows (or not) a sorted list of warnings.
+
+=item B<--stdout>
+
+Force the output of the generated files onto the standard output.
+This option is equivalent to C<-d stdout>.
+
+=item B<--svn>
+
+If specified, this option disables the deletion of the subfiles
+'.svn' and 'svn' in the output directory.
+
+=item B<--texcmd>
+
+Shows the list of supported LaTeX commands.
+
+=item B<--theme> I<name>
+
+Sets the theme used by the generator.
+
+=item B<--themelist>
+
+Shows the list of supported themes.
+
+=item B<-v>
+
+Be more verbose.
+
+=item B<--version>
+
+Show the version of this script.
+
+=item B<--[no]warning>
+
+If false, the warning are converted to errors.
+
+=item B<--windowtitle> I<text>
+
+Sets the title that appears as the window's title.
+
+=back
+
+=head1 LICENSE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTORS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2html_fr.pod b/biblio/bibtex/utils/bib2ml/man/bib2html_fr.pod
new file mode 100644
index 0000000000..2df2a437cd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2html_fr.pod
@@ -0,0 +1,206 @@
+=head1 NOM
+
+bib2html - Script Perl générant des pages HTML à partir de fichiers BibTeX
+
+=head1 SYNOPSIS
+
+bib2html [options] F<fichier> [F<fichier> ...]
+
+=head1 DESCRIPTION
+
+bib2html est un script permettant de generer des pages HTML structurant et décrivant le contenu d'une base bibliographique écrite dans le format BibTeX.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+Génération (ou non) du code BibTeX dans les pages HTML.
+
+=item B<--[no]checknames>
+
+Vérification de la cohérence des noms des auteurs. Un avertissement sera
+exprimée chaque fois que bib2html détectera des noms dupliqués ou des
+fautes de frappe.
+
+=item B<--cvs>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.cvs', 'CVS' et 'CVSROOT' dans le répertoire destination.
+
+=item B<-d> I<nom>[=I<valeur>]
+
+Voir B<--generatorparam>.
+
+=item B<--doctitle> I<texte>
+
+Initialisation du titre de la page principale.
+
+=item B<-f>
+
+=item B<--force>
+
+Force l'écriture des pages HTML dans le répertoire destination.
+
+=item B<-g> I<classe>
+
+=item B<--generator> I<classe>
+
+Spécification du générateur à utiliser. I<class> doit être une classe Perl
+valide.
+
+=item B<--generatorparam> I<nom>[=I<valeur>]
+
+Initialisation de la valeur d'un paramètre du générateur. Ce paramètre doit être une paire I<nom>=I<valeur> ou simplement un I<nom>.
+Exemple: "target=thisdirectory" défini le paramètre 'target'
+avec la valeur "thisdirectory".
+
+=item B<--generatorparams>
+
+Affiche la liste des paramètres supportés par le générateur.
+
+=item B<--genlist>
+
+Affiche la liste des générateurs supportés.
+
+=item B<-?>
+
+=item B<-h>
+
+Affiche la liste des options de bib2html.
+
+=item B<--help>
+
+Voir B<--man>.
+
+=item B<--jabref>
+
+Le générateur traduira les groupes de JabRef
+en domaines Bib2HTML.
+
+=item B<--lang> I<nom>
+
+Initialisation de la langue à utiliser.
+
+=item B<--langlist>
+
+Affiche la liste des langues supportées.
+
+=item B<--man>
+
+=item B<--manual>
+
+Affiche la page de manual.
+
+=item B<-o> F<fichier>
+
+=item B<--output> F<fichier>
+
+Initialise le répertoire où la documentation générée sera déposées.
+
+=item B<-p> F<fichier>
+
+=item B<--preamble> F<fichier>
+
+Initialise le nom du F<fichier> à lire et contenant des préambules TeX.
+Vous pouvez utiliser cette option pour définir des commandes LaTeX
+que ne supporte pas encore bib2html.
+
+=item B<--protect> F<shell_wildcard>
+
+Si spécifiée, cette option interdit la suppression dans le répertoire
+destination des sous-fichiers correspondant à l'expression shell
+spécifiée.
+
+=item B<-q>
+
+Mode non verbeux: seuls les messages d'erreurs sont affichés.
+
+=item B<--[no]sortw>
+
+Tri (ou non) les avertissement par ordre croissant des lignes où
+ils apparaissent.
+
+=item B<--stdout>
+
+Force la sortie des fichiers générés sur la sortie standard.
+Cette option est équivalente à C<-d stdout>.
+
+=item B<--svn>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.svn' et 'svn' dans le répertoire destination.
+
+=item B<--texcmd>
+
+Affiche la liste des commandes TeX supportées.
+
+=item B<--theme> I<name>
+
+Initialise le thème devant être utilisé par le générateur.
+
+=item B<--themelist>
+
+Affiche la liste des thèmes disponibles.
+
+=item B<-v>
+
+Augmente la verbosité de bib2html.
+
+=item B<--version>
+
+Affiche la version de ce script.
+
+=item B<--[no]warning>
+
+Si faux, les avertissements sont convertis en erreurs.
+
+=item B<--windowtitle> I<text>
+
+Initialise le titre des pages HTML devant apparaître dans
+la barre de titre des fenêtres du navigateur.
+
+=back
+
+=head1 LICENCE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTEURS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2sql_en.pod b/biblio/bibtex/utils/bib2ml/man/bib2sql_en.pod
new file mode 100644
index 0000000000..af9477cbe6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2sql_en.pod
@@ -0,0 +1,215 @@
+=head1 NAME
+
+bib2sql - A perl script that generates an SQL file for a BibTeX database
+
+
+=head1 SYNOPSYS
+
+bib2sql [options] F<file> [F<file> ...]
+
+=head1 DESCRIPTION
+
+bib2sql is a script which permits to generate a SQL file for
+the entries of BibTeX files.
+
+The generated SQL file is compliant with the following data structure:
+
+The bib2sql command is equivalent to:
+bib2html [options] F<file> [F<file> ...] -g XML
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+This option permits to generate, or not, a verbatim of the
+BibTeX entry code.
+
+=item B<--[no]checknames>
+
+This option permits to check if the some author's names are
+similar and generates a set of warnings about each of them.
+
+=item B<--cvs>
+
+If specified, this option disables the deletion of the subfiles
+'.cvs', 'CVS' and 'CVSROOT' in the output directory.
+
+=item B<-d> I<name>[=I<value>]
+
+See B<--generatorparam>.
+
+=item B<--doctitle> I<text>
+
+Sets the title that appears in the main page.
+
+=item B<-f>
+
+=item B<--force>
+
+Forces to overwrite into the output directory.
+
+=item B<-g> I<class>
+
+=item B<--generator> I<class>
+
+Sets the generator to use. I<class> must be a valid Perl class.
+
+=item B<--generatorparam> I<name>[=I<value>]
+
+Sets a generator param. It must be a I<key>=I<value> pair or
+simply a I<name>.
+Example: "target=thisdirectory" defines the parameter target
+with corresponding value "thisdirectory". The specified
+parameters which are not supported by the generator are
+ignored.
+
+=item B<--generatorparams>
+
+Shows the list of supported parameters, and their
+semantics for the current generator.
+
+=item B<--genlist>
+
+Shows the list of supported generators.
+
+=item B<-?>
+
+=item B<-h>
+
+Show the list of available options.
+
+=item B<--help>
+
+See B<--man>.
+
+=item B<--jabref>
+
+The generator will translate JabRef's groups
+into Bib2HTML's domains.
+
+=item B<--lang> I<name>
+
+Sets the language used by the generator.
+
+=item B<--langlist>
+
+Shows the list of supported language.
+
+=item B<--man>
+
+=item B<--manual>
+
+Show the manual page.
+
+=item B<-o> F<file>
+
+=item B<--output> F<file>
+
+Sets the directory or the F<file> in which the documentation will be put.
+
+=item B<-p> F<file>
+
+=item B<--preamble> F<file>
+
+Sets the name of the F<file> to read to include some TeX preambles.
+You could use this option to dynamicaly defined some unsupported
+LaTeX commands.
+
+=item B<--protect> F<shell_wildcard>
+
+If specified, this option disables the deletion in the target
+directory of the subfiles that match the specified shell
+expression.
+
+=item B<-q>
+
+Don't be verbose: only error messages are displayed.
+
+=item B<--[no]sortw>
+
+Shows (or not) a sorted list of warnings.
+
+=item B<--stdout>
+
+Force the output of the generated files onto the standard output.
+This option is equivalent to C<-d stdout>.
+
+=item B<--svn>
+
+If specified, this option disables the deletion of the subfiles
+'.svn' and 'svn' in the output directory.
+
+=item B<--texcmd>
+
+Shows the list of supported LaTeX commands.
+
+=item B<--theme> I<name>
+
+Sets the theme used by the generator.
+
+=item B<--themelist>
+
+Shows the list of supported themes.
+
+=item B<-v>
+
+Be more verbose.
+
+=item B<--version>
+
+Show the version of this script.
+
+=item B<--[no]warning>
+
+If false, the warning are converted to errors.
+
+=item B<--windowtitle> I<text>
+
+Sets the title that appears as the window's title.
+
+=back
+
+=head1 LICENSE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+S<Copyright (c) 2011 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTORS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<bib2html>, L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2sql_fr.pod b/biblio/bibtex/utils/bib2ml/man/bib2sql_fr.pod
new file mode 100644
index 0000000000..536a047011
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2sql_fr.pod
@@ -0,0 +1,212 @@
+=head1 NOM
+
+bib2sql - Script Perl générant des fichiers SQL à partir de fichiers BibTeX
+
+=head1 SYNOPSIS
+
+bib2sql [options] F<fichier> [F<fichier> ...]
+
+=head1 DESCRIPTION
+
+bib2sql est un script permettant de generer des fichiers SQL structurant et décrivant le contenu d'une base bibliographique écrite dans le format BibTeX.
+
+Le fichier SQL généré est conforme aux spécifications suivantes :
+
+Cette commande est équivalente à:
+bib2html [options] F<fichier> [F<fichier> ...] -g XML
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+Génération (ou non) du code BibTeX dans les pages HTML.
+
+=item B<--[no]checknames>
+
+Vérification de la cohérence des noms des auteurs. Un avertissement sera
+exprimée chaque fois que bib2html détectera des noms dupliqués ou des
+fautes de frappe.
+
+=item B<--cvs>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.cvs', 'CVS' et 'CVSROOT' dans le répertoire destination.
+
+=item B<-d> I<nom>[=I<valeur>]
+
+Voir B<--generatorparam>.
+
+=item B<--doctitle> I<texte>
+
+Initialisation du titre de la page principale.
+
+=item B<-f>
+
+=item B<--force>
+
+Force l'écriture des pages HTML dans le répertoire destination.
+
+=item B<-g> I<classe>
+
+=item B<--generator> I<classe>
+
+Spécification du générateur à utiliser. I<class> doit être une classe Perl
+valide.
+
+=item B<--generatorparam> I<nom>[=I<valeur>]
+
+Initialisation de la valeur d'un paramètre du générateur. Ce paramètre doit être une paire I<nom>=I<valeur> ou simplement un I<nom>.
+Exemple: "target=thisdirectory" défini le paramètre 'target'
+avec la valeur "thisdirectory".
+
+=item B<--generatorparams>
+
+Affiche la liste des paramètres supportés par le générateur.
+
+=item B<--genlist>
+
+Affiche la liste des générateurs supportés.
+
+=item B<-?>
+
+=item B<-h>
+
+Affiche la liste des options de bib2html.
+
+=item B<--help>
+
+Voir B<--man>.
+
+=item B<--jabref>
+
+Le générateur traduira les groupes de JabRef
+en domaines Bib2HTML.
+
+=item B<--lang> I<nom>
+
+Initialisation de la langue à utiliser.
+
+=item B<--langlist>
+
+Affiche la liste des langues supportées.
+
+=item B<--man>
+
+=item B<--manual>
+
+Affiche la page de manual.
+
+=item B<-o> F<fichier>
+
+=item B<--output> F<fichier>
+
+Initialise le répertoire où la documentation générée sera déposées.
+
+=item B<-p> F<fichier>
+
+=item B<--preamble> F<fichier>
+
+Initialise le nom du F<fichier> à lire et contenant des préambules TeX.
+Vous pouvez utiliser cette option pour définir des commandes LaTeX
+que ne supporte pas encore bib2html.
+
+=item B<--protect> F<shell_wildcard>
+
+Si spécifiée, cette option interdit la suppression dans le répertoire
+destination des sous-fichiers correspondant à l'expression shell
+spécifiée.
+
+=item B<-q>
+
+Mode non verbeux: seuls les messages d'erreurs sont affichés.
+
+=item B<--[no]sortw>
+
+Tri (ou non) les avertissement par ordre croissant des lignes où
+ils apparaissent.
+
+=item B<--stdout>
+
+Force la sortie des fichiers générés sur la sortie standard.
+Cette option est équivalente à C<-d stdout>.
+
+=item B<--svn>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.svn' et 'svn' dans le répertoire destination.
+
+=item B<--texcmd>
+
+Affiche la liste des commandes TeX supportées.
+
+=item B<--theme> I<name>
+
+Initialise le thème devant être utilisé par le générateur.
+
+=item B<--themelist>
+
+Affiche la liste des thèmes disponibles.
+
+=item B<-v>
+
+Augmente la verbosité de bib2html.
+
+=item B<--version>
+
+Affiche la version de ce script.
+
+=item B<--[no]warning>
+
+Si faux, les avertissements sont convertis en erreurs.
+
+=item B<--windowtitle> I<text>
+
+Initialise le titre des pages HTML devant apparaître dans
+la barre de titre des fenêtres du navigateur.
+
+=back
+
+=head1 LICENCE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+S<Copyright (c) 2011 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTEURS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<bib2html>, L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2xml_en.pod b/biblio/bibtex/utils/bib2ml/man/bib2xml_en.pod
new file mode 100644
index 0000000000..a7b82bf6aa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2xml_en.pod
@@ -0,0 +1,214 @@
+=head1 NAME
+
+bib2xml - A perl script that generates an XML file for a BibTeX database
+
+
+=head1 SYNOPSYS
+
+bib2xml [options] F<file> [F<file> ...]
+
+=head1 DESCRIPTION
+
+bib2xml is a script which permits to generate a XML file for
+the entries of BibTeX files.
+
+The generated XML file is compliant with the DTD from http://bibtexml.sf.net
+
+The bib2xml command is equivalent to:
+bib2html [options] F<file> [F<file> ...] -g XML
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+This option permits to generate, or not, a verbatim of the
+BibTeX entry code.
+
+=item B<--[no]checknames>
+
+This option permits to check if the some author's names are
+similar and generates a set of warnings about each of them.
+
+=item B<--cvs>
+
+If specified, this option disables the deletion of the subfiles
+'.cvs', 'CVS' and 'CVSROOT' in the output directory.
+
+=item B<-d> I<name>[=I<value>]
+
+See B<--generatorparam>.
+
+=item B<--doctitle> I<text>
+
+Sets the title that appears in the main page.
+
+=item B<-f>
+
+=item B<--force>
+
+Forces to overwrite into the output directory.
+
+=item B<-g> I<class>
+
+=item B<--generator> I<class>
+
+Sets the generator to use. I<class> must be a valid Perl class.
+
+=item B<--generatorparam> I<name>[=I<value>]
+
+Sets a generator param. It must be a I<key>=I<value> pair or
+simply a I<name>.
+Example: "target=thisdirectory" defines the parameter target
+with corresponding value "thisdirectory". The specified
+parameters which are not supported by the generator are
+ignored.
+
+=item B<--generatorparams>
+
+Shows the list of supported parameters, and their
+semantics for the current generator.
+
+=item B<--genlist>
+
+Shows the list of supported generators.
+
+=item B<-?>
+
+=item B<-h>
+
+Show the list of available options.
+
+=item B<--help>
+
+See B<--man>.
+
+=item B<--jabref>
+
+The generator will translate JabRef's groups
+into Bib2HTML's domains.
+
+=item B<--lang> I<name>
+
+Sets the language used by the generator.
+
+=item B<--langlist>
+
+Shows the list of supported language.
+
+=item B<--man>
+
+=item B<--manual>
+
+Show the manual page.
+
+=item B<-o> F<file>
+
+=item B<--output> F<file>
+
+Sets the directory or the F<file> in which the documentation will be put.
+
+=item B<-p> F<file>
+
+=item B<--preamble> F<file>
+
+Sets the name of the F<file> to read to include some TeX preambles.
+You could use this option to dynamicaly defined some unsupported
+LaTeX commands.
+
+=item B<--protect> F<shell_wildcard>
+
+If specified, this option disables the deletion in the target
+directory of the subfiles that match the specified shell
+expression.
+
+=item B<-q>
+
+Don't be verbose: only error messages are displayed.
+
+=item B<--[no]sortw>
+
+Shows (or not) a sorted list of warnings.
+
+=item B<--stdout>
+
+Force the output of the generated files onto the standard output.
+This option is equivalent to C<-d stdout>.
+
+=item B<--svn>
+
+If specified, this option disables the deletion of the subfiles
+'.svn' and 'svn' in the output directory.
+
+=item B<--texcmd>
+
+Shows the list of supported LaTeX commands.
+
+=item B<--theme> I<name>
+
+Sets the theme used by the generator.
+
+=item B<--themelist>
+
+Shows the list of supported themes.
+
+=item B<-v>
+
+Be more verbose.
+
+=item B<--version>
+
+Show the version of this script.
+
+=item B<--[no]warning>
+
+If false, the warning are converted to errors.
+
+=item B<--windowtitle> I<text>
+
+Sets the title that appears as the window's title.
+
+=back
+
+=head1 LICENSE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTORS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<bib2html>, L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/man/bib2xml_fr.pod b/biblio/bibtex/utils/bib2ml/man/bib2xml_fr.pod
new file mode 100644
index 0000000000..afbfa31fbd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/man/bib2xml_fr.pod
@@ -0,0 +1,211 @@
+=head1 NOM
+
+bib2xml - Script Perl générant des fichiers XML à partir de fichiers BibTeX
+
+=head1 SYNOPSIS
+
+bib2xml [options] F<fichier> [F<fichier> ...]
+
+=head1 DESCRIPTION
+
+bib2xml est un script permettant de generer des fichiers XML structurant et décrivant le contenu d'une base bibliographique écrite dans le format BibTeX.
+
+Le fichier XML généré est conforme à la DTD de http://bibtexml.sf.net
+
+Cette commande est équivalente à:
+bib2html [options] F<fichier> [F<fichier> ...] -g XML
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-[no]b>
+
+=item B<--[no]bibtex>
+
+Génération (ou non) du code BibTeX dans les pages HTML.
+
+=item B<--[no]checknames>
+
+Vérification de la cohérence des noms des auteurs. Un avertissement sera
+exprimée chaque fois que bib2html détectera des noms dupliqués ou des
+fautes de frappe.
+
+=item B<--cvs>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.cvs', 'CVS' et 'CVSROOT' dans le répertoire destination.
+
+=item B<-d> I<nom>[=I<valeur>]
+
+Voir B<--generatorparam>.
+
+=item B<--doctitle> I<texte>
+
+Initialisation du titre de la page principale.
+
+=item B<-f>
+
+=item B<--force>
+
+Force l'écriture des pages HTML dans le répertoire destination.
+
+=item B<-g> I<classe>
+
+=item B<--generator> I<classe>
+
+Spécification du générateur à utiliser. I<class> doit être une classe Perl
+valide.
+
+=item B<--generatorparam> I<nom>[=I<valeur>]
+
+Initialisation de la valeur d'un paramètre du générateur. Ce paramètre doit être une paire I<nom>=I<valeur> ou simplement un I<nom>.
+Exemple: "target=thisdirectory" défini le paramètre 'target'
+avec la valeur "thisdirectory".
+
+=item B<--generatorparams>
+
+Affiche la liste des paramètres supportés par le générateur.
+
+=item B<--genlist>
+
+Affiche la liste des générateurs supportés.
+
+=item B<-?>
+
+=item B<-h>
+
+Affiche la liste des options de bib2html.
+
+=item B<--help>
+
+Voir B<--man>.
+
+=item B<--jabref>
+
+Le générateur traduira les groupes de JabRef
+en domaines Bib2HTML.
+
+=item B<--lang> I<nom>
+
+Initialisation de la langue à utiliser.
+
+=item B<--langlist>
+
+Affiche la liste des langues supportées.
+
+=item B<--man>
+
+=item B<--manual>
+
+Affiche la page de manual.
+
+=item B<-o> F<fichier>
+
+=item B<--output> F<fichier>
+
+Initialise le répertoire où la documentation générée sera déposées.
+
+=item B<-p> F<fichier>
+
+=item B<--preamble> F<fichier>
+
+Initialise le nom du F<fichier> à lire et contenant des préambules TeX.
+Vous pouvez utiliser cette option pour définir des commandes LaTeX
+que ne supporte pas encore bib2html.
+
+=item B<--protect> F<shell_wildcard>
+
+Si spécifiée, cette option interdit la suppression dans le répertoire
+destination des sous-fichiers correspondant à l'expression shell
+spécifiée.
+
+=item B<-q>
+
+Mode non verbeux: seuls les messages d'erreurs sont affichés.
+
+=item B<--[no]sortw>
+
+Tri (ou non) les avertissement par ordre croissant des lignes où
+ils apparaissent.
+
+=item B<--stdout>
+
+Force la sortie des fichiers générés sur la sortie standard.
+Cette option est équivalente à C<-d stdout>.
+
+=item B<--svn>
+
+Si spécifiée, cette option interdit la suppression des sous-fichiers
+'.svn' et 'svn' dans le répertoire destination.
+
+=item B<--texcmd>
+
+Affiche la liste des commandes TeX supportées.
+
+=item B<--theme> I<name>
+
+Initialise le thème devant être utilisé par le générateur.
+
+=item B<--themelist>
+
+Affiche la liste des thèmes disponibles.
+
+=item B<-v>
+
+Augmente la verbosité de bib2html.
+
+=item B<--version>
+
+Affiche la version de ce script.
+
+=item B<--[no]warning>
+
+Si faux, les avertissements sont convertis en erreurs.
+
+=item B<--windowtitle> I<text>
+
+Initialise le titre des pages HTML devant apparaître dans
+la barre de titre des fenêtres du navigateur.
+
+=back
+
+=head1 LICENCE
+
+S<GNU Public License (GPL)>
+
+=head1 COPYRIGHT
+
+S<Copyright (c) 1998-06 Stéphane Galland E<lt>galland@arakhne.orgE<gt>>
+
+=head1 CONTRIBUTEURS
+
+=over
+
+=item S<Aurel GABRIS E<lt>L<gabrisa@optics.szfki.kfki.hu>E<gt>>
+
+=item S<Gasper JAKLIC E<lt>L<gasper.jaklic@fmf.uni-lj.si>E<gt>>
+
+=item S<Tobias LOEW E<lt>L<loew@mathematik.tu-darmstadt.de>E<gt>>
+
+=item S<Joao LOURENCO E<lt>L<joao.lourenco@di.fct.unl.pt>E<gt>>
+
+=item S<Dimitris MICHAIL E<lt>L<michail@mpi-sb.mpg.de>E<gt>>
+
+=item S<Luca PAOLINI E<lt>L<paolini@di.unito.it>E<gt>>
+
+=item S<Norbert PREINING E<lt>L<preining@logic.at>E<gt>>
+
+=item S<Cristian RIGAMONTI E<lt>L<cri@linux.it>E<gt>>
+
+=item S<Sebastian RODRIGUEZ E<lt>L<sebastian.rodriguez@utbm.fr>E<gt>>
+
+=item S<Martin P.J. ZINSER E<lt>L<zinser@zinser.no-ip.info>E<gt>>
+
+=item S<Olivier HUGHES E<lt>L<olivier.hugues@gmail.com>E<gt>>
+
+=back
+
+=head1 SEE ALSO
+
+L<bib2html>, L<latex>, L<bibtex>
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Checker/Names.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Checker/Names.pm
new file mode 100644
index 0000000000..2c006cc65f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Checker/Names.pm
@@ -0,0 +1,251 @@
+# Copyright (C) 2004-07 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Checker::Names - A checker for BibTeX names.
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Checker::Names ;
+
+my $gen = Bib2HTML::Checker::Names->new() ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Checker::Names is a Perl module, which checks
+if author's names are similar or not.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To create a parser, say something like this:
+
+ use Bib2HTML::Checker::Names;
+
+ my $parser = Bib2HTML::Checker::Names->new() ;
+
+...or something similar.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Names.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Checker::Names;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::Translator::BibTeXName ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the checker
+my $VERSION = "0.1" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = {} ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Checking
+#
+#------------------------------------------------------
+
+=pod
+
+=item * check()
+
+Check the names.
+Takes 1 arg:
+
+=over
+
+=item * database (hash ref)
+
+is the entire data structure toi check.
+
+=back
+
+=cut
+sub check(\%) : method {
+ my $self = shift ;
+ if ($_[0]) {
+ my %authors = $self->get_all_authors($_[0]->{'entries'}) ;
+ my @ids = sortbyletters(keys %authors) ;
+
+ for(my $i=0; $i<$#ids; $i++) {
+ my $name1 = lc($authors{$ids[$i]}{'last'}) ;
+ for(my $j=$i+1; $j<=$#ids; $j++) {
+ my $name2 = lc($authors{$ids[$j]}{'last'}) ;
+
+ my $error_msg = join('',
+ " name1=".$authors{$ids[$i]}{'last'},
+ ",",
+ $authors{$ids[$i]}{'first'},
+ " (",
+ $authors{$ids[$i]}{'location'},
+ ")\n name2=",
+ $authors{$ids[$j]}{'last'},
+ ",",
+ $authors{$ids[$j]}{'first'},
+ " (",
+ $authors{$ids[$j]}{'location'},
+ ")") ;
+
+ # Check for the same name defined many times
+ if ($name1 eq $name2) {
+ Bib2HTML::General::Error::syswarm("multiple author's name syntax for '$name1':\n".
+ $error_msg) ;
+ }
+
+ # Check for the same name defined many times but with keyboard's mistaskes
+ elsif ($self->is_similar($name1, $name2)) {
+ Bib2HTML::General::Error::syswarm("possible author's name mistake?\n".
+ $error_msg) ;
+ }
+
+ }
+ }
+ }
+}
+
+=item * is_similar()
+
+Replies if the 2 names have similar syntax
+Takes 2 args:
+
+=over
+
+=item * name1 (string)
+
+=item * name2 (string)
+
+=back
+
+=cut
+sub is_similar($$) : method {
+ my $self = shift ;
+ my $percent = levenshtein($_[0],$_[1]) ;
+ return ($percent>=90) ;
+}
+
+=item * get_all_authors()
+
+Replies an array of entry authors.
+Takes 1 arg:
+
+=over
+
+=item * data (hash ref)
+
+=back
+
+=cut
+sub get_all_authors($) : method {
+ my $self = shift ;
+ my %authors = () ;
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+ foreach my $entry (sortbyletters(keys %{$_[0]})) {
+ if ( $_[0]->{$entry}{'fields'}{'author'} ) {
+ my @auts = $parser->splitnames($_[0]->{$entry}{'fields'}{'author'}) ;
+ foreach my $aut (@auts) {
+ if ( ! $aut->{'et al'} ) {
+ $aut->{'location'} = $_[0]->{$entry}{'location'} ;
+ my $key = lc($parser->formatname( $aut, 'l f.' )) ;
+ $key =~ s/[^a-zA-Z0-1]+//g ;
+ my $count = 0 ;
+ my $thekey = $key ;
+ while ( ( $count >= 0 ) && ( exists $authors{$thekey} ) ) {
+ if ( $parser->samenames($aut,$authors{$thekey}) ) {
+ $count = -1 ;
+ }
+ else {
+ $count ++ ;
+ $thekey = "${key}_${count}" ;
+ }
+ }
+ if ( $count >= 0 ) {
+ $authors{$thekey} = $aut ;
+ }
+ }
+ }
+ }
+ }
+ return %authors ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2004-07 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Encode.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Encode.pm
new file mode 100644
index 0000000000..5f7065b6bf
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Encode.pm
@@ -0,0 +1,138 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::Encode - String encoding functions
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::Encode is a Perl module, which proposes
+a set of functions for string encoding.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Encode.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::General::Encode;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &set_default_encoding &get_default_encoding &get_encoded_str );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+use Encode;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the encode functions
+my $VERSION = "1.0" ;
+
+# Default encoding
+my $DEFAULT_ENCODING = "utf-8";
+
+#------------------------------------------------------
+#
+# Functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * set_default_encoding($)
+
+Set the default encoding
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is a I<string> which correspond to the name of the encoding.
+
+=back
+
+=cut
+sub set_default_encoding($) {
+ $DEFAULT_ENCODING = $_[0];
+}
+
+=pod
+
+=item * get_default_encoding()
+
+Replies the default encoding.
+
+=cut
+sub get_default_encoding() {
+ return $DEFAULT_ENCODING;
+}
+
+=pod
+
+=item * get_encode_str($)
+
+Replies the specified string in the current string encoding.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub get_encoded_str($) {
+ return encode($DEFAULT_ENCODING, $_[0]);
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Error.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Error.pm
new file mode 100644
index 0000000000..2bd8aaced3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Error.pm
@@ -0,0 +1,443 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::Error - Error functions
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::Error is a Perl module, which proposes
+a set of functions to manage the errors.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Error.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::General::Error;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &warm &err &warningcount
+ &syserr &syswarm &printwarningcount
+ &unsetwarningaserror
+ &setwarningaserror
+ &unsetsortwarnings
+ &setsortwarnings
+ &notempty );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+use Carp ;
+
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the error functions
+my $VERSION = "1.0" ;
+
+# The quantity of warning encounted during the generation
+my $WARNING_COUNT = 0 ;
+
+# Indicates that the warnings are considered as errors
+my $WARNING_HAS_ERROR = 0 ;
+
+# Indicates if the warnings must be sorted
+my $SORT_WARNINGS = 0 ;
+
+# List of generated warning messages
+my %__GENERATED_WARNINGS = () ;
+
+#------------------------------------------------------
+#
+# Warning getters/setters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * warningcount()
+
+Replies the quantity of warnings.
+
+=cut
+sub warningcount() {
+ return $WARNING_COUNT ;
+}
+
+=pod
+
+=item * setwarningaserror()
+
+Sets that the warnings will be considered as errors.
+
+=cut
+sub setwarningaserror() {
+ $WARNING_HAS_ERROR = 1 ;
+}
+
+=pod
+
+=item * unsetwarningaserror()
+
+Sets that the warnings will not be considered as errors.
+
+=cut
+sub unsetwarningaserror() {
+ $WARNING_HAS_ERROR = 0 ;
+}
+
+=pod
+
+=item * setsortwarnings()
+
+Sets the sorting flag of warnings
+
+=cut
+sub setsortwarnings() {
+ $SORT_WARNINGS = 1 ;
+}
+
+=pod
+
+=item * unsetsortwarnings()
+
+Unsets the sorting flag of warnings
+
+=cut
+sub unsetsortwarnings() {
+ $SORT_WARNINGS = 0 ;
+}
+
+#------------------------------------------------------
+#
+# Error reporting
+#
+#------------------------------------------------------
+
+=pod
+
+=item * syserr()
+
+Displays an error and stop.
+Takes 1 arg:
+
+=over
+
+=item * message (string)
+
+is the error message to display.
+
+=back
+
+=cut
+sub syserr($) {
+ my $msg = $_[0] || '' ;
+ $msg =~ s/\n+$// ;
+ printwarningcount() ;
+ die( "Error: $msg\n" ) ;
+}
+
+=pod
+
+=item * syswarm()
+
+Displays a warning and stop.
+Takes 1 arg:
+
+=over
+
+=item * message (string)
+
+is the warning message to display.
+
+=back
+
+=cut
+sub syswarm($) {
+ my $msg = $_[0] || '' ;
+ $msg =~ s/^[ \t\r\n]+// ;
+ $msg =~ s/[ \t\r\n]+$// ;
+ if ( ! $WARNING_HAS_ERROR ) {
+
+ if ( __is_not_logged_warning( $msg, '', 0 ) ) {
+
+ __log_warning( $msg, '', 0 ) ;
+
+ $WARNING_COUNT ++ ;
+ if ( ( ! $SORT_WARNINGS ) &&
+ ( Bib2HTML::General::Verbose::currentlevel() >= 0 ) ) {
+ print STDERR "Warning: $msg\n" ;
+ }
+
+ }
+ }
+ else {
+ syserr( $msg ) ;
+ }
+}
+
+# Replies if the specified message was already generated
+# __is_not_logged_warning( text, file, lineno )
+sub __is_not_logged_warning($$$) {
+ return 0 unless $_[0] ;
+ if ( ! exists $__GENERATED_WARNINGS{$_[0]} ) {
+ return 1 ;
+ }
+ my $location = ( $_[1] || '' ).':'.( ( $_[1] && $_[2] ) || '' ) ;
+ if ( $location eq ':' ) {
+ return ( int(@{$__GENERATED_WARNINGS{$_[0]}}) > 0 ) ;
+ }
+ else {
+ return ( ! strinarray( $location, $__GENERATED_WARNINGS{$_[0]} ) ) ;
+ }
+}
+
+# Log the specified message
+# __log_warning( text, file, lineno )
+sub __log_warning($$$) {
+ return 0 unless $_[0] ;
+ if ( ! exists $__GENERATED_WARNINGS{$_[0]} ) {
+ $__GENERATED_WARNINGS{$_[0]} = [] ;
+ }
+ my $location = ( $_[1] || '' ).':'.( ( $_[1] && $_[2] ) || '' ) ;
+ if ( ( $location ne ':' ) &&
+ ( ! strinarray( $location, $__GENERATED_WARNINGS{$_[0]} ) ) ) {
+ push @{$__GENERATED_WARNINGS{$_[0]}}, $location ;
+ }
+ return 0 ;
+}
+
+=pod
+
+=item * printwarningcount()
+
+Displays the count of warnings.
+
+=cut
+sub printwarningcount() {
+ if ( ( Bib2HTML::General::Verbose::currentlevel() >= 0 ) &&
+ ( $WARNING_COUNT > 0 ) ) {
+
+ # Display the warnings
+ if ( $SORT_WARNINGS ) {
+ my @msgs = () ;
+
+ while ( my ($key, $value) = each( %__GENERATED_WARNINGS ) ) {
+
+ if ( int(@{$value}) > 0 ) {
+
+ foreach my $location ( @{$value} ) {
+ my $file = extract_file_from_location( $location ) ;
+ my $lineno = extract_line_from_location( $location ) ;
+ push @msgs, { 'msg' => $key,
+ 'file' => $file,
+ 'line' => $lineno,
+ } ;
+ }
+ }
+ else {
+
+ push @msgs, { 'msg' => $key,
+ 'file' => '',
+ 'line' => 0,
+ } ;
+
+ }
+
+ }
+
+ @msgs = sort {
+ return -1 if ( $a->{'file'} lt $b->{'file'} ) ;
+ return 1 if ( $a->{'file'} gt $b->{'file'} ) ;
+ return -1 if ( $a->{'line'} < $b->{'line'} ) ;
+ return 1 if ( $a->{'line'} > $b->{'line'} ) ;
+ return ( $a->{'msg'} <=> $b->{'msg'} ) ;
+ } @msgs ;
+
+ foreach my $value ( @msgs ) {
+ my $msg = $value->{'msg'} || '???' ;
+ my $file = $value->{'file'} || '' ;
+ my $line = $value->{'line'} || 0 ;
+ print STDERR "Warning".
+ (($file)?
+ (" ($file".(($line>0)?
+ ":$line":"").")"): "").
+ ": $msg\n" ;
+ }
+
+ }
+
+ print STDERR "$WARNING_COUNT warning".(($WARNING_COUNT>1)?"s":"")."\n" ;
+ }
+}
+
+=pod
+
+=item * err()
+
+Displays an error and stop.
+Takes 3 args:
+
+=over
+
+=item * message (string)
+
+is the error message to display.
+
+=item * file (string)
+
+is the name of the file in which the error occurs.
+
+=item * line (integer)
+
+is the line where the error occurs.
+
+=back
+
+=cut
+sub err($$$) {
+ my $msg = $_[0] || '' ;
+ my $file = $_[1] || '' ;
+ my $line = $_[2] || 0 ;
+ printwarningcount() ;
+ $msg =~ s/\n+$// ;
+ die( "Error".
+ (($file)?
+ (" ($file".(($line>0)?
+ ":$line":"").")"): "").
+ ": $msg\n" ) ;
+}
+
+=pod
+
+=item * warm()
+
+Displays a warning.
+Takes 3 args:
+
+=over
+
+=item * message (string)
+
+is the warning message to display.
+
+=item * file (string)
+
+<is the name of the file in which the warning occurs.
+
+=item * line (integer)
+
+is the line where the warning occurs.
+
+=back
+
+=cut
+sub warm($$$) {
+ my $msg = $_[0] || '' ;
+ my $file = $_[1] || '' ;
+ my $line = $_[2] || 0 ;
+ if ( ! $WARNING_HAS_ERROR ) {
+ $msg =~ s/\n+$// ;
+ if ( __is_not_logged_warning( $msg, $file, $line ) ) {
+
+ __log_warning( $msg, $file, $line ) ;
+
+ $WARNING_COUNT ++ ;
+ if ( ( ! $SORT_WARNINGS ) &&
+ ( Bib2HTML::General::Verbose::currentlevel() >= 0 ) ) {
+ print STDERR "Warning".
+ (($file)?
+ (" ($file".(($line>0)?
+ ":$line":"").")"): "").
+ ": $msg\n" ;
+ }
+ }
+ }
+ else {
+ err( $msg, $file, $line ) ;
+ }
+}
+
+
+=pod
+
+=item * notempty()
+
+Replies the specified value if it was not empty.
+Otherwhise, generate a exception.
+
+Takes 2 args:
+
+=over
+
+=item * value (mixed)
+
+is the value to check
+
+=item * msg (string)
+
+is the error message
+
+=back
+
+=cut
+sub notempty {
+ confess( 'invalid use of function notempty()' )
+ unless ( $_[1] ) ;
+ if ( ( ! defined( $_[0] ) ) ||
+ ( length( "$_[0]" ) <= 0 ) ) {
+ confess( $_[1] ) ;
+ }
+ return $_[0] ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/HTML.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/HTML.pm
new file mode 100644
index 0000000000..50c1dbc03f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/HTML.pm
@@ -0,0 +1,1539 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::HTML - HTML support definitions
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::HTML is a Perl module, which permits to support
+some HTML definitions. This is a fork of PhpDocGen::General::HTML.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in HTML.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::General::HTML;
+
+@ISA = ('Exporter');
+@EXPORT = qw(&get_html_entities &get_restricted_html_entities &translate_html_entities
+ &htmlcatdir &htmlcatfile &htmldirname &htmlfilename &htmltoroot &htmlpath
+ &htmlsplit &strip_html_tags &html_add_unsecable_spaces &html_uc &html_lc
+ &html_sc &split_html_tags &html_extract_tag_params &htmltolocalpath
+ &nl2br &br2nl &setAsValidHTML_small &setAsValidHTML &html_getinitiales
+ &html_ucwords &html_ucfirst &html_substr &html_split_to_chars &sortbyletters
+ &remove_html_accents );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::Encode ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the HTML support functions
+my $VERSION = "4.0" ;
+
+# Translation table
+my %HTML_ENTITY_CODES = ( 'nbsp' => 160, #no-break space = non-breaking space
+ 'iexcl' => 161, #inverted exclamation mark, U+00A1 ISOnum
+ 'cent' => 162, #cent sign
+ 'pound' => 163, #pound sign
+ 'curren' => 164, #currency sign
+ 'yen' => 165, #yen sign = yuan sign
+ 'brvbar' => 166, #broken bar = broken vertical bar
+ 'sect' => 167, #section sign
+ 'uml' => 168, #diaeresis = spacing diaeresis,
+ 'copy' => 169, #copyright sign
+ 'ordf' => 170, #feminine ordinal indicator
+ 'laquo' => 171, #left-pointing double angle quotation mark
+ 'not' => 172, #not sign
+ 'shy' => 173, #soft hyphen = discretionary hyphen
+ 'reg' => 174, #registered sign = registered trade mark sign
+ 'macr' => 175, #macron = spacing macron = overline = APL overbar
+ 'deg' => 176, #degree sign
+ 'plusmn' => 177, #plus-minus sign = plus-or-minus sign
+ 'sup2' => 178, #superscript two = superscript digit two = squared
+ 'sup3' => 179, #superscript three = superscript digit three = cubed
+ 'acute' => 180, #acute accent = spacing acute
+ 'micro' => 181, #micro sign
+ 'para' => 182, #pilcrow sign = paragraph sign
+ 'middot' => 183, #middle dot = Georgian comma = Greek middle dot
+ 'cedil' => 184, #cedilla = spacing cedilla
+ 'sup1' => 185, #superscript one = superscript digit one
+ 'ordm' => 186, #masculine ordinal indicator
+ 'raquo' => 187, #right-pointing double angle quotation mark = right pointing guillemet
+ 'frac14' => 188, #vulgar fraction one quarter = fraction one quarter
+ 'frac12' => 189, #vulgar fraction one half = fraction one half
+ 'frac34' => 190, #vulgar fraction three quarters = fraction three quarters
+ 'iquest' => 191, #inverted question mark = turned question mark
+ 'Agrave' => 192, #latin capital letter A with grave = latin capital letter A grave
+ 'Aacute' => 193, #latin capital letter A with acute
+ 'Acirc' => 194, #latin capital letter A with circumflex
+ 'Atilde' => 195, #latin capital letter A with tilde
+ 'Auml' => 196, #latin capital letter A with diaeresis
+ 'Aring' => 197, #latin capital letter A with ring above = latin capital letter A ring
+ 'AElig' => 198, #latin capital letter AE = latin capital ligature AE
+ 'Ccedil' => 199, #latin capital letter C with cedilla
+ 'Egrave' => 200, #latin capital letter E with grave
+ 'Eacute' => 201, #latin capital letter E with acute
+ 'Ecirc' => 202, #latin capital letter E with circumflex
+ 'Euml' => 203, #latin capital letter E with diaeresis
+ 'Igrave' => 204, #latin capital letter I with grave
+ 'Iacute' => 205, #latin capital letter I with acute
+ 'Icirc' => 206, #latin capital letter I with circumflex
+ 'Iuml' => 207, #latin capital letter I with diaeresis
+ 'ETH' => 208, #latin capital letter ETH
+ 'Ntilde' => 209, #latin capital letter N with tilde
+ 'Ograve' => 210, #latin capital letter O with grave
+ 'Oacute' => 211, #latin capital letter O with acute
+ 'Ocirc' => 212, #latin capital letter O with circumflex
+ 'Otilde' => 213, #latin capital letter O with tilde
+ 'Ouml' => 214, #latin capital letter O with diaeresis
+ 'times' => 215, #multiplication sign
+ 'Oslash' => 216, #latin capital letter O with stroke = latin capital letter O slash
+ 'Ugrave' => 217, #latin capital letter U with grave
+ 'Uacute' => 218, #latin capital letter U with acute
+ 'Ucirc' => 219, #latin capital letter U with circumflex
+ 'Uuml' => 220, #latin capital letter U with diaeresis
+ 'Yacute' => 221, #latin capital letter Y with acute
+ 'THORN' => 222, #latin capital letter THORN
+ 'szlig' => 223, #latin small letter sharp s = ess-zed
+ 'agrave' => 224, #latin small letter a with grave = latin small letter a grave
+ 'aacute' => 225, #latin small letter a with acute
+ 'acirc' => 226, #latin small letter a with circumflex
+ 'atilde' => 227, #latin small letter a with tilde
+ 'auml' => 228, #latin small letter a with diaeresis
+ 'aring' => 229, #latin small letter a with ring above = latin small letter a ring
+ 'aelig' => 230, #latin small letter ae = latin small ligature ae
+ 'ccedil' => 231, #latin small letter c with cedilla
+ 'egrave' => 232, #latin small letter e with grave
+ 'eacute' => 233, #latin small letter e with acute
+ 'ecirc' => 234, #latin small letter e with circumflex
+ 'euml' => 235, #latin small letter e with diaeresis
+ 'igrave' => 236, #latin small letter i with grave
+ 'iacute' => 237, #latin small letter i with acute
+ 'icirc' => 238, #latin small letter i with circumflex
+ 'iuml' => 239, #latin small letter i with diaeresis
+ 'eth' => 240, #latin small letter eth
+ 'ntilde' => 241, #latin small letter n with tilde
+ 'ograve' => 242, #latin small letter o with grave
+ 'oacute' => 243, #latin small letter o with acute
+ 'ocirc' => 244, #latin small letter o with circumflex
+ 'otilde' => 245, #latin small letter o with tilde
+ 'ouml' => 246, #latin small letter o with diaeresis
+ 'divide' => 247, #division sign
+ 'oslash' => 248, #latin small letter o with stroke = latin small letter o slash
+ 'ugrave' => 249, #latin small letter u with grave
+ 'uacute' => 250, #latin small letter u with acute
+ 'ucirc' => 251, #latin small letter u with circumflex
+ 'uuml' => 252, #latin small letter u with diaeresis
+ 'yacute' => 253, #latin small letter y with acute
+ 'thorn' => 254, #latin small letter thorn
+ 'yuml' => 255, #latin small letter y with diaeresis
+ 'quot' => 34, #quotation mark = APL quote
+ 'amp' => 38, #ampersand
+ 'lt' => 60, #less-than sign
+ 'gt' => 62, #greater-than sign
+ 'OElig' => 338, #latin capital ligature OE
+ 'oelig' => 339, #latin small ligature oe
+ 'Scedil' => 'x015e', #latin capital letter S with cedil
+ 'scedil' => 'x015f', #latin small letter s with cedil
+ 'Tcedil' => 'x0162', #latin capital letter T with cedil
+ 'tcedil' => 'x0163', #latin small letter t with cedil
+ 'Yuml' => 376, #latin capital letter Y with diaeresis
+ 'circ' => 710, #modifier letter circumflex accent
+ 'tilde' => 732, #small tilde
+ 'Aucircle' => 'x0102', #latin capital letter A with small u on top
+ 'aucircle' => 'x0103', #latin small letter a with small u on top
+ 'Cacute' => 'x262', #latin capital letter C with acute
+ 'cacute' => 'x263', #latin small letter c with acute
+ 'Scaron' => 352, #latin capital letter S with caron
+ 'scaron' => 353, #latin small letter s with caron
+ 'Ccaron' => 268, #latin capital letter C with caron
+ 'ccaron' => 269, #latin small letter c with caron
+ 'Dcaron' => 270, #latin capital letter D with caron
+ 'dcaron' => 271, #latin small letter d with caron
+ 'Ecaron' => 282, #latin capital letter E with caron
+ 'ecaron' => 283, #latin small letter e with caron
+ 'Lcaron' => 317, #latin capital letter L with caron
+ 'lcaron' => 318, #latin small letter l with caron
+ 'Ncaron' => 327, #latin capital letter N with caron
+ 'ncaron' => 328, #latin small letter n with caron
+ 'Rcaron' => 344, #latin capital letter R with caron
+ 'rcaron' => 345, #latin small letter r with caron
+ 'Tcaron' => 356, #latin capital letter T with caron
+ 'tcaron' => 357, #latin small letter t with caron
+ 'Zcaron' => 381, #latin capital letter Z with caron
+ 'zcaron' => 382, #latin small letter z with caron
+ ) ;
+
+# The characters which are displayed for each HTML entity (except &amp; &gt; &lt; &quot; )
+my %HTML_ENTITY_CHARS = ( 'Ocirc' => 'Ô',
+ 'szlig' => 'ß',
+ 'micro' => 'µ',
+ 'para' => '¶',
+ 'not' => '¬',
+ 'sup1' => '¹',
+ 'oacute' => 'ó',
+ 'Uacute' => 'Ú',
+ 'middot' => '·',
+ 'ecirc' => 'ê',
+ 'pound' => '£',
+ 'scaron' => 'Å¡',
+ 'ntilde' => 'ñ',
+ 'igrave' => 'ì',
+ 'atilde' => 'ã',
+ 'thorn' => 'þ',
+ 'Euml' => 'Ë',
+ 'Ntilde' => 'Ñ',
+ 'Auml' => 'Ä',
+ 'plusmn' => '±',
+ 'raquo' => '»',
+ 'THORN' => 'Þ',
+ 'laquo' => '«',
+ 'Eacute' => 'É',
+ 'divide' => '÷',
+ 'Uuml' => 'Ü',
+ 'Aring' => 'Ã…',
+ 'ugrave' => 'ù',
+ 'Egrave' => 'È',
+ 'Acirc' => 'Â',
+ 'oslash' => 'ø',
+ 'ETH' => 'Ã',
+ 'iacute' => 'í',
+ 'Ograve' => 'Ã’',
+ 'Oslash' => 'Ø',
+ 'frac34' => '3/4',
+ 'Scaron' => 'Å ',
+ 'eth' => 'ð',
+ 'icirc' => 'î',
+ 'ordm' => 'º',
+ 'ucirc' => 'û',
+ 'reg' => '®',
+ 'tilde' => '~',
+ 'aacute' => 'á',
+ 'Agrave' => 'À',
+ 'Yuml' => 'Ÿ',
+ 'times' => '×',
+ 'deg' => '°',
+ 'AElig' => 'Æ',
+ 'Yacute' => 'Ã',
+ 'Otilde' => 'Õ',
+ 'circ' => '^',
+ 'sup3' => '³',
+ 'oelig' => 'Å“',
+ 'frac14' => '1/4',
+ 'Ouml' => 'Ö',
+ 'ograve' => 'ò',
+ 'copy' => '©',
+ 'shy' => '­',
+ 'iuml' => 'ï',
+ 'acirc' => 'â',
+ 'iexcl' => '¡',
+ 'Iacute' => 'Ã',
+ 'Oacute' => 'Ó',
+ 'ccedil' => 'ç',
+ 'frac12' => '1/2',
+ 'Icirc' => 'ÃŽ',
+ 'eacute' => 'é',
+ 'egrave' => 'è',
+ 'euml' => 'ë',
+ 'Ccedil' => 'Ç',
+ 'OElig' => 'Å’',
+ 'Atilde' => 'Ã',
+ 'ouml' => 'ö',
+ 'cent' => '¢',
+ 'Aacute' => 'Ã',
+ 'sect' => '§',
+ 'Ugrave' => 'Ù',
+ 'aelig' => 'æ',
+ 'ordf' => 'ª',
+ 'yacute' => 'ý',
+ 'Ecirc' => 'Ê',
+ 'auml' => 'ä',
+ 'macr' => '¯',
+ 'iquest' => '¿',
+ 'sup2' => '²',
+ 'Ucirc' => 'Û',
+ 'aring' => 'Ã¥',
+ 'Igrave' => 'Ì',
+ 'yen' => 'Â¥',
+ 'uuml' => 'ü',
+ 'otilde' => 'õ',
+ 'uacute' => 'ú',
+ 'yuml' => 'ÿ',
+ 'ocirc' => 'ô',
+ 'Iuml' => 'Ã',
+ 'agrave' => 'à',
+ ) ;
+
+
+# The mapping between the accentuated characters and the non-accentuated characters
+my %HTML_NO_ACCENT_ENTITY_CHARS = (
+ 'aacute' => 'a',
+ 'Aacute' => 'A',
+ 'aelig' => 'ae',
+ 'AElig' => 'ae',
+ 'acirc' => 'a',
+ 'Acirc' => 'A',
+ 'agrave' => 'a',
+ 'Agrave' => 'A',
+ 'atilde' => 'a',
+ 'Atilde' => 'A',
+ 'Aring' => 'A',
+ 'aring' => 'a',
+ 'aucircle' => 'a',
+ 'Aucircle' => 'A',
+ 'auml' => 'a',
+ 'Auml' => 'A',
+ 'Cacute' => 'C',
+ 'cacute' => 'c',
+ 'Ccaron' => 'C',
+ 'ccaron' => 'C',
+ 'ccedil' => 'c',
+ 'Ccedil' => 'C',
+ 'Dcaron' => 'D',
+ 'dcaron' => 'd',
+ 'Eacute' => 'E',
+ 'eacute' => 'e',
+ 'Ecaron' => 'E',
+ 'ecaron' => 'e',
+ 'ecirc' => 'e',
+ 'Ecirc' => 'E',
+ 'Egrave' => 'E',
+ 'egrave' => 'e',
+ 'eth' => 'd',
+ 'ETH' => 'D',
+ 'Euml' => 'E',
+ 'euml' => 'e',
+ 'Iacute' => 'i',
+ 'iacute' => 'i',
+ 'icirc' => 'i',
+ 'Icirc' => 'i',
+ 'Igrave' => 'I',
+ 'igrave' => 'i',
+ 'Iuml' => 'I',
+ 'iuml' => 'i',
+ 'Lcaron' => 'L',
+ 'lcaron' => 'l',
+ 'Ncaron' => 'N',
+ 'ncaron' => 'n',
+ 'ntilde' => 'n',
+ 'Ntilde' => 'N',
+ 'Oacute' => 'O',
+ 'oacute' => 'o',
+ 'ocirc' => 'o',
+ 'Ocirc' => 'O',
+ 'oelig' => 'oe',
+ 'OElig' => 'OE',
+ 'ograve' => 'o',
+ 'Ograve' => 'O',
+ 'Oslash' => 'O',
+ 'oslash' => 'o',
+ 'otilde' => 'o',
+ 'Otilde' => 'O',
+ 'Ouml' => 'O',
+ 'ouml' => 'o',
+ 'Rcaron' => 'R',
+ 'rcaron' => 'r',
+ 'scaron' => 's',
+ 'Scaron' => 'S',
+ 'scedil' => 's',
+ 'Scedil' => 'S',
+ 'szlig' => 'S',
+ 'Tcaron' => 'T',
+ 'tcaron' => 't',
+ 'tcedil' => 't',
+ 'Tcedil' => 'T',
+ 'thorn' => 't',
+ 'THORN' => 'T',
+ 'uacute' => 'u',
+ 'Uacute' => 'U',
+ 'Ucirc' => 'U',
+ 'ucirc' => 'u',
+ 'ugrave' => 'U',
+ 'Ugrave' => 'U',
+ 'uuml' => 'u',
+ 'Uuml' => 'U',
+ 'Yacute' => 'Y',
+ 'yacute' => 'y',
+ 'Yuml' => 'Y',
+ 'yuml' => 'y',
+ 'Zcaron' => 'Z',
+ 'zcaron' => 'z',
+ ) ;
+
+#------------------------------------------------------
+#
+# Predefined PHP variables support
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_restricted_html_entities()
+
+Replies the specified string in which some characters have been
+replaced by the corresponding HTML entities except for &amp;
+&quot; &lt; and &gt;
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub get_restricted_html_entities($) {
+ my $text = $_[0] || '' ;
+ foreach my $entity (keys %HTML_ENTITY_CHARS) {
+ if (($entity ne 'amp')&&
+ ($entity ne 'quot')&&
+ ($entity ne 'lt')&&
+ ($entity ne 'gt')) {
+ my $validchar = get_encoded_str($HTML_ENTITY_CHARS{$entity});
+ $text =~ s/\Q&#$HTML_ENTITY_CODES{$entity};\E/&$entity;/g ;
+ $text =~ s/\Q$validchar\E/&$entity;/g ;
+ }
+ }
+ return $text ;
+}
+
+=pod
+
+=item * get_html_entities()
+
+Replies the specified string in which some characters have been
+replaced by the corresponding HTML entities
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub get_html_entities($) {
+ my $text = $_[0] || '' ;
+
+ $text =~ s/\Q&\E/&amp;/g ;
+ $text =~ s/\Q<\E/&lt;/g ;
+ $text =~ s/\Q>\E/&gt;/g ;
+ $text =~ s/\Q\"\E/&quot;/g ;
+
+ return get_restricted_html_entities($text) ;
+}
+
+=pod
+
+=item * translate_html_entities()
+
+Replies the specified string in which each HTML entity was replaced
+by the corresponding character.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub translate_html_entities($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/\Q&nbsp;\E/ /g ;
+ $text =~ s/\Q&quot;\E/\"/g ;
+ $text =~ s/\Q&lt;\E/</g ;
+ $text =~ s/\Q&gt;\E/>/g ;
+ $text =~ s/\Q&amp;\E/&/g ;
+ while (my ($entity,$charcode) = each(%HTML_ENTITY_CODES)) {
+ my $validchar = get_encoded_str($HTML_ENTITY_CHARS{$entity});
+ if ($validchar) {
+ $text =~ s/\Q&#$charcode;\E/$validchar/g ;
+ }
+ }
+ foreach my $entity (keys %HTML_ENTITY_CHARS) {
+ my $validchar = get_encoded_str($HTML_ENTITY_CHARS{$entity});
+ $text =~ s/\Q&$entity;\E/$validchar/g ;
+ }
+ return $text ;
+}
+
+=pod
+
+=item * htmlcatdir()
+
+Concatenate two or more directory names to form a complete path ending
+with a directory. But remove the trailing slash from the resulting
+string.
+Takes 2 args or more:
+
+=over
+
+=item * dir... (string)
+
+is a I<string> which correspond to a directory name to merge
+
+=back
+
+=cut
+sub htmlcatdir {
+ my $path = '' ;
+ $path = join('/', @_ ) if ( @_ ) ;
+ $path =~ s/\/{2,}/\//g ;
+ $path =~ s/\/$// ;
+ return $path ;
+}
+
+=pod
+
+=item * htmlcatfile()
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+Takes 2 args or more:
+
+=over
+
+=item * dir... (string)
+
+is a I<string> which correspond to a directory name to merge
+
+=item * file (string)
+
+is a I<string> which correspond to a file name to merge
+
+=back
+
+=cut
+sub htmlcatfile {
+ return '' unless @_ ;
+ my $file = pop @_;
+ return $file unless @_;
+ my $dir = htmlcatdir(@_);
+ $dir .= "/" unless substr($file,0,1) eq "/" ;
+ return $dir.$file;
+}
+
+=pod
+
+=item * htmldirname()
+
+Replies the path of the from the specified file
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path from which
+the dirname but be extracted
+
+=back
+
+=cut
+sub htmldirname($) {
+ my $dirname = $_[0] || '' ;
+ $dirname =~ s/\/+\s*$// ;
+ if ( $dirname =~ /^(.*?)\/[^\/]+$/ ) {
+ $dirname = ($1) ? $1 : "/" ;
+ }
+ else {
+ $dirname = "" ;
+ }
+ return $dirname ;
+}
+
+=pod
+
+=item * htmlfilename()
+
+Replies the filename of the from the specified file
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path from which
+the filename but be extracted
+
+=back
+
+=cut
+sub htmlfilename($) {
+ my $filename = $_[0] || '' ;
+ $filename =~ s/\/+\s*$// ;
+ if ( $filename =~ /^.*?\/([^\/]+)$/ ) {
+ $filename = $1 ;
+ }
+ return $filename ;
+}
+
+=pod
+
+=item * htmltoroot()
+
+Replies a relative path in wich each directory of the
+specified parameter was replaced by ..
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path to translate
+
+=back
+
+=cut
+sub htmltoroot($) {
+ my $dir = $_[0] || '' ;
+ $dir =~ s/\/\s*$// ;
+ $dir =~ s/[^\/]+/../g ;
+ return $dir ;
+}
+
+=pod
+
+=item * htmlpath()
+
+Replies a path in which all the OS path separators were replaced
+by the HTML path separator '/'
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path to translate
+
+=back
+
+=cut
+sub htmlpath($) {
+ my $path = $_[0] || '' ;
+ my $os_sep = "/" ;
+ my $p = File::Spec->catdir("a","b") ;
+ if ( $p =~ /a(.+)b/ ) {
+ $os_sep = $1 ;
+ }
+ $path =~ s/\Q$os_sep\E/\//g ;
+ return $path ;
+}
+
+=pod
+
+=item * htmltolocalpath()
+
+Replies a path in which all the HTML path separators '/' were replaced
+by the OS path separator
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path to translate
+
+=back
+
+=cut
+sub htmltolocalpath($) {
+ my $path = $_[0] || '' ;
+ my $os_sep = "/" ;
+ my $p = File::Spec->catdir("a","b") ;
+ if ( $p =~ /a(.+)b/ ) {
+ $os_sep = $1 ;
+ }
+ $path =~ s/\//$os_sep/g ;
+# if ( ( "$^O" ne 'MSWin32' ) &&
+# ( "$^O" ne 'os2' ) &&
+# ( "$^O" ne 'NetWare' ) &&
+# ( "$^O" ne 'dos' ) &&
+# ( "$^O" ne 'cygwin' ) &&
+# ( "$^O" ne 'MacOS' ) ) {
+# $path =~ s/\ /\\ /g ;
+# }
+ return $path ;
+}
+
+=pod
+
+=item * htmlsplit()
+
+Replies an array of directories which correspond to each
+parts of the specified path.
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is a I<string> which correspond to the path to split
+
+=back
+
+=cut
+sub htmlsplit($) {
+ my $path = $_[0] || '' ;
+ return split( /\//, $path ) ;
+}
+
+=pod
+
+=item * strip_html_tags()
+
+Removes the HTML tags from the specified string.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub strip_html_tags($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)<(.*)$/ ) ) {
+ my ($prev,$next) = ($1,$2) ;
+ $res .= "$prev" ;
+ $text = $next ;
+ my $inside = 1 ;
+ while ( ( $inside ) && ( $text ) &&
+ ( $text =~ /^.*?(>|\"|\')(.*)$/ ) ) {
+ my ($sep,$next) = ($1,$2) ;
+ $text = $next ;
+ if ( $sep eq ">" ) {
+ $inside = 0 ;
+ }
+ else {
+ my $insidetext = 1 ;
+ while ( ( $insidetext ) && ( $text ) &&
+ ( $text =~ /^.*?((?:\\)|$sep)(.*)$/ ) ) {
+ my ($sepi,$rest) = ($1,$2) ;
+ if ( $sepi eq '\\' ) {
+ $text = substr($rest,1) ;
+ }
+ else {
+ $text = $rest ;
+ $insidetext = 0 ;
+ }
+ }
+ }
+ }
+ }
+ if ( $text ) {
+ $res .= $text ;
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_extract_tag_params()
+
+Replies the tag parameters that are given
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to parse.
+
+=back
+
+=cut
+sub html_extract_tag_params($) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my %params = ( ) ;
+ my @strings = () ;
+ remove_strings( \@strings, $text ) ;
+ $text =~ s/\s*=\s*/=/gm ;
+ my @parts = split( /\s+/, $text ) ;
+ foreach my $part ( @parts ) {
+ my @elts = split( /=/, $part ) ;
+ if ( @elts > 1 ) {
+ restore_strings( \@strings, $elts[1] ) ;
+ $params{lc($elts[0])} = removeslashes( $elts[1] ) ;
+ }
+ }
+ return \%params ;
+}
+
+=pod
+
+=item * split_html_tags()
+
+Replies an array in which each element
+is text or HTML tag.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to parse.
+
+=back
+
+=cut
+sub split_html_tags($) {
+ my $text = $_[0] || '' ;
+ my %res = () ;
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)<(.*)$/ ) ) {
+ my ($prev,$next) = ($1,$2) ;
+
+ add_value_entry( \%res, 'result', "$prev" ) ;
+
+ $text = $next ;
+ my $inside = 1 ;
+ my $tagcontent = '<' ;
+
+ while ( ( $inside ) && ( $text ) &&
+ ( $text =~ /^(.*?)(>|\"|\')(.*)$/ ) ) {
+ my ($inprev,$sep,$next) = ($1,$2,$3) ;
+
+ $tagcontent .= "$inprev$sep" ;
+ $text = $next ;
+ if ( $sep eq ">" ) {
+ $inside = 0 ;
+ }
+ else {
+ my $insidetext = 1 ;
+ while ( ( $insidetext ) && ( $text ) &&
+ ( $text =~ /^(.*?)((?:\\)|$sep)(.*)$/ ) ) {
+ my ($intprev,$sepi,$rest) = ($1,$2,$3) ;
+ $tagcontent .= "$intprev$sepi" ;
+ if ( $sepi eq '\\' ) {
+ $text = substr($rest,1) ;
+ }
+ else {
+ $text = $rest ;
+ $insidetext = 0 ;
+ }
+ }
+ }
+ }
+ add_value_entry( \%res, 'result', $tagcontent ) ;
+ }
+ if ( $text ) {
+ add_value_entry( \%res, 'result', $text ) ;
+ }
+ return $res{'result'} ;
+}
+
+sub __scan_html_text_and_apply($&) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)<(.*)$/ ) ) {
+ my ($prev,$next) = ($1,$2) ;
+
+ # Replacement
+ &{$_[1]}( $prev ) ;
+
+ $res .= "$prev<" ;
+ $text = $next ;
+ my $inside = 1 ;
+ while ( ( $inside ) && ( $text ) &&
+ ( $text =~ /^(.*?)(>|\"|\')(.*)$/ ) ) {
+ my ($inprev,$sep,$next) = ($1,$2,$3) ;
+ $res .= "$inprev$sep" ;
+ $text = $next ;
+ if ( $sep eq ">" ) {
+ $inside = 0 ;
+ }
+ else {
+ my $insidetext = 1 ;
+ while ( ( $insidetext ) && ( $text ) &&
+ ( $text =~ /^(.*?)((?:\\)|$sep)(.*)$/ ) ) {
+ my ($intprev,$sepi,$rest) = ($1,$2,$3) ;
+ $res .= "$intprev$sepi" ;
+ if ( $sepi eq '\\' ) {
+ $text = substr($rest,1) ;
+ }
+ else {
+ $text = $rest ;
+ $insidetext = 0 ;
+ }
+ }
+ }
+ }
+ }
+ if ( $text ) {
+
+ # Replacement
+ &{$_[1]}( $text ) ;
+
+ $res .= $text ;
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_add_unsecable_spaces()
+
+Replaces the spaces by unsecable spaces inside an HTML string
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_add_unsecable_spaces($) {
+ return __scan_html_text_and_apply( $_[0],
+ sub { $_[0] =~ s/[ \t\n\r]+/&nbsp;/g ;
+ } ) ;
+}
+
+=pod
+
+=item * html_uc()
+
+Upper cases the specified text.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_uc($) {
+ return __scan_html_text_and_apply( $_[0],
+ sub { $_[0] = __html_uc($_[0]) ;
+ } ) ;
+}
+
+sub __html_uc($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ if ( $text ) {
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)&([^;]+);(.*)$/ ) ) {
+ (my $prev,my $tag,$text) = ($1,$2,$3) ;
+ $res .= uc( $prev ) ;
+ if ( ( $tag =~ /^[a-z]/ ) &&
+ ( exists $HTML_ENTITY_CODES{$tag} ) &&
+ ( exists $HTML_ENTITY_CODES{ucfirst($tag)} ) ) {
+ $tag = ucfirst($tag) ;
+ }
+ $res .= "&".$tag.";" ;
+ }
+ if ( $text ) {
+ $res .= uc( $text ) ;
+ }
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_lc()
+
+Lower cases the specified text.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_lc($) {
+ return __scan_html_text_and_apply( $_[0],
+ sub { $_[0] = __html_lc($_[0]) ;
+ } ) ;
+}
+
+sub __html_lc($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ if ( $text ) {
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)&([^;]+);(.*)$/ ) ) {
+ (my $prev,my $tag,$text) = ($1,$2,$3) ;
+ $res .= lc( $prev ) ;
+ if ( ( $tag =~ /^[a-z]/ ) &&
+ ( exists $HTML_ENTITY_CODES{$tag} ) &&
+ ( exists $HTML_ENTITY_CODES{lcfirst($tag)} ) ) {
+ $tag = lcfirst($tag) ;
+ }
+ $res .= "&".$tag.";" ;
+ }
+ if ( $text ) {
+ $res .= lc( $text ) ;
+ }
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_ucwords()
+
+Upper cases the first letters of each words.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_ucwords($) {
+ return __scan_html_text_and_apply( $_[0],
+ sub { $_[0] = __html_ucwords($_[0]) ;
+ } ) ;
+}
+
+sub __html_ucwords($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ while ( $text ) {
+ if ( $text =~ /^([_\-\s]*)&([^;]+);([^_\-\s]*)(.*)$/ ) {
+ (my $prev,my $tag,my $after,$text) = ($1,$2,$3,$4);
+ $res .= $1;
+ if ( ( $tag =~ /^[a-z]/ ) &&
+ ( exists $HTML_ENTITY_CODES{$tag} ) &&
+ ( exists $HTML_ENTITY_CODES{ucfirst($tag)} ) ) {
+ $tag = ucfirst($tag) ;
+ }
+ $res .= "&".$tag.";".$after ;
+ }
+ elsif ( $text =~ /^([_\-\s]*)([^_\-\s]+)(.*)$/ ) {
+ (my $prev,my $tag,$text) = ($1,$2,$3);
+ $res .= $1;
+ $res .= ucfirst($tag);
+ }
+ else {
+ $res .= ucwords($text);
+ $text = '';
+ }
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_ucfirst()
+
+Upper cases the first letters of the first word.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_ucfirst($) {
+ my $found = 0;
+ return __scan_html_text_and_apply( $_[0],
+ sub { $_[0] = __html_ucfirst($_[0],\$found) ;
+ } ) ;
+}
+
+sub __html_ucfirst($$) {
+ my $text = $_[0] || '' ;
+ if( !$_[1] ) {
+ return $text;
+ }
+ else {
+ my $res = '' ;
+ if ( $text =~ /^([_\-\s]*)&([^;]+);([^_\-\s]*)(.*)$/ ) {
+ (my $prev,my $tag,my $after,$text) = ($1,$2,$3,$4);
+ $res .= $1;
+ if ( ( $tag =~ /^[a-z]/ ) &&
+ ( exists $HTML_ENTITY_CODES{$tag} ) &&
+ ( exists $HTML_ENTITY_CODES{ucfirst($tag)} ) ) {
+ $tag = ucfirst($tag) ;
+ }
+ $res .= "&".$tag.";".$after.$text ;
+ }
+ elsif ( $text =~ /^([_\-\s]*)([^_\-\s]+)(.*)$/ ) {
+ (my $prev,my $tag,$text) = ($1,$2,$3);
+ $res .= $1;
+ $res .= ucfirst($tag).$text;
+ }
+ else {
+ $res .= ucwords($text);
+ }
+ $_[1] = 1;
+ return $res ;
+ }
+}
+
+=pod
+
+=item * html_sc()
+
+Translates the specified text into small caps
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub html_sc($) {
+ my $text = __scan_html_text_and_apply( $_[0],
+ sub { $_[0] = __html_sc($_[0]) ;
+ } ) ;
+ $text =~ s/<small><\/small>//g ;
+ $text =~ s/<\/small><small>//g ;
+ return $text ;
+}
+
+sub __html_sc($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ if ( $text ) {
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)&([^;]+);(.*)$/ ) ) {
+ (my $prev,my $tag,$text) = ($1,$2,$3) ;
+ $prev =~ s/([a-z]+)/"<small>".uc($1)."<\/small>";/eg ;
+ $res .= $prev ;
+ if ( ( $tag =~ /^([a-z])/ ) &&
+ ( exists $HTML_ENTITY_CODES{$tag} ) &&
+ ( exists $HTML_ENTITY_CODES{ucfirst($tag)} ) ) {
+ $tag = ucfirst($tag) ;
+ }
+ $res .= "<small>&".$tag.";</small>" ;
+ }
+ if ( $text ) {
+ $text =~ s/([a-z]+)/"<small>".uc($1)."<\/small>";/eg ;
+ $res .= $text ;
+ }
+ }
+ return $res ;
+}
+
+=pod
+
+=item * nl2br()
+
+Translates newline characters into tags <BR>.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub nl2br($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/[\n\r]/<BR>\n/g ;
+ return $text ;
+}
+
+=pod
+
+=item * br2nl()
+
+Translates tags <BR> into newline characters.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to translate.
+
+=back
+
+=cut
+sub br2nl($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/<BR\s*\/?>[\n\r]*/\n/g ;
+ return $text ;
+}
+
+=pod
+
+=item * setAsValidHTML_small()
+
+Merge the "Valid HTML 4.1" small icon to the specified content.
+This icon must be copied by the calling generator as the file
+'path_to_root/valid-html401.gif'.
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to update.
+
+=item * rootdir (string)
+
+is the relative path to the root directory.
+
+=item * valid (array)
+
+is an associative array which content all the validation flags.
+The keys are the validated formats: 'html', 'xhtml', 'css'.
+
+=back
+
+=cut
+sub setAsValidHTML_small($$@) {
+ my $t = \$_[0] ; shift ;
+ my $rootdir = shift ;
+ my ($html,$xhtml,$css) ;
+ foreach my $p (@_) {
+ $html = 1 if ( "$p" eq 'html') ;
+ $xhtml = 1 if ( "$p" eq 'xhtml') ;
+ $css = 1 if ( "$p" eq 'css') ;
+ }
+
+ if (($html)||($xhtml)||($css)) {
+ $$t .= "<p align=\"right\">" ;
+ if ($html) {
+ $$t .= join( '',
+ "<a href=\"http://validator.w3.org/check?uri=referer\">",
+ "<img border=\"0\" src=\"",
+ htmlcatfile($rootdir,"valid-html401.gif"),
+ "\" ",
+ "alt=\"Valid HTML 4.01!\" height=\"15\" width=\"44\">",
+ "</a>" ) ;
+ }
+ if ($css) {
+ $$t .= join( '',
+ "<a href=\"http://jigsaw.w3.org/css-validator/\">",
+ "<img style=\"border:0;width:44px;height:15px\" ",
+ "src=\"",
+ htmlcatfile($rootdir,"valid-css.gif"),
+ "\" alt=\"Valid CSS!\">",
+ "</a>" ) ;
+ }
+ $$t .= "</p>" ;
+ }
+}
+
+=pod
+
+=item * setAsValidHTML()
+
+Merge the "Valid HTML 4.1" small icon to the specified content.
+This icon must be copied by the calling generator as the directory
+'path_to_root/'.
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+is a I<string> which correspond to the text to update.
+
+=item * rootdir (string)
+
+is the relative path to the root directory.
+
+=item * valid (array)
+
+is an associative array which content all the validation flags.
+The keys are the validated formats: 'html', 'xhtml', 'css'.
+
+=back
+
+=cut
+sub setAsValidHTML($$@) {
+ my $t = \$_[0] ; shift ;
+ my $rootdir = shift ;
+ my ($html,$xhtml,$css) ;
+ foreach my $p (@_) {
+ $html = 1 if ( "$p" eq 'html') ;
+ $xhtml = 1 if ( "$p" eq 'xhtml') ;
+ $css = 1 if ( "$p" eq 'css') ;
+ }
+
+ if (($html)||($xhtml)||($css)) {
+ $$t .= "<p align=\"right\">" ;
+ if ($html) {
+ $$t .= join( '',
+ "<a href=\"http://validator.w3.org/check?uri=referer\">",
+ "<img border=\"0\" src=\"",
+ htmlcatfile($rootdir,"valid-html401.gif"),
+ "\" ",
+ "alt=\"Valid HTML 4.01!\" height=\"31\" width=\"88\">",
+ "</a>" ) ;
+ }
+ if ($css) {
+ $$t .= join( '',
+ "<a href=\"http://jigsaw.w3.org/css-validator/\">",
+ "<img style=\"border:0;width:88px;height:31px\" ",
+ "src=\"",
+ htmlcatfile($rootdir,"valid-css.gif"),
+ "\" alt=\"Valid CSS!\">",
+ "</a>" ) ;
+ }
+ $$t .= "</p>" ;
+ }
+}
+
+=pod
+
+=item * html_getinitiales()
+
+Replies the initiales of the specified text
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub html_getinitiales($) {
+ my $text = $_[0] || '' ;
+ return __scan_html_text_and_apply( $text,
+ sub { $_[0] = __html_getinitiales($_[0]) ;
+ } ) ;
+}
+
+# TODO: leave the '-' inside the returned initials.
+sub __html_getinitiales($) {
+ my $text = $_[0] || '' ;
+ my $res = '' ;
+ while ( $text ) {
+ if ( $text =~ /^[_\.\-\s]*&([^;]+);([\.\-])(.*)$/ ) {
+ # Name's initial starting with an accentuated letter
+ (my $tag,my $sep,$text) = ($1,$2,$3);
+ if ( exists $HTML_ENTITY_CODES{$tag} ) {
+ $res .= "&".$tag.";$sep" ;
+ }
+ }
+ elsif ( $text =~ /^[_\.\-\s]*([^&\s\-\._])([\.\-])(.*)$/ ) {
+ # Name's initial starting with an accentuated letter
+ (my $tag,my $sep,$text) = ($1,$2,$3);
+ $res .= "$tag$sep";
+ }
+ elsif ( $text =~ /^[_\.\-\s]*&([^;]+);[^\s\-\._]*(.*)$/ ) {
+ # Long name starting with an accentuated letter
+ (my $tag,$text) = ($1,$2);
+ if ( exists $HTML_ENTITY_CODES{$tag} ) {
+ $res .= "&".$tag.";." ;
+ }
+ }
+ elsif ( $text =~ /^[_\.\-\s]*([^&\s\-\._])[^\s\-\._]*(.*)$/ ) {
+ # Long name starting with a not-accentuated letter
+ (my $tag,$text) = ($1,$2);
+ $res .= $tag.".";
+ }
+ else {
+ $text = '';
+ }
+ }
+ return $res ;
+}
+
+=pod
+
+=item * html_substr()
+
+Replies a substring of the specified text
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+=item * start (optional integer)
+
+=item * length (optional integer)
+
+=back
+
+=cut
+sub html_substr($;$$) {
+ my $text = $_[0] || '' ;
+ my $startpos = $_[1] || 0;
+ my $length = $_[2] || -1;
+ return __scan_html_text_and_apply( $text,
+ sub { $_[0] = __html_substr($_[0],$startpos,$length) ;
+ } ) ;
+}
+
+sub __html_substr($$$) {
+ my ($text,$pos,$length) = ($_[0],$_[1],$_[2]);
+ my @chars = html_split_to_chars($text);
+ $pos = @chars + $pos if ($pos<0);
+ $pos = @chars if ($pos>@chars);
+ $length = @chars if ($length<0);
+ my @res = ();
+ for(my $i=$pos; ($i<@chars)&&($i<($pos+$length)); $i++) {
+ push @res, $chars[$i];
+ }
+ return join('',@res);
+}
+
+=pod
+
+=item * html_split_chars()
+
+Replies an array of the characters in the given HTML string.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+an HTML string without HTML tags
+
+=back
+
+=cut
+
+sub html_split_to_chars($) {
+ my @chars = ();
+ while ($_[0] =~ /((?:&[^;]+;)|(?:[^&]))/g) {
+ push @chars, "$1";
+ }
+ return @chars;
+}
+
+=pod
+
+=item * sortbyletters(@)
+
+Sort by letter the specified parameter and
+replies it.
+Takes 1 arg:
+
+=over
+
+=item * array (string)
+
+=back
+
+=cut
+sub sortbyletters(\@) {
+ return sort {
+ my $elt1 = remove_html_accents($a || "");
+ my $elt2 = remove_html_accents($b || "");
+ $elt1 =~ s/[^a-zA-Z0-9]//g;
+ $elt2 =~ s/[^a-zA-Z0-9]//g;
+ return ($elt1 cmp $elt2);
+ } @{$_[0]};
+}
+
+=pod
+
+=item * remove_html_accents($)
+
+Remove the accents from the given html strings.
+Takes 1 arg:
+
+=over
+
+=item * str (string)
+
+=back
+
+=cut
+sub remove_html_accents($) {
+ my $orig = shift | '';
+ my $trans = "$orig";
+ while (my ($html,$code) = each(%HTML_ENTITY_CODES)) {
+ $trans =~ s/\&\#\Q$code\E;/$HTML_NO_ACCENT_ENTITY_CHARS{$html}/gs;
+ }
+ while (my ($html,$letter) = each(%HTML_NO_ACCENT_ENTITY_CHARS)) {
+ $trans =~ s/\&\Q$html\E;/$letter/gs;
+ }
+ return "$trans";
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+phpdocgen.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Misc.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Misc.pm
new file mode 100644
index 0000000000..6354201a00
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Misc.pm
@@ -0,0 +1,1554 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::Misc - Miscellaneous definitions
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::Misc is a Perl module, which proposes
+a set of miscellaneous functions.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Misc.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::General::Misc;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &strinarray &mkdir_rec &add_value_entry
+ &isemptyhash &buildtree &removefctbraces
+ &addfctbraces &extract_file_from_location
+ &extract_line_from_location &formathashkeyname
+ &formatfctkeyname &isarray &ishash &isemptyarray
+ &hashcount &is_valid_regex &tohumanreadable
+ &readfileastext &valueinhash &issub &isnumber
+ &arabictoroman &romantoarabic &extract_first_words
+ &force_add_value_entry &tonumber &addslashes
+ &restore_strings &remove_strings &removeslashes
+ &array_slice &filecopy &ucwords
+ &integer2alphabetic &splittocolumn &uniq &trim
+ &splittocolumn_base &levenshtein
+ &levenshtein_ops &shell_to_regex);
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+use File::Spec ;
+use File::Copy ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the misc functions
+my $VERSION = "4.0" ;
+
+#------------------------------------------------------
+#
+# General purpose functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * splittocolumn_base()
+
+Replies the specified text splitted to the given column.
+This function treats the text line by line.
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+=item * column (integer)
+
+=item * header (optional string)
+
+is the text to merge in the begining of each line.
+
+=back
+
+=cut
+sub splittocolumn_base($$;$) {
+ my $source = shift || '' ;
+ my $size = shift || 0 ;
+
+ return "$source" unless (($source)&&($size>0)) ;
+
+ my $header = shift || '' ;
+
+ my @result = () ;
+
+ foreach my $line (split(/[\n\r\f]/, "$source")) {
+
+ my $result = '' ;
+ my $linesize = 0 ;
+ my $startline = 1 ;
+
+ foreach my $w (split(/[ \t]+/, $line)) {
+ if ($w) {
+
+ if ($startline) {
+ $linesize = length("$w")+length("$header") ;
+ $result .= "$header$w" ;
+ $startline = 0 ;
+
+ }
+ else {
+
+ if (($linesize+length($w)+1)>$size) {
+ $result .= "\n$header$w" ;
+ $linesize = length("$header")+length($w) ;
+ }
+ else {
+ $result .= " $w" ;
+ $linesize += length($w)+1 ;
+ }
+
+ }
+ }
+ }
+
+ push @result, "$result" ;
+
+ }
+
+ return join("\n",@result) ;
+}
+
+=pod
+
+=item * splittocolumn()
+
+Replies the specified text splitted to the given column.
+This function treats the text line by line.
+Takes 4 args:
+
+=over
+
+=item * text (string)
+
+=item * column (integer)
+
+=item * ident (integer)
+
+is the text which will be merged to each begining
+of lines.
+
+=item * firstindent (integer)
+
+if positive, indicates how mush the first line must be indented
+
+=back
+
+=cut
+sub splittocolumn($$$;$) {
+ my $source = shift || '' ;
+ my $size = shift || 0 ;
+
+ return "$source" unless (($source)&&($size>0)) ;
+
+ my $indent = shift || 0 ;
+ my $firstindent = shift ;
+ $firstindent = 0 unless (($firstindent)&&($firstindent>0)) ;
+
+ my ($indent_str,$first_indent) = ('','') ;
+
+ {
+ for(my $i=0; (($i<$indent)||($i<$firstindent)); $i++) {
+ $indent_str .= ' ' if ($i<$indent) ;
+ $first_indent .= ' ' if ($i<$firstindent) ;
+ }
+ }
+ my @result = () ;
+ my $veryfirstline = 1 ;
+
+ foreach my $line (split(/[\n\r\f]/, "$source")) {
+
+ my $result = '' ;
+ my $linesize = 0 ;
+ my $startline = 1 ;
+
+ foreach my $w (split(/[ \t]+/, $line)) {
+ if ($w) {
+
+ if ($startline) {
+ $linesize = length("$w") ;
+ if ($veryfirstline) {
+ $linesize += $firstindent ;
+ $result .= "$first_indent" ;
+ }
+ $result .= "$w" ;
+ $startline = 0 ;
+
+ }
+ else {
+
+ if (($linesize+length($w)+1)>$size) {
+ $result .= "\n$indent_str$w" ;
+ $linesize = $indent+length($w) ;
+ }
+ else {
+ $result .= " $w" ;
+ $linesize += length($w)+1 ;
+ }
+
+ }
+ }
+ }
+
+ push @result, "$result" ;
+ $veryfirstline = 0 ;
+
+ }
+
+ return join("\n",@result) ;
+}
+
+=pod
+
+=item * strinarray()
+
+Replies if the specified value is in an array.
+Takes 2 args:
+
+=over
+
+=item * str (string)
+
+is the string to search.
+
+=item * array (array ref)
+
+is the array in which the string will be searched.
+
+=back
+
+=cut
+sub strinarray($$) {
+ return 0 unless ( $_[1] ) && ( $_[0] ) ;
+ foreach my $g (@{$_[1]}) {
+ if ( $g eq $_[0] ) {
+ return 1 ;
+ }
+ }
+ return 0 ;
+}
+
+=pod
+
+=item * valueinhash()
+
+Replies if the specified value is a value of thez associative array.
+Takes 2 args:
+
+=over
+
+=item * str (string)
+
+is the string to search.
+
+=item * hash (hash ref)
+
+is the associative array in which the string will be searched.
+
+=back
+
+=cut
+sub valueinhash($$) {
+ return 0 unless ( $_[1] ) && ( $_[0] ) ;
+ foreach my $k (keys %{$_[1]}) {
+ if ( ( $_[1]->{$k} ) &&
+ ( $_[1]->{$k} eq $_[0] ) ) {
+ return 1 ;
+ }
+ }
+ return 0 ;
+}
+
+=pod
+
+=item * mkdir_rec()
+
+Creates recursively a directory.
+Takes 1 arg:
+
+=over
+
+=item * path (string)
+
+is the name of the directory to create.
+
+=back
+
+=cut
+sub mkdir_rec($) {
+ # Fix proposed by joezespak@yahoo.com:
+ # platform-independant paths
+ return 0 unless $_[0] ;
+ my $param = File::Spec->rel2abs($_[0]) ;
+ my @parts = File::Spec->splitdir( $param ) ;
+ my $current = "" ;
+ foreach my $r (@parts) {
+ # Fix by joezespak@yahoo.com:
+ # support of absolute paths
+ if ( $r ) {
+ $current = File::Spec->catdir($current,$r) ;
+ }
+ else {
+ $current = File::Spec->rootdir() ;
+ }
+ if ( ! -d "$current" ) {
+ if ( ! mkdir( "$current", 0777 ) ) {
+ return 0 ;
+ }
+ }
+ }
+ return 1 ;
+}
+
+=pod
+
+=item * isemptyhash()
+
+Replies if the specified hashtable was empty.
+Takes 1 arg:
+
+=over
+
+=item * hash (hash ref)
+
+is the hash table.
+
+=back
+
+=cut
+sub isemptyhash($) {
+ if ( ! $_[0] ) {
+ return (1==1) ;
+ }
+ else {
+ my @k = keys %{$_[0]} ;
+ return ($#k < 0) ;
+ }
+}
+
+=pod
+
+=item * isemptyarray()
+
+Replies if the specified array was empty.
+Takes 1 arg:
+
+=over
+
+=item * array (array ref)
+
+is the array.
+
+=back
+
+=cut
+sub isemptyarray($) {
+ if ( ! $_[0] ) {
+ return (1==1) ;
+ }
+ else {
+ return ($#{$_[0]} < 0) ;
+ }
+}
+
+=pod
+
+=item * hashcount()
+
+Replies the count of keys inside the specified hash.
+Takes 1 arg:
+
+=over
+
+=item * hash (hash ref)
+
+is the hash table.
+
+=back
+
+=cut
+sub hashcount($) {
+ if ( ! $_[0] ) {
+ return 0 ;
+ }
+ else {
+ my @k = keys %{$_[0]} ;
+ return (0 + @k) ;
+ }
+}
+
+=pod
+
+=item * ishash()
+
+Replies if the specified struct is an hash.
+Takes 1 arg:
+
+=over
+
+=item * object
+
+is the object to test.
+
+=back
+
+=cut
+sub ishash {
+ return 0 unless defined($_[0]) ;
+ my $r = ref( $_[0] ) ;
+ return ( $r eq "HASH" ) ;
+}
+
+=pod
+
+=item * issub()
+
+Replies if the specified parameter is a sub name.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is the name of a sub
+
+=back
+
+=cut
+sub issub($) {
+ return 0 unless defined($_[0]) ;
+ return defined( &{$_[0]} ) ;
+}
+
+=pod
+
+=item * isarray()
+
+Replies if the specified struct is an array.
+Takes 1 arg:
+
+=over
+
+=item * object
+
+is the object to test.
+
+=back
+
+=cut
+sub isarray {
+ return 0 unless defined($_[0]) ;
+ my $r = ref( $_[0] ) ;
+ return ( $r eq "ARRAY" ) ;
+}
+
+=pod
+
+=item * add_value_entry()
+
+Adds an entry to the specified hashtable. if the
+the value is not defined, adds as a scalar, else
+adds as a array entry.
+Takes 3 args:
+
+=over
+
+=item * hash (hash ref)
+
+is the hashtable.
+
+=item * key (string)
+
+is the key in which the value must be put.
+
+=item * value
+
+is the value.
+
+=back
+
+=cut
+sub add_value_entry($$$) {
+ if ( ( $_[0] ) && ( $_[1] ) &&
+ ( $_[2] ) ) {
+ if ( exists $_[0]{$_[1]} ) {
+ my $old = $_[0]{$_[1]} ;
+ my $r = ref( $old ) ;
+ if ( ! ( $r eq "ARRAY" ) ) {
+ delete $_[0]{$_[1]} ;
+ push( @{$_[0]{$_[1]}}, $old ) ;
+ }
+ push( @{$_[0]{$_[1]}}, $_[2] ) ;
+ }
+ else {
+ $_[0]{$_[1]} = $_[2] ;
+ }
+ }
+}
+
+=pod
+
+=item * force_add_value_entry()
+
+Adds an entry to the specified hashtable. if the
+the value is not defined, adds as a scalar, else
+adds as a array entry.
+Takes 3 args:
+
+=over
+
+=item * hash (hash ref)
+
+is the hashtable.
+
+=item * key (string)
+
+is the key in which the value must be put.
+
+=item * value
+
+is the value.
+
+=back
+
+=cut
+sub force_add_value_entry($$$) {
+ if ( ( $_[0] ) && ( $_[1] ) ) {
+ my $value = $_[2] || '' ;
+ if ( exists $_[0]{$_[1]} ) {
+ my $old = $_[0]{$_[1]} ;
+ my $r = ref( $old ) ;
+ if ( ! ( $r eq "ARRAY" ) ) {
+ delete $_[0]{$_[1]} ;
+ push( @{$_[0]{$_[1]}}, $old ) ;
+ }
+ push( @{$_[0]{$_[1]}}, $value ) ;
+ }
+ else {
+ $_[0]{$_[1]} = $value ;
+ }
+ }
+}
+
+=pod
+
+=item * buildtree()
+
+Updates the specified hashtable by
+adding the value at the specified keys.
+Takes 2 args:
+
+=over
+
+=item * hash (hash ref)
+
+is the tree.
+
+=item * keys (array ref)
+
+is the array of the keys.
+
+=item * name (string)
+
+is the classname.
+
+=back
+
+=cut
+sub buildtree($$$) {
+ return unless ( (isarray($_[1])) && $_[2] ) ;
+ my $ref = $_[0] || '' ;
+ foreach my $key (@{$_[1]}) {
+ if ( ! ( exists $$ref{$key} ) ) {
+ my %hash = () ;
+ $$ref{$key} = \%hash ;
+ }
+ $ref = $$ref{$key} ;
+ }
+ if ( ! ( exists $$ref{$_[2]} ) ) {
+ $$ref{$_[2]} = { } ;
+ }
+}
+
+=pod
+
+=item * removefctbraces()
+
+Replies a string without "()" at the end.
+Takes 1 arg:
+
+=over
+
+=item * str (string)
+
+is a string.
+
+=back
+
+=cut
+sub removefctbraces($) {
+ my $name = $_[0] || '' ;
+ if ( $name ) {
+ $name =~ s/\s*\(\s*\)\s*$// ;
+ }
+ return $name ;
+}
+
+=pod
+
+=item * addfctbraces()
+
+Replies a string with "()" at the end.
+Takes 1 arg:
+
+=over
+
+=item * str (string)
+
+is a string.
+
+=back
+
+=cut
+sub addfctbraces($) {
+ my $name = removefctbraces( $_[0] ) ;
+ return $name."()" ;
+}
+
+=pod
+
+=item * extract_file_from_location()
+
+Replies the file from the specified location.
+Takes 1 arg:
+
+=over
+
+=item * location (string)
+
+is the location inside the input stream.
+
+=back
+
+=cut
+sub extract_file_from_location($) {
+ return '' unless $_[0] ;
+ my $loc = $_[0] ;
+ my $file = "" ;
+ $loc =~ s/^(.*):[0-9]*/$file=$1;/e ;
+ return $file ;
+}
+
+=pod
+
+=item * extract_line_from_location()
+
+Replies the line number from the specified location.
+Takes 1 arg:
+
+=over
+
+=item * location (string)
+
+is the location inside the input stream.
+
+=back
+
+=cut
+sub extract_line_from_location($) {
+ return 0 unless $_[0] ;
+ my $loc = $_[0] ;
+ my $line = 0 ;
+ $loc =~ s/^.*:([0-9]*)/$line=$1;/e ;
+ if ( $line > 0 ) {
+ return $line ;
+ }
+ else {
+ return 0 ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Formating of the name of the tokens
+#
+#------------------------------------------------------
+
+=pod
+
+=item * formathashkeyname()
+
+Replies a formatted hash key name.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is the string to format.
+
+=back
+
+=cut
+sub formathashkeyname($) {
+ return lc( $_[0] || '' ) ;
+}
+
+=pod
+
+=item * formatfctkeyname()
+
+Replies a formatted hash key name for functions.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is the string to format.
+
+=back
+
+=cut
+sub formatfctkeyname($) {
+ return addfctbraces( formathashkeyname( $_[0] || '' ) ) ;
+}
+
+=pod
+
+=item * is_valid_regex()
+
+Replies if the specified regular expression
+was well-formed.
+Takes 1 arg:
+
+=over
+
+=item * regex (string)
+
+is the regular expression to verify.
+
+=back
+
+=cut
+sub is_valid_regex($) {
+ return 0 unless $_[0] ;
+ return eval { "" =~ /$_[0]/; 1; } || 0 ;
+}
+
+=pod
+
+=item * tohumanreadable()
+
+Replies a string string that corresponds to
+the human readable form of the specified string.
+Takes 1 arg:
+
+=over
+
+=item * string (string)
+
+is the string to convert.
+
+=back
+
+=cut
+sub tohumanreadable($) {
+ my $string = $_[0] || '' ;
+ $string =~ s/\n/\\n/g;
+ $string =~ s/\r/\\r/g;
+ $string =~ s/\t/\\t/g;
+ $string =~ s/\"/\\\"/g;
+ $string =~ s/\'/\\\'/g;
+ return $string ;
+}
+
+=pod
+
+=item * readfileastext()
+
+Replies the content of a file as a string
+Takes 1 arg:
+
+=over
+
+=item * filename (string)
+
+is the name of the file to read
+
+=back
+
+=cut
+sub readfileastext($) {
+ my $string = "" ;
+ return $string unless $_[0] ;
+ open( READFILE_FID, "< $_[0]" )
+ or Bib2HTML::General::Error::syserr( "unable to open $_[0]: $!" ) ;
+ while ( my $line = <READFILE_FID> ) {
+ $string .= $line ;
+ }
+ close( READFILE_FID )
+ or Bib2HTML::General::Error::syserr( "unable to close $_[0]: $!" ) ;
+ return $string ;
+}
+
+=pod
+
+=item * isnumber()
+
+Replies if the parameter is a arabic or a roman number
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text to scan
+
+=back
+
+=cut
+sub isnumber($) {
+ return ( ( $_[0] ) &&
+ ( ( $_[0] =~ /^\s*[0-9]+\s*$/ ) ||
+ ( romantoarabic($_[0]) >= 0 ) ) ) ;
+}
+
+=pod
+
+=item * tonumber()
+
+Replies the integer value that correspond to the
+specified number. Replies undef if something wrong
+appends.
+Takes 1 arg:
+
+=over
+
+=item * number (string)
+
+is the text to translate
+
+=back
+
+=cut
+sub tonumber($) {
+ my $number = undef ;
+ if ( isnumber($_[0]) ) {
+ if ( $_[0] =~ /^\s*[0-9]+\s*$/ ) {
+ $number = $_[0] ;
+ $number =~ s/^\s+//m ;
+ $number =~ s/\s+$//m ;
+ }
+ else {
+ my $n = romantoarabic($_[0]) ;
+ if ( $n > 0 ) {
+ $number = $n ;
+ }
+ }
+ }
+ return $number ;
+}
+
+=pod
+
+=item * arabictoroman()
+
+Replies the roman number that correspond to the
+specified arabic number
+Takes 1 arg:
+
+=over
+
+=item * arabic (integer)
+
+is the number to convert
+
+=back
+
+=cut
+sub arabictoroman($) {
+ my $nb = $_[0] || 0 ;
+ my @CENT_TRANS_TBL = ( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM' ) ;
+ my @DEC_TRANS_TBL = ( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC' ) ;
+ my @UNIT_TRANS_TBL = ( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX' ) ;
+ my $roman = "" ;
+ my $mille = int($nb / 1000) ;
+ my $cent = int(($nb % 1000) / 100) ;
+ my $dec = int(($nb % 100) / 10) ;
+ my $unit = $nb % 10 ;
+
+ while( $mille > 0 ) {
+ $roman .= "M" ;
+ $mille -- ;
+ }
+ $roman .= $CENT_TRANS_TBL[$cent] ;
+ $roman .= $DEC_TRANS_TBL[$dec] ;
+ $roman .= $UNIT_TRANS_TBL[$unit] ;
+ return $roman ;
+}
+
+=pod
+
+=item * romantoarabic()
+
+Replies the arabic number that correspond to the
+specified roman number
+Takes 1 arg:
+
+=over
+
+=item * roman (integer)
+
+is the number to convert
+
+=back
+
+=cut
+sub romantoarabic($) {
+ my $nb = $_[0] || '' ;
+ my @CENT_TRANS_TBL = ( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM' ) ;
+ my @DEC_TRANS_TBL = ( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC' ) ;
+ my @UNIT_TRANS_TBL = ( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX' ) ;
+
+ my $roman = uc($nb) ;
+ my $arabic = 0 ;
+
+ if ( $roman =~ /^(M*)(.*)$/ ) {
+ $roman = $2 ;
+ $arabic = 1000 * length($1) ;
+ if ( ___romantoarabic($arabic,$roman,100,\@CENT_TRANS_TBL) ) {
+ if ( ___romantoarabic($arabic,$roman,10,\@DEC_TRANS_TBL) ) {
+ if ( ___romantoarabic($arabic,$roman,1,\@UNIT_TRANS_TBL) ) {
+ return $arabic ;
+ }
+ }
+ }
+ }
+ return -1 ;
+}
+
+sub ___romantoarabic($$$$) {
+ my ($max,$index,$after) = ('',-1,$_[1]) ;
+ for(my $i=1; $i<=$#{$_[3]};$i++) {
+ if ( $_[1] =~ /^($_[3][$i])(.*)$/ ) {
+ my ($nb,$reste) = ($1,$2) ;
+ if ( length($nb) > length($max) ) {
+ $max = $nb ;
+ $index = $i ;
+ $after = $reste ;
+ }
+ }
+ }
+ if ( $index > 0 ) {
+ $_[1] = $after ;
+ $_[0] += $_[2] * $index ;
+ return 1 ;
+ }
+ else {
+ return 0 ;
+ }
+}
+
+=pod
+
+=item * extract_first_words()
+
+Replies the first words of the specified string.
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+is the text from which the words must be extracted
+
+=item * len (integer)
+
+is the maximal length of the result
+
+=back
+
+=cut
+sub extract_first_words($$) {
+ my $index = $_[1] || 0 ;
+ my @words = split(/\s+/, ($_[0] || '')) ;
+ return '' unless @words ;
+ my ($result,$i) = ('',0) ;
+
+ while ( ( $i <= $#words ) && ( (length($result)+length($words[$i])) <= $index )) {
+ $result .= " " if ( $result ) ;
+ $result .= $words[$i] ;
+ $i ++ ;
+ }
+
+ if ( $i == 0 ) {
+ $result = substr($words[0],0,$index-3) ;
+ }
+ elsif ( $i < int(@words) ) {
+ if ( length($result) > $index ) {
+ $result = substr($result,0,$index-3) ;
+ }
+ $result .= "..." ;
+ }
+
+ return $result ;
+}
+
+=pod
+
+=item * addslahes()
+
+Replies a string in which the " are protected
+Takes 1 args:
+
+=over
+
+=item * text (string)
+
+is the text to translate
+
+=back
+
+=cut
+sub addslashes($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/\\/\\\\/g ;
+ $text =~ s/"/\\"/g ;
+ return $text ;
+}
+
+=pod
+
+=item * removeslahes()
+
+Replies a string in which the " are unprotected
+Takes 1 args:
+
+=over
+
+=item * text (string)
+
+is the text to translate
+
+=back
+
+=cut
+sub removeslashes($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/\\(.)/$1/g ;
+ return $text ;
+}
+
+=pod
+
+=item * remove_strings()
+
+Takes 2 args:
+
+=over
+
+=item * array (ref)
+
+=item * text (string)
+
+is the text to translate
+
+=back
+
+=cut
+sub remove_strings($$) {
+ my $delims= "\\\"|\\'" ;
+ my $count = int(@{$_[0]}) ;
+ while ( $_[1] =~ /($delims)/ ) {
+ my $delim = $1 ;
+ $_[1] =~ s/$delim((\\$delim|[^$delim])*)$delim/$_[0]->[$count++]="$1";"<<STRING".$count.">>"/ge;
+ }
+}
+
+=pod
+
+=item * restore_strings()
+
+Takes 2 args:
+
+=over
+
+=item * array (ref)
+
+=item * text (string)
+
+is the text to translate
+
+=back
+
+=cut
+sub restore_strings($$) {
+ $_[1] =~ s/<<STRING([0-9]+)>>/$_[0]->[$1-1]/eg ;
+}
+
+=pod
+
+=item * integer2alphabetic()
+
+Replies the string representation of the specified integer.
+Takes 1 arg.
+
+=cut
+sub integer2alphabetic($) {
+ my $value = $_[0] || 0 ;
+ my $q = chr( ord('a') + ( $value % 26 ) ) ;
+ while ( $value >= 26 ) {
+ $value = ($value/26)-1 ;
+ $q = chr( ord('a') + ( ($value % 26) % 26 ) ) . $q ;
+ }
+ return $q ;
+}
+
+=pod
+
+=item * array_slice()
+
+Slices an array content and insert the specified string
+Takes 3 args:
+
+=over
+
+=item * array (ref)
+
+=item * location (integer)
+
+is the index where insert the string
+
+=item * str (string)
+
+is the string to insert
+
+=back
+
+=cut
+sub array_slice($$$) {
+ return unless ( (isarray($_[0])) && ($_[1]>=0) ) ;
+ my $i=$#{$_[0]} ;
+ while ( $i >= $_[1] ) {
+ $_[0]->[$i+1] = $_[0]->[$i] ;
+ $i -- ;
+ }
+ $_[0]->[$_[1]] = $_[2] ;
+}
+
+=pod
+
+=item * filecopy()
+
+Copy a file
+Takes 2 args:
+
+=over
+
+=item * source (string)
+
+=item * target (string)
+
+=back
+
+=cut
+sub filecopy($$) {
+# if ( ! "$_[0]" ) {
+# $! = 2 ;
+# return 0 ;
+# }
+# if ( ! "$_[1]" ) {
+# $! = 2 ;
+# return 0 ;
+# }
+# if ( ! -f "$_[0]" ) {
+# $! = 2 ;
+# return 0 ;
+# }
+# local (*SOURCE,*TARGET) ;
+# open( *SOURCE, "< $_[0]" )
+# or return 0 ;
+# if ( ! open( *TARGET, "> $_[1]" ) ) {
+# my $msg = $! ;
+# close( *SOURCE ) ;
+# $! = $msg ;
+# return 0 ;
+# }
+# my ($tampon,$q,$w) ;
+# $q = sysread( *SOURCE, $tampon, 4096 ) ;
+# if ( ! defined( $q ) ) {
+# my $msg = $! ;
+# close( *TARGET ) ;
+# close( *SOURCE ) ;
+# unlink( $_[1] ) ;
+# $! = $msg ;
+# return 0 ;
+# }
+# while ( $q > 0 ) {
+# $w = syswrite( *TARGET, $tampon, $q ) ;
+# if ( ! defined( $w ) ) {
+# my $msg = $! ;
+# close( *TARGET ) ;
+# close( *SOURCE ) ;
+# unlink( $_[1] ) ;
+# $! = $msg ;
+# return 0 ;
+# }
+# $q = sysread( *SOURCE, $tampon, 4096 ) ;
+# if ( ! defined( $q ) ) {
+# my $msg = $! ;
+# close( *TARGET ) ;
+# close( *SOURCE ) ;
+# unlink( $_[1] ) ;
+# $! = $msg ;
+# return 0 ;
+# }
+# }
+# close( *TARGET ) ;
+# close( *SOURCE ) ;
+# return 1 ;
+
+ return copy("$_[0]","$_[1]") ;
+
+}
+
+=pod
+
+=item * ucwords()
+
+Upper case the first letter of each word.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub ucwords($) {
+ my $text = $_[0] || '' ;
+ $text =~ s/^([^\s\-_])/\u$1/g ;
+ $text =~ s/(?<=[\s\-_])([^\s\-_]+)/\u$1/g ;
+ return $text ;
+}
+
+
+=pod
+
+=item * uniq()
+
+Eliminates redundant values from sorted list of values input.
+Takes 1 arg:
+
+=over
+
+=item * items (list)
+
+The sorted list to be made uniq
+
+=back
+
+=cut
+sub uniq {
+ # Function added the 2003/03/17 by a patch from Norbert Preining
+ #
+ # Eliminates redundant values from sorted list of values input.
+ my $prev = undef;
+ my @out=();
+ foreach my $val (@_){
+ next if $prev && ($prev eq $val);
+ $prev = $val;
+ push(@out, $val);
+ }
+ return @out;
+}
+
+=pod
+
+=item * trim()
+
+Eliminates trailing spaces for each parameter.
+
+=cut
+sub trim {
+ foreach my $val (@_){
+ $val =~ s/^\s+// ;
+ $val =~ s/\s+$// ;
+ }
+}
+
+=pod
+
+=item * __matchlen()
+
+Returns the length of matching
+substrings at beginning of $a and $b.
+Takes 2 args:
+
+=over
+
+=item * str1 (string)
+
+=item * str2 (string)
+
+=back
+
+=cut
+sub __matchlen($$) {
+ my $c=0;
+ my $alen = length($_[0]);
+ my $blen = length($_[1]);
+ my $d = ($alen<$blen)?$alen:$blen;
+ while( (substr($_[0],$c,1) eq substr($_[1],$c,1))&&
+ ($c<$d) ) {
+ $c++;
+ }
+ return $c;
+}
+
+=pod
+
+=item * levenshtein_ops()
+
+Computes the levenshtein distance between two strings.
+A levenshtein distance corresponds to the adds, removes
+required to transform a string to obtain another one.
+Replies the actions to perform.
+Takes 2 args:
+
+=over
+
+=item * str1 (string)
+
+=item * str2 (string)
+
+=back
+
+=cut
+sub levenshtein_ops($$) {
+ my $alen = length($_[0]);
+ my $blen = length($_[1]);
+ my $aptr = 0;
+ my $bptr = 0;
+ my $stop = 0 ;
+
+ my @ops = ();
+
+ while((!$stop)&&($aptr<$alen)&&($bptr<$blen)) {
+ # Search for similar text at the start
+ my $matchlen = __matchlen(substr($_[0], $aptr), substr($_[1], $bptr));
+ if($matchlen>0) {
+ #
+ # Similar text found
+ #
+ push @ops, { '=' => substr($_[0], $aptr, $matchlen) };
+ $aptr += $matchlen;
+ $bptr += $matchlen;
+ }
+ else {
+ #
+ # Difference found
+ #
+ # search for the best next similar text
+ my $bestlen=0;
+ my @bestpos=(0,0);
+ my $bestfound = 0 ;
+ for(my $atmp=$aptr; (!$bestfound)&&($atmp<$alen); $atmp++) {
+ for(my $btmp=$bptr; $btmp<$blen; $btmp++) {
+ my $matchlen = __matchlen(substr($_[0], $atmp),
+ substr($_[1], $btmp));
+ if($matchlen>$bestlen) {
+ $bestlen = $matchlen;
+ @bestpos = ($atmp,$btmp);
+ }
+ $bestfound = ($matchlen>=$blen-$btmp) ;
+ }
+ }
+ if ($bestlen>0) {
+
+ my $adifflen = $bestpos[0] - $aptr;
+ my $bdifflen = $bestpos[1] - $bptr;
+
+ if($adifflen>0) {
+ push @ops, { '-' => substr($_[0], $aptr, $adifflen) };
+ $aptr += $adifflen;
+ }
+ if($bdifflen) {
+ push @ops, { '+' => substr($_[1], $bptr, $bdifflen) };
+ $bptr += $bdifflen;
+ }
+ push @ops, { '=' => substr($_[0], $aptr, $bestlen) };
+ $aptr += $bestlen;
+ $bptr += $bestlen;
+ }
+ else {
+ $stop = 1 ;
+ }
+ }
+ }
+ if($aptr<$alen) {
+ # b has too much stuff
+ push @ops, { '-' => substr($_[0], $aptr) };
+ }
+ if($bptr<$blen) {
+ # a has too little stuff
+ push @ops, { '+' => substr($_[1], $bptr) };
+ }
+ return @ops;
+}
+
+=pod
+
+=item * levenshtein()
+
+Computes the levenshtein distance between two strings.
+A levenshtein distance corresponds to the adds, removes
+required to transform a string to obtain another one.
+Replies the percent of similarity of the strings.
+Takes 2 args:
+
+=over
+
+=item * str1 (string)
+
+=item * str2 (string)
+
+=back
+
+=cut
+sub levenshtein($$) {
+ my @ops = &levenshtein_ops($_[0],$_[1]) ;
+ my $alen = length($_[0]);
+ my $blen = length($_[1]);
+ my $max = ($alen>$blen)?$alen:$blen ;
+ if ($max<=0) {
+ return 0 ;
+ }
+ my $count = 0 ;
+ foreach my $op (@ops) {
+ if ($op->{'='}) {
+ $count = $count + length($op->{'='}) ;
+ }
+ }
+ return ($count*100)/$max ;
+}
+
+=pod
+
+=item * shell_to_regex()
+
+Translate a string that contains shell's wildcards to
+its equivalent expressed with regular expressions.
+Takes 1 arg:
+
+=over
+
+=item * shell_string (string)
+
+=back
+
+=cut
+sub shell_to_regex($) {
+ my $shell_string = shift;
+ my $regex_string = '';
+ while ($shell_string =~ /^(.*?)([*?\[])(.*)$/) {
+ my ($prev,$sep,$after) = ($1,$2,$3);
+ if ($prev) {
+ $prev =~ s/\./\\./g;
+ $prev =~ s/\+/\\+/g;
+ $prev =~ s/\(/\\(/g;
+ $prev =~ s/\)/\\)/g;
+ $prev =~ s/\^/\\^/g;
+ $prev =~ s/\\/\\\\/g;
+ $prev =~ s/\$/\\\$/g;
+ $prev =~ s/\|/\\|/g;
+ $regex_string .= $prev;
+ }
+ if ($sep eq '*') {
+ $regex_string .= '.*';
+ }
+ elsif ($sep eq '?') {
+ $regex_string .= '.';
+ }
+ elsif ($sep eq '[') {
+ if ($after =~ /^([^\]]+)\](.*)$/) {
+ $after = $2;
+ $regex_string .= "[$1]";
+ }
+ else {
+ $regex_string .= '[';
+ }
+ }
+ $shell_string = $after;
+ }
+ if ($shell_string) {
+ $shell_string =~ s/\./\\./g;
+ $shell_string =~ s/\+/\\+/g;
+ $shell_string =~ s/\(/\\(/g;
+ $shell_string =~ s/\)/\\)/g;
+ $shell_string =~ s/\^/\\^/g;
+ $shell_string =~ s/\\/\\\\/g;
+ $shell_string =~ s/\$/\\\$/g;
+ $shell_string =~ s/\|/\\|/g;
+ $regex_string .= $shell_string;
+ }
+ return '^'.$regex_string.'$';
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Title.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Title.pm
new file mode 100644
index 0000000000..f0ce9a7196
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Title.pm
@@ -0,0 +1,145 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::Title - Utility functions for titles
+
+=head1 SYNOPSYS
+
+use Bib2HTML::General::Title ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::Title is a Perl module, which proposes
+functions to support the titles
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To use this package, say something like this:
+
+ use Bib2HTML::General::Title;
+
+...or something similar.
+
+=cut
+
+package Bib2HTML::General::Title;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &get_title_keywords );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the parser
+my $VERSION = "1.0" ;
+
+# The keywords that could be ignored
+my @IGNORABLE_WORDS = ( # English
+ 'the', 'a', 'an', 'in', 'on', 'inside', 'to',
+ 'and', 'by', 'for', 'based', 'of', 'his', 'her',
+ # French
+ 'la', 'le', 'les', 'dans', 'de', 'd', 'un', 'une',
+ 'vers', 'sur', 'et', 'pour', 'par', 'en',
+ ) ;
+
+# The forms of words that could be ignored
+my @IGNORABLE_WORD_FORMS = ( # English
+ '.*ing',
+ # French
+ ) ;
+
+#------------------------------------------------------
+#
+# Keyword API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_title_keywords()
+
+Replies the keywords of the specified title
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text to parse.
+
+=back
+
+=cut
+sub get_title_keywords($) : method {
+ my $text = $_[0] || '' ;
+ my @keywords = () ;
+ foreach my $word (split /[^a-zA-Z0-9\-\&\;]+/, $text) {
+ if ( ( ! strinarray( lc($word), \@keywords ) ) &&
+ ( ! strinarray( lc($word), \@IGNORABLE_WORDS ) ) ) {
+ my $i = $#IGNORABLE_WORD_FORMS ;
+ while ($i>=0) {
+ my $form = $IGNORABLE_WORD_FORMS[$i] ;
+ if ( lc($word) !~ /^$form$/ ) {
+ push @keywords, $word ;
+ $i = -1 ;
+ }
+ $i -- ;
+ }
+ }
+ }
+ return @keywords ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Verbose.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Verbose.pm
new file mode 100644
index 0000000000..7e2a0f31e5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/General/Verbose.pm
@@ -0,0 +1,241 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::General::Verbose - Verbosing functions
+
+=head1 DESCRIPTION
+
+Bib2HTML::General::Verbose is a Perl module, which permits to display
+messages in a verbose mode.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Verbose.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::General::Verbose;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the verbosing functions
+my $VERSION = "1.0" ;
+# The current verbosing level ;
+my $CURRENT_VERBOSE_LEVEL = 0 ;
+
+#------------------------------------------------------
+#
+# Level management functions
+#
+#------------------------------------------------------
+
+#-------------
+=pod
+
+=item * setlevel()
+
+Changes the verbosing level.
+Takes 1 arg:
+
+=over
+
+=item * level (integer)
+
+is an I<integer> which is the requested verbose level.
+
+=back
+
+=cut
+sub setlevel($) {
+ $CURRENT_VERBOSE_LEVEL = $_[0] || 0 ;
+}
+
+
+#-------------
+=pod
+
+=item * currentlevel()
+
+Replies the current verbosing level.
+
+=cut
+sub currentlevel() {
+ return $CURRENT_VERBOSE_LEVEL ;
+}
+
+#------------------------------------------------------
+#
+# Output functions
+#
+#------------------------------------------------------
+
+#-------------
+=pod
+
+=item * verb()
+
+Displays the specified message if in verbose mode.
+Takes 2 args:
+
+=over
+
+=item * message (string)
+
+is an I<string> which is the message to display.
+
+=item * level (integer)
+
+is an I<integer> which is the required level of the message.
+
+=item * cr (optional boolean)
+
+indicates if the carriage return will be printed (default is true)
+
+=back
+
+=cut
+sub verb {
+ my $level = $_[1] || $CURRENT_VERBOSE_LEVEL ;
+ if ( Bib2HTML::General::Verbose::currentlevel() >= $level ) {
+ my $msg = $_[0] || '' ;
+ my $cr = defined($_[2]) ? $_[2] : 1 ;
+ $msg =~ s/\n$// ;
+ print $msg ;
+ print "\n" if $cr ;
+ }
+}
+
+#-------------
+=pod
+
+=item * one()
+
+Displays the specified message if in verbosing level
+greater or equal to 1.
+Takes 2 args:
+
+=over
+
+=item * message (string)
+
+is an I<string> which is the message to display.
+
+=item * ...
+
+optional parameters passed to verb()
+
+=back
+
+=cut
+sub one($) {
+ my $msg = $_[0] || '' ;
+ Bib2HTML::General::Verbose::verb($msg,1,$_[1]) ;
+}
+
+#-------------
+=pod
+
+=item * two()
+
+Displays the specified message if in verbosing level
+greater or equal to 2.
+Takes 2 args:
+
+=over
+
+=item * message (string)
+
+is an I<string> which is the message to display.
+
+=item * ...
+
+optional parameters passed to verb()
+
+=back
+
+=cut
+sub two($) {
+ my $msg = $_[0] || '' ;
+ Bib2HTML::General::Verbose::verb($msg,2,$_[1]) ;
+}
+
+#-------------
+=pod
+
+=item * three()
+
+Displays the specified message if in verbosing level
+greater or equal to 3.
+Takes 2 args:
+
+=over
+
+=item * message (string)
+
+is an I<string> which is the message to display.
+
+=item * ...
+
+optional parameters passed to verb()
+
+=back
+
+=cut
+sub three($) {
+ my $msg = $_[0] || '' ;
+ Bib2HTML::General::Verbose::verb($msg,3,$_[1]) ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/AbstractGenerator.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/AbstractGenerator.pm
new file mode 100644
index 0000000000..e19ee79173
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/AbstractGenerator.pm
@@ -0,0 +1,1226 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::AbstractGenerator - An abstract generator
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::AbstractGenerator is a Perl module, which permits to
+generate some document for a BibTeX database. This class must be
+overwrite.
+
+=head1 SYNOPSYS
+
+Bib2HTML::Generator::AbstractGenerator->new( content, output, info, titles,
+ lang, [params] ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::AbstractGenerator is a Perl module, which permits to
+generate some documents for a BibTeX database.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+is the content of the bibliography to output.
+
+=item * output (string)
+
+is the output directory in which the HTML page must be put.
+
+=item * bib2html_data (hash)
+
+contains some information on Bib2HTML :
+
+=over
+
+=item VERSION
+
+is the version of Bib2HTML.
+
+=item BUG_URL
+
+is the URL where to submit a bug.
+
+=item URL
+
+is the URL of the main page of Bib2HTML.
+
+=item AUTHOR_EMAIL
+
+is the email of the author of Bib2HTML.
+
+=item AUTHOR
+
+is the nmae of the author of Bib2HTML.
+
+
+=item PERLSCRIPTDIR
+
+is the dorectory where is the Bib2HTML perl script.
+
+=back
+
+=item * titles (hash)
+
+is the titles of the pages:
+
+=over
+
+=item SHORT
+
+is the title shown in the window bar.
+
+=item LONG
+
+is the title shown in the default HTML pag.
+
+=back
+
+=item * lang (string)
+
+is the name of the language to use
+
+=item * show_bibtex (boolean)
+
+indicates if this parser must generate a verbatim of the BibTeX code
+
+=item * params (optional array)
+
+is the set of parameters passed to the generator.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in AbstractGenerator.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::AbstractGenerator;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &display_supported_generators
+ &display_supported_languages
+ &display_supported_themes );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+use File::Basename ;
+use File::Spec;
+
+use Bib2HTML::General::Misc;
+use Bib2HTML::General::HTML;
+use Bib2HTML::Generator::LangManager;
+use Bib2HTML::Generator::FileWriter;
+use Bib2HTML::Generator::StdOutWriter;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of abstract generator
+my $VERSION = "6.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = { 'TARGET' => $_[1] || File::Spec->curdir(),
+ 'TARGET_NOT_REMOVABLE' => [],
+ 'CONTENT' => $_[0] || { },
+ 'BIB2HTML' => { 'VERSION' => $_[2]{'VERSION'} || "???",
+ 'BUG_URL' => $_[2]{'BUG_URL'} || "",
+ 'URL' => $_[2]{'URL'} || "",
+ 'AUTHOR_EMAIL' => $_[2]{'AUTHOR_EMAIL'} || "",
+ 'AUTHOR' => $_[2]{'AUTHOR'} || "",
+ 'PERLSCRIPTDIR' => $_[2]{'PERLSCRIPTDIR'} || "",
+ },
+ 'SHORT_TITLE' => $_[3]{'SHORT'},
+ 'LONG_TITLE' => $_[3]{'LONG'},
+ 'SHOW_BIBTEX' => $_[5],
+ 'CACHE' => { 'BUILT_ENTRY_AUTHOR_LIST' => {},
+ },
+ } ;
+
+ # Creates the language support
+ confess( 'you must supply the language' ) unless ($_[4]) ;
+ $self->{'LANG'} = Bib2HTML::Generator::LangManager->new($_[4]) ;
+
+ # Sets the constants according to the language
+ if ( ! $self->{'LONG_TITLE'} ) {
+ $self->{'LONG_TITLE'} = ( $self->{'SHORT_TITLE'} ?
+ $self->{'SHORT_TITLE'} :
+ $self->{'LANG'}->get('I18N_LANG_DEFAULT_TITLE') ) ;
+ }
+ if ( ! $self->{'SHORT_TITLE'} ) {
+ $self->{'SHORT_TITLE'} = $self->{'LONG_TITLE'} ;
+ }
+ $self->{'PLURIAL_TYPE_LABELS'} = { 'article' => $self->{'LANG'}->get('I18N_LANG_P_ARTICLE'),
+ 'inproceedings' => $self->{'LANG'}->get('I18N_LANG_P_INPROCEEDINGS'),
+ 'incollection' => $self->{'LANG'}->get('I18N_LANG_P_INCOLLECTION'),
+ 'book' => $self->{'LANG'}->get('I18N_LANG_P_BOOK'),
+ 'techreport' => $self->{'LANG'}->get('I18N_LANG_P_TECHREPORT'),
+ 'unpublished' => $self->{'LANG'}->get('I18N_LANG_P_UNPUBLISHED'),
+ 'booklet' => $self->{'LANG'}->get('I18N_LANG_P_BOOKLET'),
+ 'conference' => $self->{'LANG'}->get('I18N_LANG_P_PROCEEDINGS'),
+ 'proceedings' => $self->{'LANG'}->get('I18N_LANG_P_PROCEEDINGS'),
+ 'inbook' => $self->{'LANG'}->get('I18N_LANG_P_INBOOK'),
+ 'manual' => $self->{'LANG'}->get('I18N_LANG_P_MANUAL'),
+ 'mastersthesis' => $self->{'LANG'}->get('I18N_LANG_P_MASTERTHESIS'),
+ 'misc' => $self->{'LANG'}->get('I18N_LANG_P_MISC'),
+ 'phdthesis' => $self->{'LANG'}->get('I18N_LANG_P_PHDTHESIS'),
+ } ;
+ $self->{'SINGULAR_TYPE_LABELS'} = { 'article' => $self->{'LANG'}->get('I18N_LANG_S_ARTICLE'),
+ 'inproceedings' => $self->{'LANG'}->get('I18N_LANG_S_INPROCEEDINGS'),
+ 'incollection' => $self->{'LANG'}->get('I18N_LANG_S_INCOLLECTION'),
+ 'book' => $self->{'LANG'}->get('I18N_LANG_S_BOOK'),
+ 'techreport' => $self->{'LANG'}->get('I18N_LANG_S_TECHREPORT'),
+ 'unpublished' => $self->{'LANG'}->get('I18N_LANG_S_UNPUBLISHED'),
+ 'booklet' => $self->{'LANG'}->get('I18N_LANG_S_BOOKLET'),
+ 'conference' => $self->{'LANG'}->get('I18N_LANG_S_PROCEEDINGS'),
+ 'proceedings' => $self->{'LANG'}->get('I18N_LANG_S_PROCEEDINGS'),
+ 'inbook' => $self->{'LANG'}->get('I18N_LANG_S_INBOOK'),
+ 'manual' => $self->{'LANG'}->get('I18N_LANG_S_MANUAL'),
+ 'mastersthesis' => $self->{'LANG'}->get('I18N_LANG_S_MASTERTHESIS'),
+ 'misc' => $self->{'LANG'}->get('I18N_LANG_S_MISC'),
+ 'phdthesis' => $self->{'LANG'}->get('I18N_LANG_S_PHDTHESIS'),
+ } ;
+ $self->{'FORMATS'} = { 'name' => $self->{'LANG'}->get('I18N_LANG_FORMAT_NAME'),
+ 'names' => $self->{'LANG'}->get('I18N_LANG_FORMAT_NAMES'),
+ } ;
+
+ bless( $self, $class );
+
+ # Params
+ $self->{'GENERATOR_PARAMS'} = {} ;
+ if ( ( $_[6] ) && ( ! isemptyhash($_[6]) ) ) {
+ foreach my $param ( keys %{$_[6]} ) {
+ # Format the parameter's name
+ my $norm_param = lc($param) ;
+ $norm_param =~ s/_/-/g ;
+
+ # Get the current value and call the function to save it (eventually)
+ my $value = $self->last_param($_[6]->{"$param"} || '') ;
+ Bib2HTML::General::Error::syserr("unsupported generator parameter: ".lc("$norm_param"))
+ unless ($self->save_generator_parameter("$norm_param", $value));
+
+ # If this parameter was not saved, save it
+ $self->{'GENERATOR_PARAMS'}{"$norm_param"} = $value
+ unless ( exists $self->{'GENERATOR_PARAMS'}{"$norm_param"} ) ;
+
+ }
+ }
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * generate()
+
+Generates the HTML pages.
+You must NOT overwrite this method.
+
+=cut
+sub generate() : method {
+ my $self = shift ;
+ $self->pre_processing() ;
+ $self->do_processing() ;
+ $self->post_processing() ;
+}
+
+=pod
+
+=item * pre_processing()
+
+Pre_processing.
+
+=cut
+sub pre_processing() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ Bib2HTML::General::Verbose::three( "Doing the pre-processing...\n" ) ;
+ Bib2HTML::General::Verbose::verb( "\tReplace all <BIB2HTML>...\n", 4 ) ;
+ my $count = 0 ;
+ if ( ! isemptyhash( $self->{'CONTENT'}{'entries'} ) ) {
+ my @keys = keys %{$self->{'CONTENT'}{'entries'}} ;
+ foreach my $key ( @keys ) {
+
+ if ( ! isemptyhash( $self->{'CONTENT'}{'entries'}{$key}{'fields'} ) ) {
+
+ my @fields = keys %{$self->{'CONTENT'}{'entries'}{$key}{'fields'}} ;
+
+ foreach my $field ( @fields ) {
+ ( my $cnt,
+ $self->{'CONTENT'}{'entries'}{$key}{'fields'}{$field} ) =
+ $self->translate_bib2html_tags( $self->{'CONTENT'}{'entries'}{$key}{'fields'}{$field},
+ $key, $field, $rootdir ) ;
+ $count += $cnt ;
+ }
+
+ }
+
+ }
+ }
+
+ # Create the stream writer
+ my $writer;
+ if ($self->genparam('stdout')) {
+ $writer = Bib2HTML::Generator::StdOutWriter->new();
+ }
+ else {
+ $writer = Bib2HTML::Generator::FileWriter->new();
+ }
+ $self->set_stream_writer($writer);
+}
+
+=pod
+
+=item * create_output_directory()
+
+Create the output directory.
+
+=cut
+sub create_output_directory() : method {
+ my $self = shift;
+ my $writer = $self->get_stream_writer();
+ confess("no writer specified") unless ($writer);
+ $self->{'TARGET'} = $writer->create_output_directory($self->{'TARGET'},@{$self->{'TARGET_NOT_REMOVABLE'}});
+}
+
+=pod
+
+=item * set_unremovable_files(@)
+
+Force this generator to not remove the specified
+files when the output directory will be generated.
+
+=cut
+sub set_unremovable_files(@) : method {
+ my $self = shift;
+ @{$self->{'TARGET_NOT_REMOVABLE'}} = @_;
+}
+
+=pod
+
+=item * get_stream_writer()
+
+Replies the instance of the output stream writer.
+
+=cut
+sub get_stream_writer() : method {
+ my $self = shift ;
+ if (!$self->{'STREAM_WRITER'}) {
+ $self->{'STREAM_WRITER'} = new Bib2HTML::Generator::FileWriter->new();
+ }
+ return $self->{'STREAM_WRITER'};
+}
+
+=pod
+
+=item * set_stream_writer($)
+
+Set the instance of the output stream writer.
+Replies the old writer.
+Takes 1 arg:
+
+=over
+
+=item * writer (ref to Bib2HTML::Generator::Writer)
+
+is the instance of the writer.
+
+=back
+
+=cut
+sub set_stream_writer($) : method {
+ my $self = shift ;
+ my $writer = shift;
+ my $old_writer = $self->{'STREAM_WRITER'};
+ $self->{'STREAM_WRITER'} = $writer;
+ return $old_writer;
+}
+
+=pod
+
+=item * do_processing()
+
+Main processing.
+
+=cut
+sub do_processing() : method {
+ my $self = shift ;
+}
+
+=pod
+
+=item * post_processing()
+
+Post_processing.
+
+=cut
+sub post_processing() : method {
+ my $self = shift ;
+}
+
+=pod
+
+=item * translate_bib2html_tags()
+
+Replaces the Bib2HTML tags.
+Takes 4 args.
+
+=cut
+sub translate_bib2html_tags($$$$) : method {
+ my $self = shift ;
+ my $rootdir = $_[3] || confess( 'you must supply the root directory' );
+ my $text = $_[0] || '' ;
+ my $count = 0 ;
+ my $split = split_html_tags( $text ) ;
+ if ( defined( $split ) ) {
+ if ( isarray( $split ) ) {
+ $text = '' ;
+ my $inbib2html = undef ;
+ foreach my $case ( @{$split} ) {
+ if ( $case =~ /^<BIB2HTML\s*(.*)\s*>$/im ) {
+ $inbib2html = $self->html_extract_tag_params( $1 ) ;
+ }
+ elsif ( $case =~ /^<BIB2HTML\s*(.*)\s*\/>$/im ) {
+ $text .= $self->run_bib2html_post_action( $self->html_extract_tag_params( $1 ),
+ $_[1], $_[2], $rootdir ) ;
+ $count ++ ;
+ }
+ elsif ( $case =~ /^<\/BIB2HTML.*?>$/im ) {
+ if ( $inbib2html ) {
+ $text .= $self->run_bib2html_post_action( $inbib2html,
+ $_[1],
+ $_[2],
+ $rootdir ) ;
+ $count ++ ;
+ }
+ $inbib2html = undef ;
+ }
+ elsif ( ! defined( $inbib2html ) ) {
+ $text .= $case ;
+ }
+ }
+ }
+ }
+ return ( $count, $text ) ;
+}
+
+=pod
+
+=item * run_bib2html_post_action()
+
+Replies the text corresponding to the specified bib2html tag.
+Takes 4 args.
+
+=cut
+sub run_bib2html_post_action($$$$) : method {
+ my $self = shift ;
+ my $rootdir = $_[3] || confess( 'you must supply the root directory' );
+ my $currententry = $_[1] || confess( 'you must supply the current entry key' ) ;
+ my $currentfield = $_[2] || confess( 'you must supply the current field key' ) ;
+ if ( ( $_[0] ) && ( ! isemptyhash( $_[0] ) ) ) {
+ my $action = uc( $_[0]->{'action'} || '' ) ;
+
+ if ( $action eq 'CITE' ) {
+ my $label = $_[0]->{'label'} ;
+ my $key = $_[0]->{'key'} || '' ;
+ if ( $key ) {
+ my $bibtex = new Bib2HTML::Translator::BibTeXEntry() ;
+ if ( ! $label ) {
+ $label = $bibtex->citation_label( $key, $self->{'CONTENT'}{'entries'}{$key} ) ;
+ }
+ else {
+ $bibtex->save_citation_label( $key, $label ) ;
+ }
+ if ( exists $self->{'CONTENT'}{'entries'}{$key} ) {
+ my $filename = $self->filename('entry', $key ) ;
+
+ return $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $label,
+ $self->browserframe('entry') ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "Can't found the entry key for a citation command inside the field '".$currentfield."'",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{$currententry}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{$currententry}{'location'} ) ) ;
+ return "?" ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::warm( "Can't found the entry with the key '".$key."' for a citation command inside the field '".$currentfield."'",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{$currententry}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{$currententry}{'location'} ) ) ;
+ return "?" ;
+ }
+ }
+
+ }
+ return '' ;
+}
+
+#------------------------------------------------------
+#
+# HTML buildings
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_all_authors()
+
+Replies the all authors from the specified list.
+
+=cut
+sub get_all_authors($) : method {
+ my $self = shift ;
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+ return $parser->splitnames( $_[0] ) ;
+}
+
+=pod
+
+=item * get_first_author()
+
+Replies the first author from the specified list.
+
+=cut
+sub get_first_author($) : method {
+ my $self = shift ;
+ my @authors = $self->get_all_authors( $_[0] ) ;
+ return $authors[0] ;
+}
+
+=pod
+
+=item * count_authors()
+
+Replies the number of authors inside the specified string
+
+=cut
+sub count_authors($) : method {
+ my $self = shift ;
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+ return $parser->countnames( $_[0] ) ;
+}
+
+=pod
+
+=item * get_entry_types()
+
+Replies an array of entry types
+
+=cut
+sub get_entry_types() : method {
+ my $self = shift ;
+ my @types = () ;
+ foreach my $entry (keys %{$self->{'CONTENT'}{'entries'}}) {
+ my $type = lc( $self->{'CONTENT'}{'entries'}{$entry}{'type'} ) ;
+ if ( ! strinarray($type,\@types) ) {
+ push( @types, $type ) ;
+ }
+ }
+ my @t = sortbyletters(@types);
+ return @t ;
+}
+
+=pod
+
+=item * get_entry_authors()
+
+Replies an array of entry authors
+
+=cut
+sub get_entry_authors() : method {
+ my $self = shift ;
+ if (%{$self->{'CACHE'}{'BUILT_ENTRY_AUTHOR_LIST'}}) {
+ return %{$self->{'CACHE'}{'BUILT_ENTRY_AUTHOR_LIST'}} ;
+ }
+ else {
+ my %authors = () ;
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+ my @entries = keys %{$self->{'CONTENT'}{'entries'}};
+ @entries = sortbyletters(@entries);
+ foreach my $entry (@entries) {
+ if ( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'author'} ) {
+ my @auts = $self->get_all_authors($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'author'}) ;
+ foreach my $aut (@auts) {
+ if ( ! $aut->{'et al'} ) {
+ my $key = lc(remove_html_accents($parser->formatname( $aut, 'l f.' ))) ;
+ $key =~ s/[^a-zA-Z0-1]+//g ;
+ my $count = 0 ;
+ my $thekey = $key ;
+ while ( ( $count >= 0 ) && ( exists $authors{$thekey} ) ) {
+ if ( $parser->samenames($aut,$authors{$thekey}) ) {
+ $count = -1 ;
+ }
+ else {
+ $count ++ ;
+ $thekey = "${key}_${count}" ;
+ }
+ }
+ if ( $count >= 0 ) {
+ $authors{$thekey} = $aut ;
+ }
+ }
+ }
+ }
+ }
+ $self->{'CACHE'}{'BUILT_ENTRY_AUTHOR_LIST'} = \%authors ;
+ return %authors ;
+ }
+}
+
+=pod
+
+=item * get_all_entries_ayt()
+
+Replies an array of entries sorted by authors, year and title
+
+=cut
+sub get_all_entries_ayt() : method {
+ my $self = shift ;
+ my @keys = keys %{$self->{'CONTENT'}{'entries'}} ;
+ return ( sort {
+ my $result = &__compare_two_entries_ayt__($a,$b,$self) ;
+ return $result ;
+ } @keys ) ;
+}
+
+=pod
+
+=item * get_all_entries_yat()
+
+Replies an array of entries sorted by authors, year and title
+
+=cut
+sub get_all_entries_yat() : method {
+ my $self = shift ;
+ my @keys = keys %{$self->{'CONTENT'}{'entries'}} ;
+ return ( sort {
+ my $result = &__compare_two_entries_yat__($a,$b,$self) ;
+ return $result ;
+ } @keys ) ;
+}
+
+# Private function to compare two entries in the purpose
+# to sort the entries by author,year,title
+# WARNING: years have a decroissant order
+sub __compare_two_entries_ayt__($$$) {
+ confess( 'you must supply the left comparaison operand' ) unless $_[0] ;
+ confess( 'you must supply the right comparaison operand' ) unless $_[1] ;
+ my $self = $_[2] || confess( 'you must supply the generator object' ) ;
+ my $a1 = $self->get_first_author($self->__get_author_editor__($_[0],'') ) ;
+ my $a2 = $self->get_first_author($self->__get_author_editor__($_[1],'') ) ;
+
+ if ( (!$a1) && (!$a2) ) {
+ return 0 ;
+ }
+ elsif (!$a1) {
+ return 1 ;
+ }
+ elsif (!$a2) {
+ return -1 ;
+ }
+
+ my $y1 = $self->__get_year__( $_[0], 0 ) || 0 ;
+ my $y2 = $self->__get_year__( $_[1], 0 ) || 0 ;
+ my $t1 = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'title'} || '' ;
+ my $t2 = $self->{'CONTENT'}{'entries'}{$_[1]}{'fields'}{'title'} || '' ;
+
+ if ( ( $a1->{'et al'} ) && ( $a2->{'et al'} ) ) {
+ return 0 ;
+ }
+ elsif ( $a1->{'et al'} ) {
+ return 1 ;
+ }
+ elsif ( $a1->{'et al'} ) {
+ return -1 ;
+ }
+ elsif ( $a1->{'last'} lt $a2->{'last'} ) {
+ return -1 ;
+ }
+ elsif ( $a1->{'last'} gt $a2->{'last'} ) {
+ return 1 ;
+ }
+ elsif ( $y1 < $y2 ) {
+ return 1 ;
+ }
+ elsif ( $y1 > $y2 ) {
+ return -1 ;
+ }
+ elsif ( $t1 lt $t2 ) {
+ return -1 ;
+ }
+ elsif ( $t1 gt $t2 ) {
+ return 1 ;
+ }
+ else {
+ return 0 ;
+ }
+}
+
+# Private function to compare two entries in the purpose
+# to sort the entries by year,author,title
+# WARNING: years have a decroissant order
+sub __compare_two_entries_yat__($$$) {
+ confess( 'you must supply the left comparaison operand' ) unless $_[0] ;
+ confess( 'you must supply the right comparaison operand' ) unless $_[1] ;
+ my $self = $_[2] || confess( 'you must supply the generator object' ) ;
+ my $a1 = $self->get_first_author($self->__get_author_editor__($_[0],'') ) ;
+ my $a2 = $self->get_first_author($self->__get_author_editor__($_[1],'') ) ;
+
+ if ( (!$a1) && (!$a2) ) {
+ return 0 ;
+ }
+ elsif (!$a1) {
+ return 1 ;
+ }
+ elsif (!$a2) {
+ return -1 ;
+ }
+
+ my $y1 = $self->__get_year__( $_[0], 0 ) || 0 ;
+ my $y2 = $self->__get_year__( $_[1], 0 ) || 0 ;
+ my $t1 = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'title'} || '' ;
+ my $t2 = $self->{'CONTENT'}{'entries'}{$_[1]}{'fields'}{'title'} || '' ;
+ if ( $y1 < $y2 ) {
+ return 1 ;
+ }
+ elsif ( $y1 > $y2 ) {
+ return -1 ;
+ }
+ elsif ( ( $a1->{'et al'} ) && ( $a2->{'et al'} ) ) {
+ return 0 ;
+ }
+ elsif ( $a1->{'et al'} ) {
+ return 1 ;
+ }
+ elsif ( $a1->{'et al'} ) {
+ return -1 ;
+ }
+ elsif ( $a1->{'last'} lt $a2->{'last'} ) {
+ return -1 ;
+ }
+ elsif ( $a1->{'last'} gt $a2->{'last'} ) {
+ return 1 ;
+ }
+ elsif ( $t1 lt $t2 ) {
+ return -1 ;
+ }
+ elsif ( $t1 gt $t2 ) {
+ return 1 ;
+ }
+ else {
+ return 0 ;
+ }
+}
+
+# Private function to get the year of the specified entry
+sub __get_year__($$) {
+ my $self = shift ;
+ my $y = ( ( exists( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'year'} ) ) &&
+ ( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'year'} ) ) ?
+ tonumber($self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'year'}) : $_[1] ;
+ if ( ! defined( $y ) ) {
+ Bib2HTML::General::Error::warm( "the year field of '$_[0]' is not well-formatted: \"".
+ $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'year'}.
+ "\". It must be a number. Assume none.",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{$_[0]}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{$_[0]}{'location'} ) ) ;
+ $y = $_[1] ;
+ }
+ return $y ;
+}
+
+# Private function to get the author of the specified entry
+sub __get_author_editor__($$) {
+ my $self = shift ;
+ my $a = ( ( exists( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'author'} ) ) &&
+ ( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'author'} ) ) ?
+ $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'author'} : $_[1] ;
+ if ( ! $a ) {
+ $a = ( ( exists( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'editor'} ) ) &&
+ ( $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'editor'} ) ) ?
+ $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'editor'} : $_[1] ;
+ }
+ if ( ! defined( $a ) ) {
+ Bib2HTML::General::Error::warm( "the author field of '$_[0]' is not well-formatted: \"".
+ $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'author'}.
+ "\". Assume none.",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{$_[0]}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{$_[0]}{'location'} ) ) ;
+ $a = $_[1] ;
+ }
+ return $a ;
+}
+
+#------------------------------------------------------
+#
+# Information
+#
+#------------------------------------------------------
+
+=pod
+
+=item * display_supported_generators()
+
+Display the list of supported generators.
+Takes 2 args:
+
+=over
+
+=item * perldir (string)
+
+is the path to the directory where the Perl packages
+are stored.
+
+=item * default (string)
+
+is the name of the default generator
+
+=back
+
+=cut
+sub display_supported_generators($$) {
+ my $path = $_[0] || confess( 'you must specify the pm path' ) ;
+ my $default = $_[1] || '' ;
+ my @pack = split /\:\:/, __PACKAGE__ ;
+ pop @pack ;
+ @pack = ( File::Spec->splitdir($path), @pack ) ;
+ my $glob = File::Spec->catfile(@pack, '*');
+ $glob =~ s/ /\\ /g;
+ foreach my $file ( glob($glob) ) {
+ my $name = basename($file) ;
+ if ( $name =~ /^(.+)Gen\.pm$/ ) {
+ $name = $1 ;
+ print join( '',
+ "$name",
+ ( $default && ( $default eq $name ) ) ?
+ " (default)" : "",
+ "\n" ) ;
+ }
+ }
+}
+
+=pod
+
+=item * display_supported_languages()
+
+Display the list of supported languages.
+Takes 2 args:
+
+=over
+
+=item * perldir (string)
+
+is the path to the directory where the Perl packages
+are stored.
+
+=item * default (string)
+
+is the name of the default language
+
+=back
+
+=cut
+sub display_supported_languages($$) {
+ Bib2HTML::Generator::LangManager::display_supported_languages($_[0],$_[1]);
+}
+
+=pod
+
+=item * display_supported_themes()
+
+Display the list of supported themes.
+Takes 2 args:
+
+=over
+
+=item * perldir (string)
+
+is the path to the directory where the Perl packages
+are stored.
+
+=item * default (string)
+
+is the name of the default theme
+
+=back
+
+=cut
+sub display_supported_themes($$) {
+ my $path = $_[0] || confess( 'you must specify the pm path' ) ;
+ my $default = $_[1] || '' ;
+ my @pack = split /\:\:/, __PACKAGE__ ;
+ pop @pack ;
+ push @pack, 'Theme' ;
+ @pack = ( File::Spec->splitdir($path), @pack ) ;
+ my $glob = File::Spec->catfile(@pack, '*');
+ $glob =~ s/ /\\ /g;
+ foreach my $file ( glob($glob) ) {
+ my $name = basename($file) ;
+ if ( $name =~ /^(.+)\.pm$/ ) {
+ $name = $1 ;
+ print join( '',
+ "$name",
+ ( $default && ( $default eq $name ) ) ?
+ " (default)" : "",
+ "\n" ) ;
+ }
+ }
+}
+
+=pod
+
+=item * save_generator_parameter()
+
+Replies if the specified generator parameter was supported.
+This function was called each time a generator parameter was
+given to this generator. By default, simply updatethe
+given parameter value (second parameter).
+You could do some stuff before
+saving (splitting...). Replies false is the parameter was
+not recognized. Don't forget to call inherited functions.
+Takes 2 args:
+
+=over
+
+=item * param_name (string)
+
+is the name of the parameter.
+
+=item * param_value (byref string)
+
+is the value of the parameter.
+
+=back
+
+=cut
+sub save_generator_parameter($$) {
+ my $self = shift ;
+ if ( $_[0] eq 'stdout' ) {
+ $_[1] = 1 ;
+ return 1 ;
+ }
+ return undef ;
+}
+
+=pod
+
+=item * display_supported_generator_params()
+
+Display the list of supported generator parameters.
+Child classes must override this method.
+
+=cut
+sub display_supported_generator_params() {
+ my $self = shift ;
+ print "supported generator parameters:\n" ;
+
+ $self->show_supported_param('stdout',
+ 'If specified, the generated contents will be print on to the standard output.' );
+
+}
+
+=pod
+
+=item * show_supported_param()
+
+Display the help about one generator parameter.
+Takes 3 args:
+
+=over
+
+=item * name (string)
+
+is the name of the parameter
+
+=item * comment (string)
+
+is the comment for the parameter
+
+=item * type (optional string)
+
+is the type of the value that will be affected to
+the parameter. If not present, no value needed.
+
+=back
+
+=cut
+sub show_supported_param($$;$) {
+ my $self = shift ;
+ print " ".($_[0]||'?') ;
+ if ( $_[2] ) {
+ print " = ".$_[2] ;
+ }
+ print "\n" ;
+ my $t = splittocolumn_base($_[1]||'',
+ 55,
+ "\t\t") ;
+ print $t ;
+ if ( $t !~ /\n\r$/ ) {
+ print "\n" ;
+ }
+}
+
+=pod
+
+=item * merge_params()
+
+Merges the specified parameter value with the given join.
+Takes 2 args:
+
+=over
+
+=item * join (string)
+
+=item * value (mixed)
+
+=back
+
+=cut
+sub merge_params($) {
+ my $self = shift ;
+ return join($_[0],@{$_[1]})
+ if ( isarray($_[1]) ) ;
+ return $_[1] ;
+}
+
+=item * last_param()
+
+Replies the last occurrence of a generator parameter value.
+Takes 1 args:
+
+=over
+
+=item * value (mixed)
+
+=back
+
+=cut
+sub last_param {
+ my $self = shift ;
+ return $_[0]->[$#{$_[0]}]
+ if ( isarray($_[0]) ) ;
+ return $_[0] ;
+}
+
+=item * first_param()
+
+Replies the first occurrence of a generator parameter value.
+Takes 1 args:
+
+=over
+
+=item * value (mixed)
+
+=back
+
+=cut
+sub first_param {
+ my $self = shift ;
+ return $_[0]->[0]
+ if ( isarray($_[0]) ) ;
+ return $_[0] ;
+}
+
+#------------------------------------------------------
+#
+# Formatting backend
+#
+#------------------------------------------------------
+
+=pod
+
+=item * formatnames_url_backend()
+
+This method is called each time the BibTeXNames module
+must format an author's name with a URL.
+Takes 2 args:
+
+=over
+
+=item * author's data (hash)
+
+=item * label (string)
+
+=item * rootdir (string)
+
+=back
+
+=cut
+sub formatnames_url_backend($$$) {
+ my $self = shift ;
+ return $_[1] || '' ;
+}
+
+#------------------------------------------------------
+#
+# Utility
+#
+#------------------------------------------------------
+
+
+=pod
+
+=item * copythisfile()
+
+Copy a file.
+Takes 2 args:
+
+=over
+
+=item * source (string)
+
+=item * target (string)
+
+=back
+
+=cut
+sub copythisfile($$) {
+ my $self = shift ;
+ my $source = $_[0] || '' ;
+ my $target = $_[1] || '' ;
+
+ Bib2HTML::General::Error::syserr( "you must give a source file to copy\n" )
+ unless ( $source ) ;
+ Bib2HTML::General::Error::syserr( "you must give a target file to copy\n" )
+ unless ( $target ) ;
+
+ my $sbase = basename($source) ;
+ my $sdir = dirname($source) ;
+ my $tbase = basename($target) ;
+ my $tdir = dirname($target) ;
+
+ Bib2HTML::General::Verbose::two( "Copying $sbase..." ) ;
+ Bib2HTML::General::Verbose::three( "\tfrom $sdir" ) ;
+ if ( $tbase ne $sbase ) {
+ Bib2HTML::General::Verbose::three( "\tto $target" ) ;
+ }
+ else {
+ Bib2HTML::General::Verbose::three( "\tto $tdir" ) ;
+ }
+
+ filecopy( "$source",
+ "$target" )
+ or Bib2HTML::General::Error::syswarm( "$source: $!\n" );
+
+ return 1 ;
+}
+
+=pod
+
+=item * isgenparam()
+
+Replies if the specified string corresponds to a
+generator parameter.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+=back
+
+=cut
+sub isgenparam($) {
+ my $self = shift ;
+ return ( ( $_[0] ) &&
+ ( exists $self->{'GENERATOR_PARAMS'}{lc($_[0])} ) ) ;
+}
+
+=pod
+
+=item * genparam()
+
+Replies the specified generator parameter value.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+=back
+
+=cut
+sub genparam($) {
+ my $self = shift ;
+ if ( ( $_[0] ) &&
+ ( exists $self->{'GENERATOR_PARAMS'}{lc($_[0])} ) &&
+ ( $self->{'GENERATOR_PARAMS'}{lc($_[0])} ) ) {
+ return $self->{'GENERATOR_PARAMS'}{lc($_[0])} ;
+ }
+ else {
+ return undef ;
+ }
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/DomainGen.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/DomainGen.pm
new file mode 100644
index 0000000000..e2abf52174
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/DomainGen.pm
@@ -0,0 +1,564 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::DomainGen - An HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::DomainGen ;
+
+my $gen = Bib2HTML::Generator::DomainGen->new( data, output, info, titles,
+ lang, theme ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::DomainGen is a Perl module, which permits to
+generate HTML pages for the BibTeX database.
+In addition to the features of Bib2HTML::Generator::ExtendedGen, this
+generator supports the following bibtex fields:
+
+=over
+
+=item * domain
+
+is a string that identify the first domain in which
+the document was located.
+
+=item * nddomain
+
+is a string that identify the second domain in which
+the document was located.
+
+=item * rddomain
+
+is a string that identify the third domain in which
+the document was located.
+
+=item * domains
+
+is column-separated list of domains in which
+the document was located.
+
+=back
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::DomainGen;
+
+ my $gen = Bib2HTML::Generator::DomainGen->new( { }, "./bib",
+ { 'BIB2HTML_VERSION' => "0.1",
+ },
+ { 'SHORT' => "This is the title",
+ 'LONG' => "This is the title",
+ },
+ "English",
+ "Simple"
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+see ExtendedGen help.
+
+=item * output (string)
+
+see ExtendedGen help.
+
+=item * bib2html_data (hash)
+
+see ExtendedGen help.
+
+=item * titles (hash)
+
+see ExtendedGen help.
+
+=item * lang (string)
+
+see ExtendedGen help.
+
+=item * theme (string)
+
+see ExtendedGen help.
+
+=item * show_bibtex (boolean)
+
+See ExtendedGen.pm
+
+=item * params (optional array)
+
+see ExtendedGen help.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in DomainGen.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::DomainGen;
+
+@ISA = ('Bib2HTML::Generator::ExtendedGen');
+@EXPORT = qw( );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::Generator::ExtendedGen ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this generator
+my $VERSION = "4.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my @langs = ();
+ if (isarray($_[4])) {
+ foreach my $l (@{$_[4]}) {
+ if ($l !~ /_[a-zA-Z0-9]+Gen$/) {
+ push @langs, $l."_DomainGen";
+ }
+ push @langs, $l;
+ }
+ }
+ else {
+ @langs = ( $_[4] );
+ if ($_[4] !~ /_[a-zA-Z0-9]+Gen$/) {
+ unshift @langs, $_[4]."_DomainGen";
+ }
+ }
+
+ $_[4] = \@langs;
+
+ my $self = $class->SUPER::new(@_) ;
+
+ $self->{'FILENAMES'}{'domain-tree'} = 'domain-tree.html';
+
+ bless( $self, $class );
+
+ $self->addNavigationButton($self->filename('domain-tree'),
+ 'I18N_LANG_DOMAINS');
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * do_processing()
+
+Main processing.
+
+=cut
+sub do_processing() : method {
+ my $self = shift ;
+
+ # Call inherited generation method
+ $self->SUPER::do_processing() ;
+
+ # Generates the domain pages
+ $self->generate_domain_tree() ;
+}
+
+=pod
+
+=item * generate_domain_tree()
+
+Generates domain-tree.html
+
+=cut
+sub generate_domain_tree() : method {
+ my $self = shift ;
+ my $filename = $self->filename('domain-tree');
+ return unless ($self->is_restricted_file("$filename"));
+ my $rootdir = "." ;
+ $filename = htmlcatfile($rootdir,$filename) ;
+ my $bar = $self->{'THEME'}->get_navigation_bar( $filename,
+ { 'tree' => 0,
+ 'index' => $self->{'__INDEX_GENERATED__'},
+ 'userdef' => $self->getNavigationButtons('I18N_LANG_DOMAINS'),
+ },
+ $rootdir ) ;
+ my $content = join('',
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->generate_domain_tree_content($rootdir),
+ $self->{'THEME'}->partseparator(),
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright($rootdir) ) ;
+
+ $self->{'THEME'}->create_html_body_page( $filename,
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html') ;
+}
+
+#------------------------------------------------------
+#
+# Overwriteable Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * generate_domain_tree_content()
+
+Generates and replies the content of domain-tree.html.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+=back
+
+=cut
+sub generate_domain_tree_content($) : method {
+ my $self = shift ;
+ my $rootdir = shift ;
+ my @entries = $self->get_all_entries_ayt() ;
+ my $content = $self->{'THEME'}->title($self->{'LANG'}->get('I18N_LANG_DOMAIN_TREE')) ;
+
+ # Build the tree
+ my %tree = () ;
+ foreach my $entry (@entries) {
+
+ # Search the domains of the entry
+ my @domains = $self->get_all_domains_for($entry) ;
+
+ if ( @domains ) {
+
+ # Generate the entry data
+ my $entrylabel = $self->get_short_entry_description("$entry",$rootdir) ;
+
+ # Register the entry inside the tree
+ foreach my $domain (@domains) {
+ my @parts = htmlsplit($domain) ;
+ my $t = \%tree ;
+
+ # Creates categories inside the tree
+ # $t is a reference to the current leaf
+ foreach my $part (@parts) {
+ $part =~ s/[ \t\n\r]+/&nbsp;/g ;
+ $part = $self->{'THEME'}->strong("$part");
+ $t->{"$part"} = {}
+ unless ( exists $t->{"$part"} ) ;
+ $t = $t->{"$part"} ;
+ }
+
+ # Adds the entry into the new category
+ $t->{"$entrylabel"} = {} ;
+ }
+ }
+ }
+
+ # Generate the HTML representation of the tree
+ $content .= $self->{'THEME'}->get_tree( \%tree, $rootdir, $self->{'LANG'}->get('I18N_LANG_KEYWORDS') ) ;
+
+ return $content ;
+}
+
+#------------------------------------------------------
+#
+# Domain API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_all_domain_for()
+
+Replies the array of the domains for the specified entry
+Takes 1 arg:
+
+=over
+
+=item * entry (string)
+
+is the identifier of the entry.
+
+=back
+
+=cut
+sub get_all_domains_for($) : method {
+ my $self = shift ;
+ my @domains = () ;
+
+ if ( $self->{'CONTENT'}{'entries'}{$_[0]} ) {
+ my $domain1 = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'domain'} || '' ;
+ my $domain2 = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'nddomain'} || '' ;
+ my $domain3 = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'rddomain'} || '' ;
+ my $alldomains = $self->{'CONTENT'}{'entries'}{$_[0]}{'fields'}{'domains'} || '' ;
+
+ if ( $alldomains ) {
+ @domains = split(':', $alldomains) ;
+ }
+ if ( ($domain1) && (!strinarray("$domain1",\@domains)) ) {
+ unshift @domains, "$domain1" ;
+ }
+ if ( ($domain2) && (!strinarray("$domain2",\@domains)) ) {
+ unshift @domains, "$domain2" ;
+ }
+ if ( ($domain3) && (!strinarray("$domain3",\@domains)) ) {
+ unshift @domains, "$domain3" ;
+ }
+
+ }
+ return @domains ;
+}
+
+=pod
+
+=item * get_all_documents_for_domain()
+
+Replies the array of the documents keys which
+are in the specified domain.
+Takes 1 arg:
+
+=over
+
+=item * domain (string)
+
+is the identifier of the domain.
+
+=back
+
+=cut
+sub get_all_documents_for_domain($) : method {
+ my $self = shift ;
+ my @documents = () ;
+
+ foreach my $entry (keys %{$self->{'CONTENT'}{'entries'}}) {
+
+ my $domain1 = $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'domain'} || '' ;
+ my $domain2 = $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'nddomain'} || '' ;
+ my $domain3 = $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'rddomain'} || '' ;
+ my $alldomains = $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'domains'} || '' ;
+
+ my @domains = () ;
+ if ( $alldomains ) {
+ @domains = split(':', $alldomains) ;
+ }
+ if ( ( @domains ) && ( strinarray($_[0], \@domains) ) ) {
+ push @documents, $entry ;
+ }
+ elsif ( ($domain1) && ($domain1 eq $_[0]) ) {
+ push @documents, $entry ;
+ }
+ elsif ( ($domain2) && ($domain2 eq $_[0]) ) {
+ push @documents, $entry ;
+ }
+ elsif ( ($domain3) && ($domain3 eq $_[0]) ) {
+ push @documents, $entry ;
+ }
+
+ }
+ return @documents ;
+}
+
+=pod
+
+=item * get_short_entry_description()
+
+Replies a short entry description.
+Takes 2 args:
+
+=over
+
+=item * entry (string)
+
+is the entry key.
+
+=item * rootdir (string)
+
+is the root directory.
+
+=back
+
+=cut
+sub get_short_entry_description($$) : method {
+ my $self = shift ;
+ my $entry = $_[0] || confess('you must supply the entry key') ;
+ my $rootdir = $_[1] || confess('you must supply the root directory') ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+
+ # Generate the entry data
+ my $filename = $self->filename('entry',$entry) ;
+ my $name = $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'} ) ;
+ $name =~ s/[ \t\n\r]+/&nbsp;/g ;
+ my $title = $self->{'THEME'}->entry_title( extract_first_words( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'},
+ 40 ) ) ;
+ $title =~ s/[ \t\n\r]+/&nbsp;/g ;
+ my $year = $self->__get_year__( $entry, '' ) ;
+ my $entrylabel = join( '',
+ "[",
+ $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $biblabeller->citation_label($entry,$self->{'CONTENT'}{'entries'}{$entry}),
+ $self->browserframe('overview-summary') ),
+ "]&nbsp;",
+ $name,
+ ",&nbsp;",
+ $title,
+ ( $year ? "&nbsp;(". $year .")" : '' )
+ ) ;
+
+ return $entrylabel ;
+}
+
+#------------------------------------------------------
+#
+# Entry Generation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * generate_entry_content()
+
+Generates the HTML entry-???.html
+Overwrite this method.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the BibTeX key of the current bibliographical entry
+
+=item * entry (hash ref)
+
+is the description of the current bibliographical entry
+
+=item * url (string)
+
+is the URL of the current entry
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=item * entry_title (ref string)
+
+must be filled with the title of the entry.
+
+=item * user_fields (array)
+
+is the field predefined by the user. It must be an
+array of associative arrays (one for each generable field).
+
+=cut
+sub generate_entry_content($$$$$) {
+ my $self = shift ;
+ my @content = @{$_[5]} ;
+ my ($key,$entry,$url,$rootdir) = ($_[0],$_[1],$_[2],$_[3]) ;
+ my ($title,$aut_ed_flg,$note_req) = ($_[4],$_[6],$_[7]) ;
+
+ # Call the inherited method
+ my $result = $self->SUPER::generate_entry_content($key,$entry,$url,$rootdir,$title,\@content,$aut_ed_flg,$note_req) ;
+
+ # Generates the domains of the entry
+ my @domains = $self->get_all_domains_for("$key");
+
+ if ( @domains ) {
+
+ my $content = '' ;
+ my %tree = () ;
+
+ foreach my $domain (@domains) {
+ my @entries = $self->get_all_documents_for_domain("$domain") ;
+
+ $domain =~ s/[ \t\n\r]+/&nbsp;/g ;
+ $domain = $self->{'THEME'}->strong("$domain");
+
+ # Adds the entry into the new category
+ foreach my $entry (@entries) {
+ my $label = $self->get_short_entry_description($entry,$rootdir);
+ $tree{"$domain"}{"$label"} = {} ;
+ }
+ }
+
+ $content = $self->{'THEME'}->get_tree( \%tree, $rootdir ) ;
+ push @{$result}, $self->{'THEME'}->build_onecolumn_array( $self->{'LANG'}->get('I18N_LANG_ARTICLESINSAMEDOMAINS'),
+ [ $content ] ) ;
+
+ }
+
+ return $result ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/ExtendedGen.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/ExtendedGen.pm
new file mode 100644
index 0000000000..8eafff69aa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/ExtendedGen.pm
@@ -0,0 +1,714 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::ExtendedGen - An HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::ExtendedGen ;
+
+my $gen = Bib2HTML::Generator::ExtendedGen->new( data, output, info, titles,
+ lang, theme ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::ExtendedGen is a Perl module, which permits to
+generate HTML pages for the BibTeX database.
+In addition to the features of Bib2HTML::Generator::HTMLGen, this
+generator supports the following bibtex fields:
+
+=over
+
+=item * isbn
+
+is the ISBN number.
+
+=item * issn
+
+is the ISSN number.
+
+=item * readers
+
+is the list of people who read this entry. The format
+is similar as for the author field.
+
+=item * abstract
+
+is the abstract of the document.
+
+=item * keywords
+
+are the keywords associated to the document.
+
+=item * localfile
+
+is the local path to a electronic version of
+the document. This document could be dowload
+from the generated webpage.
+
+=back
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::ExtendedGen;
+
+ my $gen = Bib2HTML::Generator::ExtendedGen->new( { }, "./bib",
+ { 'BIB2HTML_VERSION' => "0.1",
+ },
+ { 'SHORT' => "This is the title",
+ 'LONG' => "This is the title",
+ },
+ "English",
+ "Simple"
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+See HTMLGen.pm.
+
+=item * output (string)
+
+See HTMLGen.pm.
+
+=item * bib2html_data (hash)
+
+See HTMLGen.pm.
+
+=item * titles (hash)
+
+See HTMLGen.pm.
+
+=item * lang (string)
+
+See HTMLGen.pm.
+
+=item * theme (string)
+
+See HTMLGen.pm.
+
+=item * show_bibtex (boolean)
+
+See HTMLGen.pm
+
+=item * params (optional array)
+
+is the set of parameters passed to the generator.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in ExtendedGen.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::ExtendedGen;
+
+@ISA = ('Bib2HTML::Generator::HTMLGen');
+@EXPORT = qw( );
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use File::Basename ;
+
+use Bib2HTML::Generator::HTMLGen ;
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Verbose ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this generator
+my $VERSION = "5.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my @langs = ();
+ if (isarray($_[4])) {
+ foreach my $l (@{$_[4]}) {
+ if ($l !~ /_[a-zA-Z0-9]+Gen$/) {
+ push @langs, $l."_ExtendedGen";
+ }
+ push @langs, $l;
+ }
+ }
+ else {
+ @langs = ( $_[4] );
+ if ($_[4] !~ /_[a-zA-Z0-9]+Gen$/) {
+ unshift @langs, $_[4]."_ExtendedGen";
+ }
+ }
+
+ $_[4] = \@langs;
+
+ my $self = $class->SUPER::new(@_) ;
+ $self->{'EXTEND_FILES_TO_COPY'} = [] ;
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Background tasks
+#
+#------------------------------------------------------
+
+
+=pod
+
+=item * pre_processing()
+
+Pre_processing.
+
+=cut
+sub pre_processing() : method {
+ my $self = shift ;
+
+ # Call inherited copying method
+ $self->SUPER::pre_processing() ;
+
+ foreach my $key (keys %{$self->{'CONTENT'}{'entries'}}) {
+ my $entry = $self->{'CONTENT'}{'entries'}{"$key"};
+ if ((exists $entry->{'fields'}{'pdf'})&&
+ (!exists $entry->{'fields'}{'localfile'})) {
+ $self->addLocalFileFromPDF($key,$entry->{'fields'}{'pdf'}, $entry->{'fields'});
+ }
+ }
+}
+
+sub addLocalFileFromPDF($$$) {
+ my $self = shift;
+ my $key = shift;
+ my $url = shift;
+
+ my $filename = undef;
+
+ if ( $url =~ /^file:\s*(.*?)\s*$/i) {
+ $filename = "$1";
+ }
+ elsif ( ( $url !~ /^http:/i ) &&
+ ( $url !~ /^ftp:/i ) &&
+ ( $url !~ /^https:/i ) &&
+ ( $url !~ /^gopher:/i ) &&
+ ( $url !~ /^mailto:/i ) ) {
+ $filename = "$url" ;
+ }
+
+ if ($filename) {
+ Bib2HTML::General::Verbose::one ("The 'pdf' field of $key was replaced by the 'localfile' field.");
+ $_[0]->{'localfile'} = "$filename";
+ delete $_[0]->{'pdf'};
+ }
+}
+
+=pod
+
+=item * copy_files()
+
+Overwrite this method.
+
+=cut
+sub copy_files() : method {
+ my $self = shift ;
+
+ # Call inherited copying method
+ $self->SUPER::copy_files() ;
+
+ # Copy the Extended's files
+ my @source = File::Spec->splitdir($self->{'BIB2HTML'}{'PERLSCRIPTDIR'}) ;
+ @source = ( @source, split(/\:\:/, __PACKAGE__) ) ;
+ pop @source ;
+
+ # Copy icons
+ $self->copythisfile( File::Spec->catfile(@source,"drive.png"),
+ File::Spec->catfile($self->{'TARGET'},"drive.png") ) ;
+
+ # Copy registered electronic documents
+ foreach my $file (@{$self->{'EXTEND_FILES_TO_COPY'}}) {
+ if ($self->is_restricted_file($file->{'target'})) {
+ if ( ! mkdir_rec( dirname( $file->{'target'} ) ) ) {
+ Bib2HTML::General::Error::syswarm( $file->{'target'}.": $!\n" );
+ }
+ elsif ( ! $self->copythisfile( $file->{'source'}, $file->{'target'} ) ) {
+ Bib2HTML::General::Error::syswarm( $file->{'source'}.": $!\n" );
+ }
+ }
+ }
+}
+
+=pod
+
+=item * register_file_to_copy()
+
+Register a file which must be copied.
+Takes 2 args:
+
+=over
+
+=item * source (string)
+
+=item * target (string)
+
+=back
+
+=cut
+sub register_file_to_copy($$) : method {
+ my $self = shift;
+ push @{$self->{'EXTEND_FILES_TO_COPY'}},
+ { 'source' => $_[0],
+ 'target' => $_[1],
+ } ;
+}
+
+#------------------------------------------------------
+#
+# Entry Generation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * generate_entry_content()
+
+Generates the HTML entry-???.html
+Overwrite this method.
+Takes 5 args:
+
+=over
+
+=item * key (string)
+
+is the BibTeX key of the current bibliographical entry
+
+=item * entry (hash ref)
+
+is the description of the current bibliographical entry
+
+=item * url (string)
+
+is the URL of the current entry
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=item * entry_title (ref string)
+
+must be filled with the title of the entry.
+
+=item * user_fields (array)
+
+is the field predefined by the user. It must be an
+array of associative arrays (one for each generable field).
+
+=cut
+sub generate_entry_content($$$$$) {
+ my $self = shift ;
+ my @content = @{$_[5]} ;
+ my ($key,$entry,$url,$rootdir) = ($_[0],$_[1],$_[2],$_[3]) ;
+ my ($title,$aut_ed_flg,$note_req) = ($_[4],$_[6],$_[7]) ;
+
+ #
+ # Prepare the additional fields which are supported by
+ # this generator.
+ # There new fields must be displayed inside the
+ # first generated array of attributes.
+ #
+ # ISBN
+ if ( exists $entry->{'fields'}{'isbn'} ) {
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_ISBN'),
+ 'explanation' => $entry->{'fields'}{'isbn'} || "-",
+ } ;
+ }
+ # ISSN
+ if ( exists $entry->{'fields'}{'issn'} ) {
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_ISSN'),
+ 'explanation' => $entry->{'fields'}{'issn'} || "-",
+ } ;
+ }
+ # URL
+ if ( exists $entry->{'fields'}{'url'} ) {
+ my $url = $entry->{'fields'}{'url'} ;
+ if ( $url ) {
+ $url =~ s/\\(.)/$1/g unless ($self->isgenparam('backslash'));
+ if ( ( $url !~ /^http:/i ) &&
+ ( $url !~ /^ftp:/i ) &&
+ ( $url !~ /^file:/i ) &&
+ ( $url !~ /^https:/i ) &&
+ ( $url !~ /^gopher:/i ) &&
+ ( $url !~ /^mailto:/i ) ) {
+ $url = "http://".$url ;
+ }
+ }
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_URL'),
+ 'explanation' => ( $url ) ?
+ $self->{'THEME'}->href( $url,
+ $url,
+ "_top" ) : "-",
+ } ;
+ }
+ # ADSURL - ASTROPHYSICS REFERENCE CITATION LIBRARY
+ if ( exists $entry->{'fields'}{'adsurl'} ) {
+ my $url = $entry->{'fields'}{'adsurl'} ;
+ if ( $url ) {
+ $url =~ s/\\(.)/$1/g unless ($self->isgenparam('backslash'));
+ if ( ( $url !~ /^http:/i ) &&
+ ( $url !~ /^ftp:/i ) &&
+ ( $url !~ /^file:/i ) &&
+ ( $url !~ /^https:/i ) &&
+ ( $url !~ /^gopher:/i ) &&
+ ( $url !~ /^mailto:/i ) ) {
+ $url = "http://".$url ;
+ }
+ }
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_ADSURL'),
+ 'explanation' => ( $url ) ?
+ $self->{'THEME'}->href( $url,
+ $url,
+ "_top" ) : "-",
+ } ;
+ }
+ # DOI - ACM URL
+ if ( exists $entry->{'fields'}{'doi'} ) {
+ my $url = $entry->{'fields'}{'doi'} ;
+ if ( $url ) {
+ $url =~ s/\\(.)/$1/g unless ($self->isgenparam('backslash'));
+ if ( ( $url !~ /^http:/i ) &&
+ ( $url !~ /^ftp:/i ) &&
+ ( $url !~ /^file:/i ) &&
+ ( $url !~ /^https:/i ) &&
+ ( $url !~ /^gopher:/i ) &&
+ ( $url !~ /^mailto:/i ) ) {
+ $url = "http://".$url ;
+ }
+ }
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_DOI'),
+ 'explanation' => ( $url ) ?
+ $self->{'THEME'}->href( $url,
+ $url,
+ "_top" ) : "-",
+ } ;
+ }
+ # PDF file
+ if ( exists $entry->{'fields'}{'pdf'} ) {
+ my $pdf = $entry->{'fields'}{'pdf'} ;
+ if ( $pdf ) {
+ $pdf =~ s/\\(.)/$1/g unless ($self->isgenparam('backslash'));
+ if ( ( $pdf =~ /^http:/i ) ||
+ ( $pdf =~ /^ftp:/i ) ||
+ ( $pdf =~ /^file:/i ) ||
+ ( $pdf =~ /^https:/i ) ||
+ ( $pdf =~ /^gopher:/i ) ||
+ ( $pdf =~ /^mailto:/i ) ) {
+ $pdf = $self->{'THEME'}->href($pdf,
+ get_html_entities($pdf),
+ "_top") ;
+ }
+ }
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_PDFFILE'),
+ 'explanation' => ( $pdf ) ? "$pdf" : "-",
+ } ;
+ }
+ # Readers' names
+ if ( exists $entry->{'fields'}{'readers'} ) {
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ push @content, { 'name' => $self->{'LANG'}->get('I18N_LANG_FIELD_READERS'),
+ 'explanation' => $translator->formatnames($entry->{'fields'}{'readers'},
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ -1) || "-",
+ } ;
+ }
+
+ #
+ # Call the inherited generating method
+ # which permits to create the first array
+ # of attributes
+ #
+ my $result = $self->SUPER::generate_entry_content($key,$entry,$url,$rootdir,$title,\@content,$aut_ed_flg,$note_req) ;
+
+ my $sliceindex = 2 ;
+
+ #
+ # Generates additional information which are
+ # specified to this extended generator
+ #
+ # Box for abstract and keywords
+ if ( ( exists $entry->{'fields'}{'abstract'} ) ||
+ ( exists $entry->{'fields'}{'keywords'} ) ) {
+
+ my ($abstract,$title) = ('','') ;
+ if ( exists $entry->{'fields'}{'abstract'} ) {
+ $title = $self->{'LANG'}->get('I18N_LANG_FIELD_ABSTRACT') ;
+ $abstract = $entry->{'fields'}{'abstract'} ;
+ }
+ if ( exists $entry->{'fields'}{'keywords'} ) {
+ if ( $title ) {
+ $title = $self->{'LANG'}->get('I18N_LANG_FIELD_ABSTRACT_KEYWORDS') ;
+ $abstract .= "<BR><BR>\n" ;
+ }
+ else {
+ $title = $self->{'LANG'}->get('I18N_LANG_FIELD_KEYWORDS_TITLE') ;
+ }
+ $abstract .= $self->{'THEME'}->small($self->{'LANG'}->get('I18N_LANG_FIELD_KEYWORDS', $entry->{'fields'}{'keywords'} ) ) ;
+ }
+ my $r = $self->{'THEME'}->build_onecolumn_array( $title,
+ [ $abstract ] ) ;
+ array_slice( $result, $sliceindex, $r ) ;
+ $sliceindex ++ ;
+
+ }
+
+ # Downloadable file
+ if ( ( ( exists $entry->{'fields'}{'localfile'} ) ||
+ ( $self->isgenparam('doc-repository') ) ) &&
+ ( ! $self->isgenparam('nodownload') ) ) {
+
+ # Compute the source path of the PDF document
+ my ($abs,$rel,$turl,$drepos) = ($self->genparam('absolute-source'),
+ $self->genparam('relative-source'),
+ $self->genparam('target-url'),
+ $self->genparam('doc-repository')) ;
+
+ my ($sourcefilename,$targetfilename,$targeturl) ;
+
+ # Does it is an URL?
+ if ($turl) {
+ $targeturl = htmlcatdir( $turl, File::Spec->splitdir( $entry->{'fields'}{'localfile'} ) ) ;
+ }
+ # Does it have an absolute filename?
+ elsif ( $rel ) {
+ my @path = File::Spec->splitdir($entry->{'dirname'}) ;
+ push @path, File::Spec->splitdir("$rel") ;
+ $sourcefilename = File::Spec->catfile(@path,
+ htmltolocalpath( $entry->{'fields'}{'localfile'} ) ) ;
+ }
+ # Does it have a relative filename?
+ elsif ( $abs ) {
+ my @path = File::Spec->splitdir("$abs") ;
+ $sourcefilename = File::Spec->catfile( @path,
+ htmltolocalpath( $entry->{'fields'}{'localfile'} ) ) ;
+ }
+ # Default location
+ else {
+ my @path = File::Spec->splitdir($entry->{'dirname'}) ;
+ $sourcefilename = File::Spec->catfile(@path,
+ htmltolocalpath( $entry->{'fields'}{'localfile'} ) ) ;
+ }
+
+ # Does the document repository exists?
+ if ($drepos) {
+ my @exts = ('pdf','PDF','ps','PS');
+ my $i = 0;
+ do {
+ $sourcefilename = File::Spec->catfile( File::Spec->splitdir("$drepos"), $key.".".$exts[$i] ) ;
+ $i ++;
+ }
+ while (( ! -f "$sourcefilename" )&&($i<@exts));
+ $sourcefilename = undef unless ( -f "$sourcefilename" );
+ }
+
+ if ($sourcefilename) {
+ if ( (!$drepos) && ( exists $entry->{'fields'}{'localfile'} ) ) {
+ my @path = htmlsplit( $entry->{'fields'}{'localfile'} ) ;
+ $targeturl = htmlcatfile( 'e-documents', @path ) ;
+ }
+ else {
+ $targeturl = htmlcatfile( 'e-documents', basename($sourcefilename) ) ;
+ }
+ $targetfilename = File::Spec->catdir( $self->{'TARGET'}, $targeturl ) ;
+ }
+
+ if ( (!$sourcefilename) || ( -f "$sourcefilename" ) ) {
+
+ # Register the PDF document to copy
+ # The real copy will be made during the copy_files() call.
+ if (($sourcefilename)&&($targetfilename)) {
+ $self->register_file_to_copy( "$sourcefilename", "$targetfilename" ) ;
+ }
+
+ if ($targeturl) {
+ my $alttext = '';
+ if ($sourcefilename) {
+ $alttext = basename("$sourcefilename");
+ }
+
+ # Generate the HTML code which permits to download the document
+ my $r = $self->{'THEME'}->par( $self->{'LANG'}->get( 'I18N_LANG_FIELD_DOWNLOAD',
+ $self->{'THEME'}->href( $targeturl,
+ "<IMG align='middle' src='".
+ htmlcatdir($rootdir,'drive.png').
+ "' alt='".
+ $alttext.
+ "' border='0'>",
+ "_top" ) ) ) ;
+ array_slice( $result, $sliceindex, $r ) ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::syswarm( "$sourcefilename: $!\n" );
+ }
+ }
+
+ return $result ;
+}
+
+#------------------------------------------------------
+#
+# Generator helpers
+#
+#------------------------------------------------------
+
+=pod
+
+=item * save_generator_parameter()
+
+Replies if the specified generator parameter was supported.
+This function was called each time a generator parameter was
+given to this generator. By default, simply updatethe
+given parameter value (second parameter).
+You could do some stuff before
+saving (splitting...). Replies false is the parameter was
+not recognized. Don't forget to call inherited functions.
+Takes 2 args:
+
+=over
+
+=item * param_name (string)
+
+is the name of the parameter.
+
+=item * param_value (byref string)
+
+is the value of the parameter.
+
+=back
+
+=cut
+sub save_generator_parameter($$) {
+ my $self = shift ;
+ # all the following parameters will be saved by AbstractGenerator::new
+ return 1 if ( strinarray($_[0],
+ ['absolute-source',
+ 'nodownload',
+ 'doc-repository',
+ 'relative-source',
+ 'target-url',
+ 'backslash']) ) ;
+ return $self->SUPER::save_generator_parameter($_[0],$_[1]) ;
+}
+
+=pod
+
+=item * display_supported_generator_params()
+
+Display the list of supported generator parameters.
+
+=cut
+sub display_supported_generator_params() {
+ my $self = shift ;
+ $self->SUPER::display_supported_generator_params() ;
+
+ $self->show_supported_param('absolute-source',
+ 'is the absolute path where the '.
+ 'downloadable articles could be '.
+ 'found',
+ 'path') ;
+
+ $self->show_supported_param('backslash',
+ 'if presents, indicates that '.
+ 'backslashes will be removed from '.
+ 'the link fields (url,ftp...).') ;
+
+ $self->show_supported_param('doc-repository',
+ 'if presents, indicates the path to '.
+ 'the direction where the electronical '.
+ 'documents was stored. The documents '.
+ 'must have the same name as the '.
+ 'BibTeX key.') ;
+
+ $self->show_supported_param('nodownload',
+ 'if presents, indicates that no '.
+ 'link to the electronic documents '.
+ 'will be generated. By extension, '.
+ 'if presents no copy will be made.') ;
+
+ $self->show_supported_param('relative-source',
+ 'is the path where the downloadable '.
+ 'articles could be found, relatively '.
+ 'to the .bib file location.',
+ 'path') ;
+
+ $self->show_supported_param('target-url',
+ 'is the base URL where document '.
+ 'could be download. If presents, '.
+ 'the document will not be copied.',
+ 'url') ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/FileWriter.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/FileWriter.pm
new file mode 100644
index 0000000000..d79d5495e2
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/FileWriter.pm
@@ -0,0 +1,307 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::FileWriter - An output stream writer
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::FileWriter is a Perl module, which permits to
+output streams into files.
+
+=head1 SYNOPSYS
+
+Bib2HTML::Generator::FileWriter->new( ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::FileWriter is a Perl module, which permits to
+output streams into files.
+
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in FileWriter.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::FileWriter;
+
+@ISA = ('Bib2HTML::Generator::Writer');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use File::Path;
+use File::Spec;
+
+use Bib2HTML::Generator::Writer;
+use Bib2HTML::General::Misc;
+use Bib2HTML::General::Error;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of abstract generator
+my $VERSION = "1.0" ;
+
+# Opened streams
+my @opened_streams = ();
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new() ;
+ bless( $self, $class );
+ return $self;
+}
+
+=pod
+
+=item * openstream($)
+
+Open the output stream.
+Takes 1 param:
+
+=over
+
+=item * filename (string)
+
+is the name of the output file.
+
+=back
+
+=cut
+sub openstream($) {
+ my $self = shift;
+ my $filename = shift || confess( 'you must supply the root directory' ) ;
+ confess('output stream already opened') if ($self->{'opened'});
+ my $streamname = '';
+
+ do {
+ my $count = int(rand(5));
+ $streamname = $filename;
+ $streamname =~ s/[^a-zA-Z]//g;
+ for(my $i=0; $i<$count; $i++) {
+ my $c = rand(26);
+ $streamname .= chr(ord('A')+$c);
+ }
+ }
+ while (strinarray("$streamname",\@opened_streams));
+
+ local *OUTPUTFILE;
+ *OUTPUTFILE = $streamname;
+ my $r = open( OUTPUTFILE, "> $filename" );
+ if ($r) {
+ $self->{'opened'} = "$streamname";
+ push @opened_streams, "$streamname";
+ }
+ return $r;
+}
+
+=pod
+
+=item * out($)
+
+Put a string into the output stream.
+Takes 1 param:
+
+=over
+
+=item * str (string)
+
+is the string to output.
+
+=back
+
+=cut
+sub out($) {
+ my $self = shift;
+ my $str = shift || '';
+ if ($self->{'opened'}) {
+ local *OUTPUTFILE;
+ *OUTPUTFILE = $self->{'opened'};
+ print OUTPUTFILE ("$str");
+ return 1;
+ }
+ else {
+ return undef;
+ }
+}
+
+=pod
+
+=item * closestream()
+
+Close the currently opened stream.
+
+=cut
+sub closestream() {
+ my $self = shift;
+ if ($self->{'opened'}) {
+ local *OUTPUTFILE;
+ *OUTPUTFILE = $self->{'opened'};
+ close(OUTPUTFILE);
+ @opened_streams = grep {($self->{opened} ne $_)} @opened_streams;
+ delete $self->{'opened'};
+ return 1;
+ }
+ else {
+ return undef;
+ }
+}
+
+=pod
+
+=item * create_output_directory()
+
+Create the output directory if required.
+Replies the output filename (directory).
+Takes n params:
+
+=over
+
+=item * output (string)
+
+is the output directory to create.
+
+=item * exceptions (list of strings)
+
+is the list of the file in the existing output directory
+to not remove.
+
+=back
+
+=cut
+sub create_output_directory($@) {
+ my $self = shift;
+ my $output = shift ;
+ if ( ! $output ) {
+ $output = File::Spec->catdir( ".", "bib2html" ) ;
+ }
+ if ( ! -d "$output" ) {
+ mkdir( "$output", 0777 )
+ or Bib2HTML::General::Error::syserr( "$output: $!\n" );
+ }
+ else {
+ $self->_clear_output_directory("$output", @_);
+ }
+ return "$output" ;
+}
+
+=pod
+
+=item * _clear_output_directory()
+
+Clear the content of the output directory.
+
+=cut
+sub _clear_output_directory($@) {
+ my $self = shift;
+ my $output = shift ;
+ my @protect = ();
+
+ foreach my $expr (@_) {
+ push @protect, shell_to_regex($expr);
+ }
+
+ local *DIR;
+ opendir(*DIR,"$output")
+ or Bib2HTML::General::Error::syserr( "The output directory '$output".
+ "' can't be opened: $!\n" ) ;
+ while (my $subfile = readdir(*DIR)) {
+ if (($subfile ne File::Spec->curdir())&&($subfile ne File::Spec->updir())) {
+ my $valid = 1;
+
+ foreach my $expr (@protect) {
+ if ($subfile =~ /$expr/) {
+ $valid = undef;
+ last;
+ }
+ }
+
+ if ($valid) {
+ my $fullpath = File::Spec->catfile("$output","$subfile");
+
+ if ( -d "$fullpath" ) {
+ rmtree( "$fullpath" )
+ or Bib2HTML::General::Error::syserr( "The directory '$fullpath".
+ "' can't be deleted: $!\n" ) ;
+ }
+ else {
+ unlink( "$fullpath" )
+ or Bib2HTML::General::Error::syserr( "The file '$fullpath".
+ "' can't be deleted: $!\n" ) ;
+ }
+ }
+ }
+ }
+ closedir(*DIR);
+}
+
+=pod
+
+=item * is_file_creation_allowed()
+
+Replies if this writer allows to create files.
+
+=cut
+sub is_file_creation_allowed() {
+ my $self = shift;
+ return 1;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/HTMLGen.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/HTMLGen.pm
new file mode 100644
index 0000000000..55ec802ab7
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/HTMLGen.pm
@@ -0,0 +1,2334 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::HTMLGen - A basic HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::HTMLGen ;
+
+my $gen = Bib2HTML::Generator::HTMLGen->new( content, output, info, titles,
+ lang, theme, params ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::HTMLGen is a Perl module, which permits to
+generate HTML pages for the BibTeX database.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::HTMLGen;
+
+ my $gen = Bib2HTML::Generator::HTMLGen->new( { }, "./bib",
+ { 'BIB2HTML_VERSION' => "0.1",
+ },
+ { 'SHORT' => "This is the title",
+ 'LONG' => "This is the title",
+ },
+ "English",
+ "Simple", ""
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+see AbstractGenerator help.
+
+=item * output (string)
+
+see AbstractGenerator help.
+
+=item * bib2html_data (hash)
+
+see AbstractGenerator help.
+
+=item * titles (hash)
+
+see AbstractGenerator help.
+
+=item * lang (string)
+
+see AbstractGenerator help.
+
+=item * theme (string)
+
+is the name of the theme to use
+
+=item * show_bibtex (boolean)
+
+indicates if this parser must generate a verbatim of the BibTeX code
+
+=item * params (optional array)
+
+is the set of parameters passed to the generator.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in HTMLGen.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::HTMLGen;
+
+@ISA = ('Bib2HTML::Generator::AbstractGenerator');
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Carp ;
+use File::Spec ;
+use File::Basename;
+
+use Bib2HTML::Generator::AbstractGenerator;
+use Bib2HTML::General::Misc;
+use Bib2HTML::General::HTML;
+use Bib2HTML::General::Title;
+use Bib2HTML::General::Error;
+use Bib2HTML::General::Encode;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this generator
+my $VERSION = "6.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my @langs = ();
+ if (isarray($_[4])) {
+ foreach my $l (@{$_[4]}) {
+ if ($l !~ /_[a-zA-Z0-9]+Gen$/) {
+ push @langs, $l."_HTMLGen";
+ }
+ push @langs, $l;
+ }
+ }
+ else {
+ @langs = ( $_[4] );
+ if ($_[4] !~ /_[a-zA-Z0-9]+Gen$/) {
+ unshift @langs, $_[4]."_HTMLGen";
+ }
+ }
+
+ my $self = $class->SUPER::new($_[0], #content
+ $_[1], #output
+ $_[2], #bib2html info
+ $_[3], #titles
+ \@langs, #lang
+ $_[6], #show bibtex
+ $_[7], #params
+ ) ;
+ bless( $self, $class );
+
+ $self->{'__INDEX_GENERATED__'} = 0 ; # index not generated
+
+ # Filenames patterns
+ $self->{'FILENAMES'} = { 'overview-frame' => 'overview-frame.html',
+ 'overview-summary' => 'overview-summary.html',
+ 'allelements' => 'allelements-frame.html',
+ 'type-overview' => 'type-#1.html',
+ 'entry' => 'entry-#1.html',
+ 'overview-tree' => 'overview-tree.html',
+ 'main_index' => "index.html",
+ 'index' => "index-#1.html",
+ 'author-overview' => 'author-#1.html',
+ } ;
+ $self->{'ENTRY_FILENAMES'} = {} ;
+ $self->{'AUTHOR_FILENAMES'} = {} ;
+
+ # HTML frames identifiers
+ $self->{'FRAMES'} = { 'overview-frame' => 'typeFrame',
+ 'overview-summary' => 'mainFrame',
+ 'allelements' => 'entryFrame',
+ 'type-overview' => 'entryFrame',
+ 'entry' => 'mainFrame',
+ 'overview-tree' => 'mainFrame',
+ 'main_index' => "_top",
+ 'index' => "mainFrame",
+ } ;
+
+ # Storage area for the buttons added into the navigation bar
+ $self->{'USER_NAVIGATION_BUTTONS'} = [] ;
+
+ # Creates the theme support
+ my $theme = $_[5] || confess( 'you must supply the theme' ) ;
+ if ( $theme !~ /\:\:/ ) {
+ $theme = "Bib2HTML::Generator::Theme::".$theme ;
+ }
+ eval "require $theme ;" ;
+ if ( $@ ) {
+ Bib2HTML::General::Error::syserr( "Unable to find the theme class: $theme\n$@\n" ) ;
+ }
+ $self->{'THEME'} = ($theme)->new( $self,
+ $self->{'BIB2HTML'},
+ $self->{'TARGET'},
+ $self->{'SHORT_TITLE'},
+ $self->{'LANG'} ) ;
+
+ # Create an instance of a XML generator
+ if ($self->genparam('xml-verbatim')) {
+ require Bib2HTML::Generator::XMLGen ;
+ $self->{'XML_GENERATOR'} = Bib2HTML::Generator::XMLGen->new($_[0], #content
+ $_[1], #output
+ $_[2], #bib2html info
+ $_[3], #titles
+ $_[4], #lang
+ $_[6], #show bibtex
+ $_[7], #params
+ ) ;
+ }
+
+ return $self;
+}
+
+
+=pod
+
+=item * save_generator_parameter()
+
+Replies if the specified generator parameter was supported.
+This function was called each time a generator parameter was
+given to this generator. By default, simply update the
+given parameter value (second parameter).
+You could do some stuff before
+saving (splitting...). Replies false is the parameter was
+not recognized. Don't forget to call inherited functions.
+Takes 2 args:
+
+=over
+
+=item * param_name (string)
+
+is the name of the parameter.
+
+=item * param_value (byref string)
+
+is the value of the parameter.
+
+=back
+
+=cut
+sub save_generator_parameter($$) {
+ # Patch by Norbert Preining added the 2003/03/17
+ # Patch by Norbert Preining added the 2003/03/27
+ # Patch by Aurel Gabris added the 2006/04/10
+ my $self = shift ;
+ if ( ( $_[0] eq 'author-regexp' ) ||
+ ( $_[0] eq 'max-names-overview' ) ||
+ ( $_[0] eq 'max-titlelength-overview' ) ||
+ ( $_[0] eq 'max-names-list') ||
+ ( $_[0] eq 'html-encoding' ) ) {
+ # will be saved by PARENT::new
+ return 1 ;
+ }
+ elsif ( $_[0] eq 'newtype' ) {
+ # extracts new type definitions
+ $_[1] = $self->merge_params(',',$_[1]) ;
+ my @ntypedef = split /\s*,\s*/, "$_[1]" ;
+ # adds each extracted definition
+ foreach my $td (@ntypedef) {
+ if ( $td !~ /^\s*(.+?)\s*:\s*(.+?)\s*:\s*(.+?)\s*$/ ) {
+ Bib2HTML::General::Error::syserr("syntax error for generator parameter ".
+ "'newtype' for \"$td\"" ) ;
+ }
+ else {
+ my @foo = (lc($1),$2,$3) ;
+ Bib2HTML::General::Verbose::one(join('',
+ "\tadd BibTeX type: ".$foo[0].",\n",
+ "\t singular: ".($foo[1]||'')."\n",
+ "\t plurial: ".($foo[2]||''))) ;
+ $self->{'SINGULAR_TYPE_LABELS'}{$foo[0]} = $foo[1] ;
+ $self->{'PLURIAL_TYPE_LABELS'}{$foo[0]} = $foo[2] ;
+ }
+ }
+ return 1 ;
+ }
+ elsif ( $_[0] eq 'type-matching' ) {
+ # Normalize the syntax of this parameter's value
+ my $val = $self->merge_params(',',$_[1]) ;
+ $val =~ s/\=>/,/g ;
+ $val =~ s/\->/,/g ;
+ $val =~ s/>/,/g ;
+ # Check the syntax of this parameter's value
+ my @foo = split /\s*,\s*/, "$val" ;
+ if ((@foo)&&((@foo%2)==0)) {
+ $_[1] = {} ;
+ while (@foo) {
+ my $a = shift @foo ;
+ my $b = shift @foo ;
+ $_[1]->{"$a"} = "$b" ;
+ }
+ }
+ else {
+ # Die on error if the syntax was invalid
+ Bib2HTML::General::Error::syserr("invalid value for the generator parameter 'type-matching'") ;
+ }
+ return 1 ;
+ }
+ elsif ( $_[0] eq 'restrict' ) {
+ # extracts output filename restrictions
+ $_[1] = $self->merge_params(',',$_[1]) ;
+ my @restricts = split /\s*,\s*/, "$_[1]" ;
+ # adds each extracted definition
+ $self->{'FILE_RESTRICTIONS'} = [];
+ foreach my $res (@restricts) {
+ push @{$self->{'FILE_RESTRICTIONS'}}, shell_to_regex($res);
+ }
+ return 1 ;
+ }
+ elsif ( ( $_[0] eq 'xml-verbatim' ) ||
+ ( $_[0] eq 'show-journalparams-overview' ) ||
+ ( $_[0] eq 'hideindex' ) ) {
+ $_[1] = 1 ;
+ return 1 ;
+ }
+ else {
+ return $self->SUPER::save_generator_parameter($_[0],$_[1]) ;
+ }
+}
+
+=pod
+
+=item * display_supported_generator_params()
+
+Display the list of supported generator parameters.
+
+=cut
+sub display_supported_generator_params() {
+ # Patch by Norbert Preining added the 2003/03/17
+ # Patch by Norbert Preining added the 2003/03/27
+ # Patch by Aurel Gabris added the 2006/04/10
+ my $self = shift ;
+ $self->SUPER::display_supported_generator_params() ;
+
+ $self->show_supported_param('author-regexp',
+ 'A regexp (case-insensitive) against which '.
+ 'the lastname of '.
+ 'an author is matched. If the author '.
+ 'matches, (s)he is included in the '.
+ 'overview window author list.' );
+
+ $self->show_supported_param('hideindex',
+ 'If present, the generator will hide the index pages.' );
+
+ $self->show_supported_param('html-encoding',
+ 'String, the character encoding used in the HTML pages '.
+ '("UTF8", "ISO-8859-1"...).' );
+
+ $self->show_supported_param('max-names-overview',
+ 'Integer, max number of authors on '.
+ 'the overview page.' );
+
+ $self->show_supported_param('max-names-list',
+ 'Integer, max number of authors on the '.
+ 'listing in the lower left window.' );
+
+ $self->show_supported_param('max-titlelength-overview',
+ 'Integer, max length of title on '.
+ 'the overview page.' );
+
+ $self->show_supported_param('newtype',
+ 'A comma separated list of new type, with singular and '.
+ 'plural form, format: '.
+ 'type:Singular:Plural[,type:Singular:Plural...]' );
+
+ $self->show_supported_param('restrict',
+ 'A comma separated list of strings containing shell-like wildcards. They '.
+ 'corresponds to the pattern filenames that are available to be generated.' );
+
+ $self->show_supported_param('show-journalparams-overview',
+ 'If specified, show journal parameters instead '.
+ 'of type for articles on the overview page.' );
+
+ $self->show_supported_param('type-matching',
+ 'A coma separated list of items which inititalizes an '.
+ 'associative array of type entry mappings. '.
+ 'For example \'incollection,article,inproceedings,article\' '.
+ 'means that all the BibTeX\'s \'@incollection\' entries will be '.
+ 'considered as \'@article\' entries. Same thing for the '.
+ '\'@inproceedings\'.' );
+
+ $self->show_supported_param('xml-verbatim',
+ 'If present, each entry\'s page will contains the '.
+ 'XML entry as verbatim.' );
+}
+
+#------------------------------------------------------
+#
+# Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * set_stream_writer($)
+
+Set the instance of the output stream writer.
+Replies the old writer.
+Takes 1 arg:
+
+=over
+
+=item * writer (ref to Bib2HTML::Generator::Writer)
+
+is the instance of the writer.
+
+=back
+
+=cut
+sub set_stream_writer($) : method {
+ my $self = shift ;
+ my $writer = shift;
+ my $old_writer = $self->SUPER::set_stream_writer($writer);
+ if ($self->{'THEME'}) {
+ $self->{'THEME'}->set_stream_writer($writer);
+ }
+ return $old_writer;
+}
+
+
+=pod
+
+=item * pre_processing()
+
+Pre_processing.
+
+=cut
+sub pre_processing() : method {
+ my $self = shift ;
+
+ # Set the HTML encoding
+ if (!$self->{'GENERATOR_PARAMS'}{'html-encoding'}) {
+ $self->{'GENERATOR_PARAMS'}{'html-encoding'} = get_default_encoding();
+ }
+ set_default_encoding($self->{'GENERATOR_PARAMS'}{'html-encoding'});
+ $self->{'THEME'}->set_html_encoding($self->{'GENERATOR_PARAMS'}{'html-encoding'});
+
+ # Call inherited generation method
+ $self->SUPER::pre_processing() ;
+
+ # Create the output directory
+ $self->create_output_directory();
+}
+
+=pod
+
+=item * do_processing()
+
+Main processing.
+
+=cut
+sub do_processing() : method {
+ my $self = shift ;
+
+ # Call inherited generation method
+ $self->SUPER::do_processing() ;
+
+ # Generates each part of the document
+
+ if (!$self->genparam('hideindex')) {
+ $self->{'__INDEX_GENERATED__'} = $self->generate_indexes() ;
+ }
+ else {
+ $self->{'__INDEX_GENERATED__'} = undef;
+ }
+ $self->generate_index() ;
+ $self->generate_overviewframe() ;
+ $self->generate_allelementframe() ;
+ $self->generate_typeoverviews() ;
+ $self->generate_authoroverviews() ;
+ $self->generate_overviewtree() ;
+ $self->generate_overview() ;
+ $self->generate_entries() ;
+}
+
+=pod
+
+=item * post_processing()
+
+Post_processing.
+
+=cut
+sub post_processing() : method {
+ my $self = shift ;
+ # Call inherited generation method
+ $self->SUPER::post_processing() ;
+ # Copy resource files
+ my $writer = $self->{'THEME'}->get_stream_writer();
+ if ($writer->is_file_creation_allowed()) {
+ $self->copy_files() ;
+ }
+}
+
+=pod
+
+=item * is_restricted_file($)
+
+Replies if the specified filename is inside the
+restriction list. If the restriction list was empty,
+this function replies true.
+Takes 1 arg:
+
+=over
+
+=item * filename (string)
+
+is the filename to treat.
+
+=back
+
+=cut
+sub is_restricted_file($) : method {
+ my $self = shift;
+ my $filename = shift;
+ $filename = basename($filename);
+ return 1 unless ($self->{'FILE_RESTRICTIONS'});
+ foreach my $pattern (@{$self->{'FILE_RESTRICTIONS'}}) {
+ if ($filename =~ /$pattern/) {
+ return 1;
+ }
+ }
+ return undef;
+}
+
+=pod
+
+=item * generate_entries()
+
+Generates the HTML pages for each entry
+
+=cut
+sub generate_entries() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my @entries = $self->get_all_entries_ayt() ;
+ my $i = $#entries ;
+ while ( $i >= 0 ) {
+ # Compute entry constants
+ my $filename = $self->filename('entry',$entries[$i]) ;
+
+ Bib2HTML::General::Verbose::three( "Generates entry '".$entries[$i]."'\n" ) ;
+
+ next unless ($self->is_restricted_file("$filename"));
+
+ my $type = $self->{'CONTENT'}{'entries'}{$entries[$i]}{'type'} ;
+ my $url = htmlcatfile($rootdir,$filename) ;
+ my $bar = $self->{'THEME'}->get_navigation_bar( $filename,
+ { 'index' => $self->{'__INDEX_GENERATED__'},
+ 'previous' => '',
+ 'next' => '',
+ 'userdef' => $self->getNavigationButtons(),
+ },
+ $rootdir ) ;
+
+ # Generate the header
+ my $content = $bar.$self->{'THEME'}->partseparator() ;
+
+ # Calls the content building function
+ my $fct = "generate_entry_content_$type" ;
+ my $entrytitle = '' ;
+ if ( my $funcref = $self->can( $fct ) ) {
+ $content .= join( '', @{ $self->$funcref( $entries[$i],
+ $self->{'CONTENT'}{'entries'}{$entries[$i]},
+ $url,$rootdir,$entrytitle,[]) } ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm("I don't know how to generate a '\@".$type.
+ "' for the entry '".$entries[$i]."'. Assume '\@misc'",
+ extract_file_from_location( $_[1]{'location'} ),
+ extract_line_from_location( $_[1]{'location'} ) ) ;
+ $content .= join( '', @{ $self->generate_entry_content_misc( $entries[$i],
+ $self->{'CONTENT'}{'entries'}{$entries[$i]},
+ $url,$rootdir,$entrytitle,[]) } ) ;
+ }
+
+ # Generate the footer
+ $content .= join( '',
+ $self->{'THEME'}->partseparator(),
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright() ) ;
+
+ # Output to the file
+ $self->{'THEME'}->create_html_body_page( $url,
+ $content,
+ $entrytitle||$self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html') ;
+ }
+ continue {
+ $i -- ;
+ }
+}
+
+=pod
+
+=item * generate_index()
+
+Generates the HTML index.html
+
+=cut
+sub generate_index() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $filename = $self->filename('main_index');
+
+ Bib2HTML::General::Verbose::three( "Generates the main index file\n" ) ;
+
+ return unless ($self->is_restricted_file("$filename"));
+
+ my $content = $self->{'THEME'}->get_html_index($rootdir);
+ $self->{'THEME'}->create_html_page( htmlcatfile($rootdir,$filename),
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir ) ;
+}
+
+=pod
+
+=item * generate_overviewframe()
+
+Generates the HTML overview-frame.html
+Dont overwrite this method.
+
+=cut
+sub generate_overviewframe : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $filename = $self->filename('overview-frame');
+
+ Bib2HTML::General::Verbose::three( "Generates the overview frame\n" ) ;
+
+ return unless ($self->is_restricted_file("$filename"));
+
+ my $content = join( '',
+ $self->{'THEME'}->frame_subpart( '',
+ [ $self->{'THEME'}->ext_href( 'allelements',
+ $self->{'LANG'}->get('I18N_LANG_ALL_ELEMENTS'),
+ $rootdir ),
+ ],
+ $rootdir ),
+ $self->generate_overviewframe_content($rootdir)
+ ) ;
+
+ $self->{'THEME'}->create_html_body_page( htmlcatfile($rootdir,$filename),
+ $self->{'THEME'}->frame_window( $self->{'SHORT_TITLE'},
+ $content ),
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'small', 'html') ;
+}
+
+=pod
+
+=item * generate_allelementframe()
+
+Generates the HTML allelements-frame.html
+
+=cut
+sub generate_allelementframe() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $filename = $self->filename('allelements');
+
+ Bib2HTML::General::Verbose::three( "Generates the all-element frame\n" ) ;
+
+ return unless ($self->is_restricted_file("$filename"));
+
+ my @entries = $self->get_all_entries_yat() ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+ my $currentyear = '' ;
+ my $content = '' ;
+ my @current = () ;
+
+ foreach my $entry (@entries) {
+ my $year = $self->__get_year__( $entry, '' ) ;
+ if ( "$currentyear" ne "$year" ) {
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear || $self->{'LANG'}->get('I18N_LANG_NO_DATE'),
+ \@current,
+ $rootdir ) ;
+ }
+ $currentyear = $year ;
+ @current = () ;
+ }
+
+ my $biblabel = '' ;
+ if ( exists( $self->{'CONTENT'}{'entries'}{$entry} ) ) {
+ my $filename = $self->filename('entry',$entry) ;
+ $biblabel = join( '',
+ '[',
+ $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $biblabeller->citation_label( $entry,
+ $self->{'CONTENT'}{'entries'}{$entry} ),
+ $self->browserframe('entry') ),
+ ']&nbsp;' ) ;
+ }
+ $biblabel .= $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ exists($self->{'GENERATOR_PARAMS'}{'max-names-list'})?$self->{'GENERATOR_PARAMS'}{'max-names-list'}:1 ) ;
+
+ push @current, $biblabel ;
+ }
+
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear || $self->{'LANG'}->get('I18N_LANG_NO_DATE'),
+ \@current,
+ $rootdir ) ;
+ }
+
+ $self->{'THEME'}->create_html_body_page( htmlcatfile($rootdir,$filename),
+ $self->{'THEME'}->frame_window( $self->{'LANG'}->get('I18N_LANG_ALL_ELEMENTS'),
+ $content ),
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'small', 'html') ;
+}
+
+=pod
+
+=item * generate_typeoverviews()
+
+Generates the HTML type-???.html
+
+=cut
+sub generate_typeoverviews() : method {
+ # Patch by Norbert Preining added the 2003/03/27
+ my $self = shift ;
+ my $rootdir = "." ;
+ my @entries = $self->get_all_entries_yat() ;
+ my @types = $self->get_entry_types() ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+ my %typematching = () ;
+
+ if ( exists($self->{'GENERATOR_PARAMS'}{'type-matching'}) ) {
+ %typematching = %{$self->{'GENERATOR_PARAMS'}{'type-matching'}};
+ }
+ if ( @types > 0 ) {
+ foreach my $type (@types) {
+ if ( ! exists( $typematching{$type} ) ) {
+ $typematching{$type} = $type;
+ }
+ }
+ my @sortedtypes = values %typematching;
+ @sortedtypes = uniq(sortbyletters(@sortedtypes));
+ foreach my $type (@sortedtypes) {
+ my $url = $self->filename('type-overview',$type) ;
+ Bib2HTML::General::Verbose::three( "Generates type overview for '$type'\n" ) ;
+ next unless ($self->is_restricted_file("$url"));
+ my ($currentyear,$writeentry) = ('',0) ;
+ my @current = () ;
+ my $content = '' ;
+
+ foreach my $entry (@entries) {
+ my $year = $self->__get_year__( $entry, '' ) ;
+ if ( $typematching{$self->{'CONTENT'}{'entries'}{$entry}{'type'}} eq $type ) {
+ if ( "$currentyear" ne "$year" ) {
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear,
+ \@current,
+ $rootdir ) ;
+ }
+ $currentyear = $year ;
+ @current = () ;
+ }
+ my $biblabel = '' ;
+ if ( exists( $self->{'CONTENT'}{'entries'}{$entry} ) ) {
+ my $filename = $self->filename('entry',$entry) ;
+ $biblabel = join( '',
+ '[',
+ $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $biblabeller->citation_label( $entry,
+ $self->{'CONTENT'}{'entries'}{$entry} ),
+ $self->browserframe('entry') ),
+ ']&nbsp;' ) ;
+ }
+ $biblabel .= $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ exists($self->{'GENERATOR_PARAMS'}{'max-names-list'})?$self->{'GENERATOR_PARAMS'}{'max-names-list'}:1) ;
+ push @current, $biblabel ;
+ }
+ }
+
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear,
+ \@current,
+ $rootdir ) ;
+ }
+
+ $self->{'THEME'}->create_html_body_page( htmlcatfile($rootdir,$url),
+ $self->{'THEME'}->frame_window( $self->{'PLURIAL_TYPE_LABELS'}{$type},
+ $content,
+ $self->{'THEME'}->ext_href( 'allelements',
+ $self->{'LANG'}->get('I18N_LANG_ALL_ELEMENTS'),
+ $rootdir )),
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'small', 'html') ;
+ }
+
+ }
+}
+
+=pod
+
+=item * generate_authoroverviews()
+
+Generates the HTML author-???.html
+
+=cut
+sub generate_authoroverviews() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+ my @entries = $self->get_all_entries_yat() ;
+ my %authors = $self->get_entry_authors() ;
+
+ if ( !isemptyhash(\%authors) ) {
+ foreach my $author (keys %authors) {
+ my $url = $self->filename('author-overview',$author) ;
+ Bib2HTML::General::Verbose::three( "Generates author overview for '$author'\n" ) ;
+ next unless ($self->is_restricted_file("$url"));
+ my @current = () ;
+ my ($content,$currentyear) = ('','') ;
+
+ foreach my $entry (@entries) {
+
+ if ( $translator->isauthorin($authors{$author},
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'author'}) ) {
+
+ my $year = $self->__get_year__( $entry, '' ) ;
+ if ( "$currentyear" ne "$year" ) {
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear,
+ \@current,
+ $rootdir ) ;
+ }
+ $currentyear = $year ;
+ @current = () ;
+ }
+ my $biblabel = '' ;
+ if ( exists( $self->{'CONTENT'}{'entries'}{$entry} ) ) {
+ my $filename = $self->filename('entry',$entry) ;
+ $biblabel = join( '',
+ '[',
+ $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $biblabeller->citation_label( $entry,
+ $self->{'CONTENT'}{'entries'}{$entry} ),
+ $self->browserframe('entry') ),
+ ']&nbsp;' ) ;
+ }
+ $biblabel .= $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'} ) ;
+ push @current, $biblabel ;
+ }
+
+ }
+
+
+
+ if ( @current ) {
+ $content .= $self->{'THEME'}->frame_subpart( $currentyear,
+ \@current,
+ $rootdir ) ;
+ }
+
+ $self->{'THEME'}->create_html_body_page( htmlcatfile($rootdir,$url),
+ $self->{'THEME'}->frame_window( $translator->formatname($authors{$author},'l, f.'),
+ $content,
+ $self->{'THEME'}->ext_href( 'allelements',
+ $self->{'LANG'}->get('I18N_LANG_ALL_ELEMENTS'),
+ $rootdir )),
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'small', 'html') ;
+ }
+ }
+}
+
+=pod
+
+=item * generate_overview()
+
+Generates the HTML overview-summary.html
+Dont overwrite this method.
+
+=cut
+sub generate_overview() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $filename = $self->filename('overview-summary') ;
+ Bib2HTML::General::Verbose::three( "Generates overview summary\n" ) ;
+ return unless ($self->is_restricted_file("$filename"));
+ $filename = htmlcatfile($rootdir,$filename) ;
+ my $bar = $self->{'THEME'}->get_navigation_bar( $filename,
+ { 'overview' => 1,
+ 'index' => $self->{'__INDEX_GENERATED__'},
+ 'userdef' => $self->getNavigationButtons(),
+ },
+ $rootdir ) ;
+ my $content = join('',
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->title($self->{'LONG_TITLE'}),
+ $self->generate_overview_content($rootdir),
+ $self->{'THEME'}->partseparator(),
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright($rootdir) ) ;
+
+ $self->{'THEME'}->create_html_body_page( $filename,
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html' ) ;
+}
+
+=pod
+
+=item * generate_overviewtree()
+
+Generates the HTML overview-tree.html
+Dont overwrite this method.
+
+=cut
+sub generate_overviewtree() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $filename = $self->filename('overview-tree') ;
+ Bib2HTML::General::Verbose::three( "Generates overview tree\n" ) ;
+ return unless ($self->is_restricted_file("$filename"));
+ $filename = htmlcatfile($rootdir,$filename) ;
+ my $bar = $self->{'THEME'}->get_navigation_bar( $filename,
+ { 'tree' => 1,
+ 'index' => $self->{'__INDEX_GENERATED__'},
+ 'userdef' => $self->getNavigationButtons(),
+ },
+ $rootdir ) ;
+ my $content = join('',
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->generate_overviewtree_content($rootdir),
+ $self->{'THEME'}->partseparator(),
+ $bar,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright($rootdir) ) ;
+
+ $self->{'THEME'}->create_html_body_page( $filename,
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html') ;
+}
+
+=pod
+
+=item * generate_indexes()
+
+Generates the HTML index-???.html
+Dont overwrite this method.
+
+=cut
+sub generate_indexes() : method {
+ my $self = shift ;
+ my $rootdir = "." ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my %indexentries = () ;
+
+ Bib2HTML::General::Verbose::two( "Build the indexes\n" ) ;
+ my @entries = $self->get_all_entries_ayt() ;
+ foreach my $entry (@entries) {
+
+ # Builds the comment for this entry
+ my $filename = $self->filename('entry',$entry) ;
+ my $url = htmlcatfile($rootdir,$filename) ;
+ my $year = $self->__get_year__( $entry, '' ) ;
+ my $entrycomment = join( '',
+ $self->{'LANG'}->get('I18N_LANG_SMALL_IN',
+ $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ -1 )),
+ "<BR>\n",
+ $self->{'THEME'}->entry_title( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'} ),
+ ( $year ? " (".$year.")" : '' ) ) ;
+
+ # Adds the authors
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'author'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the authors\n" ) ;
+ my @authors = $self->get_all_authors($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'author'}) ;
+ foreach my $author (@authors) {
+ my %desc = ( 'url' => $url,
+ 'label' => $translator->formatname( $author, $self->{'FORMATS'}{'name'} ),
+ 'comment' => $entrycomment,
+ 'short-comment' => $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_AUTHOR'),
+ ) ;
+ my $sorttag = lc(remove_html_accents($author->{'last'}));
+ push @{$indexentries{$sorttag}}, \%desc ;
+ }
+ }
+
+ # Adds the editors
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'editor'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the editors\n" ) ;
+ my @editors = $self->get_all_authors($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'editor'}) ;
+ foreach my $editor (@editors) {
+ my %desc = ( 'url' => $url,
+ 'label' => $translator->formatname( $editor, $self->{'FORMATS'}{'name'} ),
+ 'comment' => $entrycomment,
+ 'short-comment' => $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_EDITOR'),
+ ) ;
+ my $sorttag = lc(remove_html_accents($editor->{'last'}));
+ push @{$indexentries{$sorttag}}, \%desc ;
+ }
+ }
+
+ # Adds the title keywords
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the titles\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_TITLE')) ;
+ }
+
+ # Adds the booktitle
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'booktitle'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the booktitles\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'booktitle'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_BOOKTITLE')) ;
+ }
+
+ # Adds the journal
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'journal'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the journal\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'journal'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_ARTICLE')) ;
+ }
+
+ # Adds the publisher
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'publisher'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the publisher\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'publisher'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_PUBLISHER')) ;
+ }
+
+ # Adds the school
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'school'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the school\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'school'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_SCHOOL')) ;
+ }
+
+ # Adds the institution
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'institution'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the institution\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'institution'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_INSTITUTION')) ;
+ }
+
+ # Adds the howpublished
+ if ( exists $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'howpublished'} ) {
+ Bib2HTML::General::Verbose::three( "\tinclude the howpublished\n" ) ;
+ $self->_add_sentence_keywords( \%indexentries,
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'howpublished'},
+ $url, $entrycomment,
+ $self->{'LANG'}->get('I18N_LANG_INDEX_COMMENT_HOWPUBLISHED')) ;
+ }
+
+ # Calls the overwritable function to adds entries
+ $self->generate_index_content(\%indexentries,$entry,$url,$entrycomment,$rootdir) ;
+
+ }
+
+ # Builds the list of letters
+ Bib2HTML::General::Verbose::three( "\tgets the index letters\n" ) ;
+ my @words = keys %indexentries;
+ @words = sortbyletters(@words) ;
+ my $letterlist = "" ;
+ my $lastletter = "" ;
+ my $maxcount = 0 ;
+
+ foreach my $word (@words) {
+ $word =~ /^(.)/ ;
+ my $letter = lc($1) ;
+ if ( ! ( $letter eq $lastletter ) ) {
+ $lastletter = $letter ;
+ $letterlist .= $self->{'THEME'}->href( htmlcatfile($rootdir,
+ $self->filename('index',$maxcount)),
+ uc( $letter ),
+ $self->browserframe('index') ) ;
+ $maxcount ++ ;
+ }
+ }
+
+ if ( isemptyhash(\%indexentries) ) {
+ return 0 ;
+ }
+
+ # Ouputs the indexes
+ my $nav = "" ;
+ my $content = '' ;
+ my @letterentries = () ;
+ my $count = 0 ;
+ my $currentfile = "" ;
+ $lastletter = "" ;
+ $self->{'__INDEX_GENERATED__'} = 1 ;
+
+ foreach my $word (@words) {
+ $word =~ /^(.)/ ;
+ my $letter = lc($1) ;
+ if ( ! ( $letter eq $lastletter ) ) {
+ #
+ # The first letter has changed
+ #
+ if ( $currentfile ) {
+ # finish to write the previous file
+ $content = join( '',
+ $nav,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->format_index_page( $letterlist,
+ $lastletter,
+ \@letterentries ),
+ $self->{'THEME'}->partseparator(),
+ $nav,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright($rootdir) ) ;
+ $self->{'THEME'}->create_html_body_page( $currentfile,
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html') ;
+ }
+ Bib2HTML::General::Verbose::three( "\tgenerates the index content for '$letter'\n" ) ;
+ $lastletter = $letter ;
+ # begin to write the file for the current letter
+ $currentfile = $self->{'THEME'}->filename('index',$count) ;
+ unless ($self->is_restricted_file("$currentfile")) {
+ $currentfile = '';
+ }
+ if ($currentfile) {
+ $nav = $self->{'THEME'}->get_navigation_bar( $currentfile,
+ { 'index' => (($count > 0) && ($self->{'__INDEX_GENERATED__'})),
+ 'previous' => ( ( $count > 0 ) ? htmlcatfile($rootdir,
+ $self->{'THEME'}->filename('index',($count-1))) : "" ),
+ 'next' => ( ($count<($maxcount-1)) ? htmlcatfile($rootdir,
+ $self->{'THEME'}->filename('index',($count+1))) : "" ),
+ 'notree' => ( isemptyhash( $self->{'CONTENT'}{'entries'} ) ),
+ 'userdef' => $self->getNavigationButtons(),
+ },
+ $rootdir ) ;
+ }
+ $count ++ ;
+ @letterentries = () ;
+ }
+
+ @letterentries = ( @letterentries, @{$indexentries{$word}} ) ;
+ }
+
+ if ( $currentfile ) {
+ # Really finish the last file
+ $content = join( '',
+ $nav,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->format_index_page( $letterlist,
+ $lastletter,
+ \@letterentries ),
+ $self->{'THEME'}->partseparator(),
+ $nav,
+ $self->{'THEME'}->partseparator(),
+ $self->{'THEME'}->get_copyright($rootdir) ) ;
+ $self->{'THEME'}->create_html_body_page( $currentfile,
+ $content,
+ $self->{'SHORT_TITLE'},
+ $rootdir,
+ 'html') ;
+ }
+
+ Bib2HTML::General::Verbose::three( "\tindexes finished\n" ) ;
+
+ return 1 ;
+}
+
+#------------------------------------------------------
+#
+# Overwritable Generation API
+#
+#------------------------------------------------------
+
+my %__FIELD_TO_LANG_TRANS_TBL = ( 'editor' => 'EDITORS',
+ 'booktitle' => 'IN',
+ 'author' => 'AUTHORS',
+ ) ;
+
+=pod
+
+=item * MAKE_REQUIRED()
+
+Add a required parameter into the specified array.
+
+=cut
+sub MAKE_REQUIRED(\@$$;$$) {
+ my $self = shift ;
+ my $LABEL = 'I18N_LANG_FIELD_';
+ if ( exists $__FIELD_TO_LANG_TRANS_TBL{lc("$_[2]")} ) {
+ $LABEL .= $__FIELD_TO_LANG_TRANS_TBL{lc("$_[2]")} ;
+ }
+ else {
+ $LABEL .= uc($_[2]) ;
+ }
+ my $val = $_[1]->{'fields'}{"$_[2]"} || "-" ;
+ $val = "$_[3]$val" if ($_[3]) ;
+ $val .= "$_[4]" if ($_[4]) ;
+ push @{$_[0]}, { 'name' => $self->{'LANG'}->get("$LABEL"),
+ 'explanation' => "$val",
+ } ;
+}
+
+=pod
+
+=item * MAKE_OPTIONAL()
+
+Add a optional parameter into the specified array.
+
+=cut
+sub MAKE_OPTIONAL(\@$$;$$) {
+ my $self = shift ;
+ if ((exists $_[1]->{'fields'}{"$_[2]"})&&
+ ($_[1]->{'fields'}{"$_[2]"})) {
+ my $LABEL = 'I18N_LANG_FIELD_';
+ if ( exists $__FIELD_TO_LANG_TRANS_TBL{lc("$_[2]")} ) {
+ $LABEL .= $__FIELD_TO_LANG_TRANS_TBL{lc("$_[2]")} ;
+ }
+ else {
+ $LABEL .= uc($_[2]) ;
+ }
+ my $val = $_[1]{'fields'}{"$_[2]"} ;
+ $val = "$_[3]$val" if ($_[3]) ;
+ $val .= "$_[4]" if ($_[4]) ;
+ push @{$_[0]}, { 'name' => $self->{'LANG'}->get("$LABEL"),
+ 'explanation' => "$val",
+ } ;
+ }
+}
+
+=pod
+
+=item * generate_entry_content_article()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_article($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_REQUIRED(\@content,$_[1],'journal') ;
+
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'pages') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_book()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_book($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_REQUIRED(\@content,$_[1],'publisher') ;
+
+ $self->MAKE_OPTIONAL(\@content,$_[1],'series') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'edition') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content,1);
+}
+
+=pod
+
+=item * generate_entry_content_booklet()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_booklet($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'howpublished') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ # The following fields are not required in BibTeX specification
+ $self->MAKE_OPTIONAL(\@content,$_[1],'publisher') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'series') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'edition') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_inbook()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_inbook($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'howpublished') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ # The following fields are not required in BibTeX specification
+ $self->MAKE_OPTIONAL(\@content,$_[1],'publisher') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'series') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'edition') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_incollection()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_incollection($$$$$) : method {
+ my $self = shift ;
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content(@_);
+}
+
+=pod
+
+=item * generate_entry_content_inproceedings()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_inproceedings($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_REQUIRED(\@content,$_[1],'booktitle') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'series') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'editor') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'pages') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'organization') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'publisher') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'type') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_manual()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_manual($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'edition') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'organization') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_mastersthesis()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_mastersthesis($$$$$) : method {
+ my $self = shift ;
+ return $self->generate_entry_content_phdthesis(@_) ;
+}
+
+=pod
+
+=item * generate_entry_content_phdthesis()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_phdthesis($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'type') ;
+ $self->MAKE_REQUIRED(\@content,$_[1],'school') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_proceedings()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_proceedings($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'series') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'volume') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'organization') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'publisher') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content, 1);
+}
+
+=pod
+
+=item * generate_entry_content_techreport()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_techreport($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'number') ;
+ $self->MAKE_REQUIRED(\@content,$_[1],'institution') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'address') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'type') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content);
+}
+
+=pod
+
+=item * generate_entry_content_unpublished()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_unpublished($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+ my @content = () ;
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content,undef,1);
+}
+
+=pod
+
+=item * generate_entry_content_misc()
+
+See generate_entry_content()
+
+=cut
+sub generate_entry_content_misc($$$$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+
+ my @content = () ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'howpublished') ;
+ $self->MAKE_OPTIONAL(\@content,$_[1],'year') ;
+
+ #key,entry,url,rootdir,title,[user_fields,aut_ed,note]
+ return $self->generate_entry_content($key,$_[1],$url,$rootdir,$_[4],\@content,1);
+}
+
+=pod
+
+=item * generate_entry_content()
+
+Generates the HTML entry-???.html
+Overwrite this method.
+Takes 6 args:
+
+=over
+
+=item * key (string)
+
+is the BibTeX key of the current bibliographical entry
+
+=item * entry (hash ref)
+
+is the description of the current bibliographical entry
+
+=item * url (string)
+
+is the URL of the current entry
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=item * entry_title (ref string)
+
+must be filled with the title of the entry.
+
+=item * user_fields (array)
+
+is the field predefined by the user. It must be an
+array of associative arrays (one for each generable field).
+
+=item * aut_ed_flg (optional boolean)
+
+indicates if the author and the editor fields are mutual
+alternatives.
+
+=item * note_req (optional boolean)
+
+indicates if the field 'note' was required.
+
+=cut
+sub generate_entry_content($$$$$;$$) : method {
+ my $self = shift ;
+ my ($key,$url,$rootdir) = ($_[0],$_[2],$_[3]) ;
+ my ($aut_ed_flg,$note_req) = ($_[6],$_[7]) ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+
+ # Compute the publication year
+ my $date = $self->__get_year__( $_[0], '' ) ;
+ if ( $date ) {
+ if ( exists $_[1]{'fields'}{'month'} ) {
+ $date = $self->{'THEME'}->format_date($_[1]{'fields'}{'month'},$date) ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::warm("You must specify a year for the entry '".$key."'",
+ extract_file_from_location( $_[1]{'location'} ),
+ extract_line_from_location( $_[1]{'location'} ) ) ;
+ }
+
+ #
+ # Build the main tabular
+ #
+ my @content = () ;
+ # The fields 'author' and 'editor' are mutual alternatives
+ if ($aut_ed_flg) {
+ push @content, { 'name' => $_[1]{'fields'}{'author'} ?
+ $self->{'LANG'}->get('I18N_LANG_FIELD_AUTHORS') :
+ $self->{'LANG'}->get('I18N_LANG_FIELD_EDITORS'),
+ 'explanation' => $translator->formatnames_withurl(($_[1]{'fields'}{'author'}||
+ $_[1]{'fields'}{'editor'})||'',
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ $self,
+ -1,
+ $rootdir) || "-",
+ } ;
+ }
+ else {
+ # Only the field 'author' is required
+ $self->MAKE_REQUIRED(\@content,$_[1],'author') ;
+ }
+
+ # Finish to build the tabular
+ $self->MAKE_REQUIRED(\@content,$_[1],'title', '&laquo;&nbsp;<i>', '&nbsp;&raquo;</i>') ;
+ #$self->MAKE_REQUIRED(\@content,$_[1],'date') ;
+ push @content, @{$_[5]} ;
+
+ if (($aut_ed_flg)&&
+ (exists $_[1]{'fields'}{'author'})&&
+ ($_[1]{'fields'}{'author'})&&
+ (exists $_[1]{'fields'}{'editor'})&&
+ ($_[1]{'fields'}{'editor'})) {
+ $self->MAKE_OPTIONAL(\@content,$_[1],'editor') ;
+ }
+
+ if ($note_req) {
+ $self->MAKE_REQUIRED(\@content,$_[1],'note') ;
+ }
+ else {
+ $self->MAKE_OPTIONAL(\@content,$_[1],'note') ;
+ }
+
+ # Compute the user comments
+ my $annote = '' ;
+ if ( ( exists $_[1]{'fields'}{'annote'} ) ||
+ ( exists $_[1]{'fields'}{'comments'} ) ) {
+ $annote = $self->{'THEME'}->section( $self->{'LANG'}->get('I18N_LANG_FIELD_ANNOTATION'),
+ ($_[1]{'fields'}{'annote'}||'').
+ ($_[1]{'fields'}{'comments'}||''),
+ $rootdir ) ;
+ }
+
+ # What is the title of this entry?
+ my $title = '['.$biblabeller->citation_label($key,$_[1]).'] &nbsp;' ;
+ if ( ! $_[1]{'fields'}{'title'} ) {
+ Bib2HTML::General::Error::warm( "Can't found the title for the entry with key '".$key."'",
+ extract_file_from_location( $_[1]{'location'} ),
+ extract_line_from_location( $_[1]{'location'} ) ) ;
+ }
+ $title .= ucfirst($_[1]{'fields'}{'title'}) || '' ;
+ # Replies the title to the calling function
+ $_[4] = translate_html_entities(strip_html_tags($title)) ;
+ $_[4] =~ s/\s+/ /g;
+
+ # Computes the BibTeX verbatim part
+ my $bibtex_verb = '' ;
+ if ( $self->{'SHOW_BIBTEX'} ) {
+
+ my $e = new Bib2HTML::Translator::BibTeXEntry() ;
+ $bibtex_verb = $e->bibtex_build_entry_html($_[1]{'type'},"$key",
+ $_[1]{'original-fields'},
+ $self->{'CONTENT'}{'constants'},
+ 80) ;
+
+ if ( $bibtex_verb ) {
+ $bibtex_verb = $self->{'THEME'}->section( $self->{'LANG'}->get('I18N_LANG_FIELD_BIBTEX_VERBATIM'),
+ "<PRE><CODE>".
+ "$bibtex_verb".
+ "</CODE></PRE>",
+ $rootdir ) ;
+ }
+
+ }
+
+ # Computes the XML verbatim part
+ my $xml_verb = '' ;
+ if (( $self->genparam('xml-verbatim') )&&( $self->{'XML_GENERATOR'} )) {
+
+ $xml_verb = get_html_entities($self->{'XML_GENERATOR'}->create_the_standalone_xml_entry("$key")) ;
+
+ if ( $xml_verb ) {
+ $xml_verb = $self->{'THEME'}->section( $self->{'LANG'}->get('I18N_LANG_FIELD_XML_VERBATIM'),
+ "<PRE><CODE>".
+ "$xml_verb".
+ "</CODE></PRE>",
+ $rootdir ) ;
+ }
+
+ }
+
+ # Generates each main parts of the entry page
+ return [ $self->{'THEME'}->subtitle($title), # title
+ $self->{'THEME'}->build_twocolumn_array( $key." ". # main tabular
+ $self->{'THEME'}->small("(".
+ $self->{'SINGULAR_TYPE_LABELS'}{$_[1]{'type'}}.
+ ")"),
+ \@content ),
+ $annote, # user comments
+ $bibtex_verb, # BibTeX verbatim part
+ $xml_verb, # XML verbatim part
+ ] ;
+}
+
+=pod
+
+=item * copy_files()
+
+Generates the HTML pages.
+Overwrite this method.
+
+=cut
+sub copy_files() : method {
+ my $self = shift ;
+ my @source = File::Spec->splitdir($self->{'BIB2HTML'}{'PERLSCRIPTDIR'}) ;
+ @source = ( @source, split(/\:\:/, __PACKAGE__) ) ;
+ pop @source ;
+
+ # Copy icons
+ $self->copythisfile( File::Spec->catfile(@source,"valid-html401.gif"),
+ File::Spec->catfile($self->{'TARGET'},"valid-html401.gif") ) ;
+ $self->copythisfile( File::Spec->catfile(@source,"valid-css.gif"),
+ File::Spec->catfile($self->{'TARGET'},"valid-css.gif") ) ;
+ $self->copythisfile( File::Spec->catfile(@source,"loupe.gif"),
+ File::Spec->catfile($self->{'TARGET'},"loupe.gif") ) ;
+
+ # Copy the theme files
+ $self->{'THEME'}->copy_files() ;
+}
+
+=pod
+
+=item * copythisfile()
+
+Copy a file.
+Takes 2 args:
+
+=over
+
+=item * source (string)
+
+=item * target (string)
+
+=back
+
+=cut
+sub copythisfile($$) {
+ my $self = shift ;
+ my $source = $_[0] || '' ;
+ my $target = $_[1] || '' ;
+
+ Bib2HTML::General::Error::syserr( "you must give a source file to copy\n" )
+ unless ( $source ) ;
+ Bib2HTML::General::Error::syserr( "you must give a target file to copy\n" )
+ unless ( $target ) ;
+
+ my $sbase = basename("$target") ;
+
+ if ($self->is_restricted_file("$sbase")) {
+ $self->SUPER::copythisfile("$source","$target");
+ }
+
+ return 1 ;
+}
+
+=pod
+
+=item * generate_index_content()
+
+Generates the HTML index-???.html
+Overwrite this method.
+Takes 5 args:
+
+=over
+
+=item * entries (hash ref)
+
+is the associative array that this method must
+update to add some entry inside the index.
+
+=item * entry (hash ref)
+
+is the description of the current bibliographical entry
+
+=item * url (string)
+
+is the URL of the current entry
+
+=item * comment (string)
+
+is the comment associated to the current entry
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=cut
+sub generate_index_content(\%$$$$) : method {
+ my $self = shift ;
+ my ($entry,$url,$comment,$rootdir) = ($_[1],$_[2],$_[3],$_[4]) ;
+}
+
+=pod
+
+=item * generate_overviewtree_content()
+
+Generates the HTML overview-tree.html.
+Overwrite this method.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=back
+
+=cut
+sub generate_overviewtree_content($) : method {
+ my $self = shift ;
+ my $rootdir = shift ;
+ my @entries = $self->get_all_entries_ayt() ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $biblabeller = Bib2HTML::Translator::BibTeXEntry->new() ;
+ my $content = $self->{'THEME'}->title($self->{'LANG'}->get('I18N_LANG_ENTRY_TYPE_TREE')) ;
+
+ # Build the tree
+ my %tree = () ;
+ foreach my $entry (@entries) {
+ my $type = $self->{'CONTENT'}{'entries'}{$entry}{'type'} ;
+ if ( $self->{'PLURIAL_TYPE_LABELS'}{$type} ) {
+ my $typelabel = $self->{'THEME'}->strong($self->{'PLURIAL_TYPE_LABELS'}{$type}) ;
+ $typelabel =~ s/[ \t\n\r]+/&nbsp;/g ;
+ my $filename = $self->filename('entry',$entry) ;
+ my $name = $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'} ) ;
+ $name =~ s/[ \t\n\r]+/&nbsp;/g ;
+ my $title = $self->{'THEME'}->entry_title( extract_first_words( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'},
+ 40 ) ) ;
+ $title =~ s/[ \t\n\r]+/&nbsp;/g ;
+ my $year = $self->__get_year__( $entry, '' ) ;
+ my $entrylabel = join( '',
+ "[",
+ $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $biblabeller->citation_label($entry,$self->{'CONTENT'}{'entries'}{$entry}),
+ $self->browserframe('overview-summary') ),
+ "]&nbsp;",
+ $name,
+ ",&nbsp;",
+ $title,
+ ( $year ? "&nbsp;(". $year .")" : '' )
+ ) ;
+ $tree{$typelabel}{$entrylabel} = {} ;
+ }
+ }
+ # Generate the HTML representation of the tree
+ if ( $self->{'THEME'}->can('get_tree') ) {
+ $content .= $self->{'THEME'}->get_tree( \%tree, $rootdir, $self->{'LANG'}->get('I18N_LANG_DOCUMENTS') ) ;
+ }
+ else {
+ # Display the tree
+ if ( ! isemptyhash( \%tree ) ) {
+ my $treecontent = '' ;
+ foreach my $type (sortbyletters @{keys %tree}) {
+ if ( ! isemptyhash( $tree{$type} ) ) {
+ my $subs = '' ;
+ foreach my $entry (sortbyletters @{keys %{$tree{$type}}}) {
+ $subs .= $self->{'THEME'}->get_tree_leaf( $entry, $rootdir ) ;
+ }
+ $treecontent .= $self->{'THEME'}->get_tree_node( $type, $subs, $rootdir ) ;
+ }
+ }
+ if ( $treecontent ) {
+ $content .= $self->{'THEME'}->get_tree_node( '', $treecontent, $rootdir ) ;
+ }
+ }
+ }
+
+ return $content ;
+}
+
+=pod
+
+=item * generate_overview_content()
+
+Generates the HTML overview-summary.html.
+Overwrite this method.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root.
+
+=back
+
+=cut
+sub generate_overview_content($) : method {
+ # Patch by Aurel Gabris added the 2006/04/10
+ my $self = shift ;
+ my $rootdir = shift ;
+ my $content = '' ;
+ my @entries = $self->get_all_entries_yat() ;
+ my $translator = Bib2HTML::Translator::BibTeXName->new() ;
+ my $currentyear = '' ;
+ my @tab = () ;
+
+ foreach my $entry (@entries) {
+ my $year = $self->__get_year__( $entry, '' ) ;
+ if ( "$currentyear" ne "$year" ) {
+ # Display tab
+ if ( @tab ) {
+ $content .= $self->{'THEME'}->build_twocolumn_array( $currentyear||
+ $self->{'LANG'}->get('I18N_LANG_NO_DATE'),
+ \@tab ) ;
+ }
+ @tab = () ;
+ $currentyear = $year ;
+ }
+ my $filename = $self->filename('entry',$entry) ;
+ push @tab, { 'name' => $self->{'THEME'}->href( htmlcatfile($rootdir,$filename),
+ $translator->formatnames( $self->__get_author_editor__($entry,''),
+ $self->{'FORMATS'}{'name'},
+ $self->{'FORMATS'}{'names'},
+ $self->genparam('max-names-overview')||1),
+ $self->browserframe('overview-summary') ),
+ 'explanation' => join( '',
+ $self->{'THEME'}->entry_title( extract_first_words( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'title'},
+ $self->genparam('max-titlelength-overview')||70 ) ),
+ "<BR>\n",
+ (exists($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'journal'}) &&
+ exists($self->{'GENERATOR_PARAMS'}{'show-journalparams-overview'})) ?
+ $self->{'THEME'}->small($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'journal'}).(exists($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'volume'})?" ".$self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'volume'}.(exists($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'pages'})?", ".$self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'pages'}.(exists($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'year'})?" (".$self->{'CONTENT'}{'entries'}{$entry}{'fields'}{'year'}.")":""):""):""):
+ $self->{'THEME'}->small("(".
+ $self->{'SINGULAR_TYPE_LABELS'}{$self->{'CONTENT'}{'entries'}{$entry}{'type'}}.
+ ")") ),
+ } ;
+ }
+ if ( @tab ) {
+ # Display tab
+ $content .= $self->{'THEME'}->build_twocolumn_array( $currentyear||
+ $self->{'LANG'}->get('I18N_LANG_NO_DATE'),
+ \@tab ) ;
+ }
+ return $content ;
+}
+
+=pod
+
+=item * generate_overviewframe_content()
+
+Generates the HTML overview-frame.html.
+Overwrite this method.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the rootdirectory.
+
+=back
+
+=cut
+sub generate_overviewframe_content($) : method {
+ my $self = shift ;
+ my $rootdir = $_[0] || confess( 'you must supply the root directory' );
+ my @lines = () ;
+
+ # Generates the list of types
+ my @types = $self->get_entry_types() ;
+ my %typematching;
+ if ( exists($self->{'GENERATOR_PARAMS'}{'type-matching'}) ) {
+ %typematching = %{$self->{'GENERATOR_PARAMS'}{'type-matching'}};
+ }
+
+ if ( @types > 0 ) {
+ # fill emtpy type matching slots
+ foreach my $type (@types) {
+ if ( ! exists( $typematching{$type} ) ) {
+ $typematching{$type} = $type;
+ }
+ }
+ my @thevals = values %typematching;
+ foreach my $type (uniq(sort(@thevals))) {
+ if ( $self->{'PLURIAL_TYPE_LABELS'}{$type} ) {
+ my $url = $self->filename('type-overview',$type) ;
+ push @lines, $self->{'THEME'}->href( htmlcatfile($rootdir,$url),
+ $self->{'PLURIAL_TYPE_LABELS'}{$type},
+ $self->browserframe('allelements') ) ;
+ }
+ else {
+ confess( "You must supply a label for the entry type '$type'" ) ;
+ }
+ }
+ }
+
+ my $subframe = $self->{'THEME'}->frame_subpart( $self->{'LANG'}->get('I18N_LANG_FRAME_TITLE_TYPES'),
+ \@lines,
+ $rootdir ) ;
+
+ # Generates the list of authors
+ my $subframe2 ;
+ my %authors = $self->get_entry_authors() ;
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+ @lines = () ;
+ my @authors = keys %authors;
+ @authors = sortbyletters(@authors);
+ foreach my $author (@authors) {
+ if ( exists($self->{'GENERATOR_PARAMS'}{'author-regexp'}) ) {
+ if (! ( $parser->formatname($authors{$author}, 'l') =~ /$self->{'GENERATOR_PARAMS'}{'author-regexp'}/i)) { next };
+ }
+ my $url = $self->filename('author-overview',$author) ;
+ push @lines, $self->{'THEME'}->href( htmlcatfile($rootdir,$url),
+ $parser->formatname($authors{$author}, 'l, f.'),
+ $self->browserframe('allelements') ) ;
+ }
+ $subframe2 = $self->{'THEME'}->frame_subpart( $self->{'LANG'}->get('I18N_LANG_FRAME_TITLE_AUTHORS'),
+ \@lines,
+ $rootdir ) ;
+
+ return join('',$subframe,$subframe2) ;
+}
+
+#------------------------------------------------------
+#
+# Formatting backend
+#
+#------------------------------------------------------
+
+=pod
+
+=item * formatnames_url_backend()
+
+This method is called each time the BibTeXNames module
+must format an author's name with a URL.
+Takes 2 args:
+
+=over
+
+=item * author's data (hash)
+
+=item * label (string)
+
+=item * rootdir (string)
+
+=back
+
+=cut
+sub formatnames_url_backend($$$) {
+ my $self = shift ;
+ confess( 'you must supply the author\'s data' ) unless $_[0] ;
+ my $rootdir = $_[2] || confess( 'you must supply the root directory' );
+ my $data = $_[0] ;
+ my $label = $_[1] || '' ;
+ my $url = '' ;
+
+ if ($label) {
+ my $texname = Bib2HTML::Translator::BibTeXName->new() ;
+ # Search for the first author which corresponds to
+ # the specified one.
+ my %authors = $self->get_entry_authors() ;
+
+ my $k = undef ;
+ while ((!$k)&&(my $authorkey = each(%authors))) {
+ if ($texname->samenames($authors{$authorkey},$data)) {
+ $k = $authorkey ;
+ }
+ }
+ # Compute the filename for this author
+ if ($k) {
+ my $filename = $self->filename('author-overview',$k) ;
+ $url = $self->{'THEME'}->href($filename) ;
+ $url = $self->{'THEME'}->href( (($rootdir) ?
+ htmlcatfile($rootdir,$filename) :
+ $filename),
+ $label,
+ $self->browserframe('allelements') ) ;
+ }
+ }
+ if (!$url) {
+ $url = "$label";
+ }
+ return $url ;
+}
+
+#------------------------------------------------------
+#
+# Helpers
+#
+#------------------------------------------------------
+
+=pod
+
+=item * _add_sentence_keywords()
+Takes 5 args.
+
+=cut
+sub _add_sentence_keywords($$$$$) : method {
+ my $self = shift ;
+ my @words = get_title_keywords( $_[1] ) ;
+ foreach my $word (@words) {
+ if ( $word !~ /^[A-Z]+$/ ) {
+ $word = ucfirst($word) ;
+ }
+ my %desc = ( 'url' => $_[2],
+ 'label' => $word,
+ 'comment' => $_[3],
+ 'short-comment' => $_[4],
+ ) ;
+ my $sorttag = lc(remove_html_accents($word));
+ push @{$_[0]->{$sorttag}}, \%desc ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Getters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * filename()
+
+Replies the filename of the specified section.
+Takes 1 arg:
+
+=over
+
+=item * section (string)
+
+is the name of the section.
+
+=back
+
+=cut
+sub filename($) : method {
+ my $self = shift ;
+ my $section = $_[0] || '' ;
+
+ # Does the specified request already encountered?
+ if ( ($section) &&
+ ($section eq 'entry') &&
+ ($_[1]) &&
+ ($self->{'ENTRY_FILENAMES'}{$_[1]}) ) {
+ return $self->{'ENTRY_FILENAMES'}{$_[1]} ;
+ }
+ elsif ( ($section) &&
+ ($section eq 'author-overview') &&
+ ($_[1]) &&
+ ($self->{'AUTHOR_FILENAMES'}{$_[1]}) ) {
+ return $self->{'AUTHOR_FILENAMES'}{$_[1]} ;
+ }
+
+ # Compute a new filename
+ my $fn = $self->{'FILENAMES'}{$section} ;
+ confess( "filename not found for '$section'" ) unless $fn ;
+ my $i = 1 ;
+ while ( $fn =~ /\#\Q$i\E/ ) {
+ my $val = (defined($_[$i])) ? $_[$i] : '' ;
+ $fn =~ s/\#$i/$val/g ;
+ $i ++ ;
+ }
+
+ # Make sure that the filename could be supported by most of the
+ # operating systems
+ $fn =~ s/:/-/g if ($fn);
+
+ # Save the filename
+ if ( ($section) &&
+ ($section eq 'entry') &&
+ ($_[1]) ) {
+ $self->{'ENTRY_FILENAMES'}{$_[1]} = $fn ;
+ }
+ elsif ( ($section) &&
+ ($section eq 'author-overview') &&
+ ($_[1]) ) {
+ $self->{'AUTHOR_FILENAMES'}{$_[1]} = $fn ;
+ }
+
+ return $fn ;
+}
+
+=pod
+
+=item * browserframe()
+
+Replies the frame used for the specified section.
+Takes 1 arg:
+
+=over
+
+=item * section (string)
+
+is the name of the section.
+
+=back
+
+=cut
+sub browserframe($) : method {
+ my $self = shift ;
+ my $section = $_[0] || '' ;
+ my $fr = $self->{'FRAMES'}{$section} ;
+ confess( "frame not found for '$section'" ) unless $fr ;
+ return $fr ;
+}
+
+
+=pod
+
+=item * getNavigationButtons()
+
+Replies the additional buttons for the navigation bar.
+Takes 1 arg:
+
+=over
+
+=item * exception (optional mixed)
+
+is the list of label to not reply.
+
+=back
+
+=cut
+sub getNavigationButtons : method {
+ my $self = shift ;
+ my @buttons = () ;
+ if ( int(@_) > 0 ) {
+ if ( isarray($_[0]) ) {
+ foreach my $button (@{$self->{'USER_NAVIGATION_BUTTONS'}}) {
+ if ( ! strinarray($button->{'label'},$_[0]) ) {
+ push @buttons, $button ;
+ }
+ }
+ }
+ else {
+ foreach my $button (@{$self->{'USER_NAVIGATION_BUTTONS'}}) {
+ if ( ! strinarray($button->{'label'},\@_) ) {
+ push @buttons, $button ;
+ }
+ }
+ }
+ }
+ else {
+ @buttons = @{$self->{'USER_NAVIGATION_BUTTONS'}} ;
+ }
+ return \@buttons ;
+}
+
+=pod
+
+=item * addNavigationButton()
+
+Adds an additional button for the navigation bar.
+Takes 2 args:
+
+=over
+
+=item * url (string)
+
+is the URL for the new button
+
+=item * key (string)
+
+is the language string identifier that corresponds
+to the label of the button.
+
+=back
+
+=cut
+sub addNavigationButton($$) : method {
+ my $self = shift ;
+ my $url = $_[0] || '' ;
+ my $label = $_[1] || '' ;
+ return unless (($url)&&($label)) ;
+ push @{$self->{'USER_NAVIGATION_BUTTONS'}}, { 'url' => "$url",
+ 'label' => "$label",
+ } ;
+}
+
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang.pm
new file mode 100644
index 0000000000..803c950ce1
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang.pm
@@ -0,0 +1,319 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::Lang - A Language support for the generators
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::Lang ;
+
+my $gen = Bib2HTML::Generator::Lang->new( name, defs ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Lang is a Perl module, which proposes
+a generic language support for all the generators.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::Lang;
+
+ my $gen = Bib2HTML::Generator::Lang->new( 'English',
+ '/usr/lib/bib2html/Langs/English' ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * name (string)
+
+is the name of the current language.
+
+=item * defs_path (string)
+
+is the filename of the file which contains the definitions.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Lang.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::Lang;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+
+use Carp ;
+
+use Bib2HTML::General::Error ;
+use Bib2HTML::Release ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of language support
+my $VERSION = "3.0" ;
+
+# Language definitions
+my %LANG_DEFS = ( ) ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $filename = $_[1];
+ my $self = { 'defs' => {},
+ 'name' => $_[0] || 'unknow',
+ } ;
+ bless( $self, $class );
+
+ foreach my $key (keys %LANG_DEFS) {
+ $self->{'defs'}->{$key} = $LANG_DEFS{$key} ;
+ }
+
+ %{$self->{'defs'}} = $self->loadScript("$filename");
+
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Getters
+#
+#------------------------------------------------------
+
+sub get_final_copyright() {
+ my $final_copyright = 1998;
+ my $soft_release = getVersionDate();
+ if ($soft_release =~ /^([0-9]+)\/[0-9]+\/[0-9]+$/) {
+ if ($1<=98) {
+ $final_copyright = 2000 + $1;
+ }
+ elsif ($1==99) {
+ $final_copyright = 1999;
+ }
+ else {
+ $final_copyright = $1;
+ }
+ }
+
+ if ($final_copyright!=1998) {
+ $final_copyright = "1998-$final_copyright";
+ }
+
+ return $final_copyright;
+}
+
+sub replace_function_calls($) {
+ my $str = shift;
+ $str =~ s/\{\{\*([a-zA-Z0-9_]+)\}\}/{local *s=$1;&s();}/eg;
+ return $str;
+}
+
+sub loadScript($) {
+ my $self = shift;
+ my $filename = shift;
+
+ my %defs = ();
+
+ if (($filename)&&(-r "$filename")) {
+ local *LANG_FILE;
+ open *LANG_FILE, "<$filename"
+ or Bib2HTML::General::Error::syserr( "Unable to find the language file '$filename': $!\n" );
+
+ my $lastkey = undef;
+ while (my $line = <LANG_FILE>) {
+ if ($lastkey) {
+ $line =~ s/^\s+//;
+ if ($line =~ /^(.*?)\s*\\\s*$/) {
+ $line = $1;
+ $defs{'$lastkey'} .= ' ' if ($defs{'$lastkey'});
+ $defs{"$lastkey"} .= replace_function_calls("$line");
+ }
+ else {
+ $line =~ s/\s+$//;
+ $defs{'$lastkey'} .= ' ' if ($defs{'$lastkey'});
+ $defs{"$lastkey"} .= replace_function_calls("$line");
+ $lastkey = undef;
+ }
+ }
+ else {
+ if (($line)&&($line =~ /^\s*([a-aA-Z0-9_\-:]+)\s*=\s*(.*)?\s*$/)) {
+ my ($key,$value) = ($1,$2);
+ if ($value =~ /^(.*?)\s*\\\s*$/) {
+ $value = $1;
+ $lastkey = $key;
+ }
+ else {
+ $value =~ s/\s+$//;
+ }
+ $defs{"$key"} = replace_function_calls("$value");
+ }
+ }
+ }
+
+ close *LANG_FILE;
+ }
+
+ return %defs;
+}
+
+=pod
+
+=item * get()
+
+Replies the specified string according to the language.
+Takes at least 1 arg:
+
+=over
+
+=item * id (string)
+
+is the id of the string.
+
+=item * param1 (string)
+
+is a string which must replace the string "#1" in the language definition.
+
+=item * param2 (string)
+
+is a string which must replace the string "#2" in the language definition.
+
+=item ...
+
+=back
+
+=cut
+sub get($) : method {
+ my $self = shift ;
+ my $id = shift || confess( 'you must supply the id' ) ;
+ my $str = ( ( exists $self->{'defs'}{$id} ) ?
+ $self->{'defs'}{$id} : '' ) ;
+ Bib2HTML::General::Error::syserr( "the string id '$id' is not defined ".
+ "for the current language '".$self->{'name'}."'" ) unless $str ;
+ if ( @_ ) {
+ for(my $i=0; $i<=$#_; $i++ ) {
+ my $j = $i+1 ;
+ my $s = $_[$i] || "#$j" ;
+ $str =~ s/#$j/$s/g ;
+ }
+ }
+ return $str ;
+}
+
+=pod
+
+=item * _get_noerror()
+
+Replies the specified string according to the language.
+Takes at least 1 arg:
+
+=over
+
+=item * id (string)
+
+is the id of the string.
+
+=item * param1 (string)
+
+is a string which must replace the string "#1" in the language definition.
+
+=item * param2 (string)
+
+is a string which must replace the string "#2" in the language definition.
+
+=item ...
+
+=back
+
+=cut
+sub _get_noerror($) : method {
+ my $self = shift ;
+ my $id = shift || confess( 'you must supply the id' ) ;
+ my $str = ( ( exists $self->{'defs'}{$id} ) ?
+ $self->{'defs'}{$id} : '' ) ;
+ return undef unless $str ;
+ if ( @_ ) {
+ for(my $i=0; $i<=$#_; $i++ ) {
+ my $j = $i+1 ;
+ my $s = $_[$i] || "#$j" ;
+ $str =~ s/#$j/$s/g ;
+ }
+ }
+ return $str ;
+}
+
+=pod
+
+=item * getname()
+
+Replies the name of the current language.
+
+=cut
+sub getname() : method {
+ my $self = shift ;
+ return $self->{'name'} ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English
new file mode 100644
index 0000000000..050a32be41
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English
@@ -0,0 +1,86 @@
+# English support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_BIB2HTML_COPYRIGHT = This document was generated by #1.<BR>\
+ Copyright &copy; {{*get_final_copyright}} #2 (under the #3)
+I18N_LANG_DEFAULT_TITLE = BibTeX
+I18N_LANG_DOCUMENTS = Documents
+I18N_LANG_FIELD_ADDRESS = Address
+I18N_LANG_FIELD_ADSURL = Link to ADS
+I18N_LANG_FIELD_ABSTRACT = Abstract
+I18N_LANG_FIELD_ABSTRACT_KEYWORDS = Abstract &amp; Keywords
+I18N_LANG_FIELD_ANNOTATION = Annotation
+I18N_LANG_FIELD_AUTHORS = Author(s)
+I18N_LANG_FIELD_CHAPTER = Chapter of
+I18N_LANG_FIELD_DATE = Date
+I18N_LANG_FIELD_DOI = Document on Internet
+I18N_LANG_FIELD_DOWNLOAD = Download the complete article: #1
+I18N_LANG_FIELD_EDITION = Edition
+I18N_LANG_FIELD_EDITORS = Editor(s)
+I18N_LANG_FIELD_HOWPUBLISHED = How published
+I18N_LANG_FIELD_IN = In
+I18N_LANG_FIELD_INSTITUTION = Institution
+I18N_LANG_FIELD_ISBN = ISBN number
+I18N_LANG_FIELD_ISSN = ISSN number
+I18N_LANG_FIELD_JOURNAL = Journal
+I18N_LANG_FIELD_KEYWORDS = <strong>Keywords</strong>: #1
+I18N_LANG_FIELD_KEYWORDS_TITLE = Keywords
+I18N_LANG_FIELD_NOTE = Note
+I18N_LANG_FIELD_NUMBER = Number
+I18N_LANG_FIELD_ORGANIZATION = Organization
+I18N_LANG_FIELD_PAGES = Page(s)
+I18N_LANG_FIELD_PDFFILE = PDF
+I18N_LANG_FIELD_PUBLISHER = Publisher
+I18N_LANG_FIELD_READERS = Reader(s)
+I18N_LANG_FIELD_SCHOOL = School
+I18N_LANG_FIELD_SERIES = Series
+I18N_LANG_FIELD_TITLE = Title
+I18N_LANG_FIELD_TYPE = Type
+I18N_LANG_FIELD_URL = URL
+I18N_LANG_FIELD_VOLUME = Volume
+I18N_LANG_FIELD_YEAR = Year
+I18N_LANG_FORMAT_NAME = l{ (v)}{ f.}{, j}
+I18N_LANG_FORMAT_NAMES = { and }{, }
+I18N_LANG_KEYWORDS = Key-words
+I18N_LANG_P_ARTICLE = Articles
+I18N_LANG_P_BOOK = Books
+I18N_LANG_P_BOOKLET = Not-sponsored books
+I18N_LANG_P_INBOOK = Book parts
+I18N_LANG_P_INCOLLECTION = In a collection
+I18N_LANG_P_INPROCEEDINGS = In proceedings
+I18N_LANG_P_MANUAL = Technical manuals
+I18N_LANG_P_MASTERTHESIS = Master's thesis
+I18N_LANG_P_MISC = 'Miscellaneous documents'
+I18N_LANG_P_PHDTHESIS = PhD thesis
+I18N_LANG_P_PROCEEDINGS = Conference proceedings
+I18N_LANG_P_TECHREPORT = Technical reports
+I18N_LANG_P_UNPUBLISHED = Unpublished
+I18N_LANG_S_ARTICLE = Article
+I18N_LANG_S_BOOK = Book
+I18N_LANG_S_BOOKLET = Not-sponsored book
+I18N_LANG_S_INBOOK = Book part
+I18N_LANG_S_INCOLLECTION = In a collection
+I18N_LANG_S_INPROCEEDINGS = In proceedings
+I18N_LANG_S_MANUAL = Technical manual
+I18N_LANG_S_MASTERTHESIS = Master's thesis
+I18N_LANG_S_MISC = 'Miscellaneous document'
+I18N_LANG_S_PHDTHESIS = PhD thesis
+I18N_LANG_S_PROCEEDINGS = Conference proceedings
+I18N_LANG_S_TECHREPORT = Technical report
+I18N_LANG_S_UNPUBLISHED = Unpublished
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.HTMLGen b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.HTMLGen
new file mode 100644
index 0000000000..798491eb2a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.HTMLGen
@@ -0,0 +1,54 @@
+# English support for the generator HTMLGen.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_ALL_ELEMENTS = All Elements
+I18N_LANG_ARTICLESINSAMEDOMAINS = Documents in the same domains
+I18N_LANG_FIELD_BIBTEX_VERBATIM = BibTeX code
+I18N_LANG_FIELD_XML_VERBATIM = XML code
+I18N_LANG_DEFAULT_TITLE = Bibliography
+I18N_LANG_DOMAIN_TREE = Domain Tree
+I18N_LANG_DOMAINS = Domains
+I18N_LANG_ENTRY_TYPE_TREE = Hierarchical list by entry type
+I18N_LANG_FRAME_TITLE_AUTHORS = Authors
+I18N_LANG_FRAME_TITLE_TYPES = Types
+I18N_LANG_FRAMES = Frames
+I18N_LANG_INDEX = Index
+I18N_LANG_INDEX_COMMENT_ARTICLE = article
+I18N_LANG_INDEX_COMMENT_AUTHOR = author
+I18N_LANG_INDEX_COMMENT_BOOKTITLE = booktitle
+I18N_LANG_INDEX_COMMENT_EDITOR = editor
+I18N_LANG_INDEX_COMMENT_HOWPUBLISHED = publication mean
+I18N_LANG_INDEX_COMMENT_INSTITUTION = institution
+I18N_LANG_INDEX_COMMENT_PUBLISHER = publisher
+I18N_LANG_INDEX_COMMENT_SCHOOL = school
+I18N_LANG_INDEX_COMMENT_TITLE = title
+I18N_LANG_NEXT = Next
+I18N_LANG_NO_DATE = Not dated
+I18N_LANG_NO_FRAME = No Frame
+I18N_LANG_NO_FRAME_ALERT = <H2>Frame Alert</H2>\
+ <P>This document is designed to be\
+ viewed using the frames feature. If\
+ you see this message, you are using a\
+ non-frame-capable web client.<BR>\
+ Link to <A HREF="#1">Non-frame version.</A>.<BR>#2
+I18N_LANG_OVERVIEW = Overview
+I18N_LANG_PREV = Prev
+I18N_LANG_TREE = Tree
+I18N_LANG_SMALL_IN = in:&nbsp;#1
+I18N_LANG_SUBMIT_BUG = Submit a bug
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.Theme.Dyna b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.Theme.Dyna
new file mode 100644
index 0000000000..03fce9ef60
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/English.Theme.Dyna
@@ -0,0 +1,22 @@
+# English support for the Dyna theme.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_THEME_SUMMARY_BAR = SUMMARY: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_DETAIL_BAR = DETAIL: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_TREE_ROOT = Root
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French
new file mode 100644
index 0000000000..bfbf3e5818
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French
@@ -0,0 +1,86 @@
+# French support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_BIB2HTML_COPYRIGHT = Ce document a &eacute;t&eacute; g&eacute;n&eacute;r&eacute; \
+ par #1.<BR>Copyright &copy; {{*get_final_copyright}} #2 (licence #3)
+I18N_LANG_DEFAULT_TITLE = BibTeX
+I18N_LANG_DOCUMENTS = Documents
+I18N_LANG_FIELD_ADDRESS = Adresse
+I18N_LANG_FIELD_ADSURL = Lien vers ADS
+I18N_LANG_FIELD_ABSTRACT = R&eacute;sum&eacute;
+I18N_LANG_FIELD_ABSTRACT_KEYWORDS = R&eacute;sum&eacute; &amp; Mots-cl&eacute;s
+I18N_LANG_FIELD_ANNOTATION = Annotation
+I18N_LANG_FIELD_AUTHORS = Auteur(s)
+I18N_LANG_FIELD_CHAPTER = Chapitre de
+I18N_LANG_FIELD_DATE = Date
+I18N_LANG_FIELD_DOI = Document sur Internet
+I18N_LANG_FIELD_DOWNLOAD = T&eacute;l&eacute;charger une version compl&egrave;te de ce document&nbsp;: #1
+I18N_LANG_FIELD_EDITION = &Eacute;dition
+I18N_LANG_FIELD_EDITORS = R&eacute;dacteur(s) en chef
+I18N_LANG_FIELD_HOWPUBLISHED = Moyen de publication
+I18N_LANG_FIELD_IN = In
+I18N_LANG_FIELD_INSTITUTION = Institution
+I18N_LANG_FIELD_ISBN = Num&eacute;ro ISBN
+I18N_LANG_FIELD_ISSN = Num&eacute;ro ISSN
+I18N_LANG_FIELD_JOURNAL = Journal
+I18N_LANG_FIELD_KEYWORDS = <strong>Mots-cl&eacute;s</strong>: #1
+I18N_LANG_FIELD_KEYWORDS_TITLE = Mots-cl&eacute;s
+I18N_LANG_FIELD_NOTE = Note
+I18N_LANG_FIELD_NUMBER = Num&eacute;ro
+I18N_LANG_FIELD_ORGANIZATION = Organisation
+I18N_LANG_FIELD_PAGES = Page(s)
+I18N_LANG_FIELD_PDFFILE = PDF
+I18N_LANG_FIELD_PUBLISHER = &Eacute;diteur
+I18N_LANG_FIELD_READERS = Lecteur(s)
+I18N_LANG_FIELD_SCHOOL = &Eacute;cole
+I18N_LANG_FIELD_SERIES = S&eacute;rie(s)
+I18N_LANG_FIELD_TITLE = Titre
+I18N_LANG_FIELD_TYPE = Type
+I18N_LANG_FIELD_URL = URL
+I18N_LANG_FIELD_VOLUME = Volume
+I18N_LANG_FIELD_YEAR = Ann&eacute;e
+I18N_LANG_FORMAT_NAME = l{ (v)}{ f.}{, j}
+I18N_LANG_FORMAT_NAMES = { et }{, }
+I18N_LANG_KEYWORDS = Mots-clés
+I18N_LANG_P_ARTICLE = Articles
+I18N_LANG_P_BOOK = Livres
+I18N_LANG_P_BOOKLET = Livres sans éditeur
+I18N_LANG_P_INBOOK = Parties de livre
+I18N_LANG_P_INCOLLECTION = Articles dans des collections
+I18N_LANG_P_INPROCEEDINGS = Articles dans des actes de conf&eacute;rences
+I18N_LANG_P_MANUAL = Manuels techniques
+I18N_LANG_P_MASTERTHESIS = M&eacute;moire d'ing&eacute;nieur
+I18N_LANG_P_MISC = 'Documents divers'
+I18N_LANG_P_PHDTHESIS = M&eacute;moires de recherche
+I18N_LANG_P_PROCEEDINGS = Actes de conférences
+I18N_LANG_P_TECHREPORT = Documentations techniques
+I18N_LANG_P_UNPUBLISHED = Non publi&eacute;s
+I18N_LANG_S_ARTICLE = Article
+I18N_LANG_S_BOOK = Livre
+I18N_LANG_S_BOOKLET = Livre sans éditeur
+I18N_LANG_S_INBOOK = Partie de livre
+I18N_LANG_S_INCOLLECTION = Article dans une collection
+I18N_LANG_S_INPROCEEDINGS = Article dans des actes de conf&eacute;rence
+I18N_LANG_S_MANUAL = Manuel technique
+I18N_LANG_S_MASTERTHESIS = M&eacute;moire d'ingénieur
+I18N_LANG_S_MISC = 'Document divers'
+I18N_LANG_S_PHDTHESIS = M&eacute;moire de recherche
+I18N_LANG_S_PROCEEDINGS = Actes de confi&eacute;rence
+I18N_LANG_S_TECHREPORT = Rapport technique
+I18N_LANG_S_UNPUBLISHED = Non publi&eacute;
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.HTMLGen b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.HTMLGen
new file mode 100644
index 0000000000..3da9bb32b9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.HTMLGen
@@ -0,0 +1,55 @@
+# French support for the generator HTMLGen.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_ALL_ELEMENTS = Tous les &eacute;l&eacute;ments
+I18N_LANG_ARTICLESINSAMEDOMAINS = Documents dans le m&ecirc;me domaine
+I18N_LANG_FIELD_BIBTEX_VERBATIM = Code BibTeX
+I18N_LANG_FIELD_XML_VERBATIM = Code XML
+I18N_LANG_DEFAULT_TITLE = Bibliographie
+I18N_LANG_DOMAIN_TREE = Arbre des domaines
+I18N_LANG_DOMAINS = Domaines
+I18N_LANG_ENTRY_TYPE_TREE = Liste hi&eacute;rarchique par type d'entr&eacute;e
+I18N_LANG_FRAME_TITLE_AUTHORS = Auteurs
+I18N_LANG_FRAME_TITLE_TYPES = Types
+I18N_LANG_FRAMES = Frames
+I18N_LANG_INDEX = Index
+I18N_LANG_INDEX_COMMENT_ARTICLE = article
+I18N_LANG_INDEX_COMMENT_AUTHOR = auteur
+I18N_LANG_INDEX_COMMENT_BOOKTITLE = title de livre
+I18N_LANG_INDEX_COMMENT_EDITOR = r&eacute;dacteur en chef
+I18N_LANG_INDEX_COMMENT_HOWPUBLISHED = moyen de publication
+I18N_LANG_INDEX_COMMENT_INSTITUTION = institution
+I18N_LANG_INDEX_COMMENT_PUBLISHER = &eacute;diteur
+I18N_LANG_INDEX_COMMENT_SCHOOL = &eacute;cole
+I18N_LANG_INDEX_COMMENT_TITLE = titre
+I18N_LANG_NEXT = Suivant
+I18N_LANG_NO_DATE = Non dat&eacute;
+I18N_LANG_NO_FRAME = Pas de Frame
+I18N_LANG_NO_FRAME_ALERT = <H2>Support des cadres</H2>\
+ <P>Ce document est con&ccedil; pour &ecirc;tre \
+ visualis&eacute; avec des cadres (frames). \
+ Le fait de lire ce message indique que vous \
+ utilis&eacute; un navigateur ne supportant \
+ pas les frames.<BR> Lien vers la <A HREF="#1">\
+ version sans frame.</A>.<BR>\n#2
+I18N_LANG_OVERVIEW = Page principale
+I18N_LANG_PREV = Pr&eacute;d
+I18N_LANG_TREE = Arbre
+I18N_LANG_SMALL_IN = in:&nbsp;#1
+I18N_LANG_SUBMIT_BUG = Soumettre un bug
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.Theme.Dyna b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.Theme.Dyna
new file mode 100644
index 0000000000..0004c6ab3c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/French.Theme.Dyna
@@ -0,0 +1,22 @@
+# French support for the Dyna theme.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_THEME_SUMMARY_BAR = R&Eacute;SUM&Eacute;: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_DETAIL_BAR = D&Eacute;TAIL: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_TREE_ROOT = Racine
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian
new file mode 100644
index 0000000000..e5f962412f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian
@@ -0,0 +1,86 @@
+# Italian support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_BIB2HTML_COPYRIGHT = Documento generato da #1.<BR>\
+ Copyright &copy; {{{*get_final_copyright}} #2 (sotto la #3)
+I18N_LANG_DEFAULT_TITLE = BibTeX
+I18N_LANG_DOCUMENTS = Documenti
+I18N_LANG_FIELD_ADDRESS = Indirizzo
+I18N_LANG_FIELD_ADSURL = Collegamento al ADS
+I18N_LANG_FIELD_ABSTRACT = Abstract
+I18N_LANG_FIELD_ABSTRACT_KEYWORDS = Abstract &amp; Parole chiave
+I18N_LANG_FIELD_ANNOTATION = Annotazione
+I18N_LANG_FIELD_AUTHORS = Autore
+I18N_LANG_FIELD_CHAPTER = Capitolo di
+I18N_LANG_FIELD_DATE = Data
+I18N_LANG_FIELD_DOI = Documento sul Internet
+I18N_LANG_FIELD_DOWNLOAD = Scarica articolo completo: #1
+I18N_LANG_FIELD_EDITION = Edizione
+I18N_LANG_FIELD_EDITORS = Curatore
+I18N_LANG_FIELD_HOWPUBLISHED = Modalità di pubblicazione
+I18N_LANG_FIELD_IN = In
+I18N_LANG_FIELD_INSTITUTION = Istituzione
+I18N_LANG_FIELD_ISBN = Numero ISBN
+I18N_LANG_FIELD_ISSN = Numero ISSN
+I18N_LANG_FIELD_JOURNAL = Rivista
+I18N_LANG_FIELD_KEYWORDS = <strong>Parole chiave</strong>: #1
+I18N_LANG_FIELD_KEYWORDS_TITLE = Parole chiave
+I18N_LANG_FIELD_NOTE = Nota
+I18N_LANG_FIELD_NUMBER = Numero
+I18N_LANG_FIELD_ORGANIZATION = Organizzazione
+I18N_LANG_FIELD_PAGES = Pagine
+I18N_LANG_FIELD_PDFFILE = PDF
+I18N_LANG_FIELD_PUBLISHER = Editore
+I18N_LANG_FIELD_READERS = Lettori
+I18N_LANG_FIELD_SCHOOL = Scuola
+I18N_LANG_FIELD_SERIES = Serie
+I18N_LANG_FIELD_TITLE = Titolo
+I18N_LANG_FIELD_TYPE = Tipo
+I18N_LANG_FIELD_URL = URL
+I18N_LANG_FIELD_VOLUME = Volume
+I18N_LANG_FIELD_YEAR = Anno
+I18N_LANG_FORMAT_NAME = l{ (v)}{ f.}{, j}
+I18N_LANG_FORMAT_NAMES = { e }{, }
+I18N_LANG_KEYWORDS = Parole chiavi
+I18N_LANG_P_ARTICLE = Articoli
+I18N_LANG_P_BOOK = Libri
+I18N_LANG_P_BOOKLET = Libretti
+I18N_LANG_P_INBOOK = Parte di libro
+I18N_LANG_P_INCOLLECTION = In raccolte
+I18N_LANG_P_INPROCEEDINGS = In atti
+I18N_LANG_P_MANUAL = Manuali tecnici
+I18N_LANG_P_MASTERTHESIS = Tesi di master
+I18N_LANG_P_MISC = 'Documenti vari'
+I18N_LANG_P_PHDTHESIS = Tesi di dottorato
+I18N_LANG_P_PROCEEDINGS = Atti di conferenze
+I18N_LANG_P_TECHREPORT = Rapporti tecnici
+I18N_LANG_P_UNPUBLISHED = Non pubblicati
+I18N_LANG_S_ARTICLE = articolo
+I18N_LANG_S_BOOK = libro
+I18N_LANG_S_BOOKLET = libretto
+I18N_LANG_S_INBOOK = parte di libro
+I18N_LANG_S_INCOLLECTION = parte di una raccolta
+I18N_LANG_S_INPROCEEDINGS = parte di atti
+I18N_LANG_S_MANUAL = manuale tecnico
+I18N_LANG_S_MASTERTHESIS = tesi di master
+I18N_LANG_S_MISC = 'documenti vari'
+I18N_LANG_S_PHDTHESIS = tesi di dottorato
+I18N_LANG_S_PROCEEDINGS = atti di conferenze
+I18N_LANG_S_TECHREPORT = rapporto tecnico
+I18N_LANG_S_UNPUBLISHED = non pubblicato
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.HTMLGen b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.HTMLGen
new file mode 100644
index 0000000000..393907d803
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.HTMLGen
@@ -0,0 +1,56 @@
+# Italian support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_ALL_ELEMENTS = Tutti i documenti
+I18N_LANG_ARTICLESINSAMEDOMAINS = Documenti negli stessi domini
+I18N_LANG_FIELD_BIBTEX_VERBATIM = Codice BibTeX
+I18N_LANG_FIELD_XML_VERBATIM = Codice XML
+I18N_LANG_DEFAULT_TITLE = Bibliografia
+I18N_LANG_DOMAIN_TREE = Albero dei domini
+I18N_LANG_DOMAINS = Domini
+I18N_LANG_ENTRY_TYPE_TREE = Elenco gerarchico per tipo di documento
+I18N_LANG_FRAME_TITLE_AUTHORS = Autori
+I18N_LANG_FRAME_TITLE_TYPES = Tipi
+I18N_LANG_FRAMES = Frame
+I18N_LANG_INDEX = Indice
+I18N_LANG_INDEX_COMMENT_ARTICLE = Articolo
+I18N_LANG_INDEX_COMMENT_AUTHOR = Autore
+I18N_LANG_INDEX_COMMENT_BOOKTITLE = Titolo
+I18N_LANG_INDEX_COMMENT_EDITOR = Curatore
+I18N_LANG_INDEX_COMMENT_HOWPUBLISHED = Modalità di pubblicazione
+I18N_LANG_INDEX_COMMENT_INSTITUTION = Istituzione
+I18N_LANG_INDEX_COMMENT_PUBLISHER = Editore
+I18N_LANG_INDEX_COMMENT_SCHOOL = Scuola
+I18N_LANG_INDEX_COMMENT_TITLE = Titolo
+I18N_LANG_NEXT = Successivo
+I18N_LANG_NO_DATE = Non datati
+I18N_LANG_NO_FRAME = Pagina unica
+I18N_LANG_NO_FRAME_ALERT = <H2>Attenzione</H2>\
+ <P>Questo documento è destinato ad \
+ essere visualizzato usando i frame. \
+ Se visualizzate questo messaggio \
+ state utilizzando un client che non \
+ supporta i frame.<BR>\
+ Si veda la <A HREF="#1">Versione senza \
+ frame.</A>.<BR>\n#2
+I18N_LANG_OVERVIEW = Per anno
+I18N_LANG_PREV = Precedente
+I18N_LANG_TREE = Per tipo
+I18N_LANG_SMALL_IN = in:&nbsp;#1
+I18N_LANG_SUBMIT_BUG = Segnalazione bug
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.Theme.Dyna b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.Theme.Dyna
new file mode 100644
index 0000000000..c715bf6c18
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Italian.Theme.Dyna
@@ -0,0 +1,22 @@
+# Italian support for the Dyna theme.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_THEME_SUMMARY_BAR = RIASSUNTO: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_DETAIL_BAR = DETTAGLIO: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_TREE_ROOT = Radice
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese
new file mode 100644
index 0000000000..a668ef8033
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese
@@ -0,0 +1,86 @@
+# Portuguese support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_BIB2HTML_COPYRIGHT = Este documento foi gerado por #1.<BR>\
+ Copyright &copy; {{*get_final_copyright}} #2 (licen&ccedil;a #3)
+I18N_LANG_DEFAULT_TITLE = BibTeX
+I18N_LANG_DOCUMENTS = Documentos
+I18N_LANG_FIELD_ADDRESS = Endere&ccedil;o
+I18N_LANG_FIELD_ADSURL = Liga&ccedil;&atilde;o ao ADS
+I18N_LANG_FIELD_ABSTRACT = Resumo
+I18N_LANG_FIELD_ABSTRACT_KEYWORDS = Resumo &amp; Palavras-chave
+I18N_LANG_FIELD_ANNOTATION = Anota&ccedil;&otilde;es
+I18N_LANG_FIELD_AUTHORS = Autor(es)
+I18N_LANG_FIELD_CHAPTER = Cap&iacute;tulo de
+I18N_LANG_FIELD_DATE = Data
+I18N_LANG_FIELD_DOI = Original no Internet
+I18N_LANG_FIELD_DOWNLOAD = Obter o artigo completo: #1
+I18N_LANG_FIELD_EDITION = Edi&ccedil;&atilde;o
+I18N_LANG_FIELD_EDITORS = Editor(es)
+I18N_LANG_FIELD_HOWPUBLISHED = Publicado como
+I18N_LANG_FIELD_IN = Em
+I18N_LANG_FIELD_INSTITUTION = Institui&ccedil;&atilde;o
+I18N_LANG_FIELD_ISBN = N&uacute;mero ISBN
+I18N_LANG_FIELD_ISSN = N&uacute;mero ISSN
+I18N_LANG_FIELD_JOURNAL = Journal
+I18N_LANG_FIELD_KEYWORDS = <strong>Palavras-chave</strong>: #1
+I18N_LANG_FIELD_KEYWORDS_TITLE = Palavras-chave
+I18N_LANG_FIELD_NOTE = Nota
+I18N_LANG_FIELD_NUMBER = N&uacute;mero
+I18N_LANG_FIELD_ORGANIZATION = Organiza&ccedil;&atilde;o
+I18N_LANG_FIELD_PAGES = P&aacute;gina(s)
+I18N_LANG_FIELD_PDFFILE = PDF
+I18N_LANG_FIELD_PUBLISHER = Editora
+I18N_LANG_FIELD_READERS = Leitor(es)
+I18N_LANG_FIELD_SCHOOL = Escola
+I18N_LANG_FIELD_SERIES = S&eacute;ries
+I18N_LANG_FIELD_TITLE = Título
+I18N_LANG_FIELD_TYPE = Tipo
+I18N_LANG_FIELD_URL = URL
+I18N_LANG_FIELD_VOLUME = Volume
+I18N_LANG_FIELD_YEAR = Ano
+I18N_LANG_FORMAT_NAME = l{ (v)}{ f.}{, j}
+I18N_LANG_FORMAT_NAMES = { e }{, }
+I18N_LANG_KEYWORDS = Palavras-chaves
+I18N_LANG_P_ARTICLE = Artigos
+I18N_LANG_P_BOOK = Livros
+I18N_LANG_P_BOOKLET = Livros sem editor
+I18N_LANG_P_INBOOK = Partes de livros
+I18N_LANG_P_INCOLLECTION = Artigos numa colec&ccedil;&atilde;o
+I18N_LANG_P_INPROCEEDINGS = Artigos em actas de confer&ecirc;ncias
+I18N_LANG_P_MANUAL = Manuais t&eacute;cnicos
+I18N_LANG_P_MASTERTHESIS = Teses de mestrado
+I18N_LANG_P_MISC = 'Documentos diversos'
+I18N_LANG_P_PHDTHESIS = Teses de doutoramento
+I18N_LANG_P_PROCEEDINGS = Actas de confer&ecirc;ncias
+I18N_LANG_P_TECHREPORT = Relat&oacute;rios t&eacute;cnicos
+I18N_LANG_P_UNPUBLISHED = N&atilde;o publicados
+I18N_LANG_S_ARTICLE = Artigo
+I18N_LANG_S_BOOK = Livro
+I18N_LANG_S_BOOKLET = Livros sem editor
+I18N_LANG_S_INBOOK = Parte de livro
+I18N_LANG_S_INCOLLECTION = Artigo numa colec&ccedil;&atilde;o
+I18N_LANG_S_INPROCEEDINGS = Artigo em actas de confer&ecirc;ncias
+I18N_LANG_S_MANUAL = Manual t&eacute;cnico
+I18N_LANG_S_MASTERTHESIS = Tese de mestrado
+I18N_LANG_S_MISC = 'Documentos diverso'
+I18N_LANG_S_PHDTHESIS = Tese de doutoramento
+I18N_LANG_S_PROCEEDINGS = Actas de confer&ecirc;ncia
+I18N_LANG_S_TECHREPORT = Relat&oacute;rio t&eacute;cnico
+I18N_LANG_S_UNPUBLISHED = N&atilde;o publicado
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.HTMLGen b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.HTMLGen
new file mode 100644
index 0000000000..86f4a9b2e5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.HTMLGen
@@ -0,0 +1,56 @@
+# Portuguese support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_ALL_ELEMENTS = Todos os Elementos
+I18N_LANG_ARTICLESINSAMEDOMAINS = Documentos nos mesmos dom&iacute;nios
+I18N_LANG_FIELD_BIBTEX_VERBATIM = C&oacute;digo BibTeX
+I18N_LANG_FIELD_XML_VERBATIM = C&oacute;digo XML
+I18N_LANG_DEFAULT_TITLE = Bibliografia
+I18N_LANG_DOMAIN_TREE = &Aacute;rvore de dom&iacute;nios
+I18N_LANG_DOMAINS = Dom&iacute;nios
+I18N_LANG_ENTRY_TYPE_TREE = Lista hier&aacute;rquiaca por tipo de entrada
+I18N_LANG_FRAME_TITLE_AUTHORS = Autores
+I18N_LANG_FRAME_TITLE_TYPES = Tipos
+I18N_LANG_FRAMES = <em>Frames</em>
+I18N_LANG_INDEX = &Iacute;ndice
+I18N_LANG_INDEX_COMMENT_ARTICLE = artigo
+I18N_LANG_INDEX_COMMENT_AUTHOR = autor
+I18N_LANG_INDEX_COMMENT_BOOKTITLE = T&iacute;tulo de livro
+I18N_LANG_INDEX_COMMENT_EDITOR = editor
+I18N_LANG_INDEX_COMMENT_HOWPUBLISHED = meio de publica&ccedil;&atilde;o
+I18N_LANG_INDEX_COMMENT_INSTITUTION = institui&ccdeil;&atilde;o
+I18N_LANG_INDEX_COMMENT_PUBLISHER = editor
+I18N_LANG_INDEX_COMMENT_SCHOOL = escola
+I18N_LANG_INDEX_COMMENT_TITLE = t&iacute;tulo
+I18N_LANG_NEXT = Pr&oacute;ximo
+I18N_LANG_NO_DATE = N&atilde;o datado
+I18N_LANG_NO_FRAME = Sem <em>Frames</em>
+I18N_LANG_NO_FRAME_ALERT = <H2>Alerta de Frames</H2>\
+ <P>Este documento foi concebido para ser \
+ visualizado usando a funcionalidade \
+ de <en>frames</em>. A visualiza&ccedil,&atilde;o desta \
+ mensagem indica que est&aacute; a usar um <em>browser</em> \
+ que n&atilde;o suport <em>frames</em>.<BR>\
+ <em>Link</em> para uma <A HREF="#1">vers&atilde;o \
+ sem <em>frames</em></A>.<BR>#2
+I18N_LANG_OVERVIEW = P&aacute;gina&nbsp;principal
+I18N_LANG_PREV = Anterior
+I18N_LANG_TREE = &Aacute;rvore
+I18N_LANG_SMALL_IN = em:&nbsp;#1
+I18N_LANG_SUBMIT_BUG = Submeter um relat&oacute;rio de erro
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.Theme.Dyna b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.Theme.Dyna
new file mode 100644
index 0000000000..bf372b5d5b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Portuguese.Theme.Dyna
@@ -0,0 +1,22 @@
+# Portuguese support for the Dyna theme.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_THEME_SUMMARY_BAR = SUM&Aacute;RIO: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_DETAIL_BAR = DETALHE: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_TREE_ROOT = Raiz
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish
new file mode 100644
index 0000000000..752bafbafa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish
@@ -0,0 +1,87 @@
+# Spanish support for the generators.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+# Sebastian Rodriguez <sebastian.rodriguez@utbm.fr>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_BIB2HTML_COPYRIGHT = Este documento fue generado por #1.<BR>\
+ Copyright &copy; {{*get_final_copyright}} #2 (Bajo #3)
+I18N_LANG_DEFAULT_TITLE = BibTeX
+I18N_LANG_DOCUMENTS = Documentos
+I18N_LANG_FIELD_ADDRESS = Direcci&oacute;n
+I18N_LANG_FIELD_ADSURL = Acoplamiento al ADS
+I18N_LANG_FIELD_ABSTRACT = Resumen
+I18N_LANG_FIELD_ABSTRACT_KEYWORDS = Resumen y Palabras Claves
+I18N_LANG_FIELD_ANNOTATION = Comentario
+I18N_LANG_FIELD_AUTHORS = Autor(es)
+I18N_LANG_FIELD_CHAPTER = Capitulo de
+I18N_LANG_FIELD_DATE = Fecha
+I18N_LANG_FIELD_DOI = Documento en Internet
+I18N_LANG_FIELD_DOWNLOAD = Descargar el articulo completo: #1
+I18N_LANG_FIELD_EDITION = Edici&oacute;n
+I18N_LANG_FIELD_EDITORS = Redactor en Jefe
+I18N_LANG_FIELD_HOWPUBLISHED = How published
+I18N_LANG_FIELD_IN = En
+I18N_LANG_FIELD_INSTITUTION = Instituci&oacute;n
+I18N_LANG_FIELD_ISBN = N&uacute;mero ISBN
+I18N_LANG_FIELD_ISSN = N&uacute;mero ISSN
+I18N_LANG_FIELD_JOURNAL = Revista
+I18N_LANG_FIELD_KEYWORDS = <strong>Palabras claves</strong>: #1
+I18N_LANG_FIELD_KEYWORDS_TITLE = Palabras claves
+I18N_LANG_FIELD_NOTE = Nota
+I18N_LANG_FIELD_NUMBER = N&uacute;mero
+I18N_LANG_FIELD_ORGANIZATION = Organizaci&oacute;n
+I18N_LANG_FIELD_PAGES = P&aacute;gina(s)
+I18N_LANG_FIELD_PDFFILE = PDF
+I18N_LANG_FIELD_PUBLISHER = Editor
+I18N_LANG_FIELD_READERS = Lectore(s)
+I18N_LANG_FIELD_SCHOOL = Escuela
+I18N_LANG_FIELD_SERIES = Serie
+I18N_LANG_FIELD_TITLE = T&iacute;tulo
+I18N_LANG_FIELD_TYPE = Tipo
+I18N_LANG_FIELD_URL = URL
+I18N_LANG_FIELD_VOLUME = Volumen
+I18N_LANG_FIELD_YEAR = A&ntilde;o
+I18N_LANG_FORMAT_NAME = l{ (v)}{ f.}{, j}
+I18N_LANG_FORMAT_NAMES = { y }{, }
+I18N_LANG_KEYWORDS = Palabras claves
+I18N_LANG_P_ARTICLE = Articulos
+I18N_LANG_P_BOOK = Libros
+I18N_LANG_P_BOOKLET = Libros Sin Sponsord
+I18N_LANG_P_INBOOK = Partes de Libros
+I18N_LANG_P_INCOLLECTION = En colecci&oacute;n
+I18N_LANG_P_INPROCEEDINGS = En proceedings
+I18N_LANG_P_MANUAL = Manuales T&eacute;cnicos
+I18N_LANG_P_MASTERTHESIS = Tesis de Master
+I18N_LANG_P_MISC = 'Documentos miscel&aacute;neos'
+I18N_LANG_P_PHDTHESIS = Tesis Doctorales
+I18N_LANG_P_PROCEEDINGS = Conference proceedings
+I18N_LANG_P_TECHREPORT = Reportes T&eacute;cnicos
+I18N_LANG_P_UNPUBLISHED = In&eacute;dito
+I18N_LANG_S_ARTICLE = Articulo
+I18N_LANG_S_BOOK = Libro
+I18N_LANG_S_BOOKLET = Not-sponsored book
+I18N_LANG_S_INBOOK = Parte de Libro
+I18N_LANG_S_INCOLLECTION = En una colecci&oacute;n
+I18N_LANG_S_INPROCEEDINGS = En proceedings
+I18N_LANG_S_MANUAL = Manual T&eacute;cnico
+I18N_LANG_S_MASTERTHESIS = T&eacute;sis de Master
+I18N_LANG_S_MISC = 'Documento Miscelaneo'
+I18N_LANG_S_PHDTHESIS = T&eacute;sis Doctoral
+I18N_LANG_S_PROCEEDINGS = Conference proceedings
+I18N_LANG_S_TECHREPORT = Reporte T&eacute;cnico
+I18N_LANG_S_UNPUBLISHED = In&eacute;dito
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.HTMLGen b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.HTMLGen
new file mode 100644
index 0000000000..5b11ef3f82
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.HTMLGen
@@ -0,0 +1,55 @@
+# Spanish support for the generator HTMLGen.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+# Sebastian Rodriguez <sebastian.rodriguez@utbm.fr>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_ALL_ELEMENTS = Todos los Elemnetos
+I18N_LANG_ARTICLESINSAMEDOMAINS = Documentos en el mismo dominio
+I18N_LANG_FIELD_BIBTEX_VERBATIM = BibTeX
+I18N_LANG_FIELD_XML_VERBATIM = XML
+I18N_LANG_DEFAULT_TITLE = Bibliograf&iacute;a
+I18N_LANG_DOMAIN_TREE = Domain Tree
+I18N_LANG_DOMAINS = Dominios
+I18N_LANG_ENTRY_TYPE_TREE = Lista por tipos de Entada
+I18N_LANG_FRAME_TITLE_AUTHORS = Autores
+I18N_LANG_FRAME_TITLE_TYPES = Tipos
+I18N_LANG_FRAMES = Frames
+I18N_LANG_INDEX = Indice
+I18N_LANG_INDEX_COMMENT_ARTICLE = artiuclo
+I18N_LANG_INDEX_COMMENT_AUTHOR = autor
+I18N_LANG_INDEX_COMMENT_BOOKTITLE = titulo del libro
+I18N_LANG_INDEX_COMMENT_EDITOR = Redactor jefe
+I18N_LANG_INDEX_COMMENT_HOWPUBLISHED = forma de publicaci&oacute;n
+I18N_LANG_INDEX_COMMENT_INSTITUTION = instituci&oacute;n
+I18N_LANG_INDEX_COMMENT_PUBLISHER = Editor
+I18N_LANG_INDEX_COMMENT_SCHOOL = escuela
+I18N_LANG_INDEX_COMMENT_TITLE = titulo
+I18N_LANG_NEXT = Siguiente
+I18N_LANG_NO_DATE = Sin Fecha
+I18N_LANG_NO_FRAME = No Frame
+I18N_LANG_NO_FRAME_ALERT = <H2>Frame Alert</H2>\
+ <P>Este documento fue dise&ntilde;ando para ser \
+ visualizado usando Frames. Si esta viendo este \
+ mensaje, esta usando un web browser sin soporte \
+ para los Frames.<BR>Vinculo a <A HREF="#1">la \
+ versi&oacute;n sin Frames.</A>.<BR>#2
+I18N_LANG_OVERVIEW = Visi&oacute;n General
+I18N_LANG_PREV = Anterior
+I18N_LANG_TREE = Tree
+I18N_LANG_SMALL_IN = en:&nbsp;#1
+I18N_LANG_SUBMIT_BUG = Reportar un bug
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.Theme.Dyna b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.Theme.Dyna
new file mode 100644
index 0000000000..6db9ef0498
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Lang/Spanish.Theme.Dyna
@@ -0,0 +1,23 @@
+# Spanish support for the Dyna theme.
+#
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+# Sebastian Rodriguez <sebastian.rodriguez@utbm.fr>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+I18N_LANG_THEME_SUMMARY_BAR = RESUMEN: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_DETAIL_BAR = DETALLE: &nbsp;#1&nbsp;|&nbsp;#2&nbsp;|&nbsp;#3
+I18N_LANG_THEME_TREE_ROOT = Raíz
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/LangManager.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/LangManager.pm
new file mode 100644
index 0000000000..03b67db383
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/LangManager.pm
@@ -0,0 +1,382 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::LangManager - A Language support for the generators
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::LangManager ;
+
+my $gen = Bib2HTML::Generator::LangManager->new( names ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::LangManager is a Perl module, which proposes
+a generic language support for all the generators.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::LangManager;
+
+ my $gen = Bib2HTML::Generator::LangManager->new( [ 'English_HTMLGen',
+ 'English' ] ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * names (array of strings)
+
+is the ordred list of the desired language files.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in LangManager.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::LangManager;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+
+use Carp ;
+use File::Basename ;
+use File::Spec ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::Generator::Lang ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of language support
+my $VERSION = "4.0" ;
+
+# Default language
+my $DEFAULT_LANGUAGE = "English";
+
+#------------------------------------------------------
+#
+# Static functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * set_default_language()
+
+Set the default language.
+Takes 1 arg:
+
+=over
+
+=item * default (string)
+
+is the name of the default language.
+
+=back
+
+=cut
+sub set_default_lang($) {
+ $DEFAULT_LANGUAGE = "$_[0]";
+}
+
+=pod
+
+=item * display_supported_languages()
+
+Display the list of supported languages.
+Takes 2 args:
+
+=over
+
+=item * perldir (string)
+
+is the path to the directory where the Perl packages
+are stored.
+
+=item * default (string)
+
+is the name of the default language
+
+=back
+
+=cut
+sub display_supported_languages($$) {
+ my $path = $_[0] || confess( 'you must specify the pm path' ) ;
+ my $default = $_[1] || '' ;
+ my @pack = split /\:\:/, __PACKAGE__ ;
+ pop @pack ;
+ push @pack, 'Lang' ;
+ @pack = ( File::Spec->splitdir($path), @pack ) ;
+ my $glob = File::Spec->catfile(@pack, '*');
+ $glob =~ s/ /\\ /g;
+ foreach my $file ( glob($glob) ) {
+ my $name = basename($file) ;
+ if ( ( $name !~ /[._-][a-zA-Z0-9]+Gen$/ ) &&
+ ( $name !~ /\.perl$/ ) && # For Perl scripts
+ ( $name !~ /\.pl$/ ) && # For Perl scripts
+ ( $name !~ /\.pm$/ ) && # For Perl modules
+ ( $name !~ /~$/ ) ) { # For backup files
+ print join( '',
+ "$name",
+ ( $default && ( $default eq $name ) ) ?
+ " (default)" : "",
+ "\n" ) ;
+ }
+ }
+}
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ # Compute the list of the desired languages
+ my @desired_langs;
+ if (isarray($_[0])) {
+ @desired_langs = @{$_[0]};
+ }
+ else {
+ @desired_langs = ( $_[0] );
+ }
+ push @desired_langs, "$DEFAULT_LANGUAGE";
+
+ # Build the directory filename where are located the
+ # language files
+ my @pack = split /\:\:/, __PACKAGE__ ;
+ pop @pack ;
+ push @pack, 'Lang' ;
+
+ # Get the language directory
+ my $directory_path = undef;
+ foreach my $path (@INC) {
+ my $fullpath = File::Spec->catfile($path,@pack);
+ if (-d "$fullpath") {
+ $directory_path = $path;
+ last;
+ }
+ }
+
+ @pack = ( File::Spec->splitdir($directory_path), @pack);
+
+ # Search for and load the desired languages
+ my @lang_objs = ();
+ my @real_desired_langs = ();
+ foreach my $desired_lang (@desired_langs) {
+ $desired_lang =~ s/[-_.=,:;!~\s]/./g;
+ my $filename = File::Spec->catfile(@pack,$desired_lang);
+ if (-r "$filename") {
+ my $obj = Bib2HTML::Generator::Lang->new($desired_lang,"$filename");
+ my $found = undef;
+ foreach my $ex_lang (@lang_objs) {
+ if ($ex_lang->getname() eq $desired_lang) {
+ $found = 1;
+ last;
+ }
+ }
+ if (!$found) {
+ push @lang_objs, $obj;
+ push @real_desired_langs,$desired_lang;
+ }
+ }
+ elsif (Bib2HTML::General::Verbose::currentlevel()>=2) {
+ Bib2HTML::General::Error::syswarm( "'$filename' language file was not found or can't be red\n" );
+ }
+ }
+
+ # Check for one language found
+ Bib2HTML::General::Error::syserr( "Unable to find the language class\n" ) unless (@lang_objs);
+
+ my $self = { 'langs' => (@lang_objs ? \@lang_objs : []),
+ 'desired_langs' => \@real_desired_langs,
+ 'lang_directory' => \@pack,
+ } ;
+
+ bless( $self, $class );
+ return $self;
+}
+
+=pod
+
+=item * registerLang($)
+
+Register a language file.
+The name of the new language files must respect the following pattern:
+<lang_dir>/<lang_name>.<extension>
+where <lang_dir> is the predefined directory where language files
+are stored, <lang_name> is the name of the language, and
+<extension> is a string specified to this function.
+Takes at least 1 arg:
+
+=over
+
+=item * extension (string)
+
+is the extension of the language file.
+
+=back
+
+=cut
+sub registerLang($) {
+ my $self = shift;
+ my $extension = shift;
+
+ foreach my $desired_lang (@{$self->{'desired_langs'}}) {
+ $desired_lang =~ s/[-_.=,:;!~\s]/./g;
+ my $realname = $desired_lang.".".$extension;
+ my $filename = File::Spec->catfile(@{$self->{'lang_directory'}},"$realname");
+ if (-r "$filename") {
+ my $obj = Bib2HTML::Generator::Lang->new("$realname","$filename");
+
+ my $found = 0;
+ foreach my $ex_lang (@{$self->{'langs'}}) {
+ if ($ex_lang->getname() eq $realname) {
+ $found = 1;
+ last;
+ }
+ }
+
+ if (!$found) {
+ unshift @{$self->{'langs'}}, $obj;
+ unshift @{$self->{'desired_langs'}}, $realname;
+ }
+ }
+ }
+}
+
+#------------------------------------------------------
+#
+# Getters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get()
+
+Replies the specified string according to the language.
+Takes at least 1 arg:
+
+=over
+
+=item * id (string)
+
+is the id of the string.
+
+=item * param1 (string)
+
+is a string which must replace the string "#1" in the language definition.
+
+=item * param2 (string)
+
+is a string which must replace the string "#2" in the language definition.
+
+=item ...
+
+=back
+
+=cut
+sub get($) : method {
+ my $self = shift ;
+ my $id = $_[0] || confess( 'you must supply the id' ) ;
+
+ my $lgs = '';
+
+ foreach my $l (@{$self->{'langs'}}) {
+ my $n = $l->_get_noerror(@_);
+ if ($n) {
+ return $n;
+ }
+ if ($lgs) {
+ $lgs .= ", ";
+ }
+ $lgs .= "'".$l->{'name'}."'";
+ }
+
+ Bib2HTML::General::Error::syserr( "the string id '$id' is not defined ".
+ "for all the current languages: $lgs" );
+ return undef;
+}
+
+=pod
+
+=item * getname()
+
+Replies the name of the current language.
+
+=cut
+sub getname() : method {
+ my $self = shift ;
+ foreach my $l (@{$self->{'langs'}}) {
+ my $n = $l->getname() ;
+ if ($n !~ /_[a-zA-Z0-9]+Gen$/) {
+ return $n;
+ }
+ }
+ return "unknow";
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SQLGen.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SQLGen.pm
new file mode 100644
index 0000000000..2a2e80f2cd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SQLGen.pm
@@ -0,0 +1,746 @@
+# Copyright (C) 2004-07 Stephane Galland <galland@arakhne.org>
+# Copyright (C) 2011 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::SQLGen - A basic SQL generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::SQLGen ;
+
+my $gen = Bib2HTML::Generator::SQLGen->new( content, output, info, titles,
+ lang, theme, params ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::SQLGen is a Perl module, which permits to
+generate SQL scripts for the BibTeX database.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::SQLGen;
+
+ my $gen = Bib2HTML::Generator::SQLGen->new( { }, "./bib.sql",
+ { 'BIB2HTML_VERSION' => "0.1",
+ },
+ { 'SHORT' => "This is the title",
+ 'LONG' => "This is the title",
+ },
+ "English",
+ "Simple", ""
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+see AbstractGenerator help.
+
+=item * output (string)
+
+see AbstractGenerator help.
+
+=item * bib2html_data (hash)
+
+see AbstractGenerator help.
+
+=item * titles (hash)
+
+see AbstractGenerator help.
+
+=item * lang (string)
+
+see AbstractGenerator help.
+
+=item * theme (string)
+
+is the name of the theme to use
+
+=item * show_bibtex (boolean)
+
+indicates if this parser must generate a verbatim of the BibTeX code
+
+=item * params (optional array)
+
+is the set of parameters passed to the generator.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in SQLGen.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::SQLGen;
+
+@ISA = ('Bib2HTML::Generator::AbstractGenerator');
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use constant TRUE => (1==1);
+use constant FALSE => (1==0);
+use Carp ;
+use File::Spec ;
+use File::Basename ;
+
+use Bib2HTML::Generator::AbstractGenerator;
+use Bib2HTML::General::Misc;
+use Bib2HTML::General::Error;
+use Bib2HTML::General::HTML;
+use Bib2HTML::General::Encode;
+use Bib2HTML::Translator::BibTeXName;
+
+use Bib2HTML::Generator::SqlEngine::MySql;
+use Bib2HTML::Generator::SqlEngine::PgSql;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this generator
+my $VERSION = "3.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my @langs = ();
+ if (isarray($_[4])) {
+ foreach my $l (@{$_[4]}) {
+ if ($l !~ /_[a-zA-Z0-9]+Gen$/) {
+ push @langs, $l."_SQLGen";
+ }
+ push @langs, $l;
+ }
+ }
+ else {
+ @langs = ( $_[4] );
+ if ($_[4] !~ /_[a-zA-Z0-9]+Gen$/) {
+ unshift @langs, $_[4]."_SQLGen";
+ }
+ }
+
+ my $self = $class->SUPER::new($_[0], #content
+ $_[1], #output
+ $_[2], #bib2html info
+ $_[3], #titles
+ \@langs, #lang
+ $_[6], #show bibtex
+ $_[7], #params
+ ) ;
+
+ $self->{'sql_identifiers'}{'identity'} = 0;
+ $self->{'current_sql_engine_instance'} = undef;
+
+ bless( $self, $class );
+
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Generation parameters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * save_generator_parameter()
+
+Replies if the specified generator parameter was supported.
+This function was called each time a generator parameter was
+given to this generator. By default, simply update the
+given parameter value (second parameter).
+You could do some stuff before
+saving (splitting...). Replies false is the parameter was
+not recognized. Don't forget to call inherited functions.
+Takes 2 args:
+
+=over
+
+=item * param_name (string)
+
+is the name of the parameter.
+
+=item * param_value (byref string)
+
+is the value of the parameter.
+
+=back
+
+=cut
+sub save_generator_parameter($$) {
+ my $self = shift ;
+ if ( ( $_[0] eq 'sql-encoding' ) ) {
+ # will be saved by PARENT::new
+ return 1 ;
+ }
+ elsif ( ( $_[0] eq 'sql-engine' ) ) {
+ # will be saved by PARENT::new
+ return 1 ;
+ }
+ else {
+ return $self->SUPER::save_generator_parameter($_[0],$_[1]) ;
+ }
+}
+
+=pod
+
+=item * display_supported_generator_params()
+
+Display the list of supported generator parameters.
+
+=cut
+sub display_supported_generator_params() {
+ my $self = shift ;
+ $self->SUPER::display_supported_generator_params() ;
+
+ $self->show_supported_param('sql-encoding',
+ 'String, the character encoding used in the SQL script '.
+ '("UTF8", "ISO-8859-1"...).' );
+ $self->show_supported_param('sql-engine',
+ 'String, the name of the SQL engine for which the '.
+ 'SQL script should be generated '.
+ '("mysql", "pgsql"...).' );
+}
+
+#------------------------------------------------------
+#
+# Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * pre_processing()
+
+Pre_processing.
+
+=cut
+sub pre_processing() : method {
+ my $self = shift ;
+
+ # Set the HTML encoding
+ if (!$self->{'GENERATOR_PARAMS'}{'sql-encoding'}) {
+ $self->{'GENERATOR_PARAMS'}{'sql-encoding'} = get_default_encoding();
+ }
+ set_default_encoding($self->{'GENERATOR_PARAMS'}{'sql-encoding'});
+
+ # Set the default SQL engine
+ if (!$self->{'GENERATOR_PARAMS'}{'sql-engine'}) {
+ $self->{'GENERATOR_PARAMS'}{'sql-engine'} = "mysql";
+ }
+ else {
+ $self->{'GENERATOR_PARAMS'}{'sql-engine'} = lc($self->{'GENERATOR_PARAMS'}{'sql-engine'});
+ }
+
+ if ($self->{'GENERATOR_PARAMS'}{'sql-engine'} eq 'mysql') {
+ $self->{'current_sql_engine_instance'} = new Bib2HTML::Generator::SqlEngine::MySql();
+ }
+ elsif ($self->{'GENERATOR_PARAMS'}{'sql-engine'} eq 'pgsql') {
+ $self->{'current_sql_engine_instance'} = new Bib2HTML::Generator::SqlEngine::PgSql();
+ }
+ else {
+ Bib2HTML::General::Error::syserr("unsupported SQL engine: ".$self->{'GENERATOR_PARAMS'}{'sql-engine'});
+ }
+
+ # Call inherited generation method
+ $self->SUPER::pre_processing() ;
+}
+
+=pod
+
+=item * do_processing()
+
+Main processing.
+
+=cut
+sub do_processing() : method {
+ my $self = shift ;
+
+ # Call inherited generation method
+ $self->SUPER::do_processing() ;
+
+ # Generates each part of the document
+ my $t = '' ;
+
+ # Generates the schema of the database
+ $self->create_SQLSCHEMA($t) ;
+
+ # Generates the content for each entries
+ $self->create_SQLENTRIES($t) ;
+
+ # Create file
+ $self->create_FILE($t) ;
+}
+
+
+sub quotesql($) {
+ my $self = shift;
+ my $v = shift;
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+ return $sqlEngine->quotesql($v);
+}
+
+
+=pod
+
+=item * create_SQLSCHEMA()
+
+Generates the SQL schema.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_SQLSCHEMA($) : method {
+ my $self = shift ;
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+ $_[0] .= $sqlEngine->createSchema();
+}
+
+=pod
+
+=item * create_SQLENTRIES()
+
+Generates the SQL pages for each entry
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_SQLENTRIES($) : method {
+ my $self = shift ;
+ my @entries = $self->get_all_entries_ayt() ;
+ my $i = $#entries ;
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+
+ while ( $i >= 0 ) {
+ # Compute entry constants
+ my $type = $self->{'CONTENT'}{'entries'}{$entries[$i]}{'type'} ;
+ my $fields = $self->{'CONTENT'}{'entries'}{$entries[$i]}{'fields'};
+ my $entry = '';
+
+ # Insert the entry's type
+ if ((!$self->{'GENERATION'}{'types'})||
+ (!strinarray($type,$self->{'GENERATION'}{'types'}))) {
+ $entry .= $sqlEngine->insertInto(
+ 'bibtex_entrytype',
+ { 'type' => $type });
+ push @{$self->{'GENERATION'}{'types'}}, "$type";
+ }
+
+ # Insert the entry
+ $entry .= $sqlEngine->insertInto(
+ 'bibtex_entry',
+ { 'entry_key' => $entries[$i],
+ 'year' => $fields->{'year'}||0,
+ 'title' => $fields->{'title'}||'',
+ 'type' => $type});
+ delete $fields->{'year'};
+ delete $fields->{'title'};
+
+ if (exists $fields->{'author'}) {
+ $self->create_SQLAUTHORS($entries[$i],$fields->{'author'},$entry);
+ delete $fields->{'author'};
+ }
+
+ if (exists $fields->{'editor'}) {
+ $self->create_SQLEDITORS($entries[$i],$fields->{'editor'},$entry);
+ delete $fields->{'editor'};
+ }
+
+ if ((exists $fields->{'domain'})||
+ (exists $fields->{'nddomain'})||
+ (exists $fields->{'rddomain'})||
+ (exists $fields->{'domains'})) {
+ $self->create_SQLDOMAINS($entries[$i],
+ join(':',
+ ($fields->{'domain'}||''),
+ ($fields->{'nddomain'}||''),
+ ($fields->{'rddomain'}||''),
+ ($fields->{'domains'}||'')),
+ $entry);
+ delete $fields->{'domain'};
+ delete $fields->{'nddomain'};
+ delete $fields->{'rddomain'};
+ delete $fields->{'domains'};
+ }
+
+ # Fields
+ foreach my $field (keys %{$fields}) {
+ $self->create_SQLFIELD($entries[$i],
+ "$field", $fields->{"$field"},
+ $entry);
+ }
+
+ $_[0] .= $entry ;
+ $i -- ;
+ }
+}
+
+=pod
+
+=item * create_SQLAUTHORS()
+
+Generates the SQL pages for the authors
+Takes 3 args:
+
+=over
+
+=item * entry_key (string)
+
+is the BibTeX key of the entry.
+
+=item * authors (string)
+
+is the list of authors.
+
+=item * content (string)
+
+is the content to fill.
+
+=back
+
+=cut
+sub create_SQLAUTHORS($$$) : method {
+ my $self = shift;
+ my $entry_key = shift;
+ my $sauthors = shift;
+
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+ my $translator = Bib2HTML::Translator::BibTeXName->new();
+ my @names = $translator->splitnames($sauthors);
+ my $idxauthor = 0;
+
+ my %insertedAuthors = ();
+
+ for(my $idxname=0; $idxname<@names; $idxname++) {
+ my $name = $names[$idxname];
+ if (!$name->{'et al'}) {
+ my $author_key = html_lc($translator->formatname($name,'l,i.'));
+
+ my $id;
+ if ((!$self->{'GENERATION'}{'authors'})||
+ (!$self->{'GENERATION'}{'authors'}{"sqlid_$author_key"})) {
+ $self->{'sql_identifiers'}{'identity'}++;
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_identity',
+ { 'identifier' => $self->{'sql_identifiers'}{'identity'},
+ 'name' => translate_html_entities($name->{'last'}),
+ 'firstname' => translate_html_entities($name->{'first'}),
+ 'von' => translate_html_entities($name->{'von'}),
+ 'junior' => translate_html_entities($name->{'jr'})});
+ $self->{'GENERATION'}{'authors'}{"sqlid_$author_key"} = $self->{'sql_identifiers'}{'identity'};
+ $id = $self->{'sql_identifiers'}{'identity'};
+ }
+ else {
+ $id = $self->{'GENERATION'}{'authors'}{"sqlid_$author_key"};
+ }
+
+ my $etal = ((($idxname+1)<@names)&&($names[$idxname+1]->{'et al'}));
+
+ if ($insertedAuthors{"||$entry_key||$id||"}) {
+ Bib2HTML::General::Error::syswarm("Duplicate author '$id' for entry '$entry_key'");
+ }
+ else {
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_authors',
+ { 'entry_key' => $entry_key,
+ 'author_id' => $id,
+ 'order_id' => $idxauthor,
+ 'etal' => ($etal ? "true" : "false")});
+ $insertedAuthors{"||$entry_key||$id||"} = TRUE;
+ $idxauthor++;
+ }
+ }
+ }
+}
+
+=pod
+
+=item * create_SQLEDITORS()
+
+Generates the SQL pages for the editors
+Takes 3 args:
+
+=over
+
+=item * entry_key (string)
+
+is the BibTeX key of the entry.
+
+=item * editors (string)
+
+is the list of editors.
+
+=item * content (string)
+
+is the content to fill.
+
+=back
+
+=cut
+sub create_SQLEDITORS($$$) : method {
+ my $self = shift;
+ my $entry_key = shift;
+ my $seditors = shift;
+
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+ my $translator = Bib2HTML::Translator::BibTeXName->new();
+ my @names = $translator->splitnames($seditors);
+ my $idxeditor = 0;
+
+ for(my $idxname=0; $idxname<@names; $idxname++) {
+ my $name = $names[$idxname];
+ if (!$name->{'et al'}) {
+ my $editor_key = html_lc($translator->formatname($name,'l,i.'));
+
+ my $id;
+ if ((!$self->{'GENERATION'}{'authors'})||
+ (!$self->{'GENERATION'}{'authors'}{"sqlid_$editor_key"})) {
+ $self->{'sql_identifiers'}{'identity'}++;
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_identity',
+ { 'identifier' => $self->{'sql_identifiers'}{'identity'},
+ 'name' => translate_html_entities($name->{'last'}),
+ 'firstname' => translate_html_entities($name->{'first'}),
+ 'von' => translate_html_entities($name->{'von'}),
+ 'junior' => translate_html_entities($name->{'jr'})});
+ $self->{'GENERATION'}{'authors'}{"sqlid_$editor_key"} = $self->{'sql_identifiers'}{'identity'};
+ $id = $self->{'sql_identifiers'}{'identity'};
+ }
+ else {
+ $id = $self->{'GENERATION'}{'authors'}{"sqlid_$editor_key"};
+ }
+
+ my $etal = ((($idxname+1)<@names)&&($names[$idxname+1]->{'et al'}));
+
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_editors',
+ { 'entry_key' => $entry_key,
+ 'editor_id' => $id,
+ 'order_id' => $idxeditor,
+ 'etal' => ($etal ? "true" : "false")});
+
+ $idxeditor++;
+ }
+ }
+}
+
+=pod
+
+=item * create_SQLDOMAINS()
+
+Generates the SQL pages for the entry's domains
+Takes 3 args:
+
+=over
+
+=item * entry_key (string)
+
+is the BibTeX key of the entry.
+
+=item * domains (string)
+
+is the list of domains separated by ':'.
+
+=item * content (string)
+
+is the content to fill.
+
+=back
+
+=cut
+sub create_SQLDOMAINS($$$) : method {
+ my $self = shift;
+ my $entry_key = shift;
+ my $sdomains = shift;
+
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+ my @domains = split(/\s*:\s*/,$sdomains);
+
+ foreach my $domain (@domains) {
+ $domain =~ s/^\s+//;
+ $domain =~ s/\s+$//;
+ if ($domain) {
+ my $domain_key = $domain;
+ $domain_key =~ s/\s//g;
+ $domain_key = html_lc($domain_key);
+
+ my $id;
+ if ((!$self->{'GENERATION'}{'domains'})||
+ (!$self->{'GENERATION'}{'domains'}{"$domain_key"})) {
+ if (!$self->{'GENERATION'}{'domains'}) {
+ $id = 1;
+ }
+ else {
+ $id = %{$self->{'GENERATION'}{'domains'}} + 1;
+ }
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_domain',
+ { 'identifier' => $id,
+ 'name' => translate_html_entities($domain)});
+ $self->{'GENERATION'}{'domains'}{"$domain_key"} = $id;
+ }
+ else {
+ $id = $self->{'GENERATION'}{'domains'}{"$domain_key"};
+ }
+
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_entrydomain',
+ { 'entry_key' => $entry_key,
+ 'domain_id' => $id});
+ }
+ }
+}
+
+=pod
+
+=item * create_SQLFIELD()
+
+Generates the SQL pages for the entry's field
+Takes 4 args:
+
+=over
+
+=item * entry_key (string)
+
+is the BibTeX key of the entry.
+
+=item * field_name (string)
+
+is the name of the field to add.
+
+=item * field_value (string)
+
+is the value of the field to add.
+
+=item * content (string)
+
+is the content to fill.
+
+=back
+
+=cut
+sub create_SQLFIELD($$$$) : method {
+ my $self = shift;
+ my $entry_key = shift;
+ my $field_name = shift;
+ my $field_value = shift;
+
+ my $sqlEngine = $self->{'current_sql_engine_instance'};
+
+ if ($self->{'GENERATION'}{'field_id'}) {
+ $self->{'GENERATION'}{'field_id'}++;
+ }
+ else {
+ $self->{'GENERATION'}{'field_id'} = 1;
+ }
+
+ $_[0] .= $sqlEngine->insertInto(
+ 'bibtex_field',
+ { 'identifier' => $self->{'GENERATION'}{'field_id'},
+ 'entry_key' => $entry_key,
+ 'name' => translate_html_entities("$field_name"),
+ 'value' => translate_html_entities("$field_value")});
+}
+
+=pod
+
+=item * create_FILE
+
+Creates the SQL file.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content of the SQL file.
+
+=back
+
+=cut
+sub create_FILE($) : method {
+ my $self = shift ;
+ Bib2HTML::General::Verbose::two( "Writing ".$self->{'TARGET'}."..." ) ;
+
+ my $writer = $self->get_stream_writer();
+
+ $writer->openstream($self->{'TARGET'});
+ $writer->out($_[0]||'') ;
+ $writer->closestream() ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2004-07 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+(c) Copyright 2011 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/MySql.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/MySql.pm
new file mode 100644
index 0000000000..d899321740
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/MySql.pm
@@ -0,0 +1,214 @@
+# Copyright (C) 2011 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::SqlEngine::MySql - SQL Generator utilities for MySQL
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::SqlEngine::MySql;
+
+@ISA = ('');
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Carp ;
+
+use Bib2HTML::General::Error;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this file
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless( $self, $class );
+ return $self;
+}
+
+sub quotesql($) : method {
+ my $self = shift;
+ my $s = $_[0];
+ $s =~ s/\'/\\\'/g;
+ return $s;
+}
+
+
+sub createSchema() : method {
+ my $self = shift;
+ my $schema = '';
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entrytype;",
+ "CREATE TABLE bibtex_entrytype (",
+ " type varchar(50) NOT NULL,",
+ " PRIMARY KEY(type)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_domain;",
+ "CREATE TABLE bibtex_domain (",
+ " identifier int(10) NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " PRIMARY KEY(identifier)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entry;",
+ "CREATE TABLE bibtex_entry (",
+ " entry_key varchar(50) NOT NULL,",
+ " year int(5) NOT NULL default 1900,",
+ " title text NOT NULL,",
+ " type varchar(50) NOT NULL,",
+ " crossref varchar(50),",
+ " PRIMARY KEY(entry_key),",
+ " FOREIGN KEY(type) REFERENCES bibtex_entrytype(type) ON DELETE CASCADE,",
+ " FOREIGN KEY(crossref) REFERENCES bibtex_entry(entry_key) ON DELETE SET NULL",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_field;",
+ "CREATE TABLE bibtex_field (",
+ " identifier int(10) NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " value text,",
+ " entry_key varchar(50) NOT NULL,",
+ " PRIMARY KEY(identifier),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_identity;",
+ "CREATE TABLE bibtex_identity (",
+ " identifier int(10) NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " firstname varchar(100) NOT NULL,",
+ " von varchar(20),",
+ " junior varchar(20),",
+ " PRIMARY KEY(identifier)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_authors;",
+ "CREATE TABLE bibtex_authors (",
+ " entry_key varchar(50) NOT NULL,",
+ " author_id int(10) NOT NULL,",
+ " order_id int(5) NOT NULL DEFAULT 1,",
+ " etal boolean NOT NULL DEFAULT false,",
+ " PRIMARY KEY(entry_key,author_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(author_id) REFERENCES bibtex_identity(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_editors;",
+ "CREATE TABLE bibtex_editors (",
+ " entry_key varchar(50) NOT NULL,",
+ " editor_id int(10) NOT NULL,",
+ " order_id int(5) NOT NULL DEFAULT 1,",
+ " etal boolean NOT NULL DEFAULT false,",
+ " PRIMARY KEY(entry_key,editor_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(editor_id) REFERENCES bibtex_identity(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entrydomain;",
+ "CREATE TABLE bibtex_entrydomain (",
+ " entry_key varchar(50) NOT NULL,",
+ " domain_id int(10) NOT NULL,",
+ " PRIMARY KEY(entry_key,domain_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(domain_id) REFERENCES bibtex_domain(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ return $schema;
+}
+
+sub insertInto($) : method {
+ my $self = shift;
+ my $table = shift || Bib2HTML::General::Error::syserr('table name parameter is mandatory');
+ my $values = shift;
+ my $query = '';
+
+ my $sqlFields = '';
+ my $sqlValues = '';
+ foreach my $field (keys %{$values}) {
+ if ($sqlFields) {
+ $sqlFields .= ',';
+ }
+ $sqlFields .= $field;
+ if ($sqlValues) {
+ $sqlValues .= ',';
+ }
+ $sqlValues .= "'";
+ $sqlValues .= $self->quotesql($values->{$field});
+ $sqlValues .= "'";
+ }
+
+ $query .= "INSERT INTO ";
+ $query .= $table;
+ $query .= ' (';
+ $query .= $sqlFields;
+ $query .= ') VALUES (';
+ $query .= $sqlValues;
+ $query .= ");\n";
+
+ return $query;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2004-07 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+(c) Copyright 2011 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/PgSql.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/PgSql.pm
new file mode 100644
index 0000000000..5560a10067
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/SqlEngine/PgSql.pm
@@ -0,0 +1,214 @@
+# Copyright (C) 2011 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::SqlEngine::PgSql - SQL Generator utilities for PostgreSQL
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::SqlEngine::PgSql;
+
+@ISA = ('');
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Carp ;
+
+use Bib2HTML::General::Error;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this file
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless( $self, $class );
+ return $self;
+}
+
+sub quotesql($) : method {
+ my $self = shift;
+ my $s = $_[0];
+ $s =~ s/\'/\\\'/g;
+ return $s;
+}
+
+
+sub createSchema() : method {
+ my $self = shift;
+ my $schema = '';
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entrytype;",
+ "CREATE TABLE bibtex_entrytype (",
+ " type varchar(50) NOT NULL,",
+ " PRIMARY KEY(type)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_domain;",
+ "CREATE TABLE bibtex_domain (",
+ " identifier integer NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " PRIMARY KEY(identifier)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entry;",
+ "CREATE TABLE bibtex_entry (",
+ " entry_key varchar(50) NOT NULL,",
+ " year integer NOT NULL default 1900,",
+ " title text NOT NULL,",
+ " type varchar(50) NOT NULL,",
+ " crossref varchar(50),",
+ " PRIMARY KEY(entry_key),",
+ " FOREIGN KEY(type) REFERENCES bibtex_entrytype(type) ON DELETE CASCADE,",
+ " FOREIGN KEY(crossref) REFERENCES bibtex_entry(entry_key) ON DELETE SET NULL",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_field;",
+ "CREATE TABLE bibtex_field (",
+ " identifier integer NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " value text,",
+ " entry_key varchar(50) NOT NULL,",
+ " PRIMARY KEY(identifier),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_identity;",
+ "CREATE TABLE bibtex_identity (",
+ " identifier integer NOT NULL,",
+ " name varchar(100) NOT NULL,",
+ " firstname varchar(100) NOT NULL,",
+ " von varchar(20),",
+ " junior varchar(20),",
+ " PRIMARY KEY(identifier)",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_authors;",
+ "CREATE TABLE bibtex_authors (",
+ " entry_key varchar(50) NOT NULL,",
+ " author_id integer NOT NULL,",
+ " order_id integer NOT NULL DEFAULT 1,",
+ " etal boolean NOT NULL DEFAULT false,",
+ " PRIMARY KEY(entry_key,author_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(author_id) REFERENCES bibtex_identity(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_editors;",
+ "CREATE TABLE bibtex_editors (",
+ " entry_key varchar(50) NOT NULL,",
+ " editor_id integer NOT NULL,",
+ " order_id integer NOT NULL DEFAULT 1,",
+ " etal boolean NOT NULL DEFAULT false,",
+ " PRIMARY KEY(entry_key,editor_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(editor_id) REFERENCES bibtex_identity(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ $schema .= join("\n",
+ "DROP TABLE IF EXISTS bibtex_entrydomain;",
+ "CREATE TABLE bibtex_entrydomain (",
+ " entry_key varchar(50) NOT NULL,",
+ " domain_id integer NOT NULL,",
+ " PRIMARY KEY(entry_key,domain_id),",
+ " FOREIGN KEY(entry_key) REFERENCES bibtex_entry(entry_key) ON DELETE CASCADE,",
+ " FOREIGN KEY(domain_id) REFERENCES bibtex_domain(identifier) ON DELETE CASCADE",
+ ");\n");
+
+ return $schema;
+}
+
+sub insertInto($) : method {
+ my $self = shift;
+ my $table = shift || Bib2HTML::General::Error::syserr('table name parameter is mandatory');
+ my $values = shift;
+ my $query = '';
+
+ my $sqlFields = '';
+ my $sqlValues = '';
+ foreach my $field (keys %{$values}) {
+ if ($sqlFields) {
+ $sqlFields .= ',';
+ }
+ $sqlFields .= $field;
+ if ($sqlValues) {
+ $sqlValues .= ',';
+ }
+ $sqlValues .= "'";
+ $sqlValues .= $self->quotesql($values->{$field});
+ $sqlValues .= "'";
+ }
+
+ $query .= "INSERT INTO ";
+ $query .= $table;
+ $query .= ' (';
+ $query .= $sqlFields;
+ $query .= ') VALUES (';
+ $query .= $sqlValues;
+ $query .= ");\n";
+
+ return $query;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2004-07 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+(c) Copyright 2011 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/StdOutWriter.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/StdOutWriter.pm
new file mode 100644
index 0000000000..fa814fb96e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/StdOutWriter.pm
@@ -0,0 +1,163 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::StdOutWriter - An output stream writer
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::StdOutWriter is a Perl module, which permits to
+output streams into the standard output.
+
+=head1 SYNOPSYS
+
+Bib2HTML::Generator::StdOutWriter->new( ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::SydOutWriter is a Perl module, which permits to
+output streams into the standard output.
+
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in StdOutWriter.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::StdOutWriter;
+
+@ISA = ('Bib2HTML::Generator::Writer');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::Generator::Writer;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of abstract generator
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new() ;
+ bless( $self, $class );
+ return $self;
+}
+
+=pod
+
+=item * openstream($)
+
+Open the output stream.
+Takes 1 param:
+
+=over
+
+=item * filename (string)
+
+is the name of the output file.
+
+=back
+
+=cut
+sub openstream($) {
+ my $self = shift;
+ my $filename = shift || confess( 'you must supply the root directory' ) ;
+ confess('output stream already opened') if ($self->{'opened'});
+ $self->{'opened'} = $filename;
+}
+
+=pod
+
+=item * out($)
+
+Put a string into the output stream.
+Takes 1 param:
+
+=over
+
+=item * str (string)
+
+is the string to output.
+
+=back
+
+=cut
+sub out($) {
+ my $self = shift;
+ my $str = shift || '';
+ print STDOUT ("$str");
+ return 1;
+}
+
+=pod
+
+=item * closestream()
+
+Close the currently opened stream.
+
+=cut
+sub closestream() {
+ my $self = shift;
+ delete $self->{'opened'};
+ return 1;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme.pm
new file mode 100644
index 0000000000..8513ec79da
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme.pm
@@ -0,0 +1,1418 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::Theme - A theme for the HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::Theme ;
+
+my $gen = Bib2HTML::Generator::Theme->new( generator,
+ bib2html,
+ target,
+ title,
+ lang ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Theme is a Perl module, which proposes
+a documentation theme for the HTML generator of bib2html.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::Theme;
+
+ my $gen = Bib2HTML::Generator::Theme->new( $generator,
+ { 'VERSION' => '0.11' },
+ './bib_output',
+ 'Title',
+ $lang ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * parent (object ref)
+
+is a reference to the current HTML generator.
+
+=item * bib2html (hash)
+
+contains some data about bib2html.
+
+=item * target (string)
+
+The directory in which the documentation must be put.
+
+=item * title (string)
+
+is the title of the documentation.
+
+=item * lang (object ref)
+
+is a reference to the language object.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Theme.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::Theme;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+
+use Carp ;
+use File::Spec ;
+
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Misc ;
+use Bib2HTML::Generator::FileWriter ;
+use Bib2HTML::Generator::StdOutWriter ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of theme
+my $VERSION = "2.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = { 'PARENT' => $_[0] || confess( 'you must supply the parent object' ),
+ 'BIB2HTML' => $_[1] || '',
+ 'TARGET_DIR' => $_[2] || confess( 'you must supply the target directory' ),
+ 'TITLE' => $_[3] || '',
+ 'LANG' => $_[4] || confess( 'you must supply the language object' ),
+ } ;
+
+ my $simpleclass = $class;
+ if ($class =~ /^.*::(.+?)$/) {
+ $simpleclass = "$1";
+ }
+
+ # Register lang files
+ if ($self->{'LANG'}) {
+ $self->{'LANG'}->registerLang("Theme.$simpleclass");
+ }
+
+ bless( $self, $class );
+ return $self;
+}
+
+=pod
+
+=item * copy_files()
+
+Copies some files from the bib2html distribution directly inside the
+HTML documentation tree.
+
+=cut
+sub copy_files() : method {
+ my $self = shift ;
+}
+
+=pod
+
+=item * get_stream_writer()
+
+Replies the instance of the output stream writer.
+
+=cut
+sub get_stream_writer() : method {
+ my $self = shift ;
+ if (!$self->{'STREAM_WRITER'}) {
+ $self->{'STREAM_WRITER'} = new Bib2HTML::Generator::FileWriter->new();
+ }
+ return $self->{'STREAM_WRITER'};
+}
+
+=pod
+
+=item * set_stream_writer($)
+
+Set the instance of the output stream writer.
+Replies the old writer.
+Takes 1 arg:
+
+=over
+
+=item * writer (ref to Bib2HTML::Generator::Writer)
+
+is the instance of the writer.
+
+=back
+
+=cut
+sub set_stream_writer($) : method {
+ my $self = shift ;
+ my $writer = shift;
+ my $old_writer = $self->{'STREAM_WRITER'};
+ $self->{'STREAM_WRITER'} = $writer;
+ return $old_writer;
+}
+
+#------------------------------------------------------
+#
+# Filename API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * ext_href()
+
+Replies a hyperlink according to the parameters
+Takes 3 args:
+
+=over
+
+=item * section (string)
+
+is the id of the section.
+
+=item * label (string)
+
+is the label of the hyperlink
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub ext_href($$$) : method {
+ my $self = shift ;
+ my $section = shift || confess( 'you must supply the section id' ) ;
+ my $label = shift || '' ;
+ my $rootdir = shift || confess( 'you must supply the root directory' ) ;
+ return $self->href( htmlcatfile($rootdir,$self->filename($section,@_)),
+ $label,
+ $self->browserframe($section) ) ;
+}
+
+=pod
+
+=item * ext_wt_href()
+
+Replies a hyperlink according to the parameters (without target)
+Takes 3 args:
+
+=over
+
+=item * section (string)
+
+is the id of the section.
+
+=item * label (string)
+
+is the label of the hyperlink
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub ext_wt_href($$$) : method {
+ my $self = shift ;
+ my $section = shift || confess( 'you must supply the section id' ) ;
+ my $label = shift || '' ;
+ my $rootdir = shift || confess( 'you must supply the root directory' ) ;
+ return $self->href( htmlcatfile($rootdir,$self->filename($section,@_)),
+ $label ) ;
+}
+
+=pod
+
+=item * filename()
+
+Replies the filename of the specified section.
+Takes 1 arg:
+
+=over
+
+=item * section (string)
+
+is the name of the section.
+
+=back
+
+=cut
+sub filename : method {
+ my $self = shift ;
+ return $self->{'PARENT'}->filename(@_) ;
+}
+
+=pod
+
+=item * browserframe()
+
+Replies the frame used for the specified section.
+Takes 1 arg:
+
+=over
+
+=item * section (string)
+
+is the name of the section.
+
+=back
+
+=cut
+sub browserframe : method {
+ my $self = shift ;
+ return $self->{'PARENT'}->browserframe(@_) ;
+}
+
+#------------------------------------------------------
+#
+# Page API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_copyright()
+
+Replies a string that represents the copyright of this translator.
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=back
+
+=cut
+sub get_copyright($) : method {
+ my $self = shift ;
+ my $rootdir = $_[0] ;
+ return join( '',
+ $self->par( $self->small( $self->href( $self->{'BIB2HTML'}{'BUG_URL'},
+ $self->{'LANG'}->get( 'I18N_LANG_SUBMIT_BUG'), "_top" ) ) ),
+ $self->par( $self->small( $self->{'LANG'}->get( 'I18N_LANG_BIB2HTML_COPYRIGHT',
+ $self->href( $self->{'BIB2HTML'}{'URL'},
+ "bib2html ".$self->{'BIB2HTML'}{'VERSION'},
+ "_top" ),
+ $self->href( "mailto:".$self->{'BIB2HTML'}{'AUTHOR_EMAIL'},
+ $self->{'BIB2HTML'}{'AUTHOR'} ),
+ $self->href( "http://www.gnu.org/copyleft/gpl.html",
+ "GNU General Public License",
+ "_top" ) ) ) )
+ ) ;
+}
+
+=pod
+
+=item * get_html_index()
+
+Replies the content of the main index.html
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub get_html_index($) {
+ my $self = shift ;
+ my $rootdir = $_[0] || confess( 'you must supply the root directory' ) ;
+ return join( '',
+ "<FRAMESET cols=\"20%,80%\">\n",
+ "<FRAMESET rows=\"30%,70%\">\n",
+ "<FRAME src=\"",
+ htmlcatfile($rootdir,$self->filename('overview-frame')),
+ "\" name=\"",
+ $self->browserframe('overview-frame'),
+ "\">\n<FRAME src=\"",
+ htmlcatfile($rootdir,$self->filename('allelements')),
+ "\" name=\"",
+ $self->browserframe('allelements'),
+ "\">\n</FRAMESET>\n<FRAME src=\"",
+ htmlcatfile($rootdir,$self->filename('overview-summary')),
+ "\" name=\"",
+ $self->browserframe('overview-summary'),
+ "\">\n<NOFRAMES>\n",
+ $self->{'LANG'}->get('I18N_LANG_NO_FRAME_ALERT',
+ $self->filename('overview-summary'),
+ ''),
+ "</NOFRAMES>\n",
+ "</FRAMESET>\n" ) ;
+}
+
+=pod
+
+=item * create_html_page()
+
+Creates an HTML page without a <BODY>.
+Takes 3 args:
+
+=over
+
+=item * filename (string)
+
+is the name of the file in which the page
+must be created.
+
+=item * content (string)
+
+is the content of the page.
+
+=item * title (string)
+
+is the title of the page.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=item * frameset (boolean)
+
+must be true if the generated page must respect the w3c frameset definition,
+otherwhise it will respect the w3c transitional definition
+
+=back
+
+=cut
+sub create_html_page($$$$$) : method {
+ my $self = shift ;
+ my $rootdir = $_[3] || confess( 'you must supply the root directory' ) ;
+ confess( 'you must supply the filename' ) unless $_[0] ;
+ my $filename = File::Spec->catfile( $self->{'TARGET_DIR'}, htmlpath($_[0]) ) ;
+ Bib2HTML::General::Verbose::two( "Writing $filename..." ) ;
+
+ my $writer = $self->get_stream_writer();
+
+ $writer->openstream("$filename")
+ or Bib2HTML::General::Error::syserr( "$filename: $!\n" );
+
+ my $header ;
+ if ( $_[4] ) {
+ $header = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/REC-html40/frameset.dtd\">" ;
+ }
+ else {
+ $header = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">" ;
+ }
+
+ $writer->out(join( '',
+ $header,
+ "\n\n<!-- Generated by bib2html ".$self->{'BIB2HTML'}{'VERSION'},
+ " on ",
+ "".localtime(),
+ " -->\n\n",
+ "<HTML>\n<HEAD>\n<TITLE>",
+ $_[2] || '',
+ "</TITLE>\n",
+ "<META http-equiv=\"Content-Type\" ",
+ "content=\"text/html; charset=",
+ $self->get_html_encoding(),#ISO-8859-1
+ "\">\n",
+ $self->get_html_header($rootdir),
+ "</HEAD>\n",
+ $_[1] || '',
+ "</HTML>" ) ) ;
+
+ $writer->closestream() ;
+}
+
+=pod
+
+=item * get_html_encoding()
+
+Replies the HTML encoding of each page
+(by default ISO-8859-1).
+
+=cut
+sub get_html_encoding() : method {
+ my $self = shift ;
+ return $self->{'html_encoding'} || "ISO-8859-1" ;
+}
+
+=pod
+
+=item * set_html_encoding($)
+
+Set the HTML encoding of each page
+Takes 1 arg:
+
+=over
+
+=item * encoding (string)
+
+is the new encoding
+
+=back
+
+=cut
+sub set_html_encoding($) : method {
+ my $self = shift ;
+ my $encoding = shift;
+ $self->{'html_encoding'} = $encoding if ($encoding) ;
+}
+
+=pod
+
+=item * get_html_header()
+
+Replies the HTML header of each page.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=back
+
+=cut
+sub get_html_header($) : method {
+ my $self = shift ;
+ return '' ;
+}
+
+=pod
+
+=item * create_html_body_page()
+
+Creates an HTML page with a <BODY>.
+Takes 3 args:
+
+=over
+
+=item * filename (string)
+
+is the name of the file in which the page
+must be created.
+
+=item * content (string)
+
+is the content of the page.
+
+=item * title (string)
+
+is the title of the page.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub create_html_body_page($$$$@) : method {
+ my $self = shift ;
+ my $filename = shift ;
+ my $content = shift ;
+ my $title = shift ;
+ my $rootdir = shift || confess( "the rootdir must be supplied" ) ;
+ $content = join( '',
+ "<BODY",
+ ( $self->{'BACKGROUND_COLOR'} ?
+ " BGCOLOR=\"" .
+ $self->{'BACKGROUND_COLOR'} .
+ "\"" : '' ),
+ ">\n",
+ $content ) ;
+ my $small ;
+ if ((@_)&&("$_[0]" eq 'small')) {
+ shift @_ ;
+ $small = 1 ;
+ }
+ $self->mergeValidHTMLIcons($content,$rootdir,$small,@_) ;
+ $content .= "\n</BODY>\n",
+ $self->create_html_page( "$filename",
+ "$content",
+ "$title",
+ "$rootdir",
+ 0 ) ;
+}
+
+=pod
+
+=item * getMyValidHTML()
+
+Replies the list of W3C protocols for which this theme
+was validated. You must override this method.
+
+=cut
+sub getMyValidHTML() {
+ my $self = shift ;
+ return () ;
+}
+
+sub mergeValidHTMLIcons($$$@) {
+ my $self = shift ;
+ if (int(@_)>3) {
+
+ #
+ # A protocol is displayed as supported only if
+ # the generator AND the theme support it, or
+ # if the protocol was CSS and was supported
+ # by the theme only (We assume that the generators
+ # does not use any CSS syntax)
+ #
+ my @themevalid = $self->getMyValidHTML() ;
+ my @valid = () ;
+ for(my $i=3; $i<int(@_); $i++) {
+ if (strinarray("$_[$i]",\@themevalid)) {
+ push @valid, "$_[$i]" ;
+ }
+ }
+ if (strinarray('css',\@themevalid)) {
+ push @valid, 'css' ;
+ }
+
+ if ($_[2]) {
+ setAsValidHTML_small($_[0],$_[1],@valid) ;
+ }
+ else {
+ setAsValidHTML($_[0],$_[1],@valid) ;
+ }
+ }
+}
+
+#------------------------------------------------------
+#
+# Paragraph API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * frame_subpart()
+
+Replies a subpart of a frame
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the part.
+
+=item * text (array)
+
+is the content of the frame.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub frame_subpart($$$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * frame_window()
+
+Replies a frame
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the frame.
+
+=item * text (string)
+
+is the content of the frame.
+
+=item * prefix (optional string)
+
+is a string which is put before the title
+
+=back
+
+=cut
+sub frame_window($$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * partseparator()
+
+Replies a part separator.
+
+=cut
+sub partseparator($) {
+ my $self = shift ;
+ return "<HR>\n" ;
+}
+
+=pod
+
+=item * title()
+
+Formats a page title
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+=item * text_before (optional boolean)
+
+indicates if some text are before this title
+
+=back
+
+=cut
+sub title($) {
+ my $self = shift ;
+ my $text = $_[0] || confess( 'you must specify the text' ) ;
+ return
+ ($_[1] ? $self->partseparator() : '') .
+ "<center><h2>$text</h2></center>\n\n" ;
+}
+
+=pod
+
+=item * subtitle()
+
+Formats a page subtitle
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=item * text_before (optional boolean)
+
+indicates if some text are before this title
+
+=back
+
+=cut
+sub subtitle($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ if ( ! $text ) {
+ Bib2HTML::General::Error::syswarm( 'a title was expected' ) ;
+ }
+ return
+ ($_[1] ? "<hr>\n" : '').
+ "<h2>$text</h2>\n" ;
+}
+
+=pod
+
+=item * strong()
+
+Formats a keyword
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub strong($) {
+ my $self = shift ;
+ my $text = $_[0] || confess( 'you must specify the text' ) ;
+ return "<b>$text</b>" ;
+}
+
+=pod
+
+=item * entry_title()
+
+Formats the title of an BibTeX entry.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub entry_title($) {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ if ( ! $title ) {
+ Bib2HTML::General::Error::syswarm( 'a title was expected' ) ;
+ }
+ return join( '',
+ "&quot;<i><b>",
+ $title,
+ "</b></i>&quot;" ) ;
+}
+
+=pod
+
+=item * format_date()
+
+Formats a date.
+Takes 2 args:
+
+=over
+
+=item * month (string)
+
+=item * year (string)
+
+=back
+
+=cut
+sub format_date($$) {
+ my $self = shift ;
+ my $month = $_[0] || '' ;
+ my $year = $_[1] || confess( 'you must supply the year' ) ;
+ return ($month?"$month&nbsp;":"")."$year" ;
+}
+
+=pod
+
+=item * href()
+
+Replies a hyperlink.
+Takes 3 args:
+
+=over
+
+=item * url (string)
+
+is the URL to link to
+
+=item * label (string)
+
+is the label of the hyperlink
+
+=item * target (optional string)
+
+is the frame target.
+
+=back
+
+=cut
+sub href($$) {
+ my $self = shift ;
+ my $url = $_[0] || confess( 'you must specify the URL' ) ;
+ my $label = $_[1] ;
+ return '' unless ($label) ;
+ return join( '',
+ "<A HREF=\"",
+ $url,
+ "\"",
+ ( $_[2] ? " target=\"$_[2]\"" : "" ),
+ ">",
+ $label,
+ "</A>" ) ;
+}
+
+=pod
+
+=item * small()
+
+Replies a text with a small size.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub small($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<FONT SIZE=\"-1\">",
+ $text,
+ "</FONT>\n" ) ;
+}
+
+=pod
+
+=item * tiny()
+
+Replies a text with a tiny size.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub tiny($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<FONT SIZE=\"-2\">",
+ $text,
+ "</FONT>\n" ) ;
+}
+
+=pod
+
+=item * par()
+
+Replies a paragraph.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub par($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<P>",
+ $text,
+ "</P>\n" ) ;
+}
+
+=pod
+
+=item * get_tree_node()
+
+Replues the HTML string for the specified tree.
+a list.
+Takes 2 args:
+
+=over
+
+=item * node (string)
+
+is the string that is the root of the tree.
+
+=item * subs (string)
+
+is an HTML string that describes the children.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub get_tree_node($$$) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my $sub = $_[1] || '' ;
+ $sub = "<ul>$sub</ul>" ;
+ if ( $text ) {
+ return "<li type=\"circle\">".$text.$sub."</li>\n" ;
+ }
+ else {
+ return "$sub\n" ;
+ }
+}
+
+=pod
+
+=item * get_tree_leaf()
+
+Replies a line of a tree which will be displayed inside
+a list.
+Takes 1 args:
+
+=over
+
+=item * node (string)
+
+is the string that is the root of the tree.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub get_tree_leaf($$) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<li type=\"circle\">",
+ $text,
+ "</li>\n" ) ;
+}
+
+=pod
+
+=item * get_tree()
+
+Creates a tree.
+Takes 2 or 3 args:
+
+=over
+
+=item * tree (hash)
+
+is the tree
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=item * root label (optional string)
+
+is the label of the root node
+
+=back
+
+=cut
+sub get_tree($$;$) : method {
+ my $self = shift ;
+ my $tree = $_[0] || confess( "you must supply the tree" ) ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my $content = $self->__get_default_tree__($tree,$rootdir) ;
+ if ( $content ) {
+ return "<ul>$content</ul>\n" ;
+ }
+ else {
+ return "$content" ;
+ }
+}
+
+sub __get_default_tree__($$) {
+ my $self = shift ;
+ my $tree = $_[0] || confess( "you must supply the tree" ) ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my $content = '' ;
+
+ my @c = keys %{$tree};
+ @c = sortbyletters(@c);
+ foreach my $children (@c) {
+
+ if ( isemptyhash($tree->{"$children"}) ) {
+ # leaf
+ $content .= $self->get_tree_leaf("$children",$rootdir) ;
+ }
+ else {
+ # node
+ my $sub = $self->__get_default_tree__($tree->{"$children"},$rootdir) ;
+ $content .= $self->get_tree_node("$children",$sub,$rootdir) ;
+ }
+
+ }
+
+ return $content ;
+}
+
+=pod
+
+=item * get_navigation_bar()
+
+Replies the navigation bar.
+Takes 3 args:
+
+=over
+
+=item * url (string)
+
+is the url of the generated page.
+
+=item * params (hash ref)
+
+is a set of parameters used to generate the bar.
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub get_navigation_bar($$$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * section()
+
+Replies a section
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the new section.
+
+=item * content (string)
+
+is the content of the new section
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub section($$$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+#------------------------------------------------------
+#
+# Array API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * build_onecolumn_array()
+
+Replies an one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_onecolumn_array($$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * build_twocolumn_array()
+
+Replies an two-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_twocolumn_array($$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * build_small_array()
+
+Replies an small one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_small_array($$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * build_tiny_array()
+
+Replies a tiny one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_tiny_array($$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+=pod
+
+=item * build_threecolumn_array()
+
+Replies an two-column array.
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=item * anchor (string)
+
+is the name of the anchor.
+
+=back
+
+=cut
+sub build_threecolumn_array($$$) : method {
+ my $self = shift ;
+ confess( 'you must overwrite this method' ) ;
+}
+
+#------------------------------------------------------
+#
+# Index API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * format_index_page()
+
+Replies a formatted page for the index.
+Takes 3 args:
+
+=over
+
+=item * letterlist (string)
+
+is the list of letters of the index.
+
+=item * letter (string)
+
+is the current letter.
+
+=item * content (array ref)
+
+is the content of the page.
+
+=back
+
+=cut
+sub format_index_page($$$) : method {
+ my $self = shift ;
+ my $letterlist = $_[0] || '' ;
+ my $letter = notempty( $_[1], 'you must supply the index letter for this page' ) ;
+
+ my $content = join( '',
+ ( $letterlist ?
+ $letterlist.$self->partseparator() : '' ),
+ "<H2>",
+ uc($letter),
+ "</H2>\n",
+ "<DL>" ) ;
+
+ my $previouslabel = '' ;
+ my @currententry = () ;
+
+ foreach my $entry (@{$_[2]}) {
+ if ( "$previouslabel" eq $entry->{'label'} ) {
+ # Caching this entry for futher display
+ push @currententry, $entry ;
+ }
+ else {
+ # Generate the page content
+ $self->__generate_index_entry(\@currententry,$content,$entry);
+ }
+
+ $previouslabel = $entry->{'label'} ;
+ }
+
+ if ( @currententry ) {
+ $self->__generate_index_entry(\@currententry,$content);
+ }
+
+ $content .= join( '',
+ "</DL>",
+ ( $letterlist ?
+ $self->partseparator().$letterlist : '' ) ) ;
+
+ return $content ;
+}
+
+sub __generate_index_entry($$;$) {
+ my $self = shift ;
+
+ # Generates the previous entries
+ if ( @{$_[0]} == 1 ) {
+ $_[1] .= join( '',
+ "<DT>",
+ $self->href( $_[0]->[0]{'url'},
+ $_[0]->[0]{'label'} ),
+ ( $_[0]->[0]{'short_comment'} ?
+ " - ".$_[0]->[0]{'short_comment'} :
+ '' ),
+ "</DT><DD>",
+ $_[0]->[0]{'comment'},
+ "&nbsp;</DD>\n" ) ;
+ }
+ elsif ( @{$_[0]} > 1 ) {
+ $_[1] .= join( '',
+ "<DT>",
+ $_[0]->[0]{'label'},
+ "</DT><DD><UL>" ) ;
+ foreach my $entry_to_display (@{$_[0]}) {
+ $_[1] .= join( '',
+ "<LI>",
+ $entry_to_display->{'comment'},
+ $self->href( $entry_to_display->{'url'},
+ "<IMG src=\"./loupe.gif\" alt=\"\" ".
+ "border=\"0\" align=\"center\">" ),
+ "</LI>\n"
+ ) ;
+ }
+ $_[1] .= "</UL></DD>\n" ;
+ }
+ # Prepare the caching for this entry
+ if ( $_[2] ) {
+ @{$_[0]} = ( $_[2] ) ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Filename API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_math_start_tag()
+
+Replies the HTML balise which starts the math mode.
+
+=cut
+sub get_math_start_tag() : method {
+ my $self = shift ;
+ return "<math>" ;
+}
+
+=pod
+
+=item * get_math_stop_tag()
+
+Replies the HTML balise which stops the math mode.
+
+=cut
+sub get_math_stop_tag() : method {
+ my $self = shift ;
+ return "</math>" ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna.pm
new file mode 100644
index 0000000000..3c9d051214
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna.pm
@@ -0,0 +1,1401 @@
+# Copyright (C) 2002-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::Theme::DynaTheme - A theme for the HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::Theme::DynaTheme ;
+
+my $gen = Bib2HTML::Generator::Theme::DynaTheme->new( bib2html,
+ target,
+ title,
+ phpgen,
+ webgen ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Theme::DynaTheme is a Perl module, which proposes
+a documentation theme for the HTML generator of bib2html. This theme generates
+something like javadoc.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::Theme::DynaTheme;
+
+ my $gen = Bib2HTML::Generator::Theme::DynaTheme->new( { 'VERSION' => '0.11' },
+ "./phpdoc",
+ "Title",
+ 1, 1 ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * bib2html (hash)
+
+contains some data about bib2html.
+
+=item * target (string)
+
+The directory in which the documentation must be put.
+
+=item * title (string)
+
+is the title of the documentation.
+
+=item * phpgen (boolean)
+
+indicates if the PHP doc was generated
+
+=item * webgen (boolean)
+
+indicates if the WEB doc was generated
+
+=item * lang (object ref)
+
+is a reference to the language object.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Html.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::Theme::Dyna;
+
+@ISA = ('Bib2HTML::Generator::Theme');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+
+use Carp ;
+
+use Bib2HTML::Generator::Theme ;
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of Dyna theme
+my $VERSION = "4.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$) {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new( @_ ) ;
+
+ $self->{'COPY_FILES'} = [ 'stylesheet.css',
+ 'minus.gif',
+ 'plus.gif',
+ 'child.gif',
+ 'lastchild.gif',
+ 'samechild.gif',
+ 'emptychild.gif',
+ ] ;
+
+ $self->{'FRAME_TREE_ID_COUNT'} = 0 ;
+ $self->{'TREE_ID_COUNT'} = 0 ;
+
+ bless( $self, $class );
+
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Validation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * getMyValidHTML()
+
+Replies the list of W3C protocols for which this theme
+was validated. You must override this method.
+
+=cut
+sub getMyValidHTML() {
+ my $self = shift ;
+ return ( 'html', 'css' ) ;
+}
+
+#------------------------------------------------------
+#
+# Main structure
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_html_header()
+
+Replies the HTML header of each page.
+Takes 1 arg:
+
+=over
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=back
+
+=cut
+sub get_html_header($) : method {
+ my $self = shift ;
+ my $rootdir = $_[0] || confess( 'you must supply the root directory' ) ;
+ return join( '',
+ "<link REL ='stylesheet' TYPE='text/css' HREF='",
+ htmlcatfile($rootdir,"stylesheet.css"),
+ "' TITLE='Style'>\n",
+
+ # JavaScript
+ "<script language='JavaScript1.2' type=\"text/javascript\">\n<!--\n",
+ "function swaptreecontent(elID) {\n",
+ " b = document.getElementById(elID).innerHTML;\n",
+ " a = document.getElementById(elID + \"off__\").innerHTML;\n",
+ " if (a.length == 0) {",
+ " document.getElementById(elID).innerHTML = \"\";\n",
+ " } else {\n",
+ " document.getElementById(elID).innerHTML = a;\n",
+ " }\n",
+ " document.getElementById(elID + \"off__\").innerHTML = b;\n",
+ "}\n\n",
+ "function swaptreeicon(elID) {\n",
+ " a = document.getElementById(elID + \"plusminus\").src;\n",
+ " if (a.indexOf(\"minus.gif\") != -1) a = \"",
+ htmlcatfile($rootdir,"plus.gif"),
+ "\";\n",
+ " else a = \"",
+ htmlcatfile($rootdir,"minus.gif"),
+ "\";\n",
+ " document.getElementById(elID + \"plusminus\").src = a;\n",
+ "}\n\n",
+ "function swaptree(elID) {\n",
+ " swaptreecontent(elID);\n",
+ " swaptreeicon(elID);\n",
+ "}\n\n",
+ "function swaptree2(elID1,elID2) {\n",
+ " swaptreecontent(elID1);\n",
+ " swaptreecontent(elID2);\n",
+ " swaptreeicon(elID1);\n",
+ "}\n",
+ "//-->\n</script>\n" ) ;
+}
+
+
+#------------------------------------------------------
+#
+# Structural element API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_tree_node()
+
+Replues the HTML string for the specified tree.
+a list.
+Takes 2 args:
+
+=over
+
+=item * node (string)
+
+is the string that is the root of the tree.
+
+=item * subs (string)
+
+is an HTML string that describes the children.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub get_tree_node($$$) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ $text =~ s/[ \t\n\r]+/&nbsp;/g ;
+ return $self->SUPER::get_tree_node($text,$_[1],$_[2]) ;
+}
+
+=pod
+
+=item * get_tree_leaf()
+
+Replies a line of a tree which will be displayed inside
+a list.
+Takes 1 args:
+
+=over
+
+=item * node (string)
+
+is the string that is the root of the tree.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub get_tree_leaf($$) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ $text =~ s/[ \t\n\r]+/&nbsp;/g ;
+ return $self->SUPER::get_tree_leaf($text,$_[1]) ;
+}
+
+=pod
+
+=item * get_tree()
+
+Creates a tree.
+Takes 2 or 3 args:
+
+=over
+
+=item * tree (hash)
+
+is the tree
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=item * root label (optional string)
+
+is the label of the root node
+
+=back
+
+=cut
+sub get_tree($$;$) : method {
+ my $self = shift ;
+ my $tree = $_[0] || confess( "you must supply the tree" ) ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my $defaultRootLabel = $self->{'LANG'}->get('I18N_LANG_THEME_TREE_ROOT');
+ my $rootlabel = $_[2] || $defaultRootLabel;
+ $tree = { $rootlabel => $tree } ;
+ return $self->__get_dyna_tree__( $tree, $rootdir ) ;
+}
+
+sub __get_dyna_tree__($$) {
+ my $self = shift ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my ($prevs,$lines,$max) = $self->__get_dyna_tree_rec__(@_) ;
+
+ my $content = '' ;
+ foreach my $prev (@{$prevs}) {
+ $content .= join( '',
+ "<DIV id=\"",
+ $prev,
+ "off__\" style=\"visibility : hidden; position: absolute\"></DIV>\n" ) ;
+ }
+
+ my $tblheader = "<TABLE border='0' cellspacing='0' cellpadding='0' width='100%'>\n" ;
+ my $tblfooter = "</TABLE>\n" ;
+
+ my $tablecontent = "" ;
+ foreach my $line (@{$lines}) {
+ my $iddata = pop @{$line} ;
+ my $count = $max ;
+ my $linecontent = '' ;
+
+ while (@{$line}) {
+ my $cell = shift @{$line} ;
+
+ if (($cell)&&("$cell" eq "[-]")) {
+ # Add a collapse button
+ confess( 'empty id when collapsable node' ) unless $iddata->{'open'} ;
+ $count -- ;
+ $linecontent .= join( '',
+ "<TD valign='middle' align='left' width='11' height='17'>",
+ $self->href( "javascript:swaptree('".$iddata->{'open'}."')",
+ "<img src=\"".
+ htmlcatfile($rootdir,"minus.gif").
+ "\" alt=\"-\" ".
+ "id=\"".$iddata->{'open'}."plusminus\" width=\"11\" ".
+ "height=\"11\" border=\"0\">" ),
+ "</TD>" ) ;
+ }
+ elsif (($cell)&&($cell eq '[ ]')) {
+ # Add a white space
+ $count -- ;
+ $linecontent .= join( '',
+ "<TD valign='top' align='left' width='11' height='17'>",
+ "<IMG src=\"",
+ htmlcatfile($rootdir,"emptychild.gif"),
+ "\" alt=\" \" width=\"11\" ",
+ "height=\"17\" border=\"0\">",
+ "</TD>" ) ;
+ }
+ elsif (($cell)&&($cell eq '[+]')) {
+ # Add a tee
+ $count -- ;
+ $linecontent .= join( '',
+ "<TD valign='top' align='left' width='11' height='17'>",
+ "<IMG src=\"",
+ htmlcatfile($rootdir,"child.gif"),
+ "\" alt=\"+\" width=\"11\" ",
+ "height=\"17\" border=\"0\">",
+ "</TD>" ) ;
+ }
+ elsif (($cell)&&($cell eq '[|]')) {
+ # Add a vertical bar
+ $count -- ;
+ $linecontent .= join( '',
+ "<TD valign='top' align='left' height='17'>",
+ "<IMG src=\"",
+ htmlcatfile($rootdir,"samechild.gif"),
+ "\" alt=\"|\" width=\"11\" ",
+ "height=\"17\" border=\"0\">",
+ "</TD>" ) ;
+ }
+ elsif (($cell)&&($cell eq '[\\]')) {
+ # Add a corner
+ $count -- ;
+ $linecontent .= join( '',
+ "<TD valign='top' align='left' width='11' height='17'>",
+ "<IMG src=\"",
+ htmlcatfile($rootdir,"lastchild.gif"),
+ "\" alt=\"\\\" width=\"11\" ",
+ "height=\"17\" border=\"0\">",
+ "</TD>" ) ;
+ }
+ elsif (($cell)&&($count>0)) {
+ # Add a text
+ $linecontent .= join( '',
+ "<TD colspan='$count' width='100%' valign='middle' align='left' class='TreeText' height='17'>",
+ $cell,
+ "</TD>" ) ;
+ $count = 0 ;
+ }
+
+ }
+
+ # Add the line
+ if ($linecontent !~ /^\s*$/m) {
+
+ # Test if a table header was needed
+ $tablecontent = "$tblheader" unless ($tablecontent) ;
+
+ # Add the line
+ $tablecontent .= "<TR>$linecontent</TR>" ;
+
+ # Close the table if on a block bound
+ if ((!isemptyarray($iddata->{'closes'}))||
+ ($iddata->{'open'})) {
+ $content .= "$tablecontent$tblfooter" ;
+ $tablecontent = "" ;
+ }
+
+ # Put the block's open/close actions
+ if (!isemptyarray($iddata->{'closes'})) {
+ for(my $i=0; $i<@{$iddata->{'closes'}}; $i++) {
+ $content .= "</DIV>" ;
+ }
+ }
+ if ( $iddata->{'open'} ) {
+ $content .= "<DIV id=\"".$iddata->{'open'}."\">" ;
+ }
+
+ }
+
+ }
+
+ if ($tablecontent) {
+ $content .= "$tablecontent$tblfooter" ;
+ }
+
+ return $content ;
+}
+
+sub __get_dyna_tree_rec__($$) {
+ my $self = shift ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my @content = () ;
+ my @prev = () ;
+ my $max = 0 ;
+
+ if ( ! isemptyhash( $_[0] ) ) {
+
+ my @keys = keys %{$_[0]};
+ @keys = sortbyletters(@keys) ;
+
+ for(my $i=0; $i<=$#keys; $i++) {
+ my $nodename = $keys[$i] ;
+ my $oid = '' ;
+
+ # Gets the children
+ my ($child_prev,$child_content,$child_max) = $self->__get_dyna_tree_rec__( $_[0]->{$nodename}, $rootdir ) ;
+
+ # Computes the collpasing icon
+ my $collaps = '' ;
+ if ( ! isemptyarray( $child_content ) ) {
+ $collaps = '[-]' ;
+ # Computes the tags just before the tree
+ # This tag permits to undisplay the $id area
+ $self->{'FRAME_TREE_ID_COUNT'} ++ ;
+ $oid = "treeoverviewid".$self->{'FRAME_TREE_ID_COUNT'} ;
+ push @prev, $oid ;
+ }
+ push @prev, @{$child_prev} ;
+
+ # Adds this node to the array
+ push @content, [ "$collaps", "&nbsp;$nodename", { 'open' => $oid,
+ 'closes' => [] } ] ;
+ $max = 2 ;
+
+ # Adds the children
+ my @subcontent = () ;
+ my $found = 0 ;
+ for(my $j=$#{$child_content}; $j>=0; $j--) {
+ my $next = $child_content->[$j][0] ;
+ my $icon = '[ ]' ;
+ if ( $found ) {
+ if ( ( ! $next ) || ( $next eq '[-]' ) ) {
+ $icon = '[+]' ;
+ }
+ else {
+ $icon = '[|]' ;
+ }
+ }
+ elsif ( ( ! $next ) || ( $next eq '[-]' ) ) {
+ $found = 1 ;
+ $icon = '[\\]' ;
+ }
+ unshift @subcontent, [ $icon, @{$child_content->[$j]} ] ;
+ if ( $max < (@{$child_content->[$j]}-1) ) {
+ $max = @{$child_content->[$j]}-1 ;
+ }
+ }
+ push @content, @subcontent ;
+ if ( $oid ) {
+ push( @{$content[$#content]->[$#{$content[$#content]}]->{'closes'}},
+ $oid ) ;
+ }
+ }
+
+ }
+
+ return (\@prev,\@content,$max) ;
+}
+
+=pod
+
+=item * build_linked_tree()
+
+Creates a tree with links between nodes.
+Takes 1 arg:
+
+=over
+
+=item * tree (array)
+
+is the tree
+
+=item * rootdir (string)
+
+is the path to the root directory
+
+=back
+
+=cut
+sub build_linked_tree($$) : method {
+ my $self = shift ;
+ my $tree = $_[0] || confess( "you must supply the tree" ) ;
+ my $rootdir = $_[1] || confess( 'you must supply the root directory' ) ;
+ my $content = "" ;
+ if ( $#{$tree} >= 0 ) {
+ my $end = '' ;
+ for(my $i=0; $i<=$#{$tree}; $i++ ) {
+ my $class = $tree->[$i] ;
+
+ $self->{'FRAME_TREE_ID_COUNT'} ++ ;
+ my $id1 = "classtreeid".$self->{'FRAME_TREE_ID_COUNT'} ;
+ $self->{'FRAME_TREE_ID_COUNT'} ++ ;
+ my $id2 = "classtreeid".$self->{'FRAME_TREE_ID_COUNT'} ;
+
+ $content .= join( '',
+ "<DIV id=\"",
+ $id1,
+ "off__\" style=\"visibility : hidden; position: absolute\"></DIV>\n",
+ "<DIV id=\"",
+ $id2,
+ "off__\" style=\"visibility : hidden; position: absolute\"></DIV>\n",
+
+ "<TABLE border=0 cellspacing=2 cellpadding=0>",
+ "<TR><TD>" ) ;
+
+ if ( $i < $#{$tree} ) {
+ $content .= join( '',
+ $self->href( "javascript:swaptree2('".$id1."','".$id2."')",
+ "<img src=\"".
+ htmlcatfile($rootdir,"minus.gif").
+ "\" alt=\"-\" ".
+ "id=\"".$id1."plusminus\" width=\"11\" ".
+ "height=\"11\" border=\"0\">" ),
+ "</TD><TD>&nbsp;" ) ;
+ }
+
+ $content .= join( '',
+ $class,
+ "</TD></TR>",
+ "<TR><TD valign='top' align='right'>" ) ;
+
+ if ( $i < $#{$tree} ) {
+ $content .= join( '',
+ "<DIV id=\"",
+ $id2,
+ "\">",
+ "<IMG src=\"",
+ htmlcatfile($rootdir,"lastchild.gif"),
+ "\" alt=\"-\" width=\"11\" ",
+ "height=\"17\" border=\"0\">",
+ "</DIV>" ) ;
+ }
+
+ $content .= join( '',
+ "</TD><TD class='TreeText' valign='middle' align='left'><DIV id=\"",
+ $id1,
+ "\">") ;
+
+ $end .= "</DIV></TD></TR></TABLE>" ;
+
+ }
+
+ $content .= $end ;
+
+ }
+ return $content ;
+}
+
+=pod
+
+=item * build_detail_section_title()
+
+Replies title of an detail section.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the section.
+
+=item * label (string)
+
+is the label of the title bar.
+
+=back
+
+=cut
+sub build_detail_section_title($$) : method {
+ my $self = shift ;
+ return join( '',
+ "<A NAME=\"",
+ $_[1] || '',
+ "\"></A>",
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD><TR><TD CLASS='largetabletitle'>",
+ $_[0] || '',
+ "</TD></TR></THEAD></TABLE><BR>\n" ) ;
+}
+
+=pod
+
+=item * build_class_detail()
+
+Replies the detail for a class.
+Takes 3 args:
+
+=over
+
+=item * classname (string)
+
+is the name of the class
+
+=item * extends (string)
+
+is the name of extended class.
+
+=item * explanation (string)
+
+is the description of the function.
+
+=item * details (string)
+
+contains some details on this function.
+
+=back
+
+=cut
+sub build_class_detail($$$$) : method {
+ my $self = shift ;
+ my $classname = $_[0] || confess( 'you must supply the classname' ) ;
+ my $extends = $_[1] || '' ;
+ my $explanation = $_[2] || '' ;
+ my $details = $_[3] || '' ;
+ return join( '',
+ "<DL>\n<DT>",
+ $self->{'LANG'}->get('I18N_LANG_CLASS'),
+ " <B>$classname</B>",
+ ( $extends ? "<DT>".
+ $self->{'LANG'}->get('I18N_LANG_EXTENDS').
+ " $extends</DL>\n" : '' ),
+ "<P>",
+ $explanation,
+ "</P>\n",
+ $details,
+ "</DL>\n" ) ;
+}
+
+=pod
+
+=item * build_function_detail()
+
+Replies the detail for a function.
+Takes 5 args:
+
+=over
+
+=item * key_name (string)
+
+is the keyname of the function.
+
+=item * name (string)
+
+is the name of the function.
+
+=item * signature (string)
+
+is the signature of the function.
+
+=item * explanation (string)
+
+is the description of the function.
+
+=item * details (string)
+
+contains some details on this function.
+
+=back
+
+=cut
+sub build_function_detail($$$$) : method {
+ my $self = shift ;
+ my $kname = $_[0] || confess( 'you must supply the keyname' ) ;
+ my $name = $_[1] || confess( 'you must supply the name' ) ;
+ my $signature = $_[2] || confess( 'you must supply the signature' ) ;
+ my $explanation = $_[3] || confess( 'you must supply the explanation' ) ;
+ my $details = $_[4] || '' ;
+ return join( '',
+ "<A NAME=\"",
+ $kname,
+ "\"></A><H3>",
+ $name,
+ "</H3>\n<PRE>\n",
+ $signature,
+ "</PRE>\n<DL><DD><P>",
+ $explanation,
+ "</P>\n",
+ $details,
+ "</DD></DL>"
+ ) ;
+}
+
+=pod
+
+=item * build_detail_part()
+
+Replies a detail part.
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the section.
+
+=item * separator (string)
+
+is the separator of the elements.
+
+=item * elements (array ref)
+
+is the whole of the elements.
+
+=back
+
+=cut
+sub build_detail_part($$$) : method {
+ my $self = shift ;
+ if ( $#{$_[2]} >= 0 ) {
+ my $content = join( '',
+ "<DL><DT><B>$_[0]:</B></DT><DD>"
+ ) ;
+ my $i = 0 ;
+ $content .= "<UL>" if ( $_[1] =~ /<li>/i ) ;
+ foreach my $e (@{$_[2]}) {
+ if ( $_[1] =~ /<li>/i ) {
+ $content .= "<LI>" ;
+ }
+ elsif ( $i > 0 ) {
+ $content .= $_[1] ;
+ }
+ $content .= $e ;
+ $content .= "</LI>" if ( $_[1] =~ /<li>/i ) ;
+ $i ++ ;
+ }
+ $content .= "</UL>" if ( $_[1] =~ /<li>/i ) ;
+ $content .= "</DD></DL>\n" ;
+ return $content ;
+ }
+ else {
+ return "" ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Paragraph API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * frame_subpart()
+
+Replies a subpart of a frame
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the part.
+
+=item * text (array)
+
+is the content of the frame.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub frame_subpart($$$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $rootdir = $_[2] || confess( 'you must supply the root directory' ) ;
+ $self->{'FRAME_TREE_ID_COUNT'} ++ ;
+ my $id = "treeid".$self->{'FRAME_TREE_ID_COUNT'} ;
+
+ my $content = "<P></P><DIV id=\"".$id."off__\" style=\"visibility : hidden; position: absolute\"></DIV>\n" ;
+
+ $content .= $self->href( "javascript:swaptree('".$id."')",
+ "<img src=\"".
+ htmlcatfile($rootdir,"minus.gif").
+ "\" alt=\"-\" ".
+ "id=\"".$id."plusminus\" width=\"11\" ".
+ "height=\"11\" border=\"0\">" ) ;
+ $content .= join( '',
+ ( $title ? '&nbsp;'.html_add_unsecable_spaces($title)."<BR>\n" : '' ),
+ "<div id=\"",
+ $id,
+ "\">" ) ;
+
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ for(my $i=0; $i<=$#{$_[1]}; $i++) {
+ my $item = html_add_unsecable_spaces( $_[1][$i] ) ;
+ $content .= join( '',
+ "<TABLE border=0 cellspacing=0 cellpadding=0>",
+ "<TR><TD valign='top' align='right'><img src=\"",
+ htmlcatfile($rootdir,
+ ($i==$#{$_[1]}) ?
+ "lastchild.gif" : "child.gif"),
+ "\" alt=\"-\" width=\"11\" ",
+ "height=\"17\" border=\"0\"></TD><TD class='TreeText' valign='middle' align='left'>&nbsp;",
+ $item,
+ "</TD></TR></TABLE>\n" ) ;
+ }
+ }
+ $content .= "</DIV>\n\n" ;
+ return $content ;
+}
+
+=pod
+
+=item * frame_window()
+
+Replies a frame
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the frame.
+
+=item * text (string)
+
+is the content of the frame.
+
+=back
+
+=cut
+sub frame_window($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $text = $_[1] || '' ;
+ return join( '',
+ ( $title ? "<H2>$title</H2>\n\n" : '' ),
+ $text ) ;
+}
+
+=pod
+
+=item * small()
+
+Replies a text with a small size.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub small($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<SPAN CLASS='small'>",
+ $text,
+ "</SPAN>\n" ) ;
+}
+
+=pod
+
+=item * tiny()
+
+Replies a text with a tiny size.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub tiny($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ return join( '',
+ "<SPAN CLASS='tiny'>",
+ $text,
+ "</SPAN>\n" ) ;
+}
+
+=pod
+
+=item * section()
+
+Replies a section
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the new section.
+
+=item * content (string)
+
+is the content of the new section
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub section($$$) : method {
+ my $self = shift ;
+ my $title = $_[0] || confess( 'you must specify the title' ) ;
+ my $content = $_[1] || '' ;
+ my $rootdir = $_[2] || confess( 'you must specify the root directory' ) ;
+ return join( '',
+ "<P></P>",
+ "<TABLE BORDER='0' WIDTH='100%' ",
+ "CELLPADDING='1' CELLSPACING='0'>\n",
+ "<TR><TD CLASS='tabletitle'>",
+ $title,
+ "</TD></TR>\n",
+ "<TR><TD>",
+ $content,
+ "</TD></TR></TABLE>\n" ) ;
+}
+
+#------------------------------------------------------
+#
+# Array API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * build_onecolumn_array()
+
+Replies an one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_onecolumn_array($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = '' ;
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ foreach my $cell (@{$_[1]}) {
+ $content .= join( '',
+ "<TR><TD>",
+ $cell,
+ "</TD></TR>\n" ) ;
+ }
+ }
+ return join( '',
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD>",
+ "<TR><TD CLASS='tabletitle'><B>",
+ $title,
+ "</B></TD></TR>",
+ "</THEAD>\n<TBODY>",
+ $content,
+ "</TBODY>\n</TABLE>\n\n" ) ;
+}
+
+=pod
+
+=item * build_twocolumn_array()
+
+Replies an two-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_twocolumn_array($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = '' ;
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ for(my $i=0; $i<=$#{$_[1]}; $i++) {
+ if ( ( ishash($_[1][$i]) ) && ( ! isemptyhash($_[1][$i]) ) ) {
+ $content .= join( '',
+ "<TR><TD valign='top' align='left' width='20%'>",
+ $_[1][$i]->{'name'},
+ "</TD><TD valign='top' align='left' width='80%'>",
+ $_[1][$i]->{'explanation'},
+ "</TD></TR>" ) ;
+ }
+ }
+ }
+ return join( '',
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD>",
+ "<TR><TD CLASS='tabletitle' COLSPAN='2'><B>",
+ $title,
+ "</B></TD></TR>",
+ "</THEAD>\n<TBODY>",
+ $content,
+ "</TBODY>\n</TABLE>\n\n" ) ;
+}
+
+=pod
+
+=item * build_small_array()
+
+Replies an small one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_small_array($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = '' ;
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ foreach my $cell (@{$_[1]}) {
+ $content .= join( '',
+ "<TR><TD>",
+ $cell,
+ "</TD></TR>\n" ) ;
+ }
+ }
+ return join( '',
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD>",
+ "<TR><TD CLASS='smalltabletitle'><B>",
+ $title,
+ "</B></TD></TR>",
+ "</THEAD>\n<TBODY CLASS='smalltable'>",
+ $content,
+ "</TBODY>\n</TABLE>\n\n" ) ;
+}
+
+=pod
+
+=item * build_tiny_array()
+
+Replies a tiny one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_tiny_array($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = '' ;
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ foreach my $cell (@{$_[1]}) {
+ $content .= join( '',
+ "<TR><TD>",
+ $cell,
+ "</TD></TR>\n" ) ;
+ }
+ }
+ return join( '',
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD>",
+ "<TR><TD CLASS='tinytabletitle'><B>",
+ $title,
+ "</B></TD></TR>",
+ "</THEAD>\n<TBODY CLASS='tinytable'>",
+ $content,
+ "</TBODY>\n</TABLE>\n\n" ) ;
+}
+
+=pod
+
+=item * build_threecolumn_array()
+
+Replies an two-column array.
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=item * anchor (string)
+
+is the name of the anchor.
+
+=back
+
+=cut
+sub build_threecolumn_array($$$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = '' ;
+ if ( ( isarray($_[1]) ) && ( ! isemptyarray($_[1]) ) ) {
+ for(my $i=0; $i<=$#{$_[1]}; $i++) {
+ if ( ( ishash($_[1][$i]) ) && ( ! isemptyhash($_[1][$i]) ) ) {
+ $content .= join( '',
+ "<TR><TD valign='top' align='left'>",
+ $_[1][$i]->{'type'},
+ "</TD><TD WIDTH='100%' valign='top' align='left'>",
+ $_[1][$i]->{'name'},
+ "<BR>\n",
+ $_[1][$i]->{'explanation'},
+ "</TD></TR>" ) ;
+ }
+ }
+ }
+ return join( '',
+ "<P></P><TABLE BORDER='1' CELLPADDING='3' CELLSPACING='0' WIDTH='100%'>",
+ "<THEAD>",
+ "<TR><TD CLASS='tabletitle' COLSPAN='3'><B>",
+ $title,
+ "</B></TD></TR>",
+ "</THEAD>\n<TBODY>",
+ $content,
+ "</TBODY>\n</TABLE>\n\n" ) ;
+}
+
+#------------------------------------------------------
+#
+# Navigation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_navigation_bar()
+
+Replies the navigation bar.
+Takes 3 args:
+
+=over
+
+=item * url (string)
+
+is the url of the generated page.
+
+=item * params (hash ref)
+
+is a set of parameters used to generate the bar.
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub get_navigation_bar($$$) : method {
+ my $self = shift ;
+ my $thispage = $_[0] || confess( 'the url must be provided' ) ;
+ my $rootdir = $_[2] || confess( "the rootdir must be supplied" ) ;
+ confess( 'params is not an associative aray' ) unless (ishash($_[1])) ;
+
+ my $overview = "<b>".$self->{'LANG'}->get('I18N_LANG_OVERVIEW')."</b>" ;
+ my $tree = "<b>".$self->{'LANG'}->get('I18N_LANG_TREE')."</b>" ;
+ my $index = "<b>".$self->{'LANG'}->get('I18N_LANG_INDEX')."</b>" ;
+ my $newbuttons = '';
+
+ my $prev = html_uc( $self->{'LANG'}->get('I18N_LANG_PREV') ) ;
+ my $next = html_uc( $self->{'LANG'}->get('I18N_LANG_NEXT') ) ;
+
+ if ( ! $_[1]{'overview'} ) {
+ $overview = $self->ext_wt_href('overview-summary',$overview,$rootdir) ;
+ }
+ if ( ! $_[1]{'tree'} ) {
+ $tree = $self->ext_wt_href('overview-tree',$tree,$rootdir) ;
+ }
+ if ( $_[1]{'index'} ) {
+ $index = $self->href( htmlcatfile( $rootdir,
+ $self->filename('index',0) ),
+ $index,
+ $self->browserframe('index') ) ;
+ }
+ if ( $_[1]{'previous'} ) {
+ $prev = $self->href($_[1]{'previous'},$prev) ;
+ }
+ if ( $_[1]{'next'} ) {
+ $next = $self->href($_[1]{'next'},$next) ;
+ }
+
+ if ( $_[1]{'notree'} ) {
+ $tree = "" ;
+ }
+ else {
+ $tree = "<td BGCOLOR=\"#EEEEFF\">&nbsp;$tree&nbsp;</td>\n" ;
+ }
+
+ # new buttons
+ if ( ( $_[1]{'userdef'} ) &&
+ ( ! isemptyarray($_[1]->{'userdef'}) ) ) {
+ foreach my $button (@{$_[1]->{'userdef'}}) {
+ if ( ($button->{'url'}) && ($button->{'label'}) ) {
+ my $str = $self->href($button->{'url'},
+ $self->{'LANG'}->get($button->{'label'})) ;
+ $newbuttons .= "<td BGCOLOR=\"#EEEEFF\">&nbsp;<B>$str</B>&nbsp;</td>\n" ;
+ }
+ }
+ }
+
+ my $content = join( '',
+ "<table BORDER=\"0\" WIDTH=\"100%\" ",
+ "CELLPADDING=\"1\" CELLSPACING=\"0\">\n",
+ "<tr>\n",
+ "<td COLSPAN=2 BGCOLOR=\"#EEEEFF\">\n",
+ # First row
+ "<table BORDER=\"0\" CELLPADDING=\"0\" ",
+ "CELLSPACING=\"3\">\n",
+ "<tr ALIGN=\"center\" VALIGN=\"top\">\n",
+ "<td BGCOLOR=\"#EEEEFF\">&nbsp;$overview&nbsp;</td>\n",
+ $tree,
+ $newbuttons,
+ "<td BGCOLOR=\"#EEEEFF\">&nbsp;$index&nbsp;</td>\n",
+ "</tr>\n</table>\n",
+ "</td>\n",
+ # Name of the doc
+ "<td ALIGN=\"right\" VALIGN=\"top\" ROWSPAN=3><em><b>",
+ $self->{'TITLE'},
+ "</b></em></td>\n</tr>\n",
+ # Second row
+ "<tr>\n",
+ "<td BGCOLOR=\"white\"><font SIZE=\"-2\">",
+ "$prev&nbsp;&nbsp;$next",
+ "</font></td>\n",
+ "<td BGCOLOR=\"white\"><font SIZE=\"-2\">",
+ $self->ext_href('main_index',"<b>".
+ uc( $self->{'LANG'}->get('I18N_LANG_FRAMES') ).
+ "</b>",$rootdir),
+ "&nbsp;&nbsp;",
+ $self->href($thispage,"<b>".
+ uc( $self->{'LANG'}->get('I18N_LANG_NO_FRAME') ).
+ "</b>",
+ $self->browserframe('main_index')),
+ "&nbsp;</font></td>\n",
+ "</tr>\n",
+ "</table>\n"
+ ) ;
+}
+
+#------------------------------------------------------
+#
+# Filename API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * copy_files()
+
+Copies some files from the bib2html distribution directly inside the
+HTML documentation tree.
+
+=cut
+sub copy_files() : method {
+ my $self = shift ;
+ $self->SUPER::copy_files() ;
+ my @pack = File::Spec->splitdir( __FILE__ ) ;
+ pop @pack ;
+ push @pack, 'Dyna' ;
+ foreach my $file (@{$self->{'COPY_FILES'}}) {
+ Bib2HTML::General::Verbose::two( "Copying $file..." ) ;
+ Bib2HTML::General::Verbose::three( "\tfrom ".File::Spec->catdir(@pack) ) ;
+ Bib2HTML::General::Verbose::three( "\tto ".$self->{'TARGET_DIR'} ) ;
+ my $from = File::Spec->catfile(@pack, $file) ;
+ filecopy( $from,
+ File::Spec->catfile($self->{'TARGET_DIR'},$file) )
+ or Bib2HTML::General::Error::syserr( "$from: $!\n" );
+ }
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2002-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/child.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/child.gif
new file mode 100644
index 0000000000..a78d0c9559
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/child.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/emptychild.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/emptychild.gif
new file mode 100644
index 0000000000..84d1e5d9a3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/emptychild.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/lastchild.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/lastchild.gif
new file mode 100644
index 0000000000..9ba960473c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/lastchild.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/minus.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/minus.gif
new file mode 100644
index 0000000000..f502662bcc
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/minus.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/plus.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/plus.gif
new file mode 100644
index 0000000000..eeca02ce00
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/plus.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/samechild.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/samechild.gif
new file mode 100644
index 0000000000..c9e0f4da03
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/samechild.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/stylesheet.css b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/stylesheet.css
new file mode 100644
index 0000000000..4258c83fb4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Dyna/stylesheet.css
@@ -0,0 +1,180 @@
+BODY {
+ background-color : #F0F0F0;
+ color : #000000;
+ font-family : Arial, Tahoma, Helvetica, sans-serif;
+ font-size : 10pt;
+ margin-left : 1em;
+ margin-right : 1em;
+
+}
+
+MATH {
+ background-color : #F0F0F0;
+ color : #000000;
+ font-family : default;
+ font-family: Times New Roman;
+ font-size : 12pt;
+}
+
+A:LINK, A:VISITED {
+ color : #000099;
+}
+
+A:HOVER {
+ background-color : #FFFFFF;
+ color : #00009F;
+}
+
+H1 {
+ color : Black;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 16pt;
+ padding-bottom : 5px;
+ padding-top : 5px;
+ padding-left : 5px;
+}
+
+H2 {
+ color : Black;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 14pt;
+ margin-top : 2em;
+}
+
+H3 {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 12pt;
+ margin-top :1em;
+}
+
+H4 {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 11pt;
+ background-color : #E6E6FA;
+ padding-bottom : 2px;
+ padding-top : 2px;
+ padding-left : 2px;
+}
+
+H5 {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 10pt;
+ font-weight : 900;
+ margin-bottom : -1em;
+}
+
+H6 {
+ color : #000000;
+ font-family : Arial, Helvetica, sans-serif;
+ font-size : 10pt;
+ font-weight : 800;
+ margin-bottom : -1em;
+}
+
+BLOCKQUOTE {
+ margin-left : 0;
+}
+
+CAPTION {
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-weight : 800;
+}
+
+TH {
+ background-color : #FFFFFF;
+}
+
+TD {
+ background-color : #F0F0F0;
+ font-size : 10pt;
+}
+
+CODE {
+ font-size: 8pt;
+}
+
+SPAN.functionlinenumber {
+ font-size : 10pt;
+ font-weight : 600;
+ color : #000000;
+}
+
+SPAN.small {
+ font-size : 8pt;
+}
+
+SPAN.tiny {
+ font-size : 8pt;
+}
+
+UL {
+ margin: 7px;
+ padding: 5px;
+ padding-left: 5px;
+}
+
+LI {
+ text-indent: -15px;
+ padding-bottom: 2px;
+ padding-left: 14px;
+}
+
+TD.largetabletitle {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 12pt;
+ background-color : #E6E6FA;
+ padding-bottom : 2px;
+ padding-top : 2px;
+ padding-left : 2px;
+}
+
+TD.tabletitle {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 11pt;
+ background-color : #E6E6FA;
+ padding-bottom : 2px;
+ padding-top : 2px;
+ padding-left : 2px;
+}
+
+TD.smalltabletitle {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 10pt;
+ background-color : #E8E8FD;
+ padding-bottom : 2px;
+ padding-top : 2px;
+ padding-left : 2px;
+}
+
+TD.tinytabletitle {
+ color : Navy;
+ font-family : Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ font-size : 8pt;
+ background-color : #E8E8FD;
+ padding-bottom : 2px;
+ padding-top : 2px;
+ padding-left : 2px;
+}
+
+TD.TreeText {
+ font-family : Arial, Tahoma, Helvetica, sans-serif;
+ font-size : 10pt;
+ padding-bottom : 0px;
+ padding-top : 0px;
+ padding-left : 0px;
+ padding-right : 0px;
+}
+
+TBODY.smalltable {
+ font-size : 8pt;
+}
+
+TBODY.tinytable {
+ font-size : 8pt;
+}
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Simple.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Simple.pm
new file mode 100644
index 0000000000..9f96969d9f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Theme/Simple.pm
@@ -0,0 +1,678 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::Theme::Simple - A theme for the HTML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::Theme::Simple ;
+
+my $gen = Bib2HTML::Generator::Theme::Simple->new( generator,
+ bib2html,
+ target,
+ title,
+ lang ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Theme::Simple is a Perl module, which proposes
+a documentation theme for the HTML generator of bib2html.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::Theme::Simple;
+
+ my $gen = Bib2HTML::Generator::Theme::Simple->new( $generator,
+ { 'VERSION' => '0.11' },
+ './bib_output',
+ 'Title',
+ $lang ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * parent (object ref)
+
+is a reference to the current HTML generator.
+
+=item * bib2html (hash)
+
+contains some data about bib2html.
+
+=item * target (string)
+
+The directory in which the documentation must be put.
+
+=item * title (string)
+
+is the title of the documentation.
+
+=item * lang (object ref)
+
+is a reference to the language object.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Simple.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::Theme::Simple;
+
+@ISA = ('Bib2HTML::Generator::Theme');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+
+use Carp ;
+use File::Spec ;
+
+use Bib2HTML::Generator::Theme ;
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::HTML ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of theme
+my $VERSION = "5.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new( @_ ) ;
+
+ $self->{'BACKGROUND_COLOR'} = '#FFFFFF' ;
+
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Validation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * getMyValidHTML()
+
+Replies the list of W3C protocols for which this theme
+was validated. You must override this method.
+
+=cut
+sub getMyValidHTML() {
+ my $self = shift ;
+ return ( 'html' ) ;
+}
+
+#------------------------------------------------------
+#
+# Sectioning
+#
+#------------------------------------------------------
+
+=pod
+
+=item * section()
+
+Replies a section
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the new section.
+
+=item * content (string)
+
+is the content of the new section
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub section($$$) : method {
+ my $self = shift ;
+ my $title = $_[0] || confess( 'you must specify the title' ) ;
+ my $content = $_[1] || '' ;
+ my $rootdir = $_[2] || confess( 'you must specify the root directory' ) ;
+ return $self->par( join( '',
+ "<table BORDER=\"0\" WIDTH=\"100%\" ",
+ "CELLPADDING=\"1\" CELLSPACING=\"0\">\n",
+ "<tr>\n",
+ "<td BGCOLOR=\"#EEEEFF\">\n",
+ $title,
+ "</td>",
+ "</tr>\n",
+ "</table><br>\n",
+ $content ) ) ;
+}
+
+#------------------------------------------------------
+#
+# Right Frames
+#
+#------------------------------------------------------
+
+
+=pod
+
+=item * frame_subpart()
+
+Replies a subpart of a frame
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the part.
+
+=item * text (array)
+
+is the content of the frame.
+
+=item * rootdir (string)
+
+is the path to the root directory.
+
+=back
+
+=cut
+sub frame_subpart($$$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $content = "<P>" ;
+ if ( $title ) {
+ $content .= "<FONT size=\"+1\">$title</FONT><BR>\n" ;
+ }
+ if ( isarray( $_[1] ) ) {
+ foreach my $line (@{$_[1]}) {
+ $content .= $line."<BR>\n" ;
+ }
+ }
+ return $content."</P>\n" ;
+}
+
+=pod
+
+=item * frame_window()
+
+Replies a frame
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the frame (could be empty).
+
+=item * text (string)
+
+is the content of the frame.
+
+=item * prefix (optional string)
+
+is a string which is put before the title
+
+=back
+
+=cut
+sub frame_window($$) : method {
+ my $self = shift ;
+ my $title = $_[0] || '' ;
+ my $text = $_[1] || '' ;
+ return join( '',
+ ( $_[2] ? $self->par($_[2]) : '' ),
+ ($title ? "<FONT size=\"+1\"><B>$title</B></FONT>":''),
+ "<TABLE BORDER=\"0\" WIDTH=\"100%\">\n<TR>\n",
+ "<TD NOWRAP>",
+ $text,
+ "</TD></TR></TABLE><BR>\n" ) ;
+}
+
+#------------------------------------------------------
+#
+# Navigation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * get_navigation_bar()
+
+Replies the navigation bar.
+Takes 3 args:
+
+=over
+
+=item * url (string)
+
+is the url of the generated page.
+
+=item * params (hash ref)
+
+is a set of parameters used to generate the bar.
+
+=item * root (string)
+
+is the root directory for the generated documentation.
+
+=back
+
+=cut
+sub get_navigation_bar($$$) : method {
+ my $self = shift ;
+ my $thispage = $_[0] || confess( 'the url must be provided' ) ;
+ my $rootdir = $_[2] || confess( "the rootdir must be supplied" ) ;
+ confess( 'params is not an associative aray' ) unless (ishash($_[1])) ;
+
+ my $overview = "<b>".$self->{'LANG'}->get('I18N_LANG_OVERVIEW')."</b>" ;
+ my $tree = "<b>".$self->{'LANG'}->get('I18N_LANG_TREE')."</b>" ;
+ my $index = "" ;
+ my $newbuttons = '';
+
+ my $prev = html_uc( $self->{'LANG'}->get('I18N_LANG_PREV') ) ;
+ my $next = html_uc( $self->{'LANG'}->get('I18N_LANG_NEXT') ) ;
+
+ if ( ! $_[1]{'overview'} ) {
+ $overview = $self->ext_wt_href('overview-summary',$overview,$rootdir) ;
+ }
+ if ( ! $_[1]{'tree'} ) {
+ $tree = $self->ext_wt_href('overview-tree',$tree,$rootdir) ;
+ }
+ if ( $_[1]{'index'} ) {
+ $index = $self->href( htmlcatfile( $rootdir,
+ $self->filename('index',0) ),
+ "<b>".$self->{'LANG'}->get('I18N_LANG_INDEX')."</b>",
+ $self->browserframe('index') ) ;
+ if ($index) {
+ $index = "<td BGCOLOR=\"#EEEEFF\">&nbsp;$index&nbsp;</td>\n";
+ }
+ }
+ if ( $_[1]{'previous'} ) {
+ $prev = $self->href($_[1]{'previous'},$prev) ;
+ }
+ if ( $_[1]{'next'} ) {
+ $next = $self->href($_[1]{'next'},$next) ;
+ }
+
+ if ( $_[1]{'notree'} ) {
+ $tree = "" ;
+ }
+ else {
+ $tree = "<td BGCOLOR=\"#EEEEFF\">&nbsp;$tree&nbsp;</td>\n" ;
+ }
+
+ # new buttons
+ if ( ( $_[1]{'userdef'} ) &&
+ ( ! isemptyarray($_[1]->{'userdef'}) ) ) {
+ foreach my $button (@{$_[1]->{'userdef'}}) {
+ if ( ($button->{'url'}) && ($button->{'label'}) ) {
+ my $str = $self->href($button->{'url'},
+ $self->{'LANG'}->get($button->{'label'})) ;
+ $newbuttons .= "<td BGCOLOR=\"#EEEEFF\">&nbsp;<B>$str</B>&nbsp;</td>\n" ;
+ }
+ }
+ }
+
+ my $content = join( '',
+ "<table BORDER=\"0\" WIDTH=\"100%\" ",
+ "CELLPADDING=\"1\" CELLSPACING=\"0\">\n",
+ "<tr>\n",
+ "<td COLSPAN=2 BGCOLOR=\"#EEEEFF\">\n",
+ # First row
+ "<table BORDER=\"0\" CELLPADDING=\"0\" ",
+ "CELLSPACING=\"3\">\n",
+ "<tr ALIGN=\"center\" VALIGN=\"top\">\n",
+ "<td BGCOLOR=\"#EEEEFF\">&nbsp;$overview&nbsp;</td>\n",
+ $tree,
+ $newbuttons,
+ $index,
+ "</tr>\n</table>\n",
+ "</td>\n",
+ # Name of the doc
+ "<td ALIGN=\"right\" VALIGN=\"top\" ROWSPAN=3><em><b>",
+ $self->{'TITLE'},
+ "</b></em></td>\n</tr>\n",
+ # Second row
+ "<tr>\n",
+ "<td BGCOLOR=\"white\"><font SIZE=\"-2\">",
+ "$prev&nbsp;&nbsp;$next",
+ "</font></td>\n",
+ "<td BGCOLOR=\"white\"><font SIZE=\"-2\">",
+ $self->ext_href('main_index',"<b>".
+ html_uc( $self->{'LANG'}->get('I18N_LANG_FRAMES') ).
+ "</b>",$rootdir),
+ "&nbsp;&nbsp;",
+ $self->href($thispage,"<b>".
+ html_uc( $self->{'LANG'}->get('I18N_LANG_NO_FRAME') ).
+ "</b>",
+ $self->browserframe('main_index')),
+ "&nbsp;</font></td>\n",
+ "</tr>\n",
+ "</table>\n"
+ ) ;
+}
+
+#------------------------------------------------------
+#
+# Tabulars
+#
+#------------------------------------------------------
+
+=pod
+
+=item * build_onecolumn_array()
+
+Replies an one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_onecolumn_array($$) : method {
+ my $self = shift ;
+ my $content = join( '',
+ "<DIV><TABLE BORDER=\"1\" ",
+ "CELLPADDING=\"3\" CELLSPACING=\"0\" ",
+ "WIDTH=\"100%\">\n",
+ "<TR BGCOLOR=\"#CCCCFF\">\n",
+ "<TD COLSPAN=2><FONT SIZE=\"+2\"><B>",
+ $_[0] || '',
+ "</B></FONT></TD>\n",
+ "</TR>\n" ) ;
+ confess( 'cells is not an array' ) unless (isarray($_[1])) ;
+ foreach my $case (@{$_[1]}) {
+ $content .= join( '',
+ "<TR BGCOLOR=\"white\">",
+ "<TD WIDTH=\"20%\" ALIGN=\"left\" VALIGN=\"top\">",
+ $case,
+ "</TD>",
+ "</TR>\n" ) ;
+ }
+ $content .= "</TABLE><BR></DIV>\n" ;
+ return $content ;
+}
+
+=pod
+
+=item * build_small_array()
+
+Replies an small one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_small_array($$) : method {
+ my $self = shift ;
+ my $content = join( '',
+ "<P><TABLE BORDER=\"1\" CELLPADDING=\"3\" ",
+ "CELLSPACING=\"0\" WIDTH=\"100%\">\n",
+ "<TR BGCOLOR=\"#EEEEFF\">\n",
+ "<TD><B>",
+ $_[0] || '',
+ "</B></TD>\n",
+ "</TR>\n" ) ;
+ confess( 'cells is not an array' ) unless (isarray($_[1])) ;
+ foreach my $case (@{$_[1]}) {
+ $content .= join( '',
+ "<TR BGCOLOR=\"white\">",
+ "<TD ALIGN=\"left\" VALIGN=\"top\">",
+ $case,
+ "</TD></TR>\n" ) ;
+ }
+ $content .= "</TABLE></P>\n" ;
+ return $content ;
+}
+
+=pod
+
+=item * build_tiny_array()
+
+Replies an small one-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_tiny_array($$) : method {
+ my $self = shift ;
+ my $content = join( '',
+ "<P><TABLE BORDER=\"1\" CELLPADDING=\"3\" ",
+ "CELLSPACING=\"0\" WIDTH=\"100%\">\n",
+ "<TR BGCOLOR=\"#EEEEEFF\">\n",
+ "<TD><FONT SIZE=\"-1\"><B>",
+ $_[0] || '',
+ "</B></FONT></TD>\n",
+ "</TR>\n" ) ;
+ confess( 'cells is not an array' ) unless (isarray($_[1])) ;
+ foreach my $case (@{$_[1]}) {
+ $content .= join( '',
+ "<TR BGCOLOR=\"white\">",
+ "<TD ALIGN=\"left\" VALIGN=\"top\">",
+ "<FONT SIZE=\"-1\">",
+ $case,
+ "</FONT>",
+ "</TD></TR>\n" ) ;
+ }
+ $content .= "</TABLE></P>\n" ;
+ return $content ;
+}
+
+=pod
+
+=item * build_twocolumn_array()
+
+Replies an two-column array.
+Takes 2 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=back
+
+=cut
+sub build_twocolumn_array($$) : method {
+ my $self = shift ;
+ my $content = join( '',
+ "<P></P><TABLE BORDER=\"1\" ",
+ "CELLPADDING=\"3\" CELLSPACING=\"0\" ",
+ "WIDTH=\"100%\">\n",
+ "<TR BGCOLOR=\"#CCCCFF\">\n",
+ "<TD COLSPAN=2><FONT SIZE=\"+2\"><B>",
+ $_[0] || '',
+ "</B></FONT></TD>\n",
+ "</TR>\n" ) ;
+ confess( 'cells is not an array' ) unless (isarray($_[1])) ;
+ foreach my $cellule (@{$_[1]}) {
+ my $name = $cellule->{name} ;
+ my $explanation = $cellule->{explanation} || '' ;
+ if ( $name ) {
+ if ( ! $explanation ) {
+ $explanation = "&nbsp;" ;
+ }
+ $content = join( '',
+ $content,
+ "<TR BGCOLOR=\"white\">",
+ "<TD WIDTH=\"20%\" ALIGN=\"left\" VALIGN=\"top\">",
+ $name,
+ "</TD><TD>",
+ $explanation,
+ "</TD></TR>\n" ) ;
+ }
+ }
+ $content .= "</TABLE>\n" ;
+ return $content ;
+}
+
+=pod
+
+=item * build_threecolumn_array()
+
+Replies an two-column array.
+Takes 3 args:
+
+=over
+
+=item * title (string)
+
+is the title of the array
+
+=item * cells (array ref)
+
+is the content of the returned cells.
+
+=item * anchor (string)
+
+is the name of the anchor.
+
+=back
+
+=cut
+sub build_threecolumn_array($$$) : method {
+ my $self = shift ;
+ my $content = join( '',
+ "<P>",
+ ( $_[2] ? "<A NAME=\"$_[2]\"></A>" : '' ),
+ "<TABLE BORDER=\"1\" ",
+ "CELLPADDING=\"3\" CELLSPACING=\"0\" ",
+ "WIDTH=\"100%\">\n",
+ "<TR BGCOLOR=\"#CCCCFF\">\n",
+ "<TD COLSPAN=2><FONT SIZE=\"+2\"><B>",
+ $_[0] || '' ,
+ "</B></FONT></TD>\n",
+ "</TR>\n" ) ;
+ confess( 'cells is not an array' ) unless (isarray($_[1])) ;
+ foreach my $cellule (@{$_[1]}) {
+ my $name = ${%{$cellule}}{name} ;
+ my $explanation = ${%{$cellule}}{explanation} || '' ;
+ my $type = ${%{$cellule}}{type} ;
+ if ( $name ) {
+ if ( ! $explanation ) {
+ $explanation = "&nbsp;" ;
+ }
+ $content = join( '',
+ $content,
+ "<TR BGCOLOR=\"white\"><TD WIDTH=\"1%\" ",
+ "VALIGN=\"top\"><FONT SIZE=\"-1\"><CODE>",
+ $type,
+ "</CODE></FONT></TD>",
+ "<TD ALIGN=\"left\" VALIGN=\"top\"><CODE>",
+ $name,
+ "</CODE><BR>\n",
+ $explanation,
+ "</TD></TR>\n" ) ;
+ }
+ }
+ $content .= "</TABLE></P>\n" ;
+ return $content ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Writer.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Writer.pm
new file mode 100644
index 0000000000..f6ace330ba
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/Writer.pm
@@ -0,0 +1,211 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::Writer - An output stream writer
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Writer is a Perl module, which permits to
+abstract the output streams used by bib2html.
+
+=head1 SYNOPSYS
+
+Bib2HTML::Generator::Writer->new( ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::Writer is a Perl module, which permits to
+abstract the output streams used by bib2html.
+
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Writer.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::Writer;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of abstract generator
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {} ;
+ return $self;
+}
+
+=pod
+
+=item * openstream($)
+
+Open the output stream.
+Takes 1 param:
+
+=over
+
+=item * filename (string)
+
+is the name of the output file.
+
+=back
+
+=cut
+sub openstream($) {
+ my $self = shift;
+ my $filename = shift || confess( 'you must supply the root directory' ) ;
+ return 1;
+}
+
+=pod
+
+=item * out($)
+
+Put a string into the output stream.
+Takes 1 param:
+
+=over
+
+=item * str (string)
+
+is the string to output.
+
+=back
+
+=cut
+sub out($) {
+ my $self = shift;
+ my $str = shift || '';
+ return 1;
+}
+
+=pod
+
+=item * closestream()
+
+Close the currently opened stream.
+
+=cut
+sub closestream() {
+ my $self = shift;
+ return 1;
+}
+
+=pod
+
+=item * create_output_directory()
+
+Create the output directory if required.
+Replies the output filename (directory).
+Takes n params:
+
+=over
+
+=item * output (string)
+
+is the output directory to create
+
+=pod
+
+=item * create_output_directory()
+
+Create the output directory if required.
+Replies the output filename (directory).
+Takes n params:
+
+=over
+
+=item * output (string)
+
+is the output directory to create.
+
+=item * exceptions (list of strings)
+
+is the list of the file in the existing output directory
+to not remove.
+
+=back
+
+=cut
+sub create_output_directory($@) {
+ my $self = shift;
+ my $output = shift;
+ return $output;
+}
+
+=pod
+
+=item * is_file_creation_allowed()
+
+Replies if this writer allows to create files.
+
+=cut
+sub is_file_creation_allowed() {
+ my $self = shift;
+ return undef;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/XMLGen.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/XMLGen.pm
new file mode 100644
index 0000000000..300a8fedb5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/XMLGen.pm
@@ -0,0 +1,1364 @@
+# Copyright (C) 2004-07 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Generator::XMLGen - A basic XML generator
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Generator::XMLGen ;
+
+my $gen = Bib2HTML::Generator::XMLGen->new( content, output, info, titles,
+ lang, theme, params ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Generator::XMLGen is a Perl module, which permits to
+generate XML pages for the BibTeX database.
+The generated XML file is compliant with the DTD from
+http://bibtexml.sf.net/
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a generator script, say something like this:
+
+ use Bib2HTML::Generator::XMLGen;
+
+ my $gen = Bib2HTML::Generator::XMLGen->new( { }, "./bib",
+ { 'BIB2HTML_VERSION' => "0.1",
+ },
+ { 'SHORT' => "This is the title",
+ 'LONG' => "This is the title",
+ },
+ "English",
+ "Simple", ""
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * content (hash)
+
+see AbstractGenerator help.
+
+=item * output (string)
+
+see AbstractGenerator help.
+
+=item * bib2html_data (hash)
+
+see AbstractGenerator help.
+
+=item * titles (hash)
+
+see AbstractGenerator help.
+
+=item * lang (string)
+
+see AbstractGenerator help.
+
+=item * theme (string)
+
+is the name of the theme to use
+
+=item * show_bibtex (boolean)
+
+indicates if this parser must generate a verbatim of the BibTeX code
+
+=item * params (optional array)
+
+is the set of parameters passed to the generator.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in HTMLGen.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Generator::XMLGen;
+
+@ISA = ('Bib2HTML::Generator::AbstractGenerator');
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Carp ;
+use File::Spec ;
+use File::Basename ;
+
+use Bib2HTML::Generator::AbstractGenerator;
+use Bib2HTML::General::Misc;
+use Bib2HTML::General::Error;
+use Bib2HTML::General::HTML;
+use Bib2HTML::General::Encode;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of this generator
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$$$$$;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my @langs = ();
+ if (isarray($_[4])) {
+ foreach my $l (@{$_[4]}) {
+ if ($l !~ /_[a-zA-Z0-9]+Gen$/) {
+ push @langs, $l."_XMLGen";
+ }
+ push @langs, $l;
+ }
+ }
+ else {
+ @langs = ( $_[4] );
+ if ($_[4] !~ /_[a-zA-Z0-9]+Gen$/) {
+ unshift @langs, $_[4]."_XMLGen";
+ }
+ }
+
+ my $self = $class->SUPER::new($_[0], #content
+ $_[1], #output
+ $_[2], #bib2html info
+ $_[3], #titles
+ \@langs, #lang
+ $_[6], #show bibtex
+ $_[7], #params
+ ) ;
+ bless( $self, $class );
+
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Generation parameters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * save_generator_parameter()
+
+Replies if the specified generator parameter was supported.
+This function was called each time a generator parameter was
+given to this generator. By default, simply update the
+given parameter value (second parameter).
+You could do some stuff before
+saving (splitting...). Replies false is the parameter was
+not recognized. Don't forget to call inherited functions.
+Takes 2 args:
+
+=over
+
+=item * param_name (string)
+
+is the name of the parameter.
+
+=item * param_value (byref string)
+
+is the value of the parameter.
+
+=back
+
+=cut
+sub save_generator_parameter($$) {
+ my $self = shift ;
+ if ( ( $_[0] eq 'xml-encoding' ) ) {
+ # will be saved by PARENT::new
+ return 1 ;
+ }
+ else {
+ return $self->SUPER::save_generator_parameter($_[0],$_[1]) ;
+ }
+}
+
+=pod
+
+=item * display_supported_generator_params()
+
+Display the list of supported generator parameters.
+
+=cut
+sub display_supported_generator_params() {
+ my $self = shift ;
+ $self->SUPER::display_supported_generator_params() ;
+
+ $self->show_supported_param('xml-encoding',
+ 'String, the character encoding used in the HTML pages '.
+ '("UTF8", "ISO-8859-1"...).' );
+}
+
+#------------------------------------------------------
+#
+# Generation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * pre_processing()
+
+Pre_processing.
+
+=cut
+sub pre_processing() : method {
+ my $self = shift ;
+
+ # Set the HTML encoding
+ if (!$self->{'GENERATOR_PARAMS'}{'xml-encoding'}) {
+ $self->{'GENERATOR_PARAMS'}{'xml-encoding'} = get_default_encoding();
+ }
+ set_default_encoding($self->{'GENERATOR_PARAMS'}{'xml-encoding'});
+
+ # Call inherited generation method
+ $self->SUPER::pre_processing() ;
+}
+
+=pod
+
+=item * do_processing()
+
+Main processing.
+
+=cut
+sub do_processing() : method {
+ my $self = shift ;
+
+ # Call inherited generation method
+ $self->SUPER::do_processing() ;
+
+ # Generates each part of the document
+ my $t = '' ;
+
+ # Generates the content for each entries
+ $self->create_XMLENTRIES($t) ;
+
+ # Generates the complete data file
+ $self->create_XML_file($t) ;
+
+ # Generates the header and the footer
+ $self->create_XMLHEADER($t) ;
+ $self->create_XMLFOOTER($t) ;
+
+ # Create7 file file
+ $self->create_FILE($t) ;
+}
+
+=pod
+
+=item * create_the_xml_entry()
+
+Generates and replies the XML string for the specified entry
+Takes 1 arg:
+
+=over
+
+=item * key (string)
+
+is the key of the bibtex entry.
+
+=back
+
+=cut
+sub create_the_xml_entry($) : method {
+ my $self = shift ;
+ my $key = shift ;
+
+ # Compute entry constants
+ my $type = $self->{'CONTENT'}{'entries'}{"$key"}{'type'} ;
+ my $entry = '' ;
+
+ # Calls the content building function
+ my $fct = "create_XMLENTRY_$type" ;
+ if ( my $funcref = $self->can( $fct ) ) {
+ $self->$funcref( $key,
+ $self->{'CONTENT'}{'entries'}{"$key"},
+ $entry ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm("I don't know how to generate a '\@".$type.
+ "' for the entry '$key'. Assume '\@misc'",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{"$key"}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{"$key"}{'location'} ) ) ;
+ $self->create_XMLENTRY_misc( $key,
+ $self->{'CONTENT'}{'entries'}{"$key"},
+ $entry ) ;
+ }
+
+ # Create the entry's XML string
+ $entry = $self->build_xmltag("bibtex:$type",$entry) ;
+ $entry = $self->build_xmltag("bibtex:entry",$entry,
+ "id=\"$key\"") ;
+ $_[0] .= $entry ;
+}
+
+=pod
+
+=item * create_the_standalone_xml_entry()
+
+Generates and replies the standalone XML string for the specified entry
+Takes 1 arg:
+
+=over
+
+=item * key (string)
+
+is the key of the bibtex entry.
+
+=back
+
+=cut
+sub create_the_standalone_xml_entry($) : method {
+ my $self = shift ;
+
+ my $content = $self->create_the_xml_entry($_[0]) ;
+ $self->create_XML_file($content) ;
+ $self->create_XMLHEADER($content) ;
+ return $content ;
+}
+
+=pod
+
+=item * create_XMLENTRIES()
+
+Generates the XML pages for each entry
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_XMLENTRIES($) : method {
+ my $self = shift ;
+ my @entries = $self->get_all_entries_ayt() ;
+ my $i = $#entries ;
+ while ( $i >= 0 ) {
+ # Compute entry constants
+ my $type = $self->{'CONTENT'}{'entries'}{$entries[$i]}{'type'} ;
+ my $entry = '' ;
+
+ # Calls the content building function
+ my $fct = "create_XMLENTRY_$type" ;
+ if ( my $funcref = $self->can( $fct ) ) {
+ $self->$funcref( $entries[$i],
+ $self->{'CONTENT'}{'entries'}{$entries[$i]},
+ $entry ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm("I don't know how to generate a '\@".$type.
+ "' for the entry '".$entries[$i]."'. Assume '\@misc'",
+ extract_file_from_location( $self->{'CONTENT'}{'entries'}{$entries[$i]}{'location'} ),
+ extract_line_from_location( $self->{'CONTENT'}{'entries'}{$entries[$i]}{'location'} ) ) ;
+ $self->create_XMLENTRY_misc( $entries[$i],
+ $self->{'CONTENT'}{'entries'}{$entries[$i]},
+ $entry ) ;
+ }
+
+ # Create the entry's XML string
+ $entry = $self->build_xmltag("bibtex:$type",$entry) ;
+ $entry = $self->build_xmltag("bibtex:entry",$entry,
+ "id=\"".$entries[$i]."\"") ;
+ $_[0] .= $entry ;
+
+ $i -- ;
+ }
+}
+
+=pod
+
+=item * create_XMLHEADER
+
+Replies the header of the XML file.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_XMLHEADER($) : method {
+ my $self = shift ;
+ my $encoding = $self->genparam('xml-encoding') || "ISO-8859-1";
+ $_[0] = join( '',
+ "<?xml version=\"1.0\" encoding=\"",
+ $encoding,
+ "\"?>\n",
+ "<!DOCTYPE bibtex:file PUBLIC \"-//BibTeXML//DTD XML for BibTeX v1.0//EN\" \"bibteXML-ext.dtd\" >\n",
+ $_[0]);
+}
+
+=pod
+
+=item * create_XMLFOOTER
+
+Replies the header of the XML file.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_XMLFOOTER($) : method {
+ my $self = shift ;
+ $_[0] = join( '',
+ $_[0],
+ "<!-- File generated with bib2html ",
+ $self->{'BIB2HTML'}{'VERSION'},
+ " the ",
+ "".localtime(),
+ "\n Copyright (c) ",
+ $self->{'BIB2HTML'}{'AUTHOR'},
+ " (",
+ $self->{'BIB2HTML'}{'AUTHOR_EMAIL'},
+ ") -->\n");
+}
+
+=pod
+
+=item * create_XML_file
+
+Create <bibtex:file>
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content to fill
+
+=back
+
+=cut
+sub create_XML_file($) : method {
+ my $self = shift ;
+ $_[0] = $self->build_xmltag('bibtex:file',$_[0],
+ "xmlns:bibtex=\"http://bibtexml.sf.net/\"") ;
+}
+
+=pod
+
+=item * create_FILE
+
+Creates the XML file.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content of the XML file.
+
+=back
+
+=cut
+sub create_FILE($) : method {
+ my $self = shift ;
+ Bib2HTML::General::Verbose::two( "Writing ".$self->{'TARGET'}."..." ) ;
+
+ my $writer = $self->get_stream_writer();
+
+ $writer->openstream($self->{'TARGET'});
+ $writer->out($_[0]||'') ;
+ $writer->closestream() ;
+}
+
+=pod
+
+=item * create_XMLENTRY_REQUIREDFIELD()
+
+Generates a required XML field.
+Takes 4 args:
+
+=over
+
+=item * name (string)
+
+is the name of the field.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_REQUIREDFIELD($$$$) : method {
+ my $self = shift ;
+ my $name = shift ;
+ my $entrykey = shift ;
+ my $data = shift ;
+
+ my $content = '' ;
+ if ( exists $data->{'fields'}{"$name"} ) {
+ $content = $data->{'fields'}{"$name"} || '' ;
+ }
+ $content = strip_html_tags($content); #get_html_entities() ;
+ $content =~ s/\s+/ /g;
+ $_[0] .= $self->build_xmltag("bibtex:$name",$content) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_OPTIONALFIELD()
+
+Generates a optional XML field.
+Takes 4 args:
+
+=over
+
+=item * name (string)
+
+is the name of the field.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_OPTIONALFIELD($$$$) : method {
+ my $self = shift ;
+ my $name = shift ;
+ my $entrykey = shift ;
+ my $data = shift ;
+
+ if ( exists $data->{'fields'}{"$name"} ) {
+ my $content = $data->{'fields'}{"$name"} || '' ;
+ $content = strip_html_tags($content); #get_html_entities(strip_html_tags($content)) ;
+ $content =~ s/\s+/ /g;
+ $_[0] .= $self->build_xmltag("bibtex:$name",$content) ;
+ }
+}
+
+=pod
+
+=item * create_XMLENTRY_NAMEFIELD()
+
+Generates a optional names' XML field.
+Takes 4 args:
+
+=over
+
+=item * name (string)
+
+is the name of the field.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_NAMEFIELD($$$$) : method {
+ my $self = shift ;
+ my $name = shift ;
+ my $entrykey = shift ;
+ my $data = shift ;
+
+ if ( exists $data->{'fields'}{"$name"} ) {
+ my @authors = $self->get_all_authors($data->{'fields'}{"$name"} || '') ;
+ my $content = '' ;
+ foreach my $author (@authors) {
+ my $aut = '' ;
+ if (!$author->{'et al'}) {
+ if ($author->{'first'}) {
+ if ($author->{'first'} =~ /^[a-zA-Z]+\.(?:[a-zA-Z]+\.)*$/) {
+ $aut .= $self->build_xmltag('bibtex:initials',
+ strip_html_tags($author->{'first'}));
+ #get_html_entities(strip_html_tags($author->{'first'}))) ;
+ }
+ else {
+ $aut .= $self->build_xmltag('bibtex:first',
+ strip_html_tags($author->{'first'}));
+ # get_html_entities(strip_html_tags($author->{'first'}))) ;
+ }
+ }
+ if ($author->{'last'}) {
+ $aut .= $self->build_xmltag('bibtex:last',
+ strip_html_tags($author->{'last'}));
+ # get_html_entities(strip_html_tags($author->{'last'}))) ;
+ }
+ if ($author->{'von'}) {
+ $aut .= $self->build_xmltag('bibtex:prelast',
+ strip_html_tags($author->{'first'}));
+ # get_html_entities(strip_html_tags($author->{'von'}))) ;
+ }
+ if ($author->{'jr'}) {
+ $aut .= $self->build_xmltag('bibtex:lineage',
+ strip_html_tags($author->{'first'}));
+ # get_html_entities(strip_html_tags($author->{'jr'}))) ;
+ }
+ }
+ $content .= $self->build_xmltag("bibtex:people",$aut) ;
+ }
+ if ($content) {
+ $_[0] .= $self->build_xmltag("bibtex:$name",$content) ;
+ }
+ }
+}
+
+=pod
+
+=item * create_XMLENTRY_KEYWORDSFIELD()
+
+Generates a optional keywords' XML field.
+Takes 4 args:
+
+=over
+
+=item * name (string)
+
+is the name of the field.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_KEYWORDSFIELD($$$$) : method {
+ my $self = shift ;
+ my $name = shift ;
+ my $entrykey = shift ;
+ my $data = shift ;
+
+ if ( exists $data->{'fields'}{"$name"} ) {
+ my $content = '' ;
+ my @words ;
+ if ($data->{'fields'}{"$name"} =~ /;,:/) {
+ @words = split(/\s*[;,:]\s*/,$data->{'fields'}{"$name"}) ;
+ }
+ else {
+ @words = split(/\s+/,$data->{'fields'}{"$name"}) ;
+ }
+ foreach my $word (@words) {
+ $content .= $self->build_xmltag('bibtex:keyword',
+ strip_html_tags($word));
+ #get_html_entities(strip_html_tags($word))) ;
+ }
+ if ($content) {
+ $_[0] .= $self->build_xmltag("bibtex:$name",$content) ;
+ }
+ }
+}
+
+=pod
+
+=item * create_XMLENTRY_DEFAULTFIELDS()
+
+Generates the default XML fields.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_DEFAULTFIELDS($$$) : method {
+ my $self = shift ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('title',@_) ;
+
+ $self->create_XMLENTRY_NAMEFIELD('author',@_) ;
+ $self->create_XMLENTRY_NAMEFIELD('editor',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('month',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('note',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('abstract',@_) ;
+ $self->create_XMLENTRY_KEYWORDSFIELD('keywords',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('isbn',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('issn',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('lccn',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('url',@_) ;
+
+ if ( exists $_[1]{'fields'}{'annote'} ) {
+ $self->create_XMLENTRY_OPTIONALFIELD('annote',@_) ;
+ }
+ elsif ( exists $_[1]{'fields'}{'comments'} ) {
+ $self->create_XMLENTRY_OPTIONALFIELD('comments',@_) ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Generation of entries API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * create_XMLENTRY_article()
+
+Generates the XML entry for an article.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_article($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('journal',@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('volume',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('number',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('pages',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_book()
+
+Generates the XML entry for a book.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_book($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('publisher',@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('series',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('volume',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('number',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('edition',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_booklet()
+
+Generates the XML entry for a book's part.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_booklet($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('howpublished',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_inbook()
+
+Generates the XML entry for a book's part.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_inbook($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('howpublished',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_incollection()
+
+Generates the XML entry for a collection's article.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_incollection($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_inproceedings(@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_inproceedings()
+
+Generates the XML entry for an article in a conference's proceedings.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_inproceedings($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('booktitle',@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('series',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('editor',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('volume',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('number',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('pages',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('organization',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('publisher',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('type',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_manual()
+
+Generates the XML entry for a manual.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_manual($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('edition',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('organization',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_masterthesis()
+
+Generates the XML entry for a master's thesis.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_masterthesis($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_phdthesis(@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_mastersthesis()
+
+Generates the XML entry for a master's thesis.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_mastersthesis($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_phdthesis(@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_phdthesis()
+
+Generates the XML entry for a PHD thesis.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_phdthesis($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('school',@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('type',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_proceedings()
+
+Generates the XML entry for a conference's proceedings.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_proceedings($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('series',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('volume',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('number',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('organization',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('publisher',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_techreport()
+
+Generates the XML entry for a technical report.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_techreport($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_REQUIREDFIELD('institution',@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('number',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('address',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('type',@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_unpublished()
+
+Generates the XML entry for an unpublished document.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_unpublished($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+}
+
+=pod
+
+=item * create_XMLENTRY_misc()
+
+Generates the XML entry for a miscellaneous document.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * data (hash)
+
+is the data for the entry.
+
+=item * content (ref string)
+
+is the content to update.
+
+=back
+
+=cut
+sub create_XMLENTRY_misc($$$) : method {
+ my $self = shift ;
+ $self->create_XMLENTRY_DEFAULTFIELDS(@_) ;
+
+ $self->create_XMLENTRY_OPTIONALFIELD('howpublished',@_) ;
+ $self->create_XMLENTRY_OPTIONALFIELD('year',@_) ;
+}
+
+#------------------------------------------------------
+#
+# Uitility API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * indent
+
+indent the specified string.
+Takes 1 arg:
+
+=over
+
+=item * content (string)
+
+is the content of the XML file.
+
+=back
+
+=cut
+sub indent($) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my @lines = split(/\n/,($_[0]||'')) ;
+ @lines = map { " $_" } @lines ;
+ $text = join("\n",@lines) ;
+ if ( $text !~ /\n$/ ) {
+ $text .= "\n" ;
+ }
+ return $text ;
+}
+
+=pod
+
+=item * build_xmllevel
+
+replies an XML tag built from the parameters.
+Takes 3 args:
+
+=over
+
+=item * name (string)
+
+is the name of the tag.
+
+=item * content (string)
+
+is the content of the tag.
+
+=item * params (optional string)
+
+is the list of parameters for the tags.
+
+=back
+
+=cut
+sub build_xmltag($$;$) : method {
+ my $self = shift ;
+ my $name = $_[0] || confess('you must supply a tag name') ;
+ my $content = $_[1] || '' ;
+ my $params = $_[2] || '' ;
+ if ($content) {
+ my $begin = "<$name".($params?" $params":"").">" ;
+ my $end = "</$name>\n" ;
+ if (($content =~ /\n/)||(length("$begin$content$end")>=40)) {
+ return join( '',
+ "$begin\n",
+ $self->indent($content),
+ "$end" );
+ }
+ else {
+ $content =~ s/^\s+// ;
+ $content =~ s/\s+$// ;
+ return join( '',
+ "$begin",
+ $content,
+ "$end" );
+ }
+ }
+ else {
+ return "<$name".($params?" $params":"")." />" ;
+ }
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2004-07 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML-ext.dtd b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML-ext.dtd
new file mode 100644
index 0000000000..6d27b24388
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML-ext.dtd
@@ -0,0 +1,161 @@
+<!--
+ - File: $Id: bibteXML-ext.dtd, 2003.06.26 13:52:00 vbg Exp $
+ -
+ - This DTD expresses XML markup similar to the BibTeX language
+ - specified for LaTeX, or actually its content model.
+ - For documentation on BibTeX, see
+ - http://www.ctan.org/tex-archive/biblio/bibtex/distribs/doc/
+ -
+ - Suggested invocation:
+ -
+ - <?xml version="1.0" encoding="UTF-8"?>
+ - <!DOCTYPE bibtex:file PUBLIC
+ - "-//BibTeXML//DTD XML for BibTeX (extended) v1.0//EN"
+ - "bibteXML-ext.dtd" >
+ - <bibtex:file xmlns:bibtex="http://bibtexml.sf.net/">
+ - ...
+ - </bibtex:file>
+ -
+ - Available from http://bibtexml.sf.net/
+ -
+ - This code originally developed by
+ - Vidar Bronken Gundersen
+ - Zeger W. Hendrikse
+ -
+ - This program is free software; you can redistribute it and/or
+ - modify it under the terms of the GNU General Public License.
+ - See http://www.gnu.org/copyleft/gpl.html
+ -
+-->
+
+
+<!-- popular user fields -->
+
+<!ENTITY % user.fields
+ "( bibtex:abstract?, bibtex:affiliation?,
+ bibtex:contents?, bibtex:copyright?,
+ (bibtex:isbn | bibtex:issn)?, bibtex:doi?,
+ bibtex:keywords?, bibtex:language?, bibtex:lccn?,
+ bibtex:location?, bibtex:mrnumber?, bibtex:price?,
+ bibtex:size?, bibtex:url?, bibtex:category? )">
+
+<!ENTITY % BibTeXML.common.standard.fields
+ ", bibtex:key?, bibtex:crossref?, %user.fields;">
+
+
+<!-- ..................................................................... -->
+<!-- Other popular fields
+ -
+ - BibTeX is extremely popular, and many people have used it to store
+ - information. Here is a list of some of the more common fields:
+ -
+ - [affiliation] The authors affiliation.
+ - [abstract] An abstract of the work.
+ - [contents] A Table of Contents
+ - [copyright] Copyright information.
+ - [ISBN] The International Standard Book Number.
+ - [ISSN] The International Standard Serial Number.
+ - Used to identify a journal.
+ - [keywords] Key words used for searching or possibly for annotation.
+ - [language] The language the document is in.
+ - [location] A location associated with the entry,
+ - such as the city in which a conference took place.
+ - [LCCN] The Library of Congress Call Number.
+ - I've also seen this as lib-congress.
+ - [mrnumber] The Mathematical Reviews number.
+ - [price] The price of the document.
+ - [size] The physical dimensions of a work.
+ - [URL] The WWW Universal Resource Locator that points to the item being
+ - referenced. This often is used for technical reports to point to the
+ - ftp site where the postscript source of the report is located.
+ -
+ - When using BibTeX with LaTeX you need
+ - BibTeX style files to print these data.
+ -
+ - Ref: www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html
+-->
+
+<!ELEMENT bibtex:abstract (#PCDATA) >
+<!ELEMENT bibtex:affiliation (#PCDATA) >
+<!ELEMENT bibtex:contents (#PCDATA) >
+<!ELEMENT bibtex:copyright (#PCDATA) >
+<!ELEMENT bibtex:isbn (#PCDATA) >
+<!ELEMENT bibtex:issn (#PCDATA) >
+<!ELEMENT bibtex:language (#PCDATA) >
+<!ELEMENT bibtex:lccn (#PCDATA) >
+<!ELEMENT bibtex:location (#PCDATA) >
+<!ELEMENT bibtex:mrnumber (#PCDATA) >
+<!ELEMENT bibtex:price (#PCDATA) >
+<!ELEMENT bibtex:size (#PCDATA) >
+<!ELEMENT bibtex:url (#PCDATA) >
+
+
+<!-- User requested fields
+ - [category] Category of this bibitem
+ - [DOI] The Digital Object Identifier (www.doi.org)
+ - used to redirect to articles, a key like 10.1000/203
+-->
+
+<!ELEMENT bibtex:category (#PCDATA) >
+<!ELEMENT bibtex:doi (#PCDATA) >
+
+
+<!-- ..................................................................... -->
+<!-- Alternative syntax for compound fields
+ - for author, editor, keywords and title fields.
+ - Backwards compatible syntax.
+-->
+
+<!ENTITY % BibTeXML.author.element "IGNORE">
+<!ENTITY % BibTeXML.editor.element "IGNORE">
+
+<!ENTITY % author.qname "(bibtex:author | bibtex:authorlist)">
+<!ENTITY % editor.qname "(bibtex:editor | bibtex:editorlist)">
+
+<!ELEMENT bibtex:authorlist (bibtex:person+) >
+<!ELEMENT bibtex:editorlist (bibtex:person+) >
+<!ELEMENT bibtex:author (#PCDATA) >
+<!ELEMENT bibtex:editor (#PCDATA) >
+
+<!ELEMENT bibtex:person ( ( bibtex:initials |
+ (bibtex:first, bibtex:middle?)),
+ bibtex:prelast?, bibtex:last,
+ bibtex:lineage?)>
+
+<!-- first, middle and last name should be obvious
+ - preLast is for names like Thomas *de* Burghes,
+ - lineage is used for "Jr" in names like "James T. Kirk, Jr."
+ -->
+<!ATTLIST bibtex:person email CDATA #IMPLIED
+ url CDATA #IMPLIED
+>
+<!ELEMENT bibtex:first (#PCDATA) >
+<!ELEMENT bibtex:initials (#PCDATA) >
+<!ELEMENT bibtex:last (#PCDATA) >
+<!ELEMENT bibtex:middle (#PCDATA) >
+<!ELEMENT bibtex:prelast (#PCDATA) >
+<!ELEMENT bibtex:lineage (#PCDATA) >
+
+
+<!ENTITY % BibTeXML.title.element "IGNORE">
+<!ENTITY % title.qname "(bibtex:title | bibtex:titlelist)">
+<!ELEMENT bibtex:titlelist (bibtex:title, bibtex:subtitle?)>
+<!ELEMENT bibtex:subtitle (#PCDATA) >
+<!ELEMENT bibtex:title (#PCDATA) >
+
+<!ENTITY % BibTeXML.keywords.element "IGNORE">
+<!ENTITY % keywords.qname "bibtex:keywords">
+<!ELEMENT bibtex:keywords (bibtex:keyword+) >
+<!ELEMENT bibtex:keyword (#PCDATA) >
+
+
+<!-- ..................................................................... -->
+<!-- reuse the strict BibTeXML DTD -->
+<!ENTITY % BibTeXML-strict PUBLIC
+ "-//BibTeXML//DTD XML for BibTeX v1.0//EN"
+ "bibteXML.dtd">
+%BibTeXML-strict;
+
+
+<!-- ..................................................................... -->
+<!-- End of bibtex dtd -->
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML.dtd b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML.dtd
new file mode 100644
index 0000000000..ebc4524bd0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/bibteXML.dtd
@@ -0,0 +1,816 @@
+<!--
+ - File: $Id: bibteXML.dtd, 2003.01.18 21:46:00 vbg Exp $
+ -
+ - This DTD expresses XML markup similar to the BibTeX language
+ - specified for LaTeX, or actually its content model.
+ - For documentation on BibTeX, see
+ - http://www.ctan.org/tex-archive/biblio/bibtex/distribs/doc/
+ -
+ - Suggested invocation:
+ -
+ - <?xml version="1.0" encoding="UTF-8"?>
+ - <!DOCTYPE bibtex:file PUBLIC
+ - "-//BibTeXML//DTD XML for BibTeX v1.0//EN"
+ - "bibteXML.dtd" >
+ - <bibtex:file xmlns:bibtex="http://bibtexml.sf.net/">
+ - ...
+ - </bibtex:file>
+ -
+ - Available from http://bibtexml.sf.net/
+ -
+ - This code originally developed by
+ - Vidar Bronken Gundersen
+ - Zeger W. Hendrikse
+ - Marco Kuhlmann
+ -
+ - This program is free software; you can redistribute it and/or
+ - modify it under the terms of the GNU General Public License.
+ - See http://www.gnu.org/copyleft/gpl.html
+ -
+-->
+
+<!NOTATION BibTeX PUBLIC "-//Oren Patashnik//NOTATION BibTeX Manuals//EN">
+
+<!-- Qualified Names module .............................................. -->
+
+<!-- Qualified Names
+ -
+ - This module is contained in two parts, labeled Section 'A' and 'B':
+ -
+ - Section A declares parameter entities to support namespace-
+ - qualified names, namespace declarations, and name prefixing.
+ -
+ - Section B declares parameter entities used to provide
+ - namespace-qualified names for all element types.
+ -
+ - This module is derived from the XHTML Qualified Names Template module.
+ -
+-->
+
+<!-- Section A: XML Namespace Framework :::::::::::::::::::: -->
+
+<!ENTITY % NS.prefixed "INCLUDE" >
+<!ENTITY % BibTeXML.prefixed "%NS.prefixed;" >
+
+
+<!ENTITY % BibTeXML.xmlns "http://bibtexml.sf.net/" >
+<!ENTITY % BibTeXML.prefix "bibtex" >
+<![%BibTeXML.prefixed;[
+<!ENTITY % BibTeXML.xmlns.extra.attrib "" >
+]]>
+<!ENTITY % BibTeXML.xmlns.extra.attrib
+ "" >
+
+<![%BibTeXML.prefixed;[
+<!ENTITY % BibTeXML.pfx "%BibTeXML.prefix;:" >
+<!ENTITY % BibTeXML.xmlns.attrib
+ "xmlns:%BibTeXML.prefix; CDATA #FIXED '%BibTeXML.xmlns;'
+ %BibTeXML.xmlns.extra.attrib;"
+>
+]]>
+<!ENTITY % BibTeXML.pfx "" >
+<!ENTITY % BibTeXML.xmlns.attrib
+ "xmlns CDATA #FIXED '%BibTeXML.xmlns;'
+ %BibTeXML.xmlns.extra.attrib;"
+>
+
+<![%NS.prefixed;[
+<!ENTITY % XHTML.xmlns.extra.attrib
+ "%BibTeXML.xmlns.attrib;" >
+]]>
+<!ENTITY % XHTML.xmlns.extra.attrib
+ "%BibTeXML.xmlns.attrib;"
+>
+
+<!-- Section B: Qualified Names ::::::::::::::::::::::::::::: -->
+
+<!-- 9. This section declares parameter entities used to provide
+ - namespace-qualified names for all element types.
+-->
+
+<!ENTITY % file.qname "%BibTeXML.pfx;file" >
+<!ENTITY % entry.qname "%BibTeXML.pfx;entry" >
+
+<!ENTITY % article.qname "%BibTeXML.pfx;article" >
+<!ENTITY % book.qname "%BibTeXML.pfx;book" >
+<!ENTITY % booklet.qname "%BibTeXML.pfx;booklet" >
+<!ENTITY % manual.qname "%BibTeXML.pfx;manual" >
+<!ENTITY % techreport.qname "%BibTeXML.pfx;techreport" >
+<!ENTITY % mastersthesis.qname "%BibTeXML.pfx;mastersthesis" >
+<!ENTITY % phdthesis.qname "%BibTeXML.pfx;phdthesis" >
+<!ENTITY % inbook.qname "%BibTeXML.pfx;inbook" >
+<!ENTITY % incollection.qname "%BibTeXML.pfx;incollection" >
+<!ENTITY % proceedings.qname "%BibTeXML.pfx;proceedings" >
+<!ENTITY % inproceedings.qname "%BibTeXML.pfx;inproceedings" >
+<!ENTITY % conference.qname "%BibTeXML.pfx;conference" >
+<!ENTITY % unpublished.qname "%BibTeXML.pfx;unpublished" >
+<!ENTITY % misc.qname "%BibTeXML.pfx;misc" >
+
+<!ENTITY % address.qname "%BibTeXML.pfx;address" >
+<!ENTITY % author.qname "%BibTeXML.pfx;author" >
+<!ENTITY % booktitle.qname "%BibTeXML.pfx;booktitle" >
+<!ENTITY % chapter.qname "%BibTeXML.pfx;chapter" >
+<!ENTITY % edition.qname "%BibTeXML.pfx;edition" >
+<!ENTITY % editor.qname "%BibTeXML.pfx;editor" >
+<!ENTITY % howpublished.qname "%BibTeXML.pfx;howpublished" >
+<!ENTITY % institution.qname "%BibTeXML.pfx;institution" >
+<!ENTITY % journal.qname "%BibTeXML.pfx;journal" >
+<!ENTITY % month.qname "%BibTeXML.pfx;month" >
+<!ENTITY % note.qname "%BibTeXML.pfx;note" >
+<!ENTITY % number.qname "%BibTeXML.pfx;number" >
+<!ENTITY % organization.qname "%BibTeXML.pfx;organization" >
+<!ENTITY % pages.qname "%BibTeXML.pfx;pages" >
+<!ENTITY % publisher.qname "%BibTeXML.pfx;publisher" >
+<!ENTITY % school.qname "%BibTeXML.pfx;school" >
+<!ENTITY % series.qname "%BibTeXML.pfx;series" >
+<!ENTITY % title.qname "%BibTeXML.pfx;title" >
+<!ENTITY % type.qname "%BibTeXML.pfx;type" >
+<!ENTITY % volume.qname "%BibTeXML.pfx;volume" >
+<!ENTITY % year.qname "%BibTeXML.pfx;year" >
+
+<!ENTITY % key.qname "%BibTeXML.pfx;key" >
+<!ENTITY % crossref.qname "%BibTeXML.pfx;crossref" >
+<!ENTITY % annote.qname "%BibTeXML.pfx;annote" >
+
+
+<!-- ignores subsequent instantiation of this module when
+ - used as external subset rather than module fragment.
+ - NOTE: Do not modify this parameter entity, otherwise
+ - a recursive parsing situation may result.
+-->
+<!ENTITY % BibTeXML-qname.module "IGNORE" >
+
+
+<!-- if %NS.prefixed; is INCLUDE, include all NS attributes,
+ otherwise just those associated with MathML
+-->
+<![%NS.prefixed;[
+ <!ENTITY % BibTeXML.NamespaceDecl.attrib
+ "%BibTeXML.xmlns.attrib;"
+>
+]]>
+<!ENTITY % BibTeXML.NamespaceDecl.attrib
+ "%BibTeXML.xmlns.attrib;"
+>
+
+
+<!-- ..................................................................... -->
+<!-- Main structure -->
+
+<!-- %entry.qname; may contain one of the bibliographic types. -->
+
+<!ENTITY % BibTeXML.standard.entries.class
+ "%article.qname; | %book.qname; | %booklet.qname; |
+ %manual.qname; | %techreport.qname; |
+ %mastersthesis.qname; | %phdthesis.qname; |
+ %inbook.qname; | %incollection.qname; |
+ %proceedings.qname; | %inproceedings.qname; | %conference.qname; |
+ %unpublished.qname; | %misc.qname; ">
+
+<!ENTITY % BibTeXML.additional.entries.class "">
+
+<!ENTITY % BibTeXML.entries.class
+ "%BibTeXML.standard.entries.class;
+ %BibTeXML.additional.entries.class;">
+
+<!ENTITY % BibTeXML.entry.module "INCLUDE">
+<![%BibTeXML.entry.module;[
+<!ENTITY % BibTeXML.entry.element "INCLUDE">
+<![%BibTeXML.entry.element;[
+<!ELEMENT %entry.qname; (%BibTeXML.entries.class;)>
+]]>
+<!ENTITY % BibTeXML.entry.attlist "INCLUDE">
+<![%BibTeXML.entry.attlist;[
+<!ATTLIST %entry.qname;
+ id ID #REQUIRED >
+]]>
+]]>
+
+
+<!-- %file.qname; is the document top element with a namespace indicator. -->
+
+<!ENTITY % BibTeXML.file.module "INCLUDE">
+<![%BibTeXML.file.module;[
+<!ENTITY % BibTeXML.file.element "INCLUDE">
+<![%BibTeXML.file.element;[
+<!ELEMENT %file.qname; (%entry.qname;)* >
+]]>
+<!ENTITY % BibTeXML.file.attlist "INCLUDE">
+<![%BibTeXML.file.attlist;[
+<!ATTLIST %file.qname;
+ %BibTeXML.NamespaceDecl.attrib; >
+]]>
+]]>
+
+
+<!-- ..................................................................... -->
+<!-- Parameter entities -->
+
+<!-- these are additional elements often used, but not included in the
+ standard BibTeX distribution, these must be added to the
+ bibliography styles, otherwise these fields will be omitted by
+ the formatter -->
+
+<!ENTITY % BibTeXML.common.standard.fields
+ ", %key.qname;?, %crossref.qname;?" >
+
+<!ENTITY % BibTeXML.additional.fields "">
+
+
+<!-- ..................................................................... -->
+<!-- Entries in the BibTeX database -->
+
+<!-- [article] An article from a journal or magazine.
+ - Required fields: author, title, journal, year.
+ - Optional fields: volume, number, pages, month, note. -->
+
+<!ENTITY % BibTeXML.article.module "INCLUDE">
+<![%BibTeXML.article.module;[
+<!ENTITY % BibTeXML.article.standard.fields
+ "%author.qname;, %title.qname;, %journal.qname;,
+ %year.qname;, %volume.qname;?, %number.qname;?,
+ %pages.qname;?, %month.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.article.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.article.fields
+ "%BibTeXML.article.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.article.additional.fields;">
+<!ENTITY % BibTeXML.article.element "INCLUDE">
+<![%BibTeXML.article.element;[
+<!ELEMENT %article.qname; (%BibTeXML.article.fields;)?>
+]]>
+]]>
+
+
+<!-- [book] A book with an explicit publisher.
+ - Required fields: author or editor, title, publisher, year.
+ - Optional fields: volume or number, series, address,
+ - edition, month, note. -->
+
+<!ENTITY % BibTeXML.book.module "INCLUDE">
+<![%BibTeXML.book.module;[
+<!ENTITY % BibTeXML.book.standard.fields
+ "(%author.qname; | %editor.qname;), %title.qname;, %publisher.qname;,
+ %year.qname;, (%volume.qname; | %number.qname;)?, %series.qname;?,
+ %address.qname;?, %edition.qname;?, %month.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.book.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.book.fields
+ "%BibTeXML.book.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.book.additional.fields;">
+<!ENTITY % BibTeXML.book.element "INCLUDE">
+<![%BibTeXML.book.element;[
+<!ELEMENT %book.qname; (%BibTeXML.book.fields;)>
+]]>
+]]>
+
+
+<!-- [booklet] A work that is printed and bound, but without a named
+ - publisher or sponsoring institution
+ - Required field: title.
+ - Optional fields: author, howpublished, address, month, year, note. -->
+
+<!ENTITY % BibTeXML.booklet.module "INCLUDE">
+<![%BibTeXML.booklet.module;[
+<!ENTITY % BibTeXML.booklet.standard.fields
+ "%author.qname;?, %title.qname;, %howpublished.qname;?,
+ %address.qname;?, %month.qname;?, %year.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.booklet.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.booklet.fields
+ "%BibTeXML.booklet.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.booklet.additional.fields;">
+<!ENTITY % BibTeXML.booklet.element "INCLUDE">
+<![%BibTeXML.booklet.element;[
+<!ELEMENT %booklet.qname; (%BibTeXML.booklet.fields;)>
+]]>
+]]>
+
+
+<!-- [inbook] A part of a book, which may be a chapter (or section or
+ - whatever) and/or a range of pages.
+ - Required fields: author or editor, title, chapter and/or pages,
+ - publisher, year.
+ - Optional fields: volume or number, series, type, address,
+ - edition, month, note. -->
+
+<!ENTITY % BibTeXML.inbook.module "INCLUDE">
+<![%BibTeXML.inbook.module;[
+<!ENTITY % BibTeXML.inbook.standard.fields
+ "(%author.qname; | %editor.qname;), %title.qname;,
+ ((%chapter.qname;, %pages.qname;?) | %pages.qname;),
+ %publisher.qname;, %year.qname;,
+ (%volume.qname; | %number.qname;)?, %series.qname;?,
+ %type.qname;?, %address.qname;?, %edition.qname;?,
+ %month.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.inbook.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.inbook.fields
+ "%BibTeXML.inbook.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.inbook.additional.fields;">
+<!ENTITY % BibTeXML.inbook.element "INCLUDE">
+<![%BibTeXML.inbook.element;[
+<!ELEMENT %inbook.qname; (%BibTeXML.inbook.fields;)>
+]]>
+]]>
+
+<!--
+ - > I want to express that the elements a and/or b are legal that is
+ - > one of them or both must be present in the document instance
+ - > (see the element content for BibTeX entry `InBook').
+ - in content model: ((a , b?) | b) if order matters
+ - ((a , b?) | (b , a?)) otherwise
+-->
+
+
+<!-- [incollection] A part of a book having its own title.
+ - Required fields: author, title, booktitle, publisher, year.
+ - Optional fields: editor, volume or number, series, type,
+ - chapter, pages, address, edition, month, note. -->
+
+<!ENTITY % BibTeXML.incollection.module "INCLUDE">
+<![%BibTeXML.incollection.module;[
+<!ENTITY % BibTeXML.incollection.standard.fields
+ "%author.qname;, %title.qname;, %booktitle.qname;,
+ %publisher.qname;, %year.qname;, %editor.qname;?,
+ (%volume.qname; | %number.qname;)?, %series.qname;?,
+ %type.qname;?, %chapter.qname;?, %pages.qname;?, %address.qname;?,
+ %edition.qname;?, %month.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.incollection.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.incollection.fields
+ "%BibTeXML.incollection.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.incollection.additional.fields;">
+<!ENTITY % BibTeXML.incollection.element "INCLUDE">
+<![%BibTeXML.incollection.element;[
+<!ELEMENT %incollection.qname; (%BibTeXML.incollection.fields;)>
+]]>
+]]>
+
+
+<!-- [inproceedings] An article in a conference proceedings.
+ - Required fields: author, title, booktitle, year.
+ - Optional fields: editor, volume or number, series, pages,
+ - address, month, organization, publisher, note. -->
+
+<!ENTITY % BibTeXML.inproceedings.common.fields
+ "(%author.qname;, %title.qname;, %booktitle.qname;, %year.qname;,
+ %editor.qname;?, (%volume.qname; | %number.qname;)?,
+ %series.qname;?, %pages.qname;?, %address.qname;?,
+ %month.qname;?, %organization.qname;?, %publisher.qname;?,
+ %note.qname;?)">
+
+<!ENTITY % BibTeXML.inproceedings.module "INCLUDE">
+<![%BibTeXML.inproceedings.module;[
+<!ENTITY % BibTeXML.inproceedings.standard.fields
+ "%BibTeXML.inproceedings.common.fields;">
+<!ENTITY % BibTeXML.inproceedings.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.inproceedings.fields
+ "%BibTeXML.inproceedings.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.inproceedings.additional.fields;">
+<!ENTITY % BibTeXML.inproceedings.element "INCLUDE">
+<![%BibTeXML.inproceedings.element;[
+<!ELEMENT %inproceedings.qname; (%BibTeXML.inproceedings.fields;)>
+]]>
+]]>
+
+
+<!-- [conference] The same as INPROCEEDINGS,
+ - included for Scribe compatibility. -->
+
+<!ENTITY % BibTeXML.conference.module "INCLUDE">
+<![%BibTeXML.conference.module;[
+<!ENTITY % BibTeXML.conference.standard.fields
+ "%BibTeXML.inproceedings.common.fields;">
+<!ENTITY % BibTeXML.conference.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.conference.fields
+ "%BibTeXML.conference.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.conference.additional.fields;">
+<!ENTITY % BibTeXML.conference.element "INCLUDE">
+<![%BibTeXML.conference.element;[
+<!ELEMENT %conference.qname; (%BibTeXML.conference.fields;)>
+]]>
+]]>
+
+
+<!-- [manual] Technical documentation
+ - Required field: title.
+ - Optional fields: author, organization, address,
+ - edition, month, year, note. -->
+
+<!ENTITY % BibTeXML.manual.module "INCLUDE">
+<![%BibTeXML.manual.module;[
+<!ENTITY % BibTeXML.manual.standard.fields
+ "%author.qname;?, %title.qname;, %organization.qname;?,
+ %address.qname;?, %edition.qname;?, %month.qname;?, %year.qname;?,
+ %note.qname;?">
+<!ENTITY % BibTeXML.manual.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.manual.fields
+ "%BibTeXML.manual.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.manual.additional.fields;">
+<!ENTITY % BibTeXML.manual.element "INCLUDE">
+<![%BibTeXML.manual.element;[
+<!ELEMENT %manual.qname; (%BibTeXML.manual.fields;)>
+]]>
+]]>
+
+
+<!-- [mastersthesis] A Master's thesis.
+ - Required fields: author, title, school, year.
+ - Optional fields: type, address, month, note. -->
+
+<!ENTITY % BibTeXML.thesis.common.fields
+ "(%author.qname;, %title.qname;,
+ %school.qname;, %year.qname;, %type.qname;?,
+ %address.qname;?, %month.qname;?, %note.qname;?)">
+
+<!ENTITY % BibTeXML.mastersthesis.module "INCLUDE">
+<![%BibTeXML.mastersthesis.module;[
+<!ENTITY % BibTeXML.mastersthesis.standard.fields
+ "%BibTeXML.thesis.common.fields;">
+<!ENTITY % BibTeXML.mastersthesis.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.mastersthesis.fields
+ "%BibTeXML.mastersthesis.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.mastersthesis.additional.fields;">
+<!ENTITY % BibTeXML.mastersthesis.element "INCLUDE">
+<![%BibTeXML.mastersthesis.element;[
+<!ELEMENT %mastersthesis.qname; (%BibTeXML.mastersthesis.fields;)>
+]]>
+]]>
+
+
+<!-- [phdthesis] A PhD thesis.
+ - Required fields: author, title, school, year.
+ - Optional fields: type, address, month, note. -->
+
+<!ENTITY % BibTeXML.phdthesis.module "INCLUDE">
+<![%BibTeXML.phdthesis.module;[
+<!ENTITY % BibTeXML.phdthesis.standard.fields
+ "%BibTeXML.thesis.common.fields;">
+<!ENTITY % BibTeXML.phdthesis.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.phdthesis.fields
+ "%BibTeXML.phdthesis.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.phdthesis.additional.fields;">
+<!ENTITY % BibTeXML.phdthesis.element "INCLUDE">
+<![%BibTeXML.phdthesis.element;[
+<!ELEMENT %phdthesis.qname; (%BibTeXML.phdthesis.fields;)>
+]]>
+]]>
+
+
+<!-- [misc] Use this type when nothing else fits.
+ - Required fields: none.
+ - Optional fields: author, title, howpublished, month, year, note. -->
+
+<!ENTITY % BibTeXML.misc.module "INCLUDE">
+<![%BibTeXML.misc.module;[
+<!ENTITY % BibTeXML.misc.standard.fields
+ "%author.qname;?, %title.qname;?, %howpublished.qname;?,
+ %month.qname;?, %year.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.misc.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.misc.fields
+ "%BibTeXML.misc.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.misc.additional.fields;">
+<!ENTITY % BibTeXML.misc.element "INCLUDE">
+<![%BibTeXML.misc.element;[
+<!ELEMENT %misc.qname; (%BibTeXML.misc.fields;)>
+]]>
+]]>
+
+
+<!-- [proceedings] The proceedings of a conference.
+ - Required fields: title, year.
+ - Optional fields: editor, volume or number, series,
+ - address, month, organization, publisher, note. -->
+
+<!ENTITY % BibTeXML.proceedings.module "INCLUDE">
+<![%BibTeXML.proceedings.module;[
+<!ENTITY % BibTeXML.proceedings.standard.fields
+ "%editor.qname;?, %title.qname;, %year.qname;,
+ (%volume.qname; | %number.qname;)?, %series.qname;?,
+ %address.qname;?, %month.qname;?, %organization.qname;?,
+ %publisher.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.proceedings.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.proceedings.fields
+ "%BibTeXML.proceedings.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.proceedings.additional.fields;">
+<!ENTITY % BibTeXML.proceedings.element "INCLUDE">
+<![%BibTeXML.proceedings.element;[
+<!ELEMENT %proceedings.qname; (%BibTeXML.proceedings.fields;)>
+]]>
+]]>
+
+
+<!-- [techreport] A report published by a school or other institution,
+ - usually numbered within a series.
+ - Required fields: author, title, institution, year.
+ - Optional fields: type, number, address, month, note. -->
+
+<!ENTITY % BibTeXML.techreport.module "INCLUDE">
+<![%BibTeXML.techreport.module;[
+<!ENTITY % BibTeXML.techreport.standard.fields
+ "%author.qname;, %title.qname;, %institution.qname;,
+ %year.qname;, %type.qname;?, %number.qname;?,
+ %address.qname;?, %month.qname;?, %note.qname;?">
+<!ENTITY % BibTeXML.techreport.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.techreport.fields
+ "%BibTeXML.techreport.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.techreport.additional.fields;">
+<!ENTITY % BibTeXML.techreport.element "INCLUDE">
+<![%BibTeXML.techreport.element;[
+<!ELEMENT %techreport.qname; (%BibTeXML.techreport.fields;)>
+]]>
+]]>
+
+
+<!-- [unpublished] A document having an author and title, but not
+ - formally published.
+ - Required fields: author, title, note.
+ - Optional fields: month, year. -->
+
+<!ENTITY % BibTeXML.unpublished.module "INCLUDE">
+<![%BibTeXML.unpublished.module;[
+<!ENTITY % BibTeXML.unpublished.standard.fields
+ "%author.qname;, %title.qname;, %note.qname;,
+ %month.qname;?, %year.qname;?">
+<!ENTITY % BibTeXML.unpublished.additional.fields
+ "%BibTeXML.additional.fields;">
+<!ENTITY % BibTeXML.unpublished.fields
+ "%BibTeXML.unpublished.standard.fields;
+ %BibTeXML.common.standard.fields;
+ %BibTeXML.unpublished.additional.fields;">
+<!ENTITY % BibTeXML.unpublished.element "INCLUDE">
+<![%BibTeXML.unpublished.element;[
+<!ELEMENT %unpublished.qname; (%BibTeXML.unpublished.fields;)>
+]]>
+]]>
+
+
+<!-- ..................................................................... -->
+<!-- Fields from the standard bibliography styles -->
+
+<!--
+ - Below is a description of all fields recognized by the standard
+ - bibliography styles. An entry can also contain other fields, which
+ - are ignored by those styles.
+ -
+ - [address] Usually the address of the publisher or other type of
+ - institution For major publishing houses, van~Leunen recommends
+ - omitting the information entirely. For small publishers, on the other
+ - hand, you can help the reader by giving the complete address.
+ -
+ - [annote] An annotation It is not used by the standard bibliography
+ - styles, but may be used by others that produce an annotated
+ - bibliography.
+ -
+ - [author] The name(s) of the author(s), in the format described in the
+ - LaTeX book.
+ -
+ - [booktitle] Title of a book, part of which is being cited. See the
+ - LaTeX book for how to type titles. For book entries, use the title
+ - field instead.
+ -
+ - [chapter] A chapter (or section or whatever) number.
+ -
+ - [crossref] The database key of the entry being cross referenced.
+ -
+ - [edition] The edition of a book-for example, ``Second''. This
+ - should be an ordinal, and should have the first letter capitalized, as
+ - shown here; the standard styles convert to lower case when necessary.
+ -
+ - [editor] Name(s) of editor(s), typed as indicated in the LaTeX book.
+ - If there is also an author field, then the editor field gives the
+ - editor of the book or collection in which the reference appears.
+ -
+ - [howpublished] How something strange has been published. The first
+ - word should be capitalized.
+ -
+ - [institution] The sponsoring institution of a technical report.
+ -
+ - [journal] A journal name. Abbreviations are provided for many
+ - journals; see the Local Guide.
+ -
+ - [key] Used for alphabetizing, cross referencing, and creating a label
+ - when the ``author'' information (described in Section [ref: ] is
+ - missing. This field should not be confused with the key that appears
+ - in the \cite command and at the beginning of the database entry.
+ -
+ - [month] The month in which the work was published or, for an
+ - unpublished work, in which it was written You should use the
+ - standard three-letter abbreviation, as described in Appendix B.1.3 of
+ - the LaTeX book.
+ -
+ - [note] Any additional information that can help the reader. The first
+ - word should be capitalized.
+ -
+ - [number] The number of a journal, magazine, technical report, or of a
+ - work in a series. An issue of a journal or magazine is usually
+ - identified by its volume and number; the organization that issues a
+ - technical report usually gives it a number; and sometimes books are
+ - given numbers in a named series.
+ -
+ - [organization] The organization that sponsors a conference or that
+ - publishes a manual.
+ -
+ - [pages] One or more page numbers or range of numbers, such as 42-111
+ - or 7,41,73-97 or 43+ (the `+' in this last example indicates pages
+ - following that don't form a simple range). To make it easier to
+ - maintain Scribe-compatible databases, the standard styles convert a
+ - single dash (as in 7-33) to the double dash used in TeX to denote
+ - number ranges (as in 7-33).
+ -
+ - [publisher] The publisher's name.
+ -
+ - [school] The name of the school where a thesis was written
+ -
+ - [series] The name of a series or set of books. When citing an entire
+ - book, the the title field gives its title and an optional series field
+ - gives the name of a series or multi-volume set in which the book is
+ - published.
+ -
+ - [title] The work's title, typed as explained in the LaTeX book.
+ -
+ - [type] The type of a technical report-for example, ``Research Note''.
+ -
+ - [volume] The volume of a journal or multivolume book.
+ -
+ - [year] The year of publication or, for an unpublished work, the year
+ - it was written. Generally it should consist of four numerals, such as
+ - 1984, although the standard styles can handle any year whose last four
+ - nonpunctuation characters are numerals, such as `(about 1984)'.
+-->
+
+
+<!ENTITY % BibTeXML.address.element "INCLUDE">
+<![%BibTeXML.address.element;[
+<!ELEMENT %address.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.author.element "INCLUDE">
+<![%BibTeXML.author.element;[
+<!ELEMENT %author.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.booktitle.element "INCLUDE">
+<![%BibTeXML.booktitle.element;[
+<!ELEMENT %booktitle.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.chapter.element "INCLUDE">
+<![%BibTeXML.chapter.element;[
+<!ELEMENT %chapter.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.edition.element "INCLUDE">
+<![%BibTeXML.edition.element;[
+<!ELEMENT %edition.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.editor.element "INCLUDE">
+<![%BibTeXML.editor.element;[
+<!ELEMENT %editor.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.howpublished.element "INCLUDE">
+<![%BibTeXML.howpublished.element;[
+<!ELEMENT %howpublished.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.institution.element "INCLUDE">
+<![%BibTeXML.institution.element;[
+<!ELEMENT %institution.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.journal.element "INCLUDE">
+<![%BibTeXML.journal.element;[
+<!ELEMENT %journal.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.month.element "INCLUDE">
+<![%BibTeXML.month.element;[
+<!ELEMENT %month.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.note.element "INCLUDE">
+<![%BibTeXML.note.element;[
+<!ELEMENT %note.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.number.element "INCLUDE">
+<![%BibTeXML.number.element;[
+<!ELEMENT %number.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.organization.element "INCLUDE">
+<![%BibTeXML.organization.element;[
+<!ELEMENT %organization.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.pages.element "INCLUDE">
+<![%BibTeXML.pages.element;[
+<!ELEMENT %pages.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.publisher.element "INCLUDE">
+<![%BibTeXML.publisher.element;[
+<!ELEMENT %publisher.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.school.element "INCLUDE">
+<![%BibTeXML.school.element;[
+<!ELEMENT %school.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.series.element "INCLUDE">
+<![%BibTeXML.series.element;[
+<!ELEMENT %series.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.title.element "INCLUDE">
+<![%BibTeXML.title.element;[
+<!ELEMENT %title.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.type.element "INCLUDE">
+<![%BibTeXML.type.element;[
+<!ELEMENT %type.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.volume.element "INCLUDE">
+<![%BibTeXML.volume.element;[
+<!ELEMENT %volume.qname; (#PCDATA)>
+]]>
+
+<!ENTITY % BibTeXML.year.element "INCLUDE">
+<![%BibTeXML.year.element;[
+<!ELEMENT %year.qname; (#PCDATA)>
+]]>
+
+<!--
+ - In addition to the fields listed above, each entry type also has
+ - an optional key field, used in some styles for alphabetizing, or
+ - for forming a \bibitem label. You should include a key field for
+ - any entry whose ``author'' information is missing;
+-->
+
+<!ENTITY % BibTeXML.key.element "INCLUDE">
+<![%BibTeXML.key.element;[
+<!ELEMENT %key.qname; (#PCDATA)>
+]]>
+
+<!--
+ - BibTEX has a new cross-referencing feature, explained by an example.
+ - @INPROCEEDINGS(no-gnats,
+ - crossref = "gg-proceedings",
+ - @PROCEEDINGS(gg-proceedings,
+-->
+
+<!ENTITY % BibTeXML.crossref.element "INCLUDE">
+<![%BibTeXML.crossref.element;[
+<!ELEMENT %crossref.qname; (#PCDATA)>
+]]>
+
+<!--
+ - Annotation is not used by the standard bibliography styles,
+ - if you prefer otherwise, incude it in BibTeXML.common.standard.fields
+-->
+
+<!ENTITY % BibTeXML.annote.element "INCLUDE">
+<![%BibTeXML.annote.element;[
+<!ELEMENT %annote.qname; (#PCDATA)>
+]]>
+
+
+<!-- ..................................................................... -->
+<!-- Predefined/reserved character entities -->
+
+<!ENTITY amp "&#38;#38;">
+<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">
+
+
+<!-- ..................................................................... -->
+<!-- End of bibtex dtd -->
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/drive.png b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/drive.png
new file mode 100644
index 0000000000..ad10ee3e6b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/drive.png
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/loupe.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/loupe.gif
new file mode 100644
index 0000000000..e8b70f72d8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/loupe.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-css.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-css.gif
new file mode 100644
index 0000000000..9b2f596e01
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-css.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-html401.gif b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-html401.gif
new file mode 100644
index 0000000000..1270561e17
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Generator/valid-html401.gif
Binary files differ
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/JabRef/JabRef.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/JabRef/JabRef.pm
new file mode 100644
index 0000000000..4d8697f23b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/JabRef/JabRef.pm
@@ -0,0 +1,209 @@
+# Copyright (C) 2007 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::JabRef::JabRef - A translator to support JabRef format.
+
+=head1 DESCRIPTION
+
+Bib2HTML::JabRef::JabRef is a Perl module, which permits to
+translate bibTeX data according to the JabRef format.
+
+=head1 SYNOPSYS
+
+my $j = Bib2HTML::JabRef::JabRef->new() ;
+$j->parser(content);
+
+=cut
+
+package Bib2HTML::JabRef::JabRef;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of JabRef Translator
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {} ;
+ bless($self,$class);
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Translation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * parse($)
+
+Translate the specified content which must be a reference
+to an hashtable given by a parser.
+
+=cut
+sub parse($) : method {
+ my $self = shift ;
+
+ $self->parseComments(@{$_[0]->{'comments'}});
+
+ if (($self->{'variables'}{'groupsversion'} !~ /^\s*([0-9]+)\s*;\s*$/)||
+ (int($1) < 3)) {
+ Bib2HTML::General::Error::syserr( "the JabRef translator does not support groups' version below 3.0" ) ;
+ }
+
+ # Treat the groups
+ if ($self->{'variables'}{'groupstree'}) {
+ my %categoryAssignation = $self->assignCategories($self->{'variables'}{'groupstree'});
+ $self->createCategories(\%categoryAssignation,$_[0]->{'entries'});
+ }
+}
+
+#------------------------------------------------------
+#
+# Tool API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * createCategories(\%$)
+
+Add the categories to each bibtex entries.
+
+=cut
+sub createCategories(\%$) {
+ my $self = shift;
+ foreach my $key (keys(%{$_[0]})) {
+ if (exists $_[1]->{"$key"}) {
+ my $newcategories = join(':',@{$_[0]->{"$key"}});
+ if ($_[1]->{"$key"}{'fields'}{'domains'}) {
+ $newcategories .= ":".$_[1]->{"$key"}{'fields'}{'domains'};
+ }
+ $_[1]->{"$key"}{'fields'}{'domains'} = "$newcategories";
+ }
+ }
+}
+
+=pod
+
+=item * assignCategories($)
+
+Parse the JabRef group list and replies the assignations
+for each bibtex entry.
+
+=cut
+sub assignCategories($) {
+ my $self = shift;
+ my $jabrefgroups = "$_[0]";
+ my %assignments = ();
+ my @categories = ();
+
+ while (($jabrefgroups)&&
+ ($jabrefgroups =~ /^\s*([0-9]+)\s+([^:]*):(.*?)(?<!\\);\s*(.*)$/s)) {
+ my $order = "$1";
+ my $content = "$3";
+ $jabrefgroups = "$4";
+
+ if (lc("$2") eq "explicitgroup") {
+ $content =~ s/[\n\r]+//g; # remove carriage returns because they are not significant
+
+ my @elements = split(/\\;/, "$content");
+ my $name = shift @elements;
+ shift @elements; # eat the number
+
+ splice(@categories,($order-1));
+ $categories[$order-1] = "$name";
+
+ foreach my $key (@elements) {
+ if (!$assignments{"$key"}) {
+ $assignments{"$key"} = [];
+ }
+ push @{$assignments{"$key"}}, join('/',@categories);
+ }
+ }
+ }
+
+ return %assignments;
+}
+
+=pod
+
+=item * parseComments(@)
+
+Parse the given comments to detect JabRef tokens.
+
+=cut
+sub parseComments(@) : method {
+ my $self = shift ;
+
+ foreach my $comment (@_) {
+ if ($comment =~ /^\s*jabref\-meta:\s*(.+?)\s*\:\s*(.*?)\s*$/is) {
+ $self->{'variables'}{lc("$1")} = "$2";
+ }
+ }
+
+}
+
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 2007 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Main.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Main.pm
new file mode 100644
index 0000000000..a9d2864132
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Main.pm
@@ -0,0 +1,433 @@
+# Copyright (C) 2002-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+package Bib2HTML::Main;
+
+@ISA = ('Exporter');
+@EXPORT = qw( &launchBib2HTML ) ;
+@EXPORT_OK = qw();
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+use Getopt::Long ;
+use Pod::Usage ;
+use File::Basename ;
+use File::Spec ;
+use File::Path ;
+
+use Bib2HTML::Release ;
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::Misc ;
+use Bib2HTML::Parser::Parser ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of bib2html
+my $VERSION = Bib2HTML::Release::getVersionNumber() ;
+# Date of this release of bib2html
+my $VERSION_DATE = Bib2HTML::Release::getVersionDate() ;
+# URL from which the users can submit a bug
+my $SUBMIT_BUG_URL = Bib2HTML::Release::getBugReportURL() ;
+# Email of the author of bib2html
+my $AUTHOR = Bib2HTML::Release::getAuthorName() ;
+# Email of the author of bib2html
+my $AUTHOR_EMAIL = Bib2HTML::Release::getAuthorEmail() ;
+# Page of bib2html
+my $URL = Bib2HTML::Release::getMainURL() ;
+# Contributors to Bib2HTML
+my %CONTRIBUTORS = Bib2HTML::Release::getContributors() ;
+
+# Default Generator
+my $DEFAULT_GENERATOR = 'HTML' ;
+# Default Language
+my $DEFAULT_LANGUAGE = 'English' ;
+# Default Theme
+my $DEFAULT_THEME = 'Simple' ;
+
+#------------------------------------------------------
+#
+# Functions
+#
+#------------------------------------------------------
+
+sub check_output($$) {
+ my $output = shift ;
+ my $force = shift ;
+ if ( ! $output ) {
+ $output = File::Spec->catdir( ".", "bib2html" ) ;
+ }
+ if ( ( -e "$output" ) && ( ! $force ) ) {
+ Bib2HTML::General::Error::syserr( "The output '$output".
+ "' already exists. Use the -f option to force the overwrite\n" ) ;
+ }
+ return "$output" ;
+}
+
+sub show_usage($$$) {
+ my $exitval = shift;
+ my $PERLSCRIPTDIR = shift;
+ my $PERLSCRIPTNAME = shift;
+
+ my $basename = "$PERLSCRIPTNAME";
+ $basename =~ s/\.[^.]*$//;
+
+ my $sharedir = "/usr/share";
+
+ my @searchdirs = (
+ File::Spec->catdir("$PERLSCRIPTDIR",'pod'),
+ File::Spec->catdir("$PERLSCRIPTDIR",'man'),
+ File::Spec->catdir("$PERLSCRIPTDIR",File::Spec->updir(),'pod'),
+ File::Spec->catdir("$PERLSCRIPTDIR",File::Spec->updir(),'man'),
+ File::Spec->catdir("$sharedir",'doc',"$basename"),
+ File::Spec->catdir("$sharedir",'doc',"$basename"),
+ File::Spec->catdir("$sharedir",'doc',"$basename",'pod'),
+ File::Spec->catdir("$sharedir",'doc',"$basename",'man'),
+ );
+
+ my @langs = ();
+
+ if (($ENV{'LANG'})&&($ENV{'LANG'} =~ /^([^_.\-]+)/)) {
+ push @langs, "$1";
+ }
+
+ push @langs, 'en';
+
+ foreach my $lang (@langs) {
+ foreach my $dir (@searchdirs) {
+ my $pod = File::Spec->catdir("$dir","${basename}_${lang}.pod");
+ if ( -r "$pod" ) {
+ print "$pod\n";
+ pod2usage(-exitval => $exitval, -input => "$pod");
+ exit $exitval;
+ }
+ }
+ }
+
+ die("unable to find the documentation file for $basename\n");
+}
+
+sub show_manual($$$) {
+ my $exitval = shift;
+ my $PERLSCRIPTDIR = shift;
+ my $PERLSCRIPTNAME = shift;
+
+ my $basename = "$PERLSCRIPTNAME";
+ $basename =~ s/\.[^.]*$//;
+
+ my $sharedir = "/usr/share";
+
+ my @searchdirs = (
+ File::Spec->catdir("$PERLSCRIPTDIR",'pod'),
+ File::Spec->catdir("$PERLSCRIPTDIR",'man'),
+ File::Spec->catdir("$PERLSCRIPTDIR",File::Spec->updir(),'pod'),
+ File::Spec->catdir("$PERLSCRIPTDIR",File::Spec->updir(),'man'),
+ File::Spec->catdir("$sharedir",'doc',"$basename"),
+ File::Spec->catdir("$sharedir",'doc',"$basename"),
+ File::Spec->catdir("$sharedir",'doc',"$basename",'pod'),
+ File::Spec->catdir("$sharedir",'doc',"$basename",'man'),
+ );
+
+ my @langs = ();
+
+ if (($ENV{'LANG'})&&($ENV{'LANG'} =~ /^([^_.\-]+)/)) {
+ push @langs, "$1";
+ }
+
+ push @langs, 'en';
+
+ foreach my $lang (@langs) {
+ foreach my $dir (@searchdirs) {
+ my $pod = File::Spec->catdir("$dir","${basename}_${lang}.pod");
+ if ( -r "$pod" ) {
+ print "$pod\n";
+ use Pod::Perldoc;
+ @ARGV = ( "$pod" );
+ Pod::Perldoc->run();
+ exit $exitval;
+ }
+ }
+ }
+
+ die("unable to find the documentation file for $basename\n");
+}
+
+#------------------------------------------------------
+#
+# Main Program
+#
+#------------------------------------------------------
+
+sub launchBib2HTML($$) {
+
+ my $PERLSCRIPTDIR = shift;
+ my $PERLSCRIPTNAME = shift;
+
+ # Command line options
+ my %options = () ;
+
+ # Read the command line
+ $options{warnings} = 1 ;
+ $options{genphpdoc} = 1 ;
+ $options{generator} = "$DEFAULT_GENERATOR" ;
+ $options{lang} = "$DEFAULT_LANGUAGE" ;
+ $options{theme} = "$DEFAULT_THEME" ;
+ $options{genparams} = {} ;
+ $options{'show-bibtex'} = 1 ;
+ Getopt::Long::Configure("bundling") ;
+ if ( ! GetOptions( "b|bibtex!" => \$options{'show-bibtex'},
+ "checknames" => \$options{'check-names'},
+ "cvs" => sub {
+ @{$options{'protected_files'}} = ()
+ unless ( exists $options{'protected_files'} ) ;
+ push @{$options{'protected_files'}}, ".cvs", "CVSROOT", "CVS" ;
+ },
+ "doctitle=s" => \$options{'title'},
+ "f|force" => \$options{'force'},
+ "generator|g=s" => \$options{'generator'},
+ 'generatorparam|d:s%' => sub {
+ my $name = lc($_[1]) ;
+ @{$options{'genparams'}{"$name"}} = ()
+ unless ( exists $options{'genparams'}{"$name"} ) ;
+ push @{$options{'genparams'}{"$name"}}, $_[2] ;
+ },
+ "generatorparams!" => \$options{'genparamlist'},
+ "genlist" => \$options{'genlist'},
+ "h|?" => \$options{'help'},
+ "help|man|manual" => \$options{'manual'},
+ "jabref!" => \$options{'jabref'},
+ "lang=s" => \$options{'lang'},
+ "langlist" => \$options{'langlist'},
+ "o|output=s" => sub {
+ $options{'output'} = $_[1];
+ delete $options{'stdout'};
+ },
+ "p|preamble=s" => \$options{'tex-preamble'},
+ "protect=s" => sub {
+ my $regex = lc($_[1]) ;
+ @{$options{'protected_files'}} = ()
+ unless ( exists $options{'protected_files'} ) ;
+ push @{$options{'protected_files'}}, $regex ;
+ },
+ "q" => \$options{'quiet'},
+ "sortw!" => \$options{'sort-warnings'},
+ "stdout" => sub {
+ delete $options{'output'};
+ $options{'stdout'} = 1;
+ },
+ "svn" => sub {
+ @{$options{'protected_files'}} = ()
+ unless ( exists $options{'protected_files'} ) ;
+ push @{$options{'protected_files'}}, ".svn", "svn" ;
+ },
+ "texcmd" => \$options{'tex-commands'},
+ "theme=s" => \$options{'theme'},
+ "themelist" => \$options{'themelist'},
+ "v+" => \$options{'verbose'},
+ "version" => \$options{'version'},
+ "warning!" => \$options{'warnings'},
+ "windowtitle=s" => \$options{'wintitle'},
+ ) ) {
+ show_usage(2,"$PERLSCRIPTDIR","$PERLSCRIPTNAME") ;
+ }
+
+ # Generator class
+ if ( $options{'generator'} !~ /::/ ) {
+ $options{'generator'} = "Bib2HTML::Generator::".$options{'generator'}."Gen" ;
+ }
+ eval "require ".$options{'generator'}.";" ;
+ if ( $@ ) {
+ Bib2HTML::General::Error::syserr( "Unable to find the generator class: ".$options{'generator'}."\n$@\n" ) ;
+ }
+
+ # Show the version number
+ if ( $options{version} ) {
+
+ my $final_copyright = 1998;
+ if ($VERSION_DATE =~ /^([0-9]+)\/[0-9]+\/[0-9]+$/) {
+ if ($1<=98) {
+ $final_copyright = 2000 + $1;
+ }
+ elsif ($1==99) {
+ $final_copyright = 1999;
+ }
+ else {
+ $final_copyright = $1;
+ }
+ }
+
+ if ($final_copyright!=1998) {
+ $final_copyright = "1998-$final_copyright";
+ }
+
+ print "bib2html $VERSION, $VERSION_DATE\n" ;
+ print "Copyright (c) $final_copyright, $AUTHOR <$AUTHOR_EMAIL>, under GPL\n" ;
+ print "Contributors:\n" ;
+ while ( my ($email,$name) = each(%CONTRIBUTORS) ) {
+ print " $name <$email>\n" ;
+ }
+ exit 1 ;
+ }
+
+ # Show the list of generators
+ if ( $options{genlist} ) {
+ use Bib2HTML::Generator::AbstractGenerator ;
+ Bib2HTML::Generator::AbstractGenerator::display_supported_generators($PERLSCRIPTDIR,
+ "$DEFAULT_GENERATOR") ;
+ exit 1 ;
+ }
+
+ # Show the list of languages
+ if ( $options{langlist} ) {
+ use Bib2HTML::Generator::AbstractGenerator ;
+ Bib2HTML::Generator::AbstractGenerator::display_supported_languages($PERLSCRIPTDIR,
+ "$DEFAULT_LANGUAGE") ;
+ exit 1 ;
+ }
+
+ # Show the list of themes
+ if ( $options{themelist} ) {
+ use Bib2HTML::Generator::AbstractGenerator ;
+ Bib2HTML::Generator::AbstractGenerator::display_supported_themes($PERLSCRIPTDIR,
+ "$DEFAULT_THEME") ;
+ exit 1 ;
+ }
+
+ # Show the list of themes
+ if ( $options{'tex-commands'} ) {
+ use Bib2HTML::Translator::TeX ;
+ Bib2HTML::Translator::TeX::display_supported_commands($PERLSCRIPTDIR) ;
+ exit 1 ;
+ }
+
+ # Show the list of generator params
+ if ( $options{'genparamlist'} ) {
+ ($options{'generator'})->display_supported_generator_params() ;
+ exit 1 ;
+ }
+
+ # Show the help screens
+ if ( $options{manual} ) {
+ show_manual(1,"$PERLSCRIPTDIR","$PERLSCRIPTNAME") ;
+ }
+ if ( $options{help} || ( $#ARGV < 0 ) ) {
+ show_usage(1,"$PERLSCRIPTDIR","$PERLSCRIPTNAME") ;
+ }
+
+ # Force the output to stdout
+ if ( $options{'stdout'} ) {
+ my $name = "stdout" ;
+ $options{'genparams'}{"stdout"} = [1];
+ }
+
+ #
+ # Sets the default values of options
+ #
+ # Titles:
+
+ # Verbosing:
+ if ( $options{quiet} ) {
+ $options{verbose} = -1 ;
+ }
+ Bib2HTML::General::Verbose::setlevel( $options{verbose} ) ;
+
+ # Error messages:
+ if ( $options{'warnings'} ) {
+ Bib2HTML::General::Error::unsetwarningaserror() ;
+ }
+ else {
+ Bib2HTML::General::Error::setwarningaserror() ;
+ }
+ if ( $options{'sort-warnings'} ) {
+ Bib2HTML::General::Error::setsortwarnings() ;
+ }
+ else {
+ Bib2HTML::General::Error::unsetsortwarnings() ;
+ }
+
+ #
+ # Create the output directory
+ #
+ unless ($options{'stdout'}) {
+ $options{'output'} = check_output($options{'output'},$options{'force'});
+ }
+
+ # Read the BibTeX files
+ my $parser = new Bib2HTML::Parser::Parser($options{'show-bibtex'}) ;
+ if ( $options{'tex-preamble'} ) {
+ $parser->read_preambles( $options{'tex-preamble'} ) ;
+ }
+ $parser->parse( \@ARGV ) ;
+
+ # Check if the names of the authors are similars
+ if ( $options{'check-names'} ) {
+ eval "require Bib2HTML::Checker::Names;" ;
+ if ( $@ ) {
+ Bib2HTML::General::Error::syserr( "Unable to find the generator class: Bib2HTML::Checker::Names\n$@\n" ) ;
+ }
+ my $check = new Bib2HTML::Checker::Names() ;
+ $check->check($parser->content()) ;
+ }
+
+ # Translate the entries according to the JabRef tool
+ if ($options{'jabref'}) {
+ use Bib2HTML::JabRef::JabRef;
+
+ my $jabref = new Bib2HTML::JabRef::JabRef();
+
+ $jabref->parse($parser->content());
+ }
+
+ # Create the generator
+ #
+ Bib2HTML::Generator::LangManager::set_default_lang("$DEFAULT_LANGUAGE");
+ my $generator = ($options{'generator'})->new( $parser->content(),
+ $options{'output'},
+ { 'VERSION' => $VERSION,
+ 'BUG_URL' => $SUBMIT_BUG_URL,
+ 'URL' => $URL,
+ 'AUTHOR_EMAIL' => $AUTHOR_EMAIL,
+ 'AUTHOR' => $AUTHOR,
+ 'PERLSCRIPTDIR' => $PERLSCRIPTDIR,
+ },
+ { 'SHORT' => $options{'wintitle'},
+ 'LONG' => $options{'title'},
+ },
+ $options{'lang'},
+ $options{'theme'},
+ $options{'show-bibtex'},
+ $options{'genparams'} ) ;
+ if ($options{'protected_files'}) {
+ $generator->set_unremovable_files(@{$options{'protected_files'}});
+ }
+
+ # Generates the HMTL pages
+ #
+ $generator->generate() ;
+
+ # Display the quantity of warnings
+ Bib2HTML::General::Error::printwarningcount() ;
+
+ exit 0 ;
+}
+
+1;
+__END__
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/BibScanner.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/BibScanner.pm
new file mode 100644
index 0000000000..d984818c78
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/BibScanner.pm
@@ -0,0 +1,817 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Parser::BibScanner - A scanner for extracted bibtex entries
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Parser::BibScanner ;
+
+my $scan = Bib2HTML::Parser::BibScanner->new() ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Parser::BibScanner is a Perl module, which scannes
+a source file to recognize the bibtex entries
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a scanner, say something like this:
+
+ use Bib2HTML::Parser::BibScanner;
+
+ my $scan = Bib2HTML::Parser::BibScanner->new() ;
+
+...or something similar.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in BibScanner.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Parser::BibScanner;
+
+@ISA = ('Bib2HTML::Parser::Scanner');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+use File::Basename ;
+
+use Bib2HTML::Parser::Scanner ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the scanner
+my $VERSION = "2.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new() : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ if ( $_[0] ) {
+ if ( ! $_[1] ) {
+ Bib2HTML::General::Error::syserr( "You must supply the initial state to the ".
+ "BibScanner constructor" ) ;
+ }
+ if ( ! $_[2] ) {
+ Bib2HTML::General::Error::syserr( "You must supply the final states to the ".
+ "BibScanner constructor" ) ;
+ }
+ $self = $class->SUPER::new( $_[0], $_[1], $_[2] ) ;
+ }
+ else {
+ $self = $class->SUPER::new(
+ { 'main' => [ { state => 'line_comment',
+ pattern => '\\%',
+ merge => 1,
+ splitmerging => 1,
+ },
+ { state => 'block_comment',
+ pattern => '\\@COMMENT\\s*\\{\\s*',
+ caseinsensitive => 1,
+ },
+ { state => 'line_comment',
+ pattern => '\\@COMMENT\b\\s*',
+ merge => 1,
+ splitmerging => 1,
+ caseinsensitive => 1,
+ },
+ { state => 'constant',
+ pattern => '\\@STRING\\s*\\{\\s*',
+ caseinsensitive => 1,
+ },
+ { state => 'preamble',
+ pattern => '\\@PREAMBLE\\s*',
+ caseinsensitive => 1,
+ },
+ { state => 'entry',
+ pattern => '@',
+ merge => 1,
+ },
+ { state => 'main',
+ pattern => '[^@%]+',
+ },
+ ],
+ # Eats the comment
+ 'line_comment' => [ { state => 'main',
+ pattern => "\n",
+ },
+ { state => 'line_comment',
+ pattern => "[^\n]+",
+ merge => 1,
+ },
+ ],
+ 'block_comment' => [ { state => 'main',
+ pattern => "\\}",
+ splitmerging => 1,
+ merge => 1,
+ },
+ { state => 'block_comment',
+ pattern => "[^\\}]+",
+ merge => 1,
+ },
+ ],
+ # Matches @something
+ 'entry' => [ { state => 'entry_type',
+ pattern => '[a-zA-Z]+',
+ },
+ ],
+ 'entry_type' => [ { state => 'entry_key',
+ pattern => "\\{\\s*",
+ },
+ { state => 'entry_type',
+ pattern => "\\s+",
+ },
+ ],
+ 'entry_key' => [ { state => 'entry_fields',
+ pattern => '[^,\s]+',
+ },
+ { state => 'entry_key',
+ pattern => '\\s+',
+ },
+ ],
+ 'entry_fields' => [ { state => 'entry_fields',
+ pattern => ',\\s*',
+ },
+ { state => 'entry_fields',
+ pattern => '\\s+',
+ },
+ { state => 'entry_fieldname',
+ pattern => '[a-zA-Z0-9.:_\\-]+',
+ },
+ { state => 'main',
+ pattern => '\\s*\\}',
+ },
+ ],
+ 'entry_fieldname' => [ { state => 'string',
+ pattern => '\\s*=\\s*',
+ },
+ { state => 'main',
+ pattern => '\\}',
+ },
+ { state => 'entry_fieldname',
+ pattern => '\\s+',
+ },
+ { state => 'entry_fields',
+ pattern => '.',
+ },
+ ],
+ # Matches @STRING
+ 'constant' => [ { state => 'main',
+ pattern => '\\}',
+ },
+ { state => 'constant_name',
+ pattern => '[a-zA-Z0-9.:]+',
+ },
+ { state => 'constant',
+ pattern => '\\s+',
+ },
+ ],
+ 'constant_name' => [ { state => 'string',
+ pattern => '=\\s*',
+ },
+ { state => 'main',
+ pattern => '\\}',
+ },
+ { state => 'constant_name',
+ pattern => '\\s+',
+ },
+ ],
+ # Matches @PREAMBLE
+ 'preamble' => [ { state => 'braced_string',
+ pattern => '\\{',
+ merge => 1,
+ splitmerging => 1,
+ },
+ { state => 'preamble',
+ pattern => '\\s+',
+ },
+ ],
+ 'preamble_end' => [ { state => 'main',
+ pattern => '.',
+ },
+ ],
+ # Matches a string
+ 'string' => [ { state => 'string',
+ pattern => '\\s+',
+ },
+ { state => 'braced_string',
+ pattern => '{',
+ merge => 1,
+ splitmerging => 1,
+ },
+ { state => 'quoted_string',
+ pattern => '\"',
+ merge => 1,
+ splitmerging => 1,
+ },
+ { state => 'keyword_string',
+ pattern => '[^\\s"{},;#]+',
+ }
+ ],
+ 'keyword_string' => [],
+ # Matches a braced string
+ 'braced_string' => [ { state => 'close_braced_string',
+ pattern => '}',
+ },
+ { state => 'open_braced_string',
+ pattern => '{',
+ },
+ { state => 'braced_string',
+ pattern => '\\\\.',
+ merge => 1,
+ },
+ { state => 'braced_string',
+ pattern => '[^{}\\\\]+',
+ merge => 1,
+ }
+ ],
+ 'close_braced_string' => [],
+ 'open_braced_string' => [],
+ # Matches a quoted string
+ 'quoted_string' => [ { state => 'quote_quoted_string',
+ pattern => '\"',
+ },
+ { state => 'quoted_string',
+ pattern => '\\\\.',
+ merge => 1,
+ },
+ { state => 'quoted_string',
+ pattern => '[^\"\\\\]+',
+ merge => 1,
+ }
+ ],
+ 'quote_quoted_string' => [],
+ # Concatenation operator
+ 'concatenation_operator' => [ { state => 'string',
+ pattern => '\\s*\\#\\s*',
+ },
+ { state=> 'concatenation_operator',
+ pattern => '[^#]',
+ },
+ ],
+ },
+ 'main',
+ [ 'main', 'line_comment' ]
+ ) ;
+ }
+ # Initializes the class attributes
+ $self->clearentries() ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Callback functions
+#
+#------------------------------------------------------
+
+sub transition_callback_concatenation_operator_concatenation_operator($) {
+ my $self = shift ;
+ $self->ungetpattern( $_[0] ) ;
+ $self->pop_state() ;
+}
+
+sub transition_callback_concatenation_operator_string($) {
+ my $self = shift ;
+ $self->translate_to_contatenatedstring() ;
+}
+
+sub transition_callback_string_keyword_string($) {
+ my $self = shift ;
+ $self->setstring($_[0],1) ;
+ $self->pop_state() ;
+}
+
+sub transition_callback_braced_string_close_braced_string($) {
+ my $self = shift ;
+ $self->setstring($_[0]) ;
+ if ( $self->{'BUFFER'}{'BRACE_COUNT'} > 0 ) {
+ $self->{'BUFFER'}{'BRACE_COUNT'} -- ;
+ $self->set_state('braced_string');
+ }
+ else {
+ $self->pop_state() ;
+ }
+}
+
+sub transition_callback_braced_string_open_braced_string($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'BRACE_COUNT'} ++ ;
+ $self->setstring($_[0]) ;
+ $self->set_state('braced_string');
+}
+
+sub transition_callback_string_braced_string($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'BRACE_COUNT'} = 0 ;
+}
+
+sub transition_callback_quoted_string_quote_quoted_string($) {
+ my $self = shift ;
+ $self->setstring($_[0]) ;
+ $self->pop_state('braced_string') ;
+}
+
+sub state_callback_string($$) {
+ my $self = shift ;
+ if ( ( $_[1] !~ /string/ ) &&
+ ( $_[1] ne 'concatenation_operator' ) ) {
+ $self->clearstring() ;
+ $self->push_state($_[1]) ;
+ }
+ $self->push_state('concatenation_operator') ;
+}
+
+sub transition_callback_entry_fields_main($) {
+ my $self = shift ;
+ $self->addentry( $self->{'BUFFER'}{'currententry'}{'key'},
+ $self->{'BUFFER'}{'currententry'}{'type'},
+ $self->{'BUFFER'}{'currententry'}{'fields'},
+ $self->{'BUFFER'}{'currententry'}{'lineno'} ) ;
+ delete( $self->{'BUFFER'}{'currententry'} ) ;
+}
+
+sub transition_callback_entry_fieldname_main($) {
+ my $self = shift ;
+ my $field = $self->{'BUFFER'}{'currentfield'} ;
+ $self->{'BUFFER'}{'currententry'}{'fields'}{$field} = $self->clearstring() ;
+ $self->transition_callback_entry_fields_main(undef) ;
+}
+
+sub transition_callback_entry_fieldname_entry_fields($) {
+ my $self = shift ;
+ my $field = $self->{'BUFFER'}{'currentfield'} ;
+ $self->{'BUFFER'}{'currententry'}{'fields'}{$field} = $self->clearstring() ;
+}
+
+sub transition_callback_entry_fields_entry_fieldname($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'currentfield'} = $_[0] || '' ;
+}
+
+sub transition_callback_entry_key_entry_fields($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'currententry'}{'key'} = $_[0] || '' ;
+}
+
+sub transition_callback_entry_entry_type($) {
+ my $self = shift ;
+ my $type = $_[0] || '' ;
+ $type =~ s/^\s*\@// ;
+ $self->{'BUFFER'}{'currententry'} = { 'type' => lc($type),
+ 'lineno' => $self->{'LINENO'},
+ } ;
+}
+
+sub transition_callback_preamble_braced_string($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'BRACE_COUNT'} = 0 ;
+ $self->push_state('preamble_end');
+}
+
+sub transition_callback_preamble_end_main($) {
+ my $self = shift ;
+ $self->addpreamble( $self->clearstring(), $self->{'LINENO'} ) ;
+ $self->ungetpattern($_[0]);
+}
+
+sub transition_callback_constant_constant_name($) {
+ my $self = shift ;
+ $self->{'BUFFER'}{'constant'}{'name'} = $_[0] || '' ;
+ $self->{'BUFFER'}{'constant'}{'lineno'} = $self->{'LINENO'} ;
+}
+
+sub transition_callback_constant_name_main($) {
+ my $self = shift ;
+ $self->addconstant( $self->{'BUFFER'}{'constant'}{'name'},
+ $self->clearstring(),
+ $self->{'BUFFER'}{'constant'}{'lineno'} ) ;
+}
+
+sub transition_callback_block_comment_main($) {
+ my $self = shift ;
+ $self->addcomment("$_[0]");
+}
+
+#------------------------------------------------------
+#
+# Scanning API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * scanentries()
+
+Replies an array that contains the bibtex
+parts readed from the source file.
+Takes 1 arg:
+
+=over
+
+=item * filename (string)
+
+is the name of the file from which the bibtex parts must
+be extracted.
+
+=back
+
+=cut
+sub scanentries($) : method {
+ my $self = shift ;
+ my $filename = $_[0] || confess( 'you must supply the filename' ) ;
+ $self->clearentries() ;
+ $self->clearstring() ;
+
+ if ( ! $self->scan( $filename ) ) {
+ Bib2HTML::General::Error::err( "Unexpected end of file (state: ".$self->{'SM_CURRENT_STATE'}.")",
+ $filename,
+ $self->{'LINENO'} ) ;
+ }
+
+ Bib2HTML::General::Verbose::three( join( '',
+ "\t",
+ hashcount($self->{'BIBSCANNER_ENTRIES'}{'entries'}),
+ " entr",
+ (hashcount($self->{'BIBSCANNER_ENTRIES'}{'entries'})>1)?"ies":"y" ) ) ;
+
+ return $self->getentries() ;
+}
+
+#------------------------------------------------------
+#
+# Block functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * clearentries()
+
+Destroyes all recognized blocks.
+
+=cut
+sub clearentries() {
+ my $self = shift ;
+ $self->{'BIBSCANNER_ENTRIES'} = { 'constants' => {},
+ 'comments' => [],
+ 'preambles' => [],
+ 'entries' => {},
+ } ;
+}
+
+=pod
+
+=item * getentries()
+
+Replies the readed entries
+
+=cut
+sub getentries() {
+ my $self = shift ;
+ return $self->{'BIBSCANNER_ENTRIES'} ;
+}
+
+=pod
+
+=item * addconstant()
+
+Adds a constant inside the readed data.
+Takes 3 args:
+
+=over
+
+=item * name (string)
+
+is the name of the constant
+
+=item * value (string)
+
+is the value of the constant
+
+=item * lineno (integer)
+
+is the line number where the constant starts
+
+=back
+
+=cut
+sub addconstant($$$) {
+ my $self = shift ;
+ my $name = $_[0] || '' ;
+ my $lineno = $_[2] || 0 ;
+ my $lcname = lc( $name ) ;
+ if ( ! $lcname ) {
+ Bib2HTML::General::Error::warm( "I expected a string name. Ignore this constant definition.",
+ $self->{'FILENAME'},
+ $self->{'LINENO'} ) ;
+ }
+ elsif ( exists $self->{'BIBSCANNER_ENTRIES'}{'constants'}{$lcname} ) {
+ Bib2HTML::General::Error::warm( "the \@STRING '".$name."' was already ".
+ "defined. Ignored the last instance.",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ else {
+ $self->{'BIBSCANNER_ENTRIES'}{'constants'}{$lcname}{'text'} = $_[1] ;
+ $self->{'BIBSCANNER_ENTRIES'}{'constants'}{$lcname}{'location'} = $self->{'FILENAME'}.":".$lineno ;
+ }
+}
+
+=pod
+
+=item * addcomment()
+
+Adds a comment inside the readed data.
+Takes 3 args:
+
+=over
+
+=item * value (string)
+
+is the value of the comment
+
+=back
+
+=cut
+sub addcomment($) {
+ my $self = shift ;
+ my $value = $_[0] || '' ;
+ push @{$self->{'BIBSCANNER_ENTRIES'}{'comments'}}, "$value";
+}
+
+=pod
+
+=item * addpreamble()
+
+Adds a preamble inside the readed data.
+Takes 1 args:
+
+=over
+
+=item * content (string)
+
+is the content of the preamble
+
+=item * lineno (integer)
+
+is the line number where the preamble starts
+
+=back
+
+=cut
+sub addpreamble($$) {
+ my $self = shift ;
+ my $lineno = $_[1] || 0 ;
+ if ( $_[0] ) {
+ push @{$self->{'BIBSCANNER_ENTRIES'}{'preambles'}}, { 'tex' => $_[0],
+ 'location' => $self->{'FILENAME'}.":".$lineno,
+ } ;
+ }
+}
+
+=pod
+
+=item * addentry()
+
+Adds an entry inside the readed data.
+Takes 3 args:
+
+=over
+
+=item * key (string)
+
+is the bibtex key
+
+=item * type (string)
+
+is the bibtex type of the entry
+
+=item * fields (hash)
+
+is the list of the field for this entry
+
+=item * lineno (integer)
+
+is the line number where the entry starts
+
+=back
+
+=cut
+sub addentry($$$$) {
+ my $self = shift ;
+ my $key = $_[0] || confess( 'you must supply the entry key' ) ;
+ my $type = $_[1] || confess( 'you must supply the entry type' ) ;
+ my $fields = $_[2] || { } ;
+ my $lineno = $_[3] || 0 ;
+ $fields = { } unless ishash( $fields ) ;
+
+ if ($key !~ /^[a-zA-Z0-9.:_\-=\+]+$/) {
+ Bib2HTML::General::Error::warm( "the entry '".$key."' does not respect the ".
+ "official entry key guidelines from ".
+ "the BibTeX specifications.",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+
+ if ( exists $self->{'BIBSCANNER_ENTRIES'}{'entries'}{$key} ) {
+ Bib2HTML::General::Error::warm( "the entry '".$key."' was already ".
+ "defined. Ignored the last instance.",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ else {
+ $self->{'BIBSCANNER_ENTRIES'}{'entries'}{$key}{'type'} = lc($type) ;
+ $self->{'BIBSCANNER_ENTRIES'}{'entries'}{$key}{'location'} = $self->{'FILENAME'}.":".$lineno ;
+ $self->{'BIBSCANNER_ENTRIES'}{'entries'}{$key}{'dirname'} = dirname($self->{'FILENAME'}) ;
+ while ( my ($k, $value) = each (%{$fields}) ) {
+ # Patched by: Martin P.J. ZINSER <zinser@zinser.no-ip.info>
+ # lc was added to support multi-case field names
+ $self->{'BIBSCANNER_ENTRIES'}{'entries'}{$key}{'fields'}{lc($k)} = $value ;
+ }
+ }
+}
+
+#------------------------------------------------------
+#
+# String functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * clearstring()
+
+Clear the string, and replies the old value.
+
+=cut
+sub clearstring() {
+ my $self = shift ;
+ my $str = $self->getstring() ;
+ delete( $self->{'BUFFER'}{'string'} ) ;
+ return $str ;
+}
+
+=pod
+
+=item * getstring()
+
+Replies the current string.
+
+=cut
+sub getstring() {
+ my $self = shift ;
+ if ( isarray( $self->{'BUFFER'}{'string'} ) ) {
+ for(my $i=0; $i<=$#{$self->{'BUFFER'}{'string'}}; $i++) {
+ $self->{'BUFFER'}{'string'}[$i] = $self->cleanstring($self->{'BUFFER'}{'string'}[$i]) ;
+ }
+ return $self->{'BUFFER'}{'string'} ;
+ }
+ else {
+ return $self->cleanstring($self->{'BUFFER'}{'string'}) ;
+ }
+}
+
+=pod
+
+=item * cleanstring()
+
+Removes string delimiters.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the string to remove.
+
+=over
+
+=cut
+sub cleanstring($) {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ $text =~ s/[ \t]*[\n\r][ \t]*/ /gm ;
+ if ( $text =~ /^\".*\"$/ ) {
+ $text =~ s/^\"/{/ ;
+ $text =~ s/\"$/}/ ;
+ }
+ return $text ;
+}
+
+=pod
+
+=item * setstring()
+
+Sets the string.
+
+=cut
+sub setstring($;$) {
+ my $self = shift ;
+ my $iskeyword = $_[1] || 0 ;
+ my $str = $_[0] || '' ;
+ if ( isarray( $self->{'BUFFER'}{'string'} ) ) {
+ my $last = $#{$self->{'BUFFER'}{'string'}} ;
+ if ( $self->{'BUFFER'}{'string'}[$last] ) {
+ $self->{'BUFFER'}{'string'}[$last] .= $str ;
+ }
+ else {
+ $self->{'BUFFER'}{'string'}[$last] = $str ;
+ }
+ }
+ elsif ( $self->{'BUFFER'}{'string'} ) {
+ $self->{'BUFFER'}{'string'} .= $str ;
+ }
+ else {
+ $self->{'BUFFER'}{'string'} = $str ;
+ }
+}
+
+=pod
+
+=item * translate_to_contatenatedstring()
+
+Sets the string as a concatened string if
+it was not already set as.
+Adds an empty element to this contatened
+string.
+A concatened string is used to split the
+different components of the string in order
+to extract the potential string constant to
+replace.
+
+=cut
+sub translate_to_contatenatedstring() {
+ my $self = shift ;
+ force_add_value_entry($self->{'BUFFER'}, 'string', '' ) ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Parser.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Parser.pm
new file mode 100644
index 0000000000..25a146e1ed
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Parser.pm
@@ -0,0 +1,477 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Parser::Parser - A parser for BibTeX files.
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Parser::Parser ;
+
+my $gen = Bib2HTML::Parser::Parser->new() ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Parser::Parser is a Perl module, which parses
+a source file to recognize the BibTeX tokens.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To create a parser, say something like this:
+
+ use Bib2HTML::Parser::Parser;
+
+ my $parser = Bib2HTML::Parser::Parser->new() ;
+
+...or something similar.
+The constructor could take 1 arg:
+
+=over
+
+=item * show_bibtex (boolean)
+
+indicates if the BibTeX code will be generated inside
+a verbatim area. This flag permits to this parser
+to store (or not) the initial value of each field.
+Caution about the memory space.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Parser.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Parser::Parser;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+use File::Basename ;
+use File::Spec ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::Verbose ;
+
+use Bib2HTML::Parser::BibScanner ;
+
+use Bib2HTML::Translator::TeX ;
+use Bib2HTML::Translator::BibTeXEntry ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the parser
+my $VERSION = "2.1" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new(;$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ bless( $self, $class );
+ }
+ else {
+ $self = { 'CONTENT' => {},
+ 'FILE_PREAMBLES' => '',
+ 'SHOW_BIBTEX' => $_[0],
+ } ;
+ bless( $self, $class );
+ $self->clearcontent() ;
+ }
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Getter/setter functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * content()
+
+Replies the content of the documentation
+read by the parser.
+
+=cut
+sub content() : method {
+ my $self = shift ;
+ return $self->{'CONTENT'} ;
+}
+
+=pod
+
+=item * clearcontent()
+
+Destoys the readed content and sets it
+to the empty.
+
+=cut
+sub clearcontent() : method {
+ my $self = shift ;
+ $self->{'CONTENT'} = { } ;
+}
+
+#------------------------------------------------------
+#
+# Main parsing functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * parse()
+
+Parses the files.
+Takes 1 arg:
+
+=over
+
+=item * file_list (array ref)
+
+is an array that contains the names of the files and the
+directories from which the parser must read the bibtex entries.
+
+=back
+
+=cut
+sub parse(\@) : method {
+ my $self = shift ;
+ $self->clearcontent() ;
+ # Evaluate the TeX expressions
+ if ( ( $self->{'FILE_PREAMBLES'} ) &&
+ ( exists( $self->{'FILE_PREAMBLES'}{'tex'} ) ) &&
+ ( $self->{'FILE_PREAMBLES'}{'tex'} ) ) {
+ Bib2HTML::General::Verbose::two( "Evaluate the user's LaTeX definitions...\n" ) ;
+ my $trans = Bib2HTML::Translator::TeX->new( $self->{'FILE_PREAMBLES'}{'filename'} ) ;
+ $trans->translate( $self->{'FILE_PREAMBLES'}{'tex'},
+ $self->{'CONTENT'}{'entries'} ) ;
+ }
+ # Evaluate each file
+ if ( isarray( $_[0] ) ) {
+ foreach my $file (@{$_[0]}) {
+ $self->readfile( $file ) ;
+ }
+ }
+ else {
+ die("END1");
+ $self->readfile( $_[0] ) ;
+ }
+ # Save the TeX entries
+ if ( $self->{'SHOW_BIBTEX'} ) {
+ $self->save_bibtex_entries() ;
+ }
+ # Evalute TeX expressions
+ $self->tex_translation() ;
+ # Expand the crossref fields
+ $self->expand_crossref() ;
+
+ return $self->content() ;
+}
+
+=pod
+
+=item * readfile()
+
+Reads the content of a file.
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is the name of the file to read.
+
+=back
+
+=cut
+sub readfile($) : method {
+ my $self = shift ;
+ my $filename = $_[0] || confess( 'you must supply the filename' ) ;
+
+ # Read the file content
+ Bib2HTML::General::Verbose::two( "Read $filename..." ) ;
+ my $scanner = new Bib2HTML::Parser::BibScanner() ;
+ if ($self->{'CONTENT'}) {
+ my $content = $scanner->scanentries($filename) ;
+ # Merge the constants
+ if ($content->{'constants'}) {
+ foreach my $constant (keys %{$content->{'constants'}}) {
+ if (exists $self->{'CONTENT'}{'constants'}{"$constant"}) {
+ Bib2HTML::General::Error::warm( "multiple definition for the constant '".
+ $constant."'",
+ $filename,
+ extract_line_from_location($content->{'constants'}{"$constant"}{'location'})) ;
+ }
+ $self->{'CONTENT'}{'constants'}{"$constant"} = $content->{'constants'}{"$constant"} ;
+ }
+ }
+ # Merge the preambles
+ if ($content->{'preambles'}) {
+ push @{$self->{'CONTENT'}{'preambles'}}, @{$content->{'preambles'}} ;
+ }
+ # Merge the comments
+ if ($content->{'comments'}) {
+ push @{$self->{'CONTENT'}{'comments'}}, @{$content->{'comments'}} ;
+ }
+ # Merge the red content to the previous content
+ if ($content->{'entries'}) {
+ foreach my $entry (keys %{$content->{'entries'}}) {
+ if (exists $self->{'CONTENT'}{'entries'}{"$entry"}) {
+ Bib2HTML::General::Error::warm( "multiple definition for the entry '".
+ $entry."'",
+ $filename,
+ extract_line_from_location($content->{'entriess'}{"$entry"}{'location'})) ;
+ }
+ $self->{'CONTENT'}{'entries'}{"$entry"} = $content->{'entries'}{"$entry"} ;
+ }
+ }
+ }
+ else {
+ $self->{'CONTENT'} = $scanner->scanentries($filename) ;
+ }
+}
+
+=pod
+
+=item * read_preambles()
+
+Read some LaTeX commands from a file.
+There commands are defined previously
+any command from the BibTeX files.
+Takes 1 arg:
+
+=over
+
+=item * file (string)
+
+=back
+
+=cut
+sub read_preambles($) : method {
+ my $self = shift ;
+ $self->{'FILE_PREAMBLES'} = '' ;
+ if ( $_[0] ) {
+ Bib2HTML::General::Verbose::two( "Reading the user's LaTeX definitions...\n" ) ;
+ if ( ( -f $_[0] ) &&
+ ( -r $_[0] ) ) {
+ my $tex = '' ;
+ local *FILE_PREAMBLE ;
+ open( *FILE_PREAMBLE, "< $_[0]" )
+ or Bib2HTML::General::Error::syserr( "$_[0]: $!" ) ;
+ while ( my $line = <FILE_PREAMBLE> ) {
+ $tex .= $line ;
+ }
+ close( *FILE_PREAMBLE ) ;
+ $tex =~ s/^[ \t\n\r]+// ;
+ $tex =~ s/[ \t\n\r]+$// ;
+ if ( $tex ) {
+ $self->{'FILE_PREAMBLES'} = {} ;
+ $self->{'FILE_PREAMBLES'}{'tex'} = $tex ;
+ $self->{'FILE_PREAMBLES'}{'filename'} = $_[0] ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::syserr( "unable to find or read the preamble file '$_[0]'" ) ;
+ }
+ }
+}
+
+=pod
+
+=item * expand_crossref()
+
+Expands crossref fields.
+
+=cut
+sub expand_crossref() : method {
+ my $self = shift ;
+
+ Bib2HTML::General::Verbose::two( "Expand crossref fields...\n" ) ;
+
+ foreach my $entry (keys %{$self->{'CONTENT'}{'entries'}}) {
+
+ if ( exists $self->{'CONTENT'}{'entries'}{"$entry"}{'fields'}{'crossref'} ) {
+
+ my $parent = $self->{'CONTENT'}{'entries'}{"$entry"}{'fields'}{'crossref'} ;
+ if ( exists $self->{'CONTENT'}{'entries'}{"$parent"} ) {
+
+ foreach my $field (keys %{$self->{'CONTENT'}{'entries'}{"$parent"}{'fields'}}) {
+ if ( ! exists $self->{'CONTENT'}{'entries'}{"$entry"}{'fields'}{"$field"} ) {
+ $self->{'CONTENT'}{'entries'}{"$entry"}{'fields'}{"$field"} =
+ $self->{'CONTENT'}{'entries'}{"$parent"}{'fields'}{"$field"} ;
+ }
+ }
+
+ }
+ else {
+ my $filename = extract_file_from_location( $self->{'CONTENT'}{'entries'}{"$entry"}{'location'} ) ;
+ my $lineno = extract_line_from_location( $self->{'CONTENT'}{'entries'}{"$entry"}{'location'} ) ;
+ Bib2HTML::General::Error::warm( "unable to find the entry '$parent' required for ".
+ "the crossref from '$entry'",
+ $filename, $lineno ) ;
+ }
+
+ }
+ }
+
+}
+
+=pod
+
+=item * tex_translation()
+
+Translates TeX expressions
+
+=cut
+sub tex_translation() : method {
+ my $self = shift ;
+
+ # Evaluate @preamble
+ Bib2HTML::General::Verbose::two( "Evaluate TeX expressions for the preambles...\n" ) ;
+
+ foreach my $preamble (@{$self->{'CONTENT'}{'preambles'}}) {
+ if ( $preamble->{'tex'} ) {
+ my $trans = Bib2HTML::Translator::TeX->new( extract_file_from_location( $preamble->{'location'} ) ) ;
+ $trans->translate( $preamble->{'tex'},
+ $self->{'CONTENT'}{'entries'},
+ extract_line_from_location( $preamble->{'location'} ) ) ;
+ }
+ }
+
+ # Evaluate @string
+ Bib2HTML::General::Verbose::two( "Evaluate TeX expressions for the constants...\n" ) ;
+ my $be = new Bib2HTML::Translator::BibTeXEntry() ;
+ foreach my $const (keys %{$self->{'CONTENT'}{'constants'}}) {
+ $self->{'CONTENT'}{'constants'}{$const}{'text'} = $be->expand_bibtex_vars($self->{'CONTENT'}{'constants'}{$const}{'text'},
+ $self->{'CONTENT'}{'constants'}) ;
+ }
+
+ # Evaluate @preamble
+ Bib2HTML::General::Verbose::two( "Evaluate TeX expressions for the preambles...\n" ) ;
+
+ # Evaluate entries' fields
+ foreach my $entry (keys %{$self->{'CONTENT'}{'entries'}}) {
+
+ Bib2HTML::General::Verbose::two( "Evaluate TeX expressions for '$entry'...\n" ) ;
+ my $filename = extract_file_from_location( $self->{'CONTENT'}{'entries'}{$entry}{'location'} ) ;
+ my $lineno = extract_line_from_location( $self->{'CONTENT'}{'entries'}{$entry}{'location'} ) ;
+ my $trans = Bib2HTML::Translator::TeX->new( $filename ) ;
+
+ foreach my $field (keys %{$self->{'CONTENT'}{'entries'}{$entry}{'fields'}}) {
+
+ if ( ! bibtex_ignore_field_parsing( $field ) ) {
+
+ # Translate the TeX code of this field into HTML source code
+ Bib2HTML::General::Verbose::three( "\ttreat field '$field'" ) ;
+
+ my $text = $be->expand_bibtex_vars($self->{'CONTENT'}{'entries'}{$entry}{'fields'}{$field},
+ $self->{'CONTENT'}{'constants'} ) ;
+
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{$field} = $trans->translate( $text,
+ $self->{'CONTENT'}{'entries'},
+ $lineno ) ;
+
+ }
+ else {
+
+ # Do not translate the TeX code of this field into HTML source code
+ # Simply remove the
+ if ( $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{$field} =~ /^{(.*)}$/) {
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{$field} = "$1" ;
+ }
+
+ }
+ }
+
+ }
+
+}
+
+=pod
+
+=item * save_bibtex_entries()
+
+Saves the original text for the BibTeX entries
+
+=cut
+sub save_bibtex_entries() : method {
+ my $self = shift ;
+
+ Bib2HTML::General::Verbose::two( "Save the BibTeX original values for futher verbatim...\n" ) ;
+
+ # Evaluate entries' fields
+ foreach my $entry (keys %{$self->{'CONTENT'}{'entries'}}) {
+
+ foreach my $field (keys %{$self->{'CONTENT'}{'entries'}{$entry}{'fields'}}) {
+
+ $self->{'CONTENT'}{'entries'}{$entry}{'original-fields'}{$field} =
+ $self->{'CONTENT'}{'entries'}{$entry}{'fields'}{$field} ;
+
+ }
+
+ }
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Scanner.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Scanner.pm
new file mode 100644
index 0000000000..bd02275638
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/Scanner.pm
@@ -0,0 +1,490 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Parser::Scanner - An abstract scanner for extracted bibtex entries
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Parser::Scanner ;
+
+my $scan = Bib2HTML::Parser::StateMachine->new(
+ transitions,
+ initial_state,
+ final_states
+ ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Parser::Scanner is a Perl module, which is a
+state machine which reads a input stream. This is an
+abstract scanner, i.e. it is not specific to a language
+such as PHP, HTML...
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a scanner, say something like this:
+
+ use Bib2HTML::Parser::Scanner;
+
+ my $sm = Bib2HTML::Parser::Scanner->new(
+ { '0' => [ { callback => 'myfunc',
+ pattern => 'a+',
+ state => '1',
+ },
+ { state => '0' },
+ ],
+ '1' => { state => '0',
+ },
+ },
+ '0',
+ [ '1' ]
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * transitions (hash ref)
+
+describes the states of this machine. It must be an
+associative array in which the keys are the name of
+each states, and the associated values describe the
+states with an array of transitions or with only
+one transition. A transition is defined as an
+associative array in which the following keys are
+recognized:
+
+=over
+
+=item * state (string)
+
+is the name of the state on which the machine must be
+after this transition. B<This value is required.>
+
+=item * pattern (string)
+
+is a regular expression that describe the selection
+condition needed to do this translation. B<This
+value is optional>. But, only once transition
+is able to not defined the pattern. This special
+transition is the default (if no other transition
+could be selected).
+
+=item * callback (string)
+
+is the name (not the reference) to a function that
+must be called each time this transition was selected.
+B<This value is optional>.
+
+=item * merge (boolean)
+
+if true and the state does not changed, the recognized
+token will be merged to the previous token.
+B<This value is optional>.
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Scanner.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Parser::Scanner;
+
+@ISA = ('Bib2HTML::Parser::StateMachine');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+use File::Basename ;
+
+use Bib2HTML::Parser::StateMachine ;
+use Bib2HTML::General::Misc ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the scanner
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = $class->SUPER::new( $_[0], $_[1], $_[2] ) ;
+ $self->{'LINENO'} = 0 ;
+ $self->{'STATE_STACK'} = [] ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Scanning functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * scan()
+
+Reads a input stream. Replies if the state machine is
+in a final state.
+Takes 1 arg:
+
+=over
+
+=item * filename (string)
+
+is the name of the file from which the tokens must
+be extracted.
+
+=back
+
+=cut
+sub scan($) : method {
+ my $self = shift ;
+ my $filename = $_[0] || confess( 'you must supply the filename' ) ;
+ local *SOURCEFILE ;
+ open( SOURCEFILE, "< $filename" )
+ or Bib2HTML::General::Error::syserr( "unable to open $filename: $!" ) ;
+
+ # Initialize the state machine
+ $self->{'LINENO'} = 0 ;
+ $self->{'FILENAME'} = $filename ;
+
+ $self->resetstatemachine() ;
+
+ while ( my $line = <SOURCEFILE> ) {
+ # Read a line
+ $self->{'LINENO'} ++ ;
+ # Translate the red line
+ # This translation is dependent of
+ # the scanner which inherited from this Scanner.
+ $line = $self->translate_current_line( $line ) ;
+ if ( $line !~ /^(\n|\r|\s)$/ ) {
+ while ( $line ) {
+ # Clear the buffer which store the unget
+ # tokens
+ $self->{'UNGET_BUFFER'} = '' ;
+ # Try to recognize the next token
+ # according to the translation table
+ $line = $self->changestatefrom( $line ) ;
+ # In case some call to ungetpattern
+ # was made, merges the unget string
+ # to the start of the current red
+ # line
+ if ( $self->{'UNGET_BUFFER'} ) {
+ $line = $self->{'UNGET_BUFFER'} . $line ;
+ }
+ }
+ }
+ }
+ $self->changestateforEOF() ;
+
+ Bib2HTML::General::Verbose::three( join( '',
+ "\t",
+ $self->{'LINENO'},
+ " line",
+ ($self->{'LINENO'}>1)?"s":"",
+ "\n" ) ) ;
+
+ close( SOURCEFILE )
+ or Bib2HTML::General::Error::syserr( "unable to close $filename: $!" ) ;
+
+ return $self->isfinalstate() ;
+}
+
+=pod
+
+=item * ungetpattern()
+
+Pushes the specified string into the current red string.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text that must be put inside the current stream.
+
+=back
+
+=cut
+sub ungetpattern($) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ $self->{'UNGET_BUFFER'} = $text . $self->{'UNGET_BUFFER'} ;
+ Bib2HTML::General::Verbose::verb( join( '',
+ "\t\tUNGET = '",
+ tohumanreadable($text),
+ "'" ),
+ 4 ) ;
+}
+
+=pod
+
+=item * translate_current_line()
+
+Replies the translation of the current line which was readed from
+the current input file.
+Takes 1 arg:
+
+=over
+
+=item * line (string)
+
+is the line to translate.
+
+=back
+
+=cut
+sub translate_current_line($) : method {
+ my $self = shift ;
+ return ($_[0] || '') ;
+}
+
+=pod
+
+=item * push_switch_state()
+
+Pushes the current state on the state stack and switch to the specified state.
+Takes 1 arg:
+
+=over
+
+=item * state (string)
+
+is the name of the new state to reach.
+
+=back
+
+=cut
+sub push_switch_state($) : method {
+ my $self = shift ;
+ my $state = $_[0] || confess( 'you must supply a state' ) ;
+ if ( exists $self->{'SM_STATES'}{$state} ) {
+ if ( Bib2HTML::General::Verbose::currentlevel() >= 4 ) {
+ my $verbstr = join( '',
+ "\t\ttoken = '",
+ tohumanreadable($self->{'SM_PREVIOUS_TOKEN'}),
+ "'" ) ;
+ $verbstr .= ", PUSH('".$self->{'SM_CURRENT_STATE'}."') -> '".$state."'" ;
+ Bib2HTML::General::Verbose::verb( "$verbstr.", 4 ) ;
+ }
+ push @{$self->{'STATE_STACK'}}, $self->{'SM_CURRENT_STATE'} ;
+ $self->{'SM_CURRENT_STATE'} = $state ;
+ }
+ else {
+ Bib2HTML::General::Error::syserr( "Unable to switch to the unexisting state '$state'" ) ;
+ }
+}
+
+=pod
+
+=item * push_state()
+
+Pushes the current state on the state stack. Does not switch to another state.
+Takes 1 arg:
+
+=over
+
+=item * state (string)
+
+is the name of the state to push.
+
+=back
+
+=cut
+sub push_state($) : method {
+ my $self = shift ;
+ my $state = $_[0] || confess( 'you must supply the state' ) ;
+ if ( exists $self->{'SM_STATES'}{$state} ) {
+ if ( Bib2HTML::General::Verbose::currentlevel() >= 4 ) {
+ my $verbstr = join( '',
+ "\t\ttoken = '",
+ tohumanreadable($self->{'SM_PREVIOUS_TOKEN'}),
+ "'" ) ;
+ $verbstr .= ", PUSH('".$self->{'SM_CURRENT_STATE'}."')" ;
+ Bib2HTML::General::Verbose::verb( "$verbstr.", 4 ) ;
+ }
+ push @{$self->{'STATE_STACK'}}, $state ;
+ }
+ else {
+ confess( "Unable to push the unexisting state '$state'" ) ;
+ }
+}
+
+=pod
+
+=item * pop_state()
+
+Pops a state from the state stack and set as the new current state.
+
+=cut
+sub pop_state() : method {
+ my $self = shift ;
+ if ( isemptyarray( $self->{'STATE_STACK'} ) ) {
+ confess( "Unable to pop a state from an empty state stack" ) ;
+ }
+ else {
+ my $state = pop @{$self->{'STATE_STACK'}} ;
+ if ( Bib2HTML::General::Verbose::currentlevel() >= 4 ) {
+ my $verbstr = join( '',
+ "\t\ttoken = '",
+ tohumanreadable($self->{'SM_PREVIOUS_TOKEN'}),
+ "'" ) ;
+ $verbstr .= ", POP('".$self->{'SM_CURRENT_STATE'}."') -> '$state'" ;
+ Bib2HTML::General::Verbose::verb( "$verbstr.", 4 ) ;
+ }
+ $self->{'SM_CURRENT_STATE'} = $state ;
+ }
+}
+
+=pod
+
+=item * set_state()
+
+Sets the current state, and replies the old state.
+Takes 1 arg:
+
+=over
+
+=item * state (string)
+
+is the name of the new state.
+
+=back
+
+=cut
+sub set_state($) : method {
+ my $self = shift ;
+ my $state = $_[0] || confess( 'you must supply the state' ) ;
+ my $old = $self->{'SM_CURRENT_STATE'} ;
+ $self->{'SM_CURRENT_STATE'} = $state ;
+ return $old ;
+}
+
+=pod
+
+=item * get_state()
+
+Replies the current state machine.
+
+=cut
+sub get_state() : method {
+ my $self = shift ;
+ return $self->{'SM_CURRENT_STATE'} ;
+}
+
+=pod
+
+=item * get_stackstate()
+
+Replies the current state machine on the top of the stack.
+
+=cut
+sub get_stackstate() : method {
+ my $self = shift ;
+ return $self->{'STATE_STACK'}->[$#{$self->{'STATE_STACK'}}] ;
+}
+
+=pod
+
+=item * get_statestack()
+
+Replies the whole state stack.
+
+=cut
+sub get_statestack() : method {
+ my $self = shift ;
+ return @{$self->{'STATE_STACK'}} ;
+}
+
+=pod
+
+=item * backend_error_function()
+
+Called each time no rule match the current buffer.
+
+=over
+
+=item * msg (string)
+
+is the error message.
+
+=back
+
+=cut
+sub backend_error_function($) : method {
+ my $self = shift ;
+ confess( 'you must supply the error message' ) unless $_[0] ;
+ Bib2HTML::General::Error::err( $_[0],
+ $self->{'FILENAME'},
+ $self->{'LINENO'} ) ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/StateMachine.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/StateMachine.pm
new file mode 100644
index 0000000000..d3b090c3a6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Parser/StateMachine.pm
@@ -0,0 +1,643 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Parser::StateMachine - A state machine
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Parser::StateMachine ;
+
+my $sm = Bib2HTML::Parser::StateMachine->new(
+ transitions,
+ initial_state,
+ final_states
+ ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Parser::StateMachine is a Perl module, which
+implementes a state machine.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To start a scanner, say something like this:
+
+ use Bib2HTML::Parser::StateMachine;
+
+ my $sm = Bib2HTML::Parser::StateMachine->new(
+ { '0' => [ { callback => 'myfunc',
+ pattern => 'a+',
+ state => '1',
+ },
+ { state => '0' },
+ ],
+ '1' => { state => '0',
+ },
+ },
+ '0',
+ [ '1' ]
+ ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * transitions (hash ref)
+
+describes the states of this machine. It must be an
+associative array in which the keys are the name of
+each states, and the associated values describe the
+states with an array of transitions or with only
+one transition. A transition is defined as an
+associative array in which the following keys are
+recognized:
+
+=over
+
+=item * state (string)
+
+is the name of the state on which the machine must <be
+after this transition. B<This value is required.>
+
+=item * pattern (string)
+
+is a regular expression that describe the selection
+condition needed to do this translation. B<This
+value is optional>. But, only once transition
+is able to not defined the pattern. This special
+transition is the default (if no other transition
+could be selected). If the pattern was equal to
+the string "$EOF", it matchs the end of the stream
+(see changestateforEOF()).
+
+=item * callback (string)
+
+is the name (not the reference) to a function that
+must be called each time this transition was selected.
+B<This value is optional>.
+
+=item * merge (boolean)
+
+if true, the recognized
+token will be merged to the next token.
+B<This value is optional>.
+
+=item * splitmerging (boolean)
+
+if true, the previously saved tokens
+are passed to the callbacks functions.
+If I<merge> was also true, the current
+token is not merging.
+B<This value is optional>.
+
+=back
+
+=item * initial_state (string)
+
+is the name of the initial state of the machine.
+This state must be defined inside the previous parameter.
+
+=item * final_states (array ref)
+
+is an array that lists all the final states recognized
+by this machine. This array is used by isfinalstate()
+to determine is this machine is inside a stable final
+state.
+
+=back
+
+=head2 State change
+
+To change the state of the machine, say something like this:
+
+ $scan->changestatefrom( "the string" ) ;
+
+...where "the string" is a string which permits to select
+the next state.
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in StateMachine.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Parser::StateMachine;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+use File::Basename ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::Verbose ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the scanner
+my $VERSION = "1.0" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($$$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = { } ;
+ # Sets the description of this machine
+ $self->{'SM_STATES'} = { 'SM_PREVIOUS_TOKEN' => "",
+ } ;
+ foreach my $state ( keys %{$_[0]} ) {
+ my $list ;
+ # Gets the list of the transitions
+ if ( isarray( $_[0]{$state} ) ) {
+ $list = $_[0]{$state} ;
+ }
+ else {
+ $list = [ $_[0]{$state} ] ;
+ }
+ # Checks the transitions
+ my $default = 0 ;
+ foreach my $trans ( @{$list} ) {
+ # Search for the target state
+ if ( ( exists $trans->{'state'} ) &&
+ ( "s".$trans->{'state'} eq "s" ) ) {
+ confess( "A transition of the state '$state' ".
+ "must have a target state." ) ;
+ }
+ if ( ! exists $_[0]{$trans->{'state'}} ) {
+ confess( "The transition state '".
+ $trans->{'state'}.
+ "' from '$state' was not found." ) ;
+ }
+ # Search for the default transition
+ if ( ! $trans->{'pattern'} ) {
+ if ( $default ) {
+ confess( "More than once default transition ".
+ "for the transition '$state'." ) ;
+ }
+ $default = 1 ;
+ $trans->{'pattern'} = '.' ;
+ }
+ elsif ( ! is_valid_regex( $trans->{'pattern'} ) ) {
+ confess( "The regular expression '".
+ $trans->{'pattern'}.
+ "' is not well-formed." ) ;
+ }
+ }
+ # Copies the state
+ @{$self->{'SM_STATES'}{$state}} = @{$list} ;
+ }
+
+ # Sets the initial state
+ if ( exists $self->{'SM_STATES'}{$_[1]} ) {
+ $self->{'SM_INITIAL_STATE'} = $_[1] ;
+ $self->{'SM_CURRENT_STATE'} = $_[1] ;
+ }
+ else {
+ confess( "The initial state '$_[1]' is not defined." ) ;
+ }
+
+ # Sets the final states
+ $self->{'SM_FINAL_STATES'} = [] ;
+ foreach my $state ( @{$_[2]} ) {
+ if ( exists $self->{'SM_STATES'}{$state} ) {
+ push( @{$self->{'SM_FINAL_STATES'}}, $state ) ;
+ }
+ else {
+ confess( "The final state '$state' is not defined." ) ;
+ }
+ }
+ if ( isemptyarray( $self->{'SM_FINAL_STATES'} ) ) {
+ confess( "No final state defined." ) ;
+ }
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Getters / Setters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * getcurrentstate()
+
+Replies the name of the current state of this
+machine.
+
+=cut
+sub getcurrentstate() : method {
+ my $self = shift ;
+ return $self->{'SM_CURRENT_STATE'} ;
+}
+
+=pod
+
+=item * isfinalstate()
+
+Replies the machine is inside a final state.
+
+=cut
+sub isfinalstate() : method {
+ my $self = shift ;
+ return strinarray( $self->{'SM_CURRENT_STATE'},
+ $self->{'SM_FINAL_STATES'} ) ;
+}
+
+=pod
+
+=item * resetstatemachine()
+
+Forces the state of this machine to the initial
+state.
+
+=cut
+sub resetstatemachine() : method {
+ my $self = shift ;
+ $self->{'SM_CURRENT_STATE'} = $self->{'SM_INITIAL_STATE'} ;
+ $self->{'SM_PREVIOUS_TOKEN'} = "" ;
+}
+
+#------------------------------------------------------
+#
+# State changement functions
+#
+#------------------------------------------------------
+
+=pod
+
+=item * changestatefrom()
+
+This method permits to select the new state according to
+the specified string and to the current state.
+The state transitions are defined when initializing.
+This method calls the callback function specified
+to the constructor, or (if not exists) calls the
+class methods transition_callback_XXX_YYY() and
+state_callback_YYY(), where XXX is the name of
+the old state, and YYY is the name of the new state.
+
+This method replies the rest of the specified
+parameter that is not eaten.
+
+Takes 1 arg:
+
+=over
+
+=item * token (string)
+
+is eaten to determine the new state.
+
+=back
+
+=item * transition_callback_XXX_YYY()
+
+This method is called each time a transition
+from the state XXX to the state YYY was
+encountered.
+Takes 1 arg:
+
+=over
+
+=item * token (string)
+
+is the last recognized token.
+
+=back
+
+=item * state_callback_YYY()
+
+This method is called each time the machine
+arrived inside a state (except for the
+initial state).
+Takes 1 arg:
+
+=over
+
+=item * token (string)
+
+is the last recognized token.
+
+=back
+
+=cut
+sub changestatefrom($) : method {
+ my $self = shift ;
+ my $input = $_[0] || '' ;
+
+ # Searches the max token matching
+ my $trans = $self->_searchtransition( $input, 0 ) ;
+
+ # Treats the translation matching
+ if ( ! isemptyhash( $trans ) ) {
+ my ($token,$rest) ;
+ if ( $trans->{'caseinsensitive'} ) {
+ $input =~ /^($trans->{'pattern'})(.*)$/si ;
+ ($token,$rest) = ($1,$2) ;
+ }
+ else {
+ $input =~ /^($trans->{'pattern'})(.*)$/s ;
+ ($token,$rest) = ($1,$2) ;
+ }
+
+ my $oldstate = $self->{'SM_CURRENT_STATE'} ;
+ $self->{'SM_CURRENT_STATE'} = $trans->{'state'} ;
+ $input = $rest ;
+
+ my $for_event = undef ;
+ if ( ( $trans->{'merge'} ) &&
+ ( $trans->{'splitmerging'} ) ) {
+ # Generates an transition event
+ # and merges the current token
+ $for_event = $self->{'SM_PREVIOUS_TOKEN'} ;
+ $self->{'SM_PREVIOUS_TOKEN'} = $token ;
+ }
+ elsif ( ( $trans->{'merge'} ) &&
+ ( ! $trans->{'splitmerging'} ) ) {
+ # Merges the current token
+ $self->{'SM_PREVIOUS_TOKEN'} .= $token ;
+ }
+ else {
+ # Does not merged the current token
+ $for_event = $self->{'SM_PREVIOUS_TOKEN'} . $token ;
+ $self->{'SM_PREVIOUS_TOKEN'} = "" ;
+ }
+
+ if ( defined $for_event ) {
+ $self->_callback( $for_event,
+ $oldstate,
+ $trans ) ;
+ }
+ }
+ elsif ( $self->can('backend_error_function') ) {
+ $self->backend_error_function( "Syntax error: unexpected character sequence \"".
+ tohumanreadable("$input").
+ "\"\n(unable to find a transition from ".
+ "the state '".
+ $self->{'SM_CURRENT_STATE'}.
+ "')." ) ;
+ exit(1) ;
+ }
+ else {
+ confess( "Syntax error: unexpected character sequence \"".
+ tohumanreadable("$input").
+ "\"\n(unable to find a transition from ".
+ "the state '".
+ $self->{'SM_CURRENT_STATE'}.
+ "')." ) ;
+ }
+ return $input ;
+}
+
+=pod
+
+=item * changestateforEOF()
+
+This method permits to select the new state according to
+an EOF and to the current state.
+The state transitions are defined when initializing.
+This method calls the class method
+EOF_callback_function() (only if no transition with
+the pattern '$EOF' was found from the current state).
+
+=item * EOF_callback_function()
+
+The methid is called each time the EOF was encountered
+and a transition with pattern '$EOF' is not found from
+the current state.
+
+=over
+
+=item * token (string)
+
+is the token which is not already eaten by the machine.
+
+=back
+
+=cut
+sub changestateforEOF() : method {
+ my $self = shift ;
+
+ # Calls the callback functions
+ # if a token was not treated
+
+ my $trans = $self->_searchtransition( "", 1 ) ;
+ if ( ! isemptyhash( $trans ) ) {
+ my $oldstate = $self->{'SM_CURRENT_STATE'} ;
+ $self->{'SM_CURRENT_STATE'} = $trans->{'state'} ;
+ $self->_callback( $self->{'SM_PREVIOUS_CONTENT'},
+ $oldstate,
+ $trans ) ;
+ }
+ else {
+ if ( Bib2HTML::General::Verbose::currentlevel() >= 4 ) {
+ my $verbstr = join( '',
+ "\t\ttoken = '",
+ tohumanreadable($self->{'SM_PREVIOUS_TOKEN'}),
+ "'" ) ;
+ $verbstr .= ", when EOF in '".$self->{'SM_CURRENT_STATE'}."'" ;
+ Bib2HTML::General::Verbose::verb( "$verbstr.", 4 ) ;
+ }
+ my $reffunc = $self->can( "EOF_callback_function" ) ;
+ if ( $reffunc ) {
+ $self->$reffunc( $self->{'SM_PREVIOUS_TOKEN'} ) ;
+ }
+ }
+}
+
+=pod
+
+=item * _callback()
+
+Calls the callback functions.
+Takes 3 args:
+
+=over
+
+=item * token (string)
+
+is the token to pass to the callback functions.
+
+=item * old_state (string)
+
+is the name of the state before the transition
+(the name of the state after the transition is
+stored inside $self->{'SM_CURRENT_STATE'}).
+
+=item * transition (hash ref)
+
+is the transition choosen.
+
+=back
+
+=cut
+sub _callback($$$) : method {
+ my $self = shift ;
+ my $token = $_[0] || '' ;
+ my $oldstate = $_[1] || confess( 'you must supply the old state' ) ;
+ if ( Bib2HTML::General::Verbose::currentlevel() >= 4 ) {
+ my $verbstr = join( '',
+ "\t\ttoken = '",
+ tohumanreadable($token),
+ "'" ) ;
+ if ( $self->{'SM_CURRENT_STATE'} eq $oldstate ) {
+ $verbstr .= ", in state '".tohumanreadable($oldstate)."'" ;
+ }
+ else {
+ $verbstr .= join( '',
+ ", transition: '",
+ tohumanreadable($oldstate),
+ "' -> '",
+ tohumanreadable($self->{'SM_CURRENT_STATE'}),
+ "'" ) ;
+ }
+ Bib2HTML::General::Verbose::verb( "$verbstr.", 4 ) ;
+ }
+
+ if ( ishash( $_[2] ) ) {
+ if ( ( exists $_[2]->{'callback'} ) &&
+ ( my $func = $self->can($_[2]->{'callback'}) ) ) {
+ $self->$func( $token, $oldstate ) ;
+ }
+ else {
+ my $reffunc = $self->can( "transition_callback_".
+ $oldstate."_".
+ $self->{'SM_CURRENT_STATE'} ) ;
+ if ( $reffunc ) {
+ $self->$reffunc( $token ) ;
+ }
+ $reffunc = $self->can( "state_callback_".
+ $self->{'SM_CURRENT_STATE'} ) ;
+ if ( $reffunc ) {
+ $self->$reffunc( $token, $oldstate ) ;
+ }
+ }
+ }
+}
+
+=pod
+
+=item * _searchtransition()
+
+Search a valid transition
+Takes 2 args:
+
+=over
+
+=item * input (string)
+
+is the content of the string to scan.
+
+=item * eof (boolean)
+
+is true if an EOF was encountered. In this
+case, the I<input> will be ignored.
+
+=back
+
+=cut
+sub _searchtransition($$) : method {
+ my $self = shift ;
+ my $input = $_[0] || '' ;
+ my $eof = $_[1] || 0 ;
+ # Searches the max token matching
+ my $maxlength = 0 ;
+ my $trans = {} ;
+ my $recognizedtoken = "" ;
+ foreach my $t (@{$self->{'SM_STATES'}{$self->{'SM_CURRENT_STATE'}}}) {
+ if ( ( ( $eof ) &&
+ ( $input eq '$EOF' ) ) ||
+ ( ( $t->{'caseinsensitive'} ) &&
+ ( $input =~ /^($t->{'pattern'})/si ) ) ||
+ ( ( ! $t->{'caseinsensitive'} ) &&
+ ( $input =~ /^($t->{'pattern'})/s ) ) ) {
+ my $token = $1 ;
+ if ( length($token) > $maxlength ) {
+ $maxlength = length($token) ;
+ $trans = $t ;
+ $recognizedtoken = $token ;
+ }
+ }
+ }
+ if ( ( $recognizedtoken ) && ( Bib2HTML::General::Verbose::currentlevel() >= 5 ) ) {
+ Bib2HTML::General::Verbose::verb( join( '',
+ "\t\tnext transition:\n\t\t\tfrom: ",
+ $self->{'SM_CURRENT_STATE'},
+ "\n\t\t\tto: ",
+ $trans->{'state'},
+ "\n\t\t\tpattern: /",
+ $trans->{'pattern'},
+ "/\n\t\t\ttoken: '",
+ $recognizedtoken,
+ "'\n"),
+ 5 ) ;
+ }
+ return $trans ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland <galland@arakhne.org>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Release.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Release.pm
new file mode 100644
index 0000000000..0c69e78772
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Release.pm
@@ -0,0 +1,89 @@
+# Copyright (C) 2002-09 Stephane Galland <galland@arakhne.org>
+# Copyright (C) 2011 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+package Bib2HTML::Release;
+@ISA = ('Exporter');
+@EXPORT = qw( &getVersionNumber &getVersionDate &getBugReportURL
+ &getAuthorName &getAuthorEmail &getMainURL
+ &getContributors ) ;
+@EXPORT_OK = qw();
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+my $VERSION = "6.7" ;
+
+#------------------------------------------------------
+#
+# DEFINITIONS
+#
+#------------------------------------------------------
+
+my $BIB2HTML_VERSION = $VERSION ;
+my $BIB2HTML_DATE = '2011/07/31' ;
+my $BIB2HTML_BUG_URL = 'mailto:bugreport@arakhne.org' ;
+my $BIB2HTML_AUTHOR = 'Stephane GALLAND' ;
+my $BIB2HTML_AUTHOR_EMAIL = 'galland@arakhne.org' ;
+my $BIB2HTML_URL = 'http://www.arakhne.org/bib2ml/' ;
+my %BIB2HTML_CONTRIBS = ( 'zinser@zinser.no-ip.info' => "Martin P.J. ZINSER",
+ 'preining@logic.at' => "Norbert PREINING",
+ 'sebastian.rodriguez@utbm.fr' => "Sebastian RODRIGUEZ",
+ 'michail@mpi-sb.mpg.de' => "Dimitris MICHAIL",
+ 'joao.lourenco@di.fct.unl.pt' => "Joao LOURENCO",
+ 'paolini@di.unito.it' => "Luca PAOLINI",
+ 'cri@linux.it' => "Cristian RIGAMONTI",
+ 'loew@mathematik.tu-darmstadt.de' => "Tobias LOEW",
+ 'loew@mathematik.tu-darmstadt.de' => "Tobias LOEW",
+ 'gasper.jaklic@fmf.uni-lj.si' => "Gasper JAKLIC",
+ 'olivier.hugues@gmail.com' => "Olivier HUGUES",
+ ) ;
+
+#------------------------------------------------------
+#
+# Functions
+#
+#------------------------------------------------------
+
+sub getVersionNumber() {
+ return $BIB2HTML_VERSION ;
+}
+
+sub getVersionDate() {
+ return $BIB2HTML_DATE ;
+}
+
+sub getBugReportURL() {
+ return $BIB2HTML_BUG_URL ;
+}
+
+sub getAuthorName() {
+ return $BIB2HTML_AUTHOR ;
+}
+
+sub getAuthorEmail() {
+ return $BIB2HTML_AUTHOR_EMAIL ;
+}
+
+sub getMainURL() {
+ return $BIB2HTML_URL ;
+}
+
+sub getContributors() {
+ return %BIB2HTML_CONTRIBS ;
+}
+
+1;
+__END__
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXEntry.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXEntry.pm
new file mode 100644
index 0000000000..03711b69fa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXEntry.pm
@@ -0,0 +1,498 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Translator::BibTeXEntry - An BibTeX entry manager
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Translator::BibTeXEntry ;
+
+my $gen = Bib2HTML::Translator::BibTeXEntry->new() ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Translator::BibTeXEntry is a Perl module, which parses
+the names according to the BibTeX format and build a BibTeX
+bibliographical reference.
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To create a parser, say something like this:
+
+ use Bib2HTML::Translator::BibTeXEntry;
+
+ my $parser = Bib2HTML::Translator::BibTeXEntry->new() ;
+
+...or something similar.
+
+=cut
+
+package Bib2HTML::Translator::BibTeXEntry;
+
+@ISA = ('Exporter');
+@EXPORT = qw(bibtex_ignore_field_parsing);
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::Translator::BibTeXName ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the parser
+my $VERSION = "3.1" ;
+
+# List of ignore field for the parsing
+my @IGNORE_PARSING_FOR_FIELDS = ( 'localfile', 'url', 'pdf',
+ ) ;
+
+# List of ignore field for the parsing
+my @IGNORE_ENTRY_EXPORT_FOR_FIELDS = ( 'localfile', 'url', 'pdf',
+ 'domain', 'nddomain', 'rddomain',
+ 'abstract', 'keywords',
+ ) ;
+
+# Citation label database
+my %CITATION_LABEL_DATABASE = () ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = { } ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Citation
+#
+#------------------------------------------------------
+
+=pod
+
+=item * citation_label()
+
+Replies the citation label of the specified entry.
+Takes 1 arg:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * entry (hash)
+
+is the entry for which creates an entry.
+
+=back
+
+=cut
+sub citation_label($$) : method {
+ my $self = shift ;
+ my $key = $_[0] || confess( 'you must supply the key' ) ;
+ my $entry = $_[1] || confess( 'you must supply the entry data' ) ;
+ if ( ( ! exists $CITATION_LABEL_DATABASE{$key} ) ||
+ ( ! $CITATION_LABEL_DATABASE{$key} ) ) {
+ my $bibtex = new Bib2HTML::Translator::BibTeXName() ;
+ my @authors ;
+ if ( $entry->{'fields'}{'author'} ) {
+ @authors = $bibtex->splitnames( $entry->{'fields'}{'author'} ) ;
+ }
+ else {
+ @authors = $bibtex->splitnames( $entry->{'fields'}{'editor'} ) ;
+ }
+ my $label ;
+ if ( @authors ) {
+ my $count = 0 ;
+ foreach my $author ( @authors ) {
+ if ( $author->{'last'} ) {
+ if ($count<3) {
+ $label .= html_uc( html_substr( $author->{'last'}, 0, 1 ) ) ;
+ }
+ $count ++ ;
+ }
+ }
+ if ( $count <= 1 ) {
+ $label = html_ucfirst(html_lc(html_substr($authors[0]->{'last'}, 0, 3))) ;
+ }
+ else {
+ $label .= "+" ;
+ }
+ if ( $entry->{'fields'}{'year'} ) {
+ $label .= substr($entry->{'fields'}{'year'},-2) ;
+ }
+ }
+ else {
+ $label = 'unk' ;
+ if ( $entry->{'fields'}{'year'} ) {
+ $label .= substr($entry->{'fields'}{'year'},-2) ;
+ }
+ }
+ my $count = 0 ;
+ my $lbl = $label ;
+ while ( valueinhash( $lbl, \%CITATION_LABEL_DATABASE ) ) {
+ $count ++ ;
+ $lbl = $label . integer2alphabetic( $count ) ;
+ }
+ $CITATION_LABEL_DATABASE{$key} = $lbl ;
+ }
+ return $CITATION_LABEL_DATABASE{$key} ;
+}
+
+=pod
+
+=item * save_citation_label()
+
+Replies the citation label of the specified entry.
+Takes 1 arg:
+
+=over
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * entry (hash)
+
+is the entry for which creates an entry.
+
+=back
+
+=cut
+sub save_citation_label($$) : method {
+ my $self = shift ;
+ my $key = $_[0] || confess( 'you must supply the key' ) ;
+ if ( ( $_[1] ) &&
+ ( ! $CITATION_LABEL_DATABASE{$key} ) ) {
+ $CITATION_LABEL_DATABASE{$key} = $_[1] ;
+ }
+}
+
+=pod
+
+=item * bibtex_ignore_field_parsing()
+
+Replies if the specified field could be parsed
+Takes 1 arg:
+
+=over
+
+=item * field (string)
+
+is the name of the field.
+
+=back
+
+=cut
+sub bibtex_ignore_field_parsing($) {
+ my $field = $_[0] || confess( 'you must supply the field name' ) ;
+ return ( strinarray($field,\@IGNORE_PARSING_FOR_FIELDS) ) ;
+}
+
+=pod
+
+=item * bibtex_ignore_field_in_export()
+
+Replies if the specified field must be ignored during export
+Takes 1 arg:
+
+=over
+
+=item * field (string)
+
+is the name of the field.
+
+=back
+
+=cut
+sub bibtex_ignore_field_in_export($) {
+ my $field = $_[0] || confess( 'you must supply the field name' ) ;
+ return (( $field =~ /^opt/i) ||
+ ( strinarray($field,\@IGNORE_ENTRY_EXPORT_FOR_FIELDS) )) ;
+}
+
+=pod
+
+=item * bibtex_build_entry()
+
+Replies a string which corresponds to the BibTeX source
+code for the specified parameters.
+Takes 4 args:
+
+=over
+
+=item * type (string)
+
+is the type of the entry.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * fields (hash)
+
+is the list of fields.
+
+=item * constants (hash)
+
+is the list of constants.
+
+=back
+
+=cut
+sub bibtex_build_entry($$\%\%) {
+ my $self = shift ;
+ return '' unless ($_[0]&&$_[1]) ;
+ my $code = join('',
+ "@",
+ $_[0],
+ "{",
+ $_[1],
+ ",\n" ) ;
+ while ( my ($field,$value) = each(%{$_[2]}) ) {
+ if ( $field ) {
+ $code .= " $field = " ;
+ if ( isarray($value) ) {
+ $code .= "{".$self->expand_bibtex_vars($value,$_[3])."}" ;
+ }
+ else {
+ $code .= "$value" ;
+ }
+ $code .= ",\n" ;
+ }
+ }
+ $code .= "}" ;
+ return $code ;
+}
+
+=pod
+
+=item * bibtex_build_entry_html()
+
+Replies an HTML string which corresponds to the BibTeX source
+code for the specified parameters.
+Takes 5 args:
+
+=over
+
+=item * type (string)
+
+is the type of the entry.
+
+=item * key (string)
+
+is the key of the entry.
+
+=item * fields (hash)
+
+is the list of fields.
+
+=item * constants (hash)
+
+is the list of constants.
+
+=item * page_width (integer)
+
+is the size of the page. It is used to split the
+lines (default value is 80).
+
+=back
+
+=cut
+sub bibtex_build_entry_html($$\%\%$) {
+ my $self = shift ;
+ return '' unless ($_[0]&&$_[1]) ;
+ my $page_width = ((($_[4])&&($_[4]>0))?$_[4]:80) ;
+ my $code = join('',
+ "@",
+ $_[0],
+ "{",
+ $_[1],
+ ",\n" ) ;
+ while ( my ($field,$value) = each(%{$_[2]}) ) {
+ if (($field)&&(!bibtex_ignore_field_in_export($field))) {
+ my $fldval = " $field = " ;
+ my $indent = length("$fldval") ;
+ if ( isarray($value) ) {
+ $fldval .= "{".$self->expand_bibtex_vars($value,$_[3])."}" ;
+ $indent ++ ;
+ }
+ else {
+ $fldval .= "$value" ;
+ $indent ++ if ( $value =~ /^\{.*\}$/ ) ;
+ }
+ $fldval .= "," ;
+ if (bibtex_ignore_field_parsing("$field")) {
+ $code .= "$fldval" ;
+ }
+ else {
+ $code .= splittocolumn("$fldval",$page_width,$indent, 2) ;
+ }
+ $code .= "\n" ;
+ }
+ }
+ $code .= "}" ;
+ return $code ;
+}
+
+=pod
+
+=item * expand_bibtex_vars()
+
+Does the TeX preprocessing which permits to
+replace the constants (@STRING) by there values.
+The parameter could be a sting or an array in
+case the BibTeX merging operator was used to
+build the value.
+Takes 2 args:
+
+=over
+
+=item * tex (string or array)
+
+is the tex expression to evaluate
+
+=item * constants (hash)
+
+is the list of constants.
+
+=back
+
+=cut
+sub expand_bibtex_vars($\%) {
+ my $self = shift ;
+ if ( $_[0] ) {
+
+ if ( isarray($_[0]) ) {
+
+ # Treats the case of the BibTeX merging operator
+ my @text = () ;
+ foreach my $elt (@{$_[0]}) {
+ push @text, $self->expand_bibtex_vars($elt,$_[1]) ;
+ }
+ return join( '', @text) ;
+
+ }
+ else {
+
+ # Treat "standard" definition
+ return $self->__expand_bibtex_vars($_[0],$_[1]) ;
+
+ }
+
+ }
+ return '' ;
+}
+
+=pod
+
+=item * __expand_bibtex_vars()
+
+Does the TeX preprocessing which permits to
+replace the constants (@STRING) by there values.
+Takes 2 args:
+
+=over
+
+=item * tex (string)
+
+is the tex expression to evaluate
+
+=item * constants (hash)
+
+is the list of constants.
+
+=back
+
+=cut
+sub __expand_bibtex_vars($) : method {
+ my $self = shift ;
+
+ my $tex = $_[0] || confess( 'you must supply a TeX expression' ) ;
+
+ return $1 if ( $tex =~ /^{(.*)}$/ ) ;
+
+ my $lctex = lc($tex) ;
+ trim $lctex ;
+
+ return $tex
+ unless ( exists $_[1]->{$lctex} ) ;
+
+ my $lcval = lc($_[1]->{$lctex}{'text'}) ;
+ trim $lcval ;
+
+ if ( $lcval eq $lctex ) {
+ return $_[1]->{$lctex}{'text'} ;
+ }
+ else {
+ return $self->expand_bibtex_vars($_[1]->{$lctex}{'text'},$_[1]) ;
+ }
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXName.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXName.pm
new file mode 100644
index 0000000000..0a36f5b133
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/BibTeXName.pm
@@ -0,0 +1,931 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Translator::BibTeXName - An parser for BibTeX names
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Translator::BibTeXName ;
+
+my $gen = Bib2HTML::Translator::BibTeXName->new() ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Translator::BibTeXName is a Perl module, which parses
+the names according to the BibTeX format
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To create a parser, say something like this:
+
+ use Bib2HTML::Translator::BibTeXName;
+
+ my $parser = Bib2HTML::Translator::BibTeXName->new() ;
+
+...or something similar.
+
+=cut
+
+package Bib2HTML::Translator::BibTeXName;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw();
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Error ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the parser
+my $VERSION = "2.2" ;
+
+# The string for the junior part of a name
+my @JUNIOR_PARTS = ( 'junior', 'jr.', 'jr', 'senior', 'sen.', 'sen',
+ 'esq.', 'esq', 'phd.', 'phd' ) ;
+
+# This is the label generated for the "et al."
+my $ETAL_STRING = "<i>et&nbsp;al.</i>" ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = { } ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Getters
+#
+#------------------------------------------------------
+
+=pod
+
+=item * countnames()
+
+Replies the quantity of names inside the specified string
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text to parse.
+
+=back
+
+=cut
+sub countnames($) : method {
+ my $self = shift ;
+ my @names = $self->splitnames($_[0]||'') ;
+ return int(@names) ;
+}
+
+=pod
+
+=item * samenames()
+
+Replies if the two names are the same.
+Takes 2 args:
+
+=over
+
+=item * name1 (hash)
+
+=item * name2 (hash)
+
+=back
+
+=cut
+sub samenames($$) : method {
+ my $self = shift ;
+ if ( $_[0]->{'et al'} || $_[0]->{'et al'} ) {
+ return 0 ;
+ }
+ my $n1 = $self->formatname($_[0],'l,i.') ;
+ my $n2 = $self->formatname($_[1],'l,i.') ;
+ $n1 =~ s/[ \t\n\r]+//g ;
+ $n2 =~ s/[ \t\n\r]+//g ;
+ return ( lc($n1) eq lc($n2) ) ;
+}
+
+=pod
+
+=item * isauthorin()
+
+Replies if the first parameter is a author which
+appears inside the second parameter.
+
+Takes 2 args:
+
+=over
+
+=item * author (hash)
+
+=item * authors (string)
+
+=back
+
+=cut
+sub isauthorin($$) : method {
+ my $self = shift ;
+ if ( $_[0]->{'et al'} || (!$_[1]) ) {
+ return 0 ;
+ }
+ my @names = $self->splitnames($_[1]) ;
+ foreach my $author (@names) {
+ if ( $self->samenames($_[0],$author) ) {
+ return 1 ;
+ }
+ }
+ return 0 ;
+}
+
+#------------------------------------------------------
+#
+# Formating API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * formatname()
+
+Replies a well-formated name
+Takes 2 args:
+
+=over
+
+=item * name (hash)
+
+is the components of the name to format
+
+=item * format (string)
+
+is the format of the name (composed by v l L f f. i i. j)
+
+=back
+
+=cut
+sub formatname($$) : method {
+ my $self = shift ;
+ confess( 'you must supply a name' ) unless (($_[0])&&(ishash($_[0]))) ;
+ confess( 'you must supply a valid format string' ) unless $_[1] ;
+
+ if ( $_[0]->{'et al'} ) {
+ return $ETAL_STRING ;
+ }
+ my @blocks = $self->_extract_blocks( $_[1] ) ;
+
+ my $name = '' ;
+ foreach my $part (@blocks) {
+ my $txt;
+ my $isa = isarray( $part );
+ if ( $isa ) {
+ $txt = join('',@{$part});
+ }
+ else {
+ $txt = $part;
+ }
+ if ($txt) {
+ $name .= $self->_formatname_scan_pattern($txt,$_[0],$isa) ;
+ }
+ }
+ return $name ;
+}
+
+# $_[0]: patterns
+# $_[1]: hash of the name's components
+# $_[2]: 1 if all the given patterns must be found
+sub _formatname_scan_pattern($$$) {
+ my $self = shift ;
+ confess( 'you must supply a name' ) unless (($_[1])&&(ishash($_[1]))) ;
+ my $pattern = $_[0] || '' ;
+ my $result = '' ;
+ my $foundall = 1 ;
+
+ while ( $pattern =~ /^([^a-zA-Z.]*)([a-zA-Z.]+)(.*)$/ ) {
+ ($result, my $str, $pattern) = ($result.$1, $2, $3) ;
+ if ( $str eq 'l' ) {
+ $foundall = ( $foundall && $_[1]->{'last'} ) ;
+ $result .= html_ucwords( $_[1]->{'last'} ) ;
+ }
+ elsif ( $str eq 'L' ) {
+ $foundall = ( $foundall && $_[1]->{'last'} ) ;
+ $result .= html_ucwords( $_[1]->{'last'} ) ;
+ }
+ elsif ( $str eq 'f' ) {
+ $foundall = ( $foundall && $_[1]->{'first'} ) ;
+ $result .= html_ucwords( $_[1]->{'first'} ) ;
+ }
+ elsif ( $str eq 'f.' ) {
+ $foundall = ( $foundall && $_[1]->{'first'} ) ;
+ $result .= html_ucwords( html_getinitiales( $_[1]->{'first'} ) ) ;
+ }
+ elsif ( $str eq 'i' ) {
+ my $ff = html_ucwords( $_[1]->{'first'} ) ;
+ if ($ff =~ /^[ \t\n\r]*([^ \t\n\r]+)/) {
+ $ff = $1 ;
+ }
+ else {
+ $ff = '' ;
+ }
+ $foundall = ( $foundall && $ff ) ;
+ $result .= $ff ;
+ }
+ elsif ( $str eq 'i.' ) {
+ my $ff = html_ucwords( html_getinitiales( $_[1]->{'first'} ) ) ;
+ if ($ff =~ /^[ \t\n\r]*([^ \t\n\r]+)/) {
+ $ff = $1 ;
+ }
+ else {
+ $ff = '' ;
+ }
+ $foundall = ( $foundall && $ff ) ;
+ $result .= $ff ;
+ }
+ elsif ( $str eq 'v' ) {
+ $foundall = ( $foundall && $_[1]->{'von'} ) ;
+ $result .= $_[1]->{'von'} ;
+ }
+ elsif ( $str eq 'j' ) {
+ $foundall = ( $foundall && $_[1]->{'jr'} ) ;
+ $result .= $_[1]->{'jr'} ;
+ }
+ else {
+ $result .= $str ;
+ }
+ }
+ if ( $pattern ) {
+ $result .= $pattern ;
+ }
+
+ if ( ( ! $_[2] ) || ( $foundall ) ) {
+ return $result ;
+ }
+ else {
+ return '' ;
+ }
+}
+
+=pod
+
+=item * formatnames()
+
+Replies well-formated names
+Takes 4 args:
+
+=over
+
+=item * names (hash)
+
+is the components of the name to format
+
+=item * formatname (string)
+
+is the format of one name (composed by the letters [vlfj.{}]+)
+
+=item * formatnames (string)
+
+is the format which permits to merge the names (composed by the letters [n{}]+)
+
+=item * count (optional integer)
+
+is the maximum number of names which must be put inside the result.
+
+=back
+
+=cut
+sub formatnames($$$) : method {
+ my $self = shift ;
+ return $self->formatnames_withurl($_[0], $_[1], $_[2], undef, $_[3], $_[4]) ;
+}
+
+=pod
+
+=item * formatnames_withurl()
+
+Replies well-formated names
+with a link to their list-of-papers page.
+Takes 4 args:
+
+=over
+
+=item * names (hash)
+
+is the components of the name to format
+
+=item * formatname (string)
+
+is the format of one name (composed by the letters [vlfj.{}]+)
+
+=item * formatnames (string)
+
+is the format which permits to merge the names (composed by the letters [n{}]+)
+
+=item * backend_object (AbstractGenertor object)
+
+is the pointer to the object to call for creating the URL.
+The called methid is: formatnames_url_backend.
+
+=item * count (optional integer)
+
+is the maximum number of names which must be put inside the result.
+
+=item * rootdir (optional string)
+
+=back
+
+=cut
+sub formatnames_withurl($$$$;$$) : method {
+ my $self = shift ;
+ return '' unless $_[0] ;
+ confess( 'you must supply a valid format string for a name' ) unless $_[1] ;
+ confess( 'you must supply a valid format string for all names' ) unless $_[2] ;
+ my $backend = $_[3] || undef ;
+ my $max = (($_[4])&&($_[4]>=-1)) ? $_[4] : 1 ;
+ my $rootdir = $_[5] || '' ;
+ my @authors = $self->splitnames( $_[0] ) ;
+
+ if ( $max <= 0 ) {
+ $max = int(@authors) ;
+ }
+
+ my @blocks = $self->_extract_blocks( $_[2] ) ;
+ my ($sep1,$sep2) = (join('',@{$blocks[1]}),
+ join('',@{$blocks[3]})) ;
+
+ my ($i,$names) = (0,'') ;
+ while ( ( $i <= $#authors ) && ( $i < $max ) ) {
+ my $name ;
+ if ( $authors[$i]{'et al'} ) {
+ $name = " ".$ETAL_STRING ;
+ }
+ else {
+ $name = $self->formatname( $authors[$i], $_[1] ) ;
+ # Add the url
+ if ($backend) {
+ $name = $backend->formatnames_url_backend($authors[$i], $name, $rootdir) ;
+ }
+ if ( $names ) {
+ $names .= ( $i == $#authors ) ? $sep1 : $sep2 ;
+ }
+ }
+ $names .= $name ;
+ $i ++ ;
+ }
+ if ( int(@authors) > $max ) {
+ $names .= " ".$ETAL_STRING ;
+ }
+ return $names ;
+}
+
+#------------------------------------------------------
+#
+# Extracting API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * splitnames()
+
+Splits the specified string into names.
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text to split
+
+=back
+
+=cut
+sub splitnames($) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my @names = () ;
+
+ # Support no-standard notation "et al"
+ if ( $text =~ /\s*et[ \t\r\n~]+al\.?\s*/g ) {
+ my $original = $text ;
+ $text =~ s/\s*et[ \t\r\n~]+al\.?\s*/ and others /g ;
+ $text =~ s/^\s+//m ;
+ $text =~ s/\s+$//m ;
+ Bib2HTML::General::Error::syswarm( "the string \"".$original."\" does not respect the BibTeX standard for author's names. ".
+ "Assume \"".$text."\"." ) ;
+ }
+
+ # Scan the authors to extract the brace blocks
+ my @blocks = $self->_extract_blocks($text) ;
+
+ # Split the top level blocks
+ for(my $i=0; $i<=$#blocks; $i++) {
+ if ( ! isarray( $blocks[$i] ) ) {
+ my @parts ;
+ if ( $blocks[$i] =~ /^\s*and\s*$/i ) {
+ @parts = ( '', '' ) ;
+ }
+ else {
+ @parts = split /(?<=\s)and(?=\s)/i, " ".$blocks[$i]." " ;
+ }
+ if ( ! isemptyarray( \@names ) ) {
+ $names[$#names] .= $parts[0] ;
+ for(my $j=1; $j<=$#parts; $j++) {
+ push @names, $parts[$j] ;
+ }
+ }
+ else {
+ for(my $j=0; $j<=$#parts; $j++) {
+ my $p = $parts[$j] ;
+ $p =~ s/^\s+//gm ;
+ $p =~ s/\s+$//gm ;
+ if ( $p ) {
+ push @names, $p ;
+ }
+ }
+ }
+ }
+ else {
+ if ( ! isemptyarray( \@names ) ) {
+ $names[$#names] .= join( '', @{$blocks[$i]} ) ;
+ }
+ else {
+ push @names, join( '', @{$blocks[$i]} ) ;
+ }
+ }
+ }
+
+ # Parse the names to extract the components
+ my @newnames = () ;
+ for(my $i=0; $i<=$#names; $i++) {
+ my $r = $self->scan_name($names[$i]) ;
+
+ if ( isarray( $r ) ) {
+ foreach my $n (@{$r}) {
+ push @newnames, $n ;
+ }
+ }
+ else {
+ push @newnames, $r ;
+ }
+ }
+
+ return @newnames ;
+}
+
+=pod
+
+=item * scan_name()
+
+Scans a single name to extract there components.
+The recognized formats are :
+First [von] Last [jr]
+[von] Last, First [jr]
+[von] Last, jr, First
+
+Takes 1 arg:
+
+=over
+
+=item * name (string)
+
+is the name to scan
+
+=back
+
+=cut
+sub scan_name($) : method {
+ my $self = shift ;
+ my $name = $_[0] || '' ;
+ my ($first,$von,$last,$jr) = ('','','','') ;
+ if ( $name =~ /^\s*others?\s*$/i ) {
+ #
+ # et al.
+ #
+ return { 'first' => $first,
+ 'von' => $von,
+ 'last' => $last,
+ 'jr' => $jr,
+ 'et al' => 1,
+ } ;
+ }
+ elsif ( $name =~ /^([^,]*),([^,]*),(.*)$/ ) {
+ my ($p1,$p2,$p3) = ($1,$2,$3) ;
+ if ( $self->_is_junior( $p2 ) ) {
+ #
+ # [von] Last, jr, First
+ #
+ ($von,$last,$jr,$first) = $self->_scanname_vl_j_f( $p1,$p2,$p3 ) ;
+ }
+ else {
+ #
+ # name, name, ...
+ #
+ Bib2HTML::General::Error::syswarm( "BibTeX author's names are expressed with a quiet ambigous syntax: ".$name.". Assume ',' as names' separator." ) ;
+ my $subnames = [] ;
+ foreach my $subname ( split(/\s*,\s*/, $name ) ) {
+ ($von,$last,$jr,$first) = $self->_scanname_fvlj( $subname ) ;
+ $first =~ s/^\s+// ;
+ $first =~ s/\s+$// ;
+ $last =~ s/^\s+// ;
+ $last =~ s/\s+$// ;
+ $von =~ s/^\s+// ;
+ $von =~ s/\s+$// ;
+ $jr =~ s/^\s+// ;
+ $jr =~ s/\s+$// ;
+ push @{$subnames}, { 'first' => html_ucfirst($first),
+ 'von' => lc($von),
+ 'last' => html_ucfirst($last),
+ 'jr' => $jr,
+ 'et al' => 0,
+ } ;
+ }
+ return $subnames ;
+ }
+ }
+ elsif ( $name =~ /^([^,]*),(.*)$/ ) {
+ my ($p1,$p2) = ($1,$2) ;
+ if ( $self->_is_junior( $p2 ) ) {
+ #
+ # First [von] Last, jr
+ #
+ ($von,$last,$jr,$first) = $self->_scanname_fvl_j( $p1,$p2 );
+ }
+ else {
+ #
+ # [von] Last, First [jr]
+ #
+ ($von,$last,$jr,$first) = $self->_scanname_vl_fj( $p1,$p2 ) ;
+ }
+
+ }
+ elsif ( $name !~ /,/ ) {
+ #
+ # First [von] Last [jr]
+ #
+ ($von,$last,$jr,$first) = $self->_scanname_fvlj( $name ) ;
+ }
+ else {
+ Bib2HTML::General::syserr( "unable to recognize a pattern for the bibTeX name: $name" ) ;
+ }
+ $first =~ s/^\s+// ;
+ $first =~ s/\s+$// ;
+ $last =~ s/^\s+// ;
+ $last =~ s/\s+$// ;
+ $von =~ s/^\s+// ;
+ $von =~ s/\s+$// ;
+ $jr =~ s/^\s+// ;
+ $jr =~ s/\s+$// ;
+ return { 'first' => html_ucfirst($first),
+ 'von' => lc($von),
+ 'last' => html_ucfirst($last),
+ 'jr' => $jr,
+ 'et al' => 0,
+ } ;
+}
+
+=pod
+
+=item * _scanname_fvlj()
+
+Name pattern: [von] Last, First [jr]
+
+=cut
+sub _scanname_vl_fj($$) {
+ my $self = shift ;
+ my ($p1,$p2)=($_[0],$_[1]) ;
+ $p1 =~ s/^\s+//mg ;
+ $p1 =~ s/\s+$//mg ;
+ $p2 =~ s/^\s+//mg ;
+ $p2 =~ s/\s+$//mg ;
+ my ($von,$last,$jr,$first)=('','','','') ;
+ $first = $p2 ;
+ if ( $p2 =~ /^(.*)\s+([a-zA-Z.]+)$/ ) {
+ my ($p3,$p4)=($1,$2) ;
+ $p3 =~ s/^\s+//mg ;
+ $p3 =~ s/\s+$//mg ;
+ $p4 =~ s/^\s+//mg ;
+ $p4 =~ s/\s+$//mg ;
+ if ( $self->_is_junior($p4) ) {
+ $first = $p3 ;
+ $jr = $p4 ;
+ }
+ }
+ ($von,$last) = $self->_get_first_majword( $p1 ) ;
+ return ($von,$last,$jr,$first) ;
+}
+
+=pod
+
+=item * _scanname_fvl_j()
+
+Name pattern: First [von] Last, jr
+
+=cut
+sub _scanname_fvl_j($$) {
+ my $self = shift ;
+ my ($name,$jr) = ($_[0],$_[1]) ;
+ $name =~ s/^\s+//mg ;
+ $name =~ s/\s+$//mg ;
+ $jr =~ s/^\s+//mg ;
+ $jr =~ s/\s+$//mg ;
+ my ($von,$last,undef,$first)=$self->_scanname_fvlj($name) ;
+ return ($von,$last,$jr,$first) ;
+}
+
+=pod
+
+=item * _scanname_fvlj()
+
+Name pattern: First [von] Last [jr]
+
+=cut
+sub _scanname_fvlj($) {
+ my $self = shift ;
+ my $name = $_[0] ;
+ $name =~ s/^\s+//mg ;
+ $name =~ s/\s+$//mg ;
+ my ($von,$last,$jr,$first)=('','','','') ;
+ ($first,my $reste) = $self->_get_majwords($name) ;
+ # If the reste variable is empty (ie no von found)
+ # It means that the last upercase word must
+ # be the lastname
+ if ( ! $reste ) {
+ if ( $name =~ /^(.*?)\s+([^\s]+)\s*$/ ) {
+ ($first,$reste) = ($1,$2) ;
+ }
+ else {
+ ($first,$reste) = ('',$name) ;
+ }
+ }
+ $first =~ s/^\s+//mg ;
+ $first =~ s/\s+$//mg ;
+ $reste =~ s/^\s+//mg ;
+ $reste =~ s/\s+$//mg ;
+ ($von,$reste) = $self->_get_first_majword($reste) ;
+ $von =~ s/^\s+//mg ;
+ $von =~ s/\s+$//mg ;
+ $reste =~ s/^\s+//mg ;
+ $reste =~ s/\s+$//mg ;
+ if ( ( $reste =~ /^(.*)\s+([a-zA-Z.]+)$/ ) &&
+ ( $self->_is_junior($2) ) ) {
+ ($last,$jr) = ($1,$2) ;
+ }
+ else {
+ $last = $reste ;
+ }
+ return ($von,$last,$jr,$first) ;
+}
+
+=pod
+
+=item * _scanname_vl_j_f()
+
+Name pattern: [von] Last, jr, First
+
+=cut
+sub _scanname_vl_j_f($$$) {
+ my $self = shift ;
+ my ($p1,$p2,$p3) = ($_[0],$_[1],$_[2]) ;
+ $p1 =~ s/^\s+//mg ;
+ $p1 =~ s/\s+$//mg ;
+ $p2 =~ s/^\s+//mg ;
+ $p2 =~ s/\s+$//mg ;
+ $p3 =~ s/^\s+//mg ;
+ $p3 =~ s/\s+$//mg ;
+ my ($von,$last,$jr,$first)=('','',$p2,$p3) ;
+ ($von,$last) = $self->_get_first_majword( $p1 ) ;
+ return ($von,$last,$jr,$first) ;
+}
+
+=pod
+
+=item * _get_majwords()
+
+Replies all the maj words from the begining.
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub _get_majwords($) {
+ my $self = shift ;
+ return ('','') unless $_[0] ;
+ my @words = split(/\s+/, $_[0]) ;
+ my ($maj,$after) = ('','') ;
+ my $inmaj = 1 ;
+ foreach my $word (@words) {
+ if ( $word !~ /^&?[A-Z].*$/ ) {
+ $inmaj = 0 ;
+ }
+ if ( $inmaj ) {
+ $maj .= ($maj?' ':'').$word ;
+ }
+ else {
+ $after .= ($after?' ':'').$word ;
+ }
+ }
+ return ($maj,$after) ;
+}
+
+=pod
+
+=item * _get_first_majword()
+
+Replies the string that begins from the first word
+with first majuscule letter.
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub _get_first_majword($) {
+ my $self = shift ;
+ return ('','') unless $_[0] ;
+ my @words = split(/\s+/, $_[0] ) ;
+ my ($before,$after) = ('','') ;
+ my $found = 0 ;
+ foreach my $word (@words) {
+ if ( $word =~ /^&?[A-Z].*$/ ) {
+ $found = 1 ;
+ }
+ if ( $found ) {
+ $after .= ($after?' ':'').$word ;
+ }
+ else {
+ $before .= ($before?' ':'').$word ;
+ }
+ }
+ if ( ! $after ) {
+ return ('',$before) ;
+ }
+ else {
+ return ($before,$after) ;
+ }
+}
+
+=pod
+
+=item * _is_junior()
+
+Replies if the parameter is a string that corresponds
+to the junior part of a BibTeX name.
+
+=over
+
+=item * text (string)
+
+=back
+
+=cut
+sub _is_junior($) {
+ my $self = shift ;
+ my $jr = $_[0] ;
+ if ( $jr ) {
+ $jr =~ s/^\s+//mg ;
+ $jr =~ s/\s+$//mg ;
+ return ( ( strinarray( lc($jr), \@JUNIOR_PARTS ) ) ||
+ ( isnumber($jr) ) ) ;
+ }
+ else {
+ return $jr ;
+ }
+}
+
+=pod
+
+=item * _extract_blocks()
+
+Extracts the blocks from the specified string
+Takes 1 arg:
+
+=over
+
+=item * text (string)
+
+is the text to parse.
+
+=back
+
+=cut
+sub _extract_blocks($) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my @blocks = () ;
+ my $currentblock = "" ;
+ my $count = 0 ;
+ while ( $text =~ /^(.*?)((?:\\\{)|(?:\\\})|\{|\})(.*)$/ ) {
+ (my $before, my $sep, $text) = ($1,$2,$3) ;
+ $currentblock .= $before ;
+ if ( ( $sep eq '\\{' ) || ( $sep eq '\\}' ) ) {
+ $currentblock .= $sep ;
+ }
+ elsif ( $sep eq '{' ) {
+ if ( $count > 0 ) {
+ $currentblock .= $sep ;
+ }
+ else {
+ push @blocks, $currentblock ;
+ $currentblock = '' ;
+ }
+ $count ++ ;
+ }
+ elsif ( $sep eq '}' ) {
+ $count -- unless ($count <= 0) ;
+ if ( $count > 0 ) {
+ $currentblock .= $sep ;
+ }
+ else {
+ push @blocks, [ $currentblock ] ;
+ $currentblock = '' ;
+ }
+ }
+ else {
+ confess( "Invalid block: $sep\n" ) ;
+ }
+ }
+ if ( $text ) {
+ $currentblock .= $text ;
+ }
+ if ( $currentblock ) {
+ push @blocks, $currentblock ;
+ }
+ return @blocks ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/TeX.pm b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/TeX.pm
new file mode 100644
index 0000000000..31bf65068e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/Bib2HTML/Translator/TeX.pm
@@ -0,0 +1,2603 @@
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+=pod
+
+=head1 NAME
+
+Bib2HTML::Translator::TeX - A translator from TeX to HTML
+
+=head1 SYNOPSYS
+
+use Bib2HTML::Translator::BibTeX ;
+
+my $gen = Bib2HTML::Translator::TeX->new( filename ) ;
+
+=head1 DESCRIPTION
+
+Bib2HTML::Translator::TeX is a Perl module, which translate a
+TeX string into an HTML string
+
+=head1 GETTING STARTED
+
+=head2 Initialization
+
+To create a parser, say something like this:
+
+ use Bib2HTML::Translator::TeX;
+
+ my $parser = Bib2HTML::Translator::TeX->new( 'toto.bib', '<math>', '</math>' ) ;
+
+...or something similar. Acceptable parameters to the constructor are:
+
+=over
+
+=item * filename (string)
+
+is the filename under parsing.
+
+=item * start_math (optional string)
+
+is the HTML balise which permits to start the math mode
+
+=item * stop_math (optional string)
+
+is the HTML balise which permits to stop the math mode
+
+=back
+
+=head1 METHOD DESCRIPTIONS
+
+This section contains only the methods in Parser.pm itself.
+
+=over
+
+=cut
+
+package Bib2HTML::Translator::TeX;
+
+@ISA = ('Exporter');
+@EXPORT = qw();
+@EXPORT_OK = qw( &addtrans_char &gettrans_char
+ &addtrans_cmd_noparam &addtrans_cmd
+ &addtrans_cmd_func &gettrans_cmd
+ &display_supported_commands );
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+use Exporter;
+use Carp ;
+
+use Bib2HTML::General::Misc ;
+use Bib2HTML::General::HTML ;
+use Bib2HTML::General::Error ;
+use Bib2HTML::General::Verbose ;
+use Bib2HTML::Translator::BibTeXEntry ;
+
+#------------------------------------------------------
+#
+# Global vars
+#
+#------------------------------------------------------
+
+# Version number of the parser
+my $VERSION = "3.0" ;
+
+###############################################################
+# This is the list of characters which will be automatically
+# and directly translatable into a HTML entity
+#
+my %TEX_HTML_CHAR_TRANS = ( '~' => '&nbsp;', #unsecable space
+ '£' => '&pound;', #pound sign
+ '¤' => '&curren;', #currency sign
+ '|' => '&brvbar', #broken bar = broken vertical bar
+ '§' => '&sect;', #section sign
+ '°' => '&deg;', #degree sign
+ '²' => '&sup2;', #superscript two = superscript digit two = squared
+ 'µ' => '&micro;', #micro sign
+ 'À' => '&Agrave;', #latin capital letter A with grave = latin capital letter A grave
+ 'Á' => '&Aacute;', #latin capital letter A with acute
+ 'Â' => '&Acirc;', #latin capital letter A with circumflex
+ 'Ã' => '&Atilde;', #latin capital letter A with tilde
+ 'Ä' => '&Auml;', #latin capital letter A with diaeresis
+ 'Å' => '&Aring;', #latin capital letter A with ring above = latin capital letter A ring
+ 'Æ' => '&AElig;', #latin capital letter AE = latin capital ligature AE
+ 'Ç' => '&Ccedil;', #latin capital letter C with cedilla
+ 'È' => '&Egrave;', #latin capital letter E with grave
+ 'É' => '&Eacute;', #latin capital letter E with acute
+ 'Ê' => '&Ecirc;', #latin capital letter E with circumflex
+ 'Ë' => '&Euml;', #latin capital letter E with diaeresis
+ 'Ì' => '&Igrave;', #latin capital letter I with grave
+ 'Í' => '&Iacute;', #latin capital letter I with acute
+ 'Î' => '&Icirc;', #latin capital letter I with circumflex
+ 'Ï' => '&Iuml;', #latin capital letter I with diaeresis
+ 'Ñ' => '&Ntilde;', #latin capital letter N with tilde
+ 'Ò' => '&Ograve;', #latin capital letter O with grave
+ 'Ó' => '&Oacute;', #latin capital letter O with acute
+ 'Ô' => '&Ocirc;', #latin capital letter O with circumflex
+ 'Õ' => '&Otilde;', #latin capital letter O with tilde
+ 'Ö' => '&Ouml;', #latin capital letter O with diaeresis
+ 'Ø' => '&Oslash;', #latin capital letter O with stroke = latin capital letter O slash
+ 'Ù' => '&Ugrave;', #latin capital letter U with grave
+ 'Ú' => '&Uacute;', #latin capital letter U with acute
+ 'Û' => '&Ucirc;', #latin capital letter U with circumflex
+ 'Ü' => '&Uuml;', #latin capital letter U with diaeresis
+ 'Ý' => '&Yacute;', #latin capital letter Y with acute
+ 'à' => '&agrave;', #latin small letter a with grave = latin small letter a grave
+ 'á' => '&aacute;', #latin small letter a with acute
+ 'â' => '&acirc;', #latin small letter a with circumflex
+ 'ã' => '&atilde;', #latin small letter a with tilde
+ 'ä' => '&auml;', #latin small letter a with diaeresis
+ 'å' => '&aring;', #latin small letter a with ring above = latin small letter a ring
+ 'æ' => '&aelig;', #latin small letter ae = latin small ligature ae
+ 'ç' => '&ccedil;', #latin small letter c with cedilla
+ 'è' => '&egrave;', #latin small letter e with grave
+ 'é' => '&eacute;', #latin small letter e with acute
+ 'ê' => '&ecirc;', #latin small letter e with circumflex
+ 'ë' => '&euml;', #latin small letter e with diaeresis
+ 'ì' => '&igrave;', #latin small letter i with grave
+ 'í' => '&iacute;', #latin small letter i with acute
+ 'î' => '&icirc;', #latin small letter i with circumflex
+ 'ï' => '&iuml;', #latin small letter i with diaeresis
+ 'ñ' => '&ntilde;', #latin small letter n with tilde
+ 'ò' => '&ograve;', #latin small letter o with grave
+ 'ó' => '&oacute;', #latin small letter o with acute
+ 'ô' => '&ocirc;', #latin small letter o with circumflex
+ 'õ' => '&otilde;', #latin small letter o with tilde
+ 'ö' => '&ouml;', #latin small letter o with diaeresis
+ 'ø' => '&oslash;', #latin small letter o with stroke = latin small letter o slash
+ 'ù' => '&ugrave;', #latin small letter u with grave
+ 'ú' => '&uacute;', #latin small letter u with acute
+ 'û' => '&ucirc;', #latin small letter u with circumflex
+ 'ü' => '&uuml;', #latin small letter u with diaeresis
+ 'ý' => '&yacute;', #latin small letter y with acute
+ 'ÿ' => '&yuml;', #latin small letter y with diaeresis
+ '"' => '&quot;', #quotation mark = APL quote
+ '^' => '&circ;', #modifier letter circumflex accent
+ '<' => '&lt;', #less-than sign
+ '>' => '&gt;', #greater-than sign
+ ) ;
+
+###############################################################
+# This is the list of text-mode commands.
+# The commands must respect one of the following formats:
+# 1) 'TeXCmdName' => "HTML code"
+# permits to translate the LaTeX command \TeXCmdName
+# into the specified "HTML code".
+# 2) 'TeXCmdName' => { 'params' => params
+# 'html' => "HTML code"
+# }
+# replaces the command \TeXCmdName by the specified
+# "HTML code". This last could contains a parameter
+# number (eg, #1 for the first, #2 for the second,
+# etc.) which will be replaced by the value
+# passed to the LaTeX command. The params specifies
+# the parameter prototype of the LaTeX command. It
+# must contains one (or more) of:
+# {} for a needed parameter
+# [d] for an optional parameter. d
+# is the default value given to this parameter
+# if it was not provided inside the LaTeX code
+# \\ for a LaTeX command name
+# ! indicates that the following sign ({} or[])
+# must not be interpreted by the LaTeX
+# translator. It must be used for verbatim
+# output
+# - to read the text until the end of the current
+# LaTeX context
+# 3) 'TeXCmdName' => { 'params' => params
+# 'latex' => "LaTeX code"
+# }
+# replaces the command \TeXCmdName by the specified
+# "LaTeX code". This last could contains a parameter
+# number (eg, #1 for the first, #2 for the second,
+# etc.) which will be replaced by the value
+# passed to the LaTeX command. The params specifies
+# the parameter prototype of the LaTeX command. It
+# must contains one (or more) of the macros defined
+# in the point 2).
+# 4) 'TeXCmdName' => { 'params' => params
+# 'func' => "callback_function_name"
+# }
+# replaces the command \TeXCmdName by the result of
+# the specified callback function. This callback
+# function must take, at least, 1 parameters:
+# the current line number. The parameters of the
+# LaTeX command will be passed to this callback
+# function after this line number.
+# Example: for \newcommand{\cmdname}[4][default]{code #2}
+# we implements the callback function:
+# sub texcommand_newcommand {
+# my $lineno = shift || 0 ;
+# my ($cmdname,$nb_params) =
+# ( $_[0], $_[1] || 0 ) ;
+# my ($default,$code) =
+# ($_[2] || '', $_[3] || '') ;
+# ...
+# return '' ;
+# }
+# The params specifies the parameter prototype of
+# the LaTeX command. It must contains one (or more)
+# of the macros defined in the point 2).
+# 5) 'TeXCmdName' => { 'params' => params
+# 'texfunc' => "callback_function_name"
+# }
+# replaces the command \TeXCmdName by the result of
+# the specified callback function. The callback
+# must assume that its result was some LaTeX expression
+# which will be evaluated (this is the major difference
+# between a 'func' and a 'texfunc', VERY IMPORTANT point).
+# The callback function works same as for 'func' (point 4).
+#
+my %TEX_HTML_COMMANDS = (
+
+ ' ' => ' ',
+ '_' => '_', # underline sign
+ '-' => '', # hyphenation sign
+ '$' => '\$',
+ ',' => '&nbsp;',
+ ';' => '&nbsp;',
+ '%' => '%',
+ '}' => '}',
+ '{' => '{',
+ '&' => '&amp;',
+ '\\' => '<br>',
+ '&' => '&amp;', #ampersand
+ # Patch by Norbert Preining added the 2003/03/17
+ '#' => '#',
+ '\'' => { 'params' => '{}',
+ 'func' => 'texcommand_acute',
+ },
+ '`' => { 'params' => '{}',
+ 'func' => 'texcommand_grave',
+ },
+ '~' => { 'params' => '{}',
+ 'func' => 'texcommand_tilde',
+ },
+ '"' => { 'params' => '{}',
+ 'func' => 'texcommand_uml',
+ },
+ '^' => { 'params' => '{}',
+ 'func' => 'texcommand_circ',
+ },
+ '=' => { 'params' => '{}', # One parameter
+ 'func' => 'texcommand_bar',
+ },
+ 'AA' => '&Aring;',
+ 'aa' => '&aring;',
+ 'AE' => '&AElig;', #latin small letter ae = latin small ligature ae
+ 'ae' => '&aelig;', #latin small letter ae = latin small ligature ae
+ 'begin' => { 'params' => '!{}', # Start environment
+ 'texfunc' => 'texcommand_beginenv',
+ },
+ 'backslash' => '\\',
+ 'beginblock' => '', # Ignored
+ 'bf' => { 'params' => '-', # Bold font
+ 'func' => 'texcommand_font_bold',
+ },
+ 'bfseries' => { 'params' => '-', # Bold font
+ 'func' => 'texcommand_font_bold',
+ },
+ 'BibtoHTML' => 'B<small>IB</small>2HTML', # Bib2HTML logo
+ 'bibtohtml' => 'B<small>IB</small>2HTML', # Bib2HTML logo
+ 'BibTeX' => 'B<small>IB</small>T<small>E</small>X', # BibTeX logo
+ 'c' => { 'params' => '{}',
+ 'func' => 'texcommand_cedil',
+ },
+ 'cdot' => '&middot;', #middle dot = Georgian comma = Greek middle dot
+ 'cite' => { 'params' => '[]{}',
+ 'func' => 'texcommand_cite',
+ },
+ 'def' => { 'params' => '\\{}',
+ 'func' => 'texcommand_def',
+ },
+ 'degree' => '&deg;', #degree sign
+ 'dg' => '&eth;', #latin small letter eth
+ 'DH' => '&ETH;', #latin capital letter ETH
+ 'div' => '&divide;', #division sign
+ 'edef' => { 'params' => '\\{}',
+ 'func' => 'texcommand_edef',
+ },
+ 'Emph' => { 'params' => '{}',
+ 'html' => '<strong>#1</strong>',
+ },
+ 'em' => { 'params' => '-', # Emphasis
+ 'html' => "<em>#1</em>",
+ },
+ 'emph' => { 'params' => '{}', # Emphasis
+ 'html' => '<em>#1</em>',
+ },
+ 'end' => { 'params' => '!{}', # End environment
+ 'texfunc' => 'texcommand_endenv',
+ },
+ 'enditemize' => '</UL>',
+ 'ensuremath' => { 'params' => '{}',
+ 'func' => 'texcommand_ensuremath',
+ },
+ 'footnotesize' => { 'params' => '-',
+ 'html' => "<font size=\"-2\">#1</font>",
+ },
+ 'gdef' => { 'params' => '\\{}',
+ 'func' => 'texcommand_def',
+ },
+ 'global' => '', # ignored
+ 'guillemotleft' => '&laquo;', #left-pointing double angle quotation mark
+ 'guillemotright' => '&raquo;', #right-pointing double angle quotation mark = right pointing guillemet
+ 'Huge' => { 'params' => '-',
+ 'html' => "<font size=\"+5\">#1</font>",
+ },
+ 'html' => { 'params' => '!{}', # verbatim HTML code
+ 'html' => '#1',
+ },
+ 'huge' => { 'params' => '-',
+ 'html' => "<font size=\"+4\">#1</font>",
+ },
+ 'i' => 'i',
+ 'it' => { 'params' => '-', # Italic font
+ 'func' => 'texcommand_font_italic',
+ },
+ 'item' => '<LI>',
+ 'itshape' => { 'params' => '-', # Italic font
+ 'func' => 'texcommand_font_italic',
+ },
+ # Patch by Norbert Preining added the 2003/03/17
+ 'L' => 'L', # L bar
+ 'LARGE' => { 'params' => '-',
+ 'html' => "<font size=\"+3\">#1</font>",
+ },
+ 'Large' => { 'params' => '-',
+ 'html' => "<font size=\"+2\">#1</font>",
+ },
+ 'LaTeX' => 'L<sup><small>A</small></sup>T<small>E</small>X', # LaTeX logo
+ 'large' => { 'params' => '-',
+ 'html' => "<font size=\"+1\">#1</font>",
+ },
+ 'latex' => { 'params' => '{}', # Ignore the LaTeX commands
+ 'html' => '',
+ },
+ 'lnot' => '&not;', #not sign
+ 'mdseries' => { 'params' => '-', # Unbold Font
+ 'func' => 'texcommand_font_medium',
+ },
+ 'newcommand' => { 'params' => '{}[][]{}',
+ 'func' => 'texcommand_newcommand',
+ },
+ 'normalfont' => { 'params' => '-',
+ 'func' => 'texcommand_font_normal',
+ },
+ 'normalsize' => { 'params' => '-',
+ 'html' => "<font size=\"+0\">#1</font>",
+ },
+ 'O' => '&Oslash;',
+ 'o' => '&oslash;',
+ 'OE' => '&OElig;', #latin capital ligature OE
+ 'oe' => '&oelig;', #latin small ligature oe
+ 'P' => '&para;', #pilcrow sign = paragraph sign
+ 'pm' => '&plusmn;', #plus-minus sign = plus-or-minus sign
+ 'pounds' => '&pounds;', #pound sign
+ 'renewcommand' => { 'params' => '{}[][]{}',
+ 'func' => 'texcommand_newcommand',
+ },
+ 'rm' => { 'params' => '-', # Roman font
+ 'func' => "texcommand_font_roman",
+ },
+ 'rmfamily' => { 'params' => '-', # Roman font
+ 'func' => "texcommand_font_roman",
+ },
+ 'S' => '&sect;', #section sign
+ 'sc' => { 'params' => '-', # Small-caps font
+ 'func' => "texcommand_font_smallcap",
+ },
+ 'scriptsize' => { 'params' => '-',
+ 'html' => "<font size=\"-3\">#1</font>",
+ },
+ 'scshape' => { 'params' => '-', # Small-caps font
+ 'func' => "texcommand_font_smallcap",
+ },
+ 'sf' => { 'params' => '-', # Sans Serif font
+ 'func' => "texcommand_font_serif",
+ },
+ 'sffamily' => { 'params' => '-', # Sans Serif font
+ 'func' => "texcommand_font_serif",
+ },
+ 'sl' => { 'params' => '-', # Slanted font
+ 'func' => "texcommand_font_slanted",
+ },
+ 'slshape' => { 'params' => '-', # Slanted font
+ 'func' => "texcommand_font_slanted",
+ },
+ 'small' => { 'params' => '-',
+ 'html' => "<font size=\"-1\">#1</font>",
+ },
+ 'ss' => '&szlig;', #latin small letter sharp s = ess-zed
+ 'startblock' => '', # Ignored
+ 'startitemize' => '<UL>',
+ 'string' => { 'params' => '{}',
+ 'html' => "#1",
+ },
+ 'TeX' => 'T<small>E</small>X', # TeX logo
+ 'text' => { 'params' => '{}',
+ 'func' => 'texcommand_ensuretext',
+ },
+ 'textasciicircum' => '&circ;', # circumflex accent sign
+ 'textasciitilde' => '~', # tilde sign
+ 'textbackslash' => '\\',
+ 'textbf' => { 'params' => '{}', # Bold font
+ 'func' => 'texcommand_font_bold',
+ },
+ 'textbrokenbar' => '&brvbar;', #broken bar = broken vertical bar
+ 'textcent' => '&cent;', #cent sign
+ 'textcopyright' => '&copy;', #copyright sign
+ 'textcurrency' => '&curren;', #currency sign
+ 'textexcladown' => '&iexcl;', #inverted exclamation mark, U+00A1 ISOnum
+ 'textit' => { 'params' => '{}', # Italic Font
+ 'func' => 'texcommand_font_italic',
+ },
+ 'textmd' => { 'params' => '{}', # Unbold Font
+ 'func' => 'texcommand_font_medium',
+ },
+ 'textnormal' => { 'params' => '{}',
+ 'func' => 'texcommand_font_normal',
+ },
+ 'textonehalf' => '&frac12;', #vulgar fraction one half = fraction one half
+ 'textonequarter' => '&frac14;', #vulgar fraction one quarter = fraction one quarter
+ 'textordfeminine' => '&ordf;', #feminine ordinal indicator
+ 'textordmasculine' => '&ordm;', #masculine ordinal indicator
+ 'textquestiondown' => '&iquest;', #inverted question mark = turned question mark
+ 'textregistered' => '&reg;', #registered sign = registered trade mark sign
+ 'textrm' => { 'params' => '{}', # Roman Font
+ 'func' => 'texcommand_font_roman',
+ },
+ 'textsc' => { 'params' => '{}', # Small-caps Font
+ 'func' => 'texcommand_font_smallcap',
+ },
+ 'textsf' => { 'params' => '{}', # Sans Serif Font
+ 'func' => 'texcommand_font_serif',
+ },
+ 'textsl' => { 'params' => '{}', # Slanted Font
+ 'func' => 'texcommand_font_slanted',
+ },
+ 'textthreequarters' => '&frac34;', #vulgar fraction three quarters = fraction three quarters
+ 'texttt' => { 'params' => '{}',
+ 'func' => 'texcommand_font_typewriter',
+ },
+ 'textup' => { 'params' => '{}', # Up right font
+ 'func' => 'texcommand_font_upright',
+ },
+ 'textyen' => '&yen;', #yen sign = yuan sign
+ 'times' => '&times;', #multiplication sign
+ 'tiny' => { 'params' => '-',
+ 'html' => "<font size=\"-4\">#1</font>",
+ },
+ 'TH' => '&THORN;', #latin capital letter THORN
+ 'th' => '&thorn;', #latin small letter thorn
+ 'tt' => { 'params' => '-', # Typewriter font
+ 'func' => "texcommand_font_typewriter",
+ },
+ 'ttfamily' => { 'params' => '-', # Type writer font
+ 'func' => 'texcommand_font_typewriter',
+ },
+ 'u' => { 'params' => '{}', # added by Tobia
+ 'func' => 'texcommand_ucircle',
+ },
+ 'uline' => { 'params' => '{}', # Underline font
+ 'html' => "<u>#1</u>",
+ },
+ 'upshape' => { 'params' => '{}', # Up right font
+ 'func' => 'texcommand_font_upright',
+ },
+ 'url' => { 'params' => '{}', # URL hyperlink
+ 'html' => "<a=\"#1\">#1</a>",
+ },
+ 'v' => { 'params' => '{}',
+ 'func' => 'texcommand_caron',
+ },
+ 'xdef' => { 'params' => '\\{}',
+ 'func' => 'texcommand_edef',
+ },
+
+ ) ;
+
+###############################################################
+# This is the list of math-mode commands.
+# The commands must respect one of the following formats:
+# 1) 'TeXCmdName' => "HTML code"
+# permits to translate the LaTeX command \TeXCmdName
+# into the specified "HTML code".
+# 2) 'TeXCmdName' => { 'params' => params
+# 'html' => "HTML code"
+# }
+# replaces the command \TeXCmdName by the specified
+# "HTML code". This last could contains a parameter
+# number (eg, #1 for the first, #2 for the second,
+# etc.) which will be replaced by the value
+# passed to the LaTeX command. The params specifies
+# the parameter prototype of the LaTeX command. It
+# must contains one (or more) of:
+# {} for a needed parameter
+# [d] for an optional parameter. d
+# is the default value given to this parameter
+# if it was not provided inside the LaTeX code
+# \\ for a LaTeX command name
+# ! indicates that the following sign ({} or[])
+# must not be interpreted by the LaTeX
+# translator. It must be used for verbatim
+# output
+# - to read the text until the end of the current
+# LaTeX context
+# 3) 'TeXCmdName' => { 'params' => params
+# 'latex' => "LaTeX code"
+# }
+# replaces the command \TeXCmdName by the specified
+# "LaTeX code". This last could contains a parameter
+# number (eg, #1 for the first, #2 for the second,
+# etc.) which will be replaced by the value
+# passed to the LaTeX command. The params specifies
+# the parameter prototype of the LaTeX command. It
+# must contains one (or more) of the macros defined
+# in the point 2).
+# 3) 'TeXCmdName' => { 'params' => params
+# 'func' => "callback_function_name"
+# }
+# replaces the command \TeXCmdName by the result of
+# the specified callback function. This callback
+# function must take, at least, 1 parameters:
+# the current line number. The parameters of the
+# LaTeX command will be passed to this callback
+# function after this line number.
+# Example: for \newcommand{\cmdname}[4][default]{code #2}
+# we implements the callback function:
+# sub texcommand_newcommand {
+# my $lineno = shift || 0 ;
+# my ($cmdname,$nb_params) =
+# ( $_[0], $_[1] || 0 ) ;
+# my ($default,$code) =
+# ($_[2] || '', $_[3] || '') ;
+# ...
+# return '' ;
+# }
+# The params specifies the parameter prototype of
+# the LaTeX command. It must contains one (or more)
+# of the macros defined in the point 2).
+# 4) 'TeXCmdName' => { 'params' => params
+# 'texfunc' => "callback_function_name"
+# }
+# replaces the command \TeXCmdName by the result of
+# the specified callback function. The callback
+# must assume that its result was some LaTeX expression
+# which will be evaluated (this is the major difference
+# between a 'func' and a 'texfunc', VERY IMPORTANT point).
+# The callback function works same as for 'func' (point 3).
+#
+my %MATH_TEX_HTML_COMMANDS = (
+
+ '}' => '}',
+ '{' => '{',
+ '&' => '&amp;',
+ '_' => { 'params' => "{}",
+ 'html' => "<sub>#1</sub>",
+ 'special' => 1,
+ },
+ '^' => { 'params' => "{}",
+ 'html' => "<sup class=\"exponent\">#1</sup>",
+ 'special' => 1,
+ },
+
+ 'mathmicro' => '&micro;', #micro sign
+ 'maththreesuperior' => '&sup3;', #superscript three = superscript digit three = cubed
+ 'mathtwosuperior' => '&sup2;', #superscript two = superscript digit two = squared
+
+ # MATH-ML commands
+ 'alpha' => "&alpha;",
+ 'angle' => "&ang;",
+ 'approx' => "&asymp;",
+ 'ast' => "&lowast;",
+ 'beta' => "&beta;",
+ 'bot' => "&perp;",
+ 'bullet' => "&bull;",
+ 'cap' => "&cap;",
+ 'cdots' => "&hellip;",
+ 'chi' => "&chi;",
+ 'clubsuit' => "&clubs;",
+ 'cong' => "&cong;",
+ 'cup' => "&cup;",
+ 'dagger' => "&dagger;",
+ 'ddagger' => "&Dagger;",
+ 'delta' => "&delta;",
+ 'Delta' => "&Delta;",
+ 'diamondsuit' => "&loz;",
+ 'div' => "&divide;",
+ 'downarrow' => "&darr;",
+ 'Downarrow' => "&dArr;",
+ 'emptyset' => "&empty;",
+ 'epsilon' => "&epsilon;",
+ 'Epsilon' => "&Epsilon;",
+ 'equiv' => "&equiv;",
+ 'eta' => "&eta;",
+ 'exists' => "&exist;",
+ 'forall' => "&forall;",
+ 'gamma' => "&gamma;",
+ 'Gamma' => "&Gamma;",
+ 'geq' => "&ge;",
+ 'heartsuit' => "&hearts;",
+ 'Im' => "&image;",
+ 'in' => "&isin;",
+ 'infty' => "&infin;",
+ 'infinity' => "&infin;",
+ 'int' => "&int;",
+ 'iota' => "&iota;",
+ 'kappa' => "&kappa;",
+ 'lambda' => "&lambda;",
+ 'Lambda' => "&Lambda;",
+ 'langle' => "&lang;",
+ 'lceil' => "&lceil;",
+ 'ldots' => "&hellip;",
+ 'leftarrow' => "&larr;",
+ 'Leftarrow' => "&lArr;",
+ 'leftrightarrow' => "&harr;",
+ 'Leftrightarrow' => "&hArr;",
+ 'leq' => "&le;",
+ 'lfloor' => "&lfloor;",
+ 'mathbb' => { 'params' => '{}', # Math Set characters
+ 'func' => 'texcommand_font_mathset',
+ },
+ 'mathbf' => { 'params' => '{}', # Bold font
+ 'func' => 'texcommand_font_bold',
+ },
+ 'mathit' => { 'params' => '{}', # Italic Font
+ 'func' => 'texcommand_font_italic',
+ },
+ 'mathrm' => { 'params' => '{}', # Roman Font
+ 'func' => 'texcommand_font_roman',
+ },
+ 'mathsf' => { 'params' => '{}', # Sans Serif Font
+ 'func' => 'texcommand_font_serif',
+ },
+ 'mathtt' => { 'params' => '{}',
+ 'func' => 'texcommand_font_typewriter',
+ },
+ 'mathnormal' => { 'params' => '{}',
+ 'func' => 'texcommand_font_normal',
+ },
+ 'mu' => "&mu;",
+ 'nabla' => "&nabla;",
+ 'neg' => "&not;",
+ 'neq' => "&ne;",
+ 'ni' => "&ni;",
+ 'not\in' => "&notin;",
+ 'not\subset' => "&nsub;",
+ 'nu' => "&nu;",
+ 'omega' => "&omega;",
+ 'Omega' => "&Omega;",
+ 'ominus' => "&ominus;",
+ 'oplus' => "&oplus;",
+ 'oslash' => "&oslash;",
+ 'Oslash' => "&Oslash;",
+ 'otimes' => "&otimes;",
+ 'partial' => "&part;",
+ 'phi' => "&phi;",
+ 'Phi' => "&Phi;",
+ 'pi' => "&pi;",
+ 'Pi' => "&Pi;",
+ 'pm' => "&plusmn;",
+ 'prime' => "&prime;",
+ 'prod' => "&prod;",
+ 'propto' => "&prop;",
+ 'psi' => "&psi;",
+ 'Psi' => "&Psi;",
+ 'rangle' => "&rang;",
+ 'rceil' => "&rceil;",
+ 'Re' => "&real;",
+ 'rfloor' => "&rfloor;",
+ 'rho' => "&rho;",
+ 'rightarrow' => "&rarr;",
+ 'Rightarrow' => "&rArr;",
+ 'sigma' => "&sigma;",
+ 'Sigma' => "&Sigma;",
+ 'sim' => "&sim;",
+ 'spadesuit' => "&spades;",
+ 'sqrt' => "&radic;",
+ 'subseteq' => "&sube;",
+ 'subset' => "&sub;",
+ 'sum' => "&sum;",
+ 'supseteq' => "&supe;",
+ 'supset' => "&sup;",
+ 'surd' => "&radic;",
+ 'tau' => "&tau;",
+ 'theta' => "&theta;",
+ 'Theta' => "&Theta;",
+ 'times' => "&times;",
+ 'to' => "&rarr;",
+ 'uparrow' => "&uarr;",
+ 'Uparrow' => "&uArr;",
+ 'upsilon' => "&upsilon;",
+ 'Upsilon' => "&Upsilon;",
+ 'varpi' => "&piv;",
+ 'vee' => "&or;",
+ 'wedge' => "&and;",
+ 'wp' => "&weierp;",
+ 'xi' => "&xi;",
+ 'Xi' => "&Xi;",
+ 'zeta' => "&zeta;",
+
+ ) ;
+
+#------------------------------------------------------
+#
+# Constructor
+#
+#------------------------------------------------------
+
+sub new($;$$) : method {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $parent = ref($proto) && $proto ;
+
+ my $self ;
+ if ( $parent ) {
+ %{$self} = %{$parent} ;
+ }
+ else {
+ $self = { 'FILENAME' => $_[0] || '',
+ 'DATABASE' => undef,
+ 'MATH_MODE' => 0,
+ 'MATH_MODE_START' => $_[2] || "<math>",
+ 'MATH_MODE_STOP' => $_[3] || "</math>",
+ 'FONTS' => { 'ALLS' => [],
+ 'SERIES' => [],
+ 'FAMILIES' => [],
+ 'SHAPES' => [],
+ },
+ 'ENVIRONMENTS' => [],
+ } ;
+ }
+ bless( $self, $class );
+ return $self;
+}
+
+#------------------------------------------------------
+#
+# Translation API
+#
+#------------------------------------------------------
+
+=pod
+
+=item * translate()
+
+Translate the specified string from a TeX string to
+an HTML string
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+is the text to translate
+
+=item * database (hash)
+
+is the complee database content.
+
+=item * lineno (optional integer)
+
+is the line number where the text can be found
+
+=back
+
+=cut
+sub translate($$;$) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my $lineno = $_[2] || 0 ;
+ my $html = '' ;
+
+ if ( $_[1] ) {
+ $self->{'DATABASE'} = $_[1] ;
+ }
+
+ # Search the first separator
+ my ($eaten,$sep,$tex) = $self->eat_to_separator($text) ;
+
+ while ($sep) {
+
+ # Translate the already eaten string
+ $eaten = $self->translate_chars( $eaten, $lineno ) ;
+
+ if ( ( $sep eq '{' ) || ( $sep eq '}' ) ) {
+ # Ignore braces
+ }
+ elsif ( $sep eq '\\' ) {
+ (my $eaten2,$tex) = $self->translate_cmd($tex, $lineno, '\\') ;
+ $eaten .= $eaten2 ;
+ }
+ elsif ( $sep eq '$' ) {
+ # Math mode
+ if ( ! $self->is_math_mode() ) {
+ $eaten .= $self->start_math_mode(1) ;
+ }
+ elsif ( $self->is_inline_math_mode() ) {
+ $eaten .= $self->stop_math_mode() ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "you try to close with a '\$' a mathematical mode opened with '\\['",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ }
+ elsif ( ( $sep eq '_' ) ||
+ ( $sep eq '^' ) ) {
+ # Special math mode commands
+ (my $eaten2,$tex) = $self->translate_cmd($sep.$tex, $lineno ) ;
+ $eaten .= $eaten2 ;
+ }
+ else { # Unknow separator, treat as text
+ $eaten .= $self->translate_chars( $sep, $lineno ) ;
+ }
+
+ # Translate the text before the separator
+ $html .= $eaten ;
+
+ # Search the next separator
+ ($eaten,$sep,$tex) = $self->eat_to_separator($tex) ;
+ }
+
+ if ( $eaten ) {
+ $html .= $self->translate_chars( $eaten, $lineno ) ;
+ }
+
+ # Remove multiple white spaces
+ $html =~ s/ +/ /g ;
+
+ return $html ;
+}
+
+=pod
+
+=item * eat_to_separator()
+
+Eats the specified text until the first separator.
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+is the text to eat
+
+=item * seps (optional string)
+
+is the list of additional separators
+
+=back
+
+=cut
+sub eat_to_separator($;$) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my $separators = $_[1] || '' ;
+ my ($before,$sep,$after) ;
+
+ $separators .= "_^{}\$\\\\" ;
+
+ if ( $text =~ /^(.*?)([$separators])(.*)$/ ) {
+ ($before,$sep,$after) = ($1,$2,$3) ;
+ }
+ else {
+ $before = $text ;
+ $sep = $after = '' ;
+ }
+ return ($before,$sep,$after) ;
+}
+
+=pod
+
+=item * translate_chars()
+
+Translate the chars inside the specified string.
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+is the text to translate
+
+=item * lineno (integer)
+
+=back
+
+=cut
+sub translate_chars($$) : method {
+ my $self = shift ;
+ my $html = $_[0] || '' ;
+ my $lineno = $_[1] || 0 ;
+ my @parts = split( /\&/, $html ) ;
+ for(my $i=0; $i<@parts; $i++) {
+ # Translate from the trans table
+ while ( my ($char,$hstr) = each( %TEX_HTML_CHAR_TRANS ) ) {
+ if ( $i > 0 ) {
+ Bib2HTML::General::Error::warm( "you type a '\&'. It could be a LaTeX syntax error. Assume '\\&'.",
+ $self->{'FILENAME'}, $lineno ) ;
+ }
+ $parts[$i] =~ s/\Q$char\E/$hstr/g ;
+ }
+ }
+ $html = join( '&amp;', @parts ) ;
+ return get_restricted_html_entities( $html ) ;
+}
+
+=pod
+
+=item * translate_cmd()
+
+Translate a TeX command.
+Takes 3 args:
+
+=over
+
+=item * text (string)
+
+is the text, which follows the backslash, to scan
+
+=item * lineno (integer)
+
+=item * prefix (optional string)
+
+is a prefix merged to the command name. Use carefully.
+
+=back
+
+=cut
+sub translate_cmd($$;$) : method {
+ my $self = shift ;
+ my ($eaten,$tex,$lineno) = ('',
+ $_[0] || '',
+ $_[1] || 0 ) ;
+ my $cmd_prefix = $_[2] || '' ;
+
+ # Gets the command name
+ if ( $tex =~ /^\[(.*)/ ) { # Starts multi-line math mode
+ $tex = $1 ;
+ if ( ! $self->is_math_mode() ) {
+ $eaten .= $self->start_math_mode(2) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "you try to open twice a mathematical mode with '".$cmd_prefix."['",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ }
+ elsif ( $tex =~ /^\](.*)/ ) { # Stop multi-line math mode
+ $tex = $1 ;
+ if ( $self->is_multiline_math_mode() ) {
+ $eaten .= $self->stop_math_mode() ;
+ }
+ elsif ( $self->is_math_mode() ) {
+ Bib2HTML::General::Error::warm( "you try to close with a '".$cmd_prefix."[' a mathematical mode opened with '\$'",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "you try to close with '".$cmd_prefix."]' a mathematical mode which was not opened",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ }
+ elsif ( $tex =~ /^((?:[a-zA-Z]+)|.)(.*)/ ) { # default LaTeX command
+ (my $cmdname,$tex) = ($1,$2) ;
+ if ( $cmdname ) {
+ my $trans = $self->search_cmd_trans( $cmdname, $lineno, ($cmd_prefix ne "\\") ) ;
+ if ( defined( $trans ) ) {
+ # Seach the command inside the translation table
+ ($eaten,$tex) = $self->run_cmd( $cmd_prefix.$cmdname, $trans, $tex, $lineno ) ;
+ }
+ elsif ( $self->is_math_mode() ) {
+ Bib2HTML::General::Error::warm( "unrecognized TeX command in mathematical mode: ".
+ $cmd_prefix.$cmdname,
+ $self->{'FILENAME'},
+ $lineno ) ;
+ $eaten = "<font color=\"gray\">[$cmdname]</font>" ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "unrecognized TeX command: ".
+ $cmd_prefix.$cmdname,
+ $self->{'FILENAME'},
+ $lineno ) ;
+ $eaten = "<font color=\"gray\">[$cmdname]</font>" ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::warm( "invalid syntax for the TeX command: ".
+ $cmd_prefix.$_[0],
+ $self->{'FILENAME'},
+ $lineno ) ;
+ $eaten = $cmd_prefix ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::warm( "invalid syntax for the TeX command: ".
+ $cmd_prefix.$_[0],
+ $self->{'FILENAME'},
+ $lineno ) ;
+ $eaten = $cmd_prefix ;
+ }
+
+ return ($eaten,$tex) ;
+}
+
+=pod
+
+=item * search_cmd_trans()
+
+Replies the translation entry that corresponds to
+the specified TeX command.
+Takes 3 args:
+
+=over
+
+=item * name (string)
+
+is the name of the TeX command to search.
+
+=item * lineno (integer)
+
+=item * special (optional boolean)
+
+indicates if the searched command has a special purpose
+(example: _ in math mode)
+
+=back
+
+=cut
+sub search_cmd_trans($$;$) : method {
+ my $self = shift ;
+ my $lineno = $_[1] || 0 ;
+ my $special = $_[2] ;
+ my ($math, $text) ;
+ my ($found_math,$found_text) = (0,0) ;
+ if ( ( $_[0] ) &&
+ ( exists $MATH_TEX_HTML_COMMANDS{$_[0]} ) ) {
+ $found_math = ( ( ( !$special ) &&
+ ( ( ! ishash( $MATH_TEX_HTML_COMMANDS{$_[0]} ) ) ||
+ ( ! exists $MATH_TEX_HTML_COMMANDS{$_[0]}{'special'} ) ||
+ ( ! $MATH_TEX_HTML_COMMANDS{$_[0]}{'special'} ) ) ) ||
+ ( ( $special ) &&
+ ( ishash( $MATH_TEX_HTML_COMMANDS{$_[0]} ) ) &&
+ ( exists $MATH_TEX_HTML_COMMANDS{$_[0]}{'special'} ) &&
+ ( $MATH_TEX_HTML_COMMANDS{$_[0]}{'special'} ) ) ) ;
+ $math = $MATH_TEX_HTML_COMMANDS{$_[0]}
+ if ( $found_math ) ;
+ }
+ if ( ( $_[0] ) &&
+ ( exists $TEX_HTML_COMMANDS{$_[0]} ) ) {
+ $found_text = ( ( ( !$special ) &&
+ ( ( ! ishash( $TEX_HTML_COMMANDS{$_[0]} ) ) ||
+ ( ! exists $TEX_HTML_COMMANDS{$_[0]}{'special'} ) ||
+ ( ! $TEX_HTML_COMMANDS{$_[0]}{'special'} ) ) ) ||
+ ( ( $special ) &&
+ ( ishash( $TEX_HTML_COMMANDS{$_[0]} ) ) &&
+ ( exists $TEX_HTML_COMMANDS{$_[0]}{'special'} ) &&
+ ( $TEX_HTML_COMMANDS{$_[0]}{'special'} ) ) ) ;
+ $text = $TEX_HTML_COMMANDS{$_[0]}
+ if ( $found_text ) ;
+ }
+
+ if ( $found_math || $found_text ) {
+ if ( $self->is_math_mode() ) {
+ if ( ! $found_math ) {
+ Bib2HTML::General::Error::warm( "the command ".
+ ( $special ? '' : '\\' ).
+ $_[0].
+ " was not defined for math-mode, assumes to use the text-mode version instead",
+ $self->{'FILENAME'}, $lineno ) ;
+ return $text ;
+ }
+ else {
+ return $math ;
+ }
+ }
+ elsif ( ! $found_text ) {
+ Bib2HTML::General::Error::warm( "the command ".
+ ( $special ? '' : '\\' ).
+ $_[0].
+ " was not defined for text-mode, assumes to use the math-mode version instead",
+ $self->{'FILENAME'}, $lineno ) ;
+ return $math ;
+ }
+ else {
+ return $text ;
+ }
+ }
+ return undef ;
+}
+
+=pod
+
+=item * run_cmd()
+
+Eaten the specified tex according to the specified command.
+Takes 4 args:
+
+=over
+
+=item * name (string)
+
+is the name of the TeX command.
+
+=item * trans (mixed)
+
+is the translation for the command.
+
+=item * text (string)
+
+is the text from which some data must be extracted to
+treat the command.
+
+=item * lineno(integer)
+
+is le line number where the text starts
+
+=back
+
+=cut
+sub run_cmd($$$$) : method {
+ my $self = shift ;
+ my ($eaten,$cmdname,$tex,$lineno) = ('',
+ $_[0] || confess( 'you must supply the TeX command name'),
+ $_[2] || '',
+ $_[3] || 0 ) ;
+ if ( ( ishash( $_[1] ) ) &&
+ ( exists $_[1]->{'params'} ) ) {
+ # This command has params
+ ($tex,my @params) = $self->eat_cmd_parameters( $_[1]->{'params'}, $tex, $lineno ) ;
+ # Apply the command
+ if ( exists $_[1]->{'html'} ) {
+ # Replace by the HTML translation
+ $eaten = $_[1]->{'html'} ;
+ for(my $i=1; $i<=@params; $i++) {
+ if ( $eaten =~ /\#$i/ ) {
+ my $p = ($params[$i-1])->{'text'} ;
+ if ( ($params[$i-1])->{'eval'} ) {
+ $p = $self->translate( $p, undef, $lineno ) ;
+ }
+ $eaten =~ s/\#$i/$p/g ;
+ }
+ }
+ }
+ elsif ( exists $_[1]->{'latex'} ) {
+ # Replace by the LaTeX commands
+ my $cmd = $_[1]->{'latex'} ;
+ for(my $i=1; $i<=@params; $i++) {
+ if ( $cmd =~ /\#$i/ ) {
+ my $p = ($params[$i-1])->{'text'} ;
+ if ( ($params[$i-1])->{'eval'} ) {
+ $p = $self->translate( $p, undef, $lineno ) ;
+ }
+ $cmd =~ s/\#$i/$p/g ;
+ }
+ }
+ $tex = $cmd.$tex ;
+ }
+ elsif ( exists $_[1]->{'func'} ) {
+ # Replace by the string replied by the callback function
+ my $reffunc = $self->can($_[1]->{'func'}) ;
+ if ( $reffunc ) {
+ $eaten = $self->$reffunc( $lineno, @params ) ;
+ }
+ elsif ( issub( $_[1]->{'func'} ) ) {
+ $eaten = $_[1]->{'func'}( $lineno, @params ) ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "unable to find the callback function 'sub ".
+ $_[1]->{'func'}.
+ "{}' for the TeX command $cmdname",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ }
+ elsif ( exists $_[1]->{'texfunc'} ) {
+ # Replace by the string replied by the callback function
+ my $reffunc = $self->can($_[1]->{'texfunc'}) ;
+ if ( $reffunc ) {
+ my $result = $self->$reffunc( $lineno, @params ) ;
+ $tex = $result . $tex ;
+ }
+ elsif ( issub( $_[1]->{'texfunc'} ) ) {
+ my $result = $_[1]->{'texfunc'}( $lineno, @params ) ;
+ $tex = $result . $tex ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "unable to find the callback function 'sub ".
+ $_[1]->{'func'}.
+ "{}' for the TeX command $cmdname",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ }
+ }
+ }
+ else {
+ # No param, put the HTML string inside the output stream
+ $eaten = $_[1] ;
+ }
+ return ($eaten,$tex) ;
+}
+
+=pod
+
+=item * eat_cmd_parameters()
+
+Eaten the specified command parameters.
+Takes 3 args:
+
+=over
+
+=item * params (string)
+
+is the description of the parameters to eat.
+
+=item * text (string)
+
+is the text from which some data must be extracted.
+
+=item * lineno (integer)
+
+=back
+
+=cut
+sub eat_cmd_parameters($$$) : method {
+ my $self = shift ;
+ my $p_params = $_[0] || '' ;
+ my $tex = $_[1] || '' ;
+ my $lineno = $_[2] || 0 ;
+ my @params = () ;
+ while ( $p_params =~ /((?:\!?\{\})|(?:\!?\[[^\]]*\])|-|\\)/g ) {
+ my $p = $1 ;
+ # Eats no significant white spaces
+ $tex =~ s/^ +// ;
+ if ( $p =~ /^(\!?)\{\}/ ) { # Eates a needed parameter
+ my $optional = $1 || '' ;
+ my $prem = substr($tex,0,1) ;
+ $tex = substr($tex,1) ;
+ if ( $prem eq '{' ) {
+ (my $context,$tex) = $self->eat_context( $tex, '\\}' ) ;
+ push @params, { 'eval' => ($optional ne '!'),
+ 'text' => $context,
+ } ;
+ }
+ elsif ( $prem eq '\\' ) {
+ (my $eaten,$tex) = $self->translate_cmd($tex, $lineno, '\\') ;
+ push @params, { 'eval' => 0,
+ 'text' => $eaten,
+ } ;
+ }
+ else {
+ push @params, { 'eval' => ($optional ne '!'),
+ 'text' => $prem,
+ } ;
+ }
+ }
+ elsif( $p =~ /^(\!?)\[([^\]]*)\]/ ) { # Eates an optional parameter
+ my ($optional,$default_val) = ( $1 || '', $2 || '' ) ;
+ my $prem = substr($tex,0,1) ;
+ if ( $prem eq '[' ) {
+ (my $context,$tex) = $self->eat_context( substr($tex,1), '\\]' ) ;
+ push @params, { 'eval' => ($optional ne '!'),
+ 'text' => $context,
+ } ;
+ }
+ else {
+ push @params, { 'eval' => ($optional ne '!'),
+ 'text' => $default_val,
+ } ;
+ }
+ }
+ elsif( $p eq '\\' ) { # Eates a TeX command name
+ if ( $tex =~ /^\\((?:[a-zA-Z]+|.))(.*)$/ ) {
+ $tex = $2 ;
+ push @params, { 'eval' => 1,
+ 'text' => $1,
+ } ;
+ }
+ else {
+ Bib2HTML::General::Error::warm( "expected a TeX command name: ".$tex,
+ $self->{'FILENAME'},
+ $lineno ) ;
+ push @params, { 'eval' => 1,
+ 'text' => '',
+ } ;
+ }
+ }
+ elsif ( $p eq '-' ) { # Eates until the end of the current context
+ (my $context,$tex) = $self->eat_context( $tex, '\\}' ) ;
+ push @params, { 'eval' => 1,
+ 'text' => $context,
+ } ;
+ }
+ else {
+ confess( "unable to recognize the following argument specification: $p" ) ;
+ }
+ }
+ return ($tex,@params) ;
+}
+
+=pod
+
+=item * eat_context()
+
+Eaten the current context.
+Takes 2 args:
+
+=over
+
+=item * text (string)
+
+is the text from which some data must be extracted.
+
+=item * end (string)
+
+is the ending separator
+
+=back
+
+=cut
+sub eat_context($$) : method {
+ my $self = shift ;
+ my $text = $_[0] || '' ;
+ my $enddelim = $_[1] || confess( 'you must supply the closing delimiter' ) ;
+ my $context = '' ;
+ my $contextlevel = 0 ;
+
+ # Search the first separator
+ my ($eaten,$sep,$tex) = $self->eat_to_separator($text,$enddelim) ;
+
+ while ($sep) {
+
+ if ( $sep eq '{' ) { # open a context
+ $contextlevel ++ ;
+ $eaten .= $sep ;
+ }
+ elsif ( $sep eq '}' ) { # close a context
+ if ( $contextlevel <= 0 ) {
+ return ($context.$eaten,$tex) ;
+ }
+ $eaten .= $sep ;
+ $contextlevel -- ;
+ }
+ elsif ( $sep eq '\\' ) {
+ $tex =~ /^([a-zA-Z]+|.)(.*)$/ ;
+ $eaten .= "\\$1";
+ $tex = $2 ;
+ }
+ elsif ( ( $contextlevel <= 0 ) &&
+ ( $sep =~ /$enddelim/ ) ) { # The closing delemiter was found
+ return ($context.$eaten,$tex) ;
+ }
+ else { # Unknow separator, treat as text
+ $eaten .= $sep ;
+ }
+
+ # Translate the text before the separator
+ $context .= $eaten ;
+
+ # Search the next separator
+ ($eaten,$sep,$tex) = $self->eat_to_separator($tex,$enddelim) ;
+ }
+
+ return ($context.$eaten,$tex) ;
+}
+
+#------------------------------------------------------
+#
+# Translation table updates
+#
+#------------------------------------------------------
+
+=pod
+
+=item * start_math_mode()
+
+Starts the mathematical mode.
+Takes 1 arg:
+
+=over
+
+=item * mode (integer)
+
+is the math mode to start (1: inline, 2: multi-line)
+
+=back
+
+=cut
+sub start_math_mode($) {
+ my $self = shift ;
+ if ( $self->is_math_mode() ) {
+ return '' ;
+ }
+ else {
+ $self->{'MATH_MODE'} = ( $_[0] % 3 ) ;
+ my $tag = '' ;
+ if ( $self->{'MATH_MODE'} == 2 ) {
+ $tag .= "<blockquote>" ;
+ }
+ return $tag.$self->{'MATH_MODE_START'} ;
+ }
+}
+
+=pod
+
+=item * stop_math_mode()
+
+Stops the mathematical mode.
+
+=cut
+sub stop_math_mode() {
+ my $self = shift ;
+ if ( $self->is_math_mode() ) {
+ my $tag = $self->{'MATH_MODE_STOP'} ;
+ if ( $self->{'MATH_MODE'} == 2 ) {
+ $tag .= "</blockquote>" ;
+ }
+ $self->{'MATH_MODE'} = 0 ;
+ return $tag ;
+ }
+ else {
+ return '' ;
+ }
+}
+
+=pod
+
+=item * is_math_mode()
+
+Replies if inside a mathematical mode.
+
+=cut
+sub is_math_mode() {
+ my $self = shift ;
+ return ( $self->{'MATH_MODE'} != 0 ) ;
+}
+
+=pod
+
+=item * is_inline_math_mode()
+
+Replies if inside a inlined mathematical mode.
+
+=cut
+sub is_inline_math_mode() {
+ my $self = shift ;
+ return ( $self->{'MATH_MODE'} == 1 ) ;
+}
+
+=pod
+
+=item * is_multiline_math_mode()
+
+Replies if inside a multi-lined mathematical mode.
+
+=cut
+sub is_multiline_math_mode() {
+ my $self = shift ;
+ return ( $self->{'MATH_MODE'} == 2 ) ;
+}
+
+#------------------------------------------------------
+#
+# Information
+#
+#------------------------------------------------------
+
+=pod
+
+=item * display_supported_commands()
+
+Display the list of supported LaTeX commands.
+Takes 1 arg:
+
+=over
+
+=item * perldir (string)
+
+is the path to the directory where the Perl packages
+are stored.
+
+=back
+
+=cut
+sub display_supported_commands($) {
+ my $path = $_[0] || confess( 'you must specify the pm path' ) ;
+ my (@c1,@c2) = ((),()) ;
+ foreach my $cmd ( keys %TEX_HTML_COMMANDS ) {
+ my $prefix = '' ;
+ if ( ( !ishash( $TEX_HTML_COMMANDS{$cmd} ) ) ||
+ ( ! exists $TEX_HTML_COMMANDS{$cmd}{'special'} ) ||
+ ( ! $TEX_HTML_COMMANDS{$cmd}{'special'} ) ) {
+ $prefix = "\\" ;
+ }
+ if ( $cmd =~ /^[a-zA-Z0-9]/ ) {
+ push @c2, $prefix.$cmd ;
+ }
+ else {
+ push @c1, $prefix.$cmd ;
+ }
+ }
+ foreach my $cmd ( keys %MATH_TEX_HTML_COMMANDS ) {
+ if ( ! exists $TEX_HTML_COMMANDS{$cmd} ) {
+ my $prefix = '' ;
+ if ( ( !ishash( $TEX_HTML_COMMANDS{$cmd} ) ) ||
+ ( ! exists $TEX_HTML_COMMANDS{$cmd}{'special'} ) ||
+ ( ! $TEX_HTML_COMMANDS{$cmd}{'special'} ) ) {
+ $prefix = "\\" ;
+ }
+ if ( $cmd =~ /^[a-zA-Z0-9]/ ) {
+ push @c2, $prefix.$cmd ;
+ }
+ else {
+ push @c1, $prefix.$cmd ;
+ }
+ }
+ }
+ foreach my $cmd ( sort @c1 ) {
+ print "$cmd\n" ;
+ }
+ foreach my $cmd ( sort @c2 ) {
+ print "$cmd\n" ;
+ }
+}
+
+#------------------------------------------------------
+#
+# Translation table updates
+#
+#------------------------------------------------------
+
+=pod
+
+=item * addtrans_char()
+
+Static method which permits to add a translation entry
+for a character.
+Takes 2 args:
+
+=over
+
+=item * char (string)
+
+is the character to translate
+
+=item * html (string)
+
+is the HTML translation of the character.
+
+=back
+
+=cut
+sub addtrans_char($$) {
+ confess( 'you must supply the character to translate' ) unless $_[0] ;
+ Bib2HTML::General::Verbose::three( "\tadd the HTML translation for '".$_[0]."'" ) ;
+ $TEX_HTML_CHAR_TRANS{$_[0]} = ( $_[1] || '' ) ;
+}
+
+=pod
+
+=item * gettrans_char()
+
+Static method which replies the translation table from a character to HTML string.
+
+=cut
+sub gettrans_char() {
+ return \%TEX_HTML_CHAR_TRANS ;
+}
+
+=pod
+
+=item * addtrans_cmd_noparam()
+
+Static method which permits to add a translation entry
+for a TeX command. The new TeX command does not have any
+parameter.
+Takes 3 args:
+
+=over
+
+=item * cmd (string)
+
+is the name od the TeX command
+
+=item * html (string)
+
+is the HTML translation of the character.
+
+=item * tex_content (optional boolean)
+
+indicates if the content contains LaTeX code (if true)
+or HTML code (if false - default).
+
+=back
+
+=cut
+sub addtrans_cmd_noparam($$;$) {
+ confess( 'you must supply the character to translate' ) unless $_[0] ;
+ Bib2HTML::General::Verbose::three( "\tadd the TeX translation for {\\".$_[0]."}" ) ;
+ if ( $_[2] ) {
+ $TEX_HTML_COMMANDS{$_[0]} = { 'params' => '',
+ 'latex' => ( $_[1] || '' ),
+ } ;
+ }
+ else {
+ $TEX_HTML_COMMANDS{$_[0]} = ( $_[1] || '' ) ;
+ }
+}
+
+=pod
+
+=item * addtrans_cmd_html()
+
+Static method which permits to add a translation entry
+for a TeX command. The new TeX command has parameters, but
+it can be directly translated as HTML code.
+Takes 4 args:
+
+=over
+
+=item * cmd (string)
+
+is the name od the TeX command
+
+=item * params (string)
+
+is the description of the parameters:
+
+=over
+
+=item {} for a parameter
+
+=item [val] for an optional parameter where val is the default value
+
+=item \ for a TeX command name
+
+=item ! will avoid the LaTeX interpretation of the following sign ({} or [])
+
+=item - for all the text until the end of the current context
+
+=back
+
+=item * html (string)
+
+is the HTML translation of the character. #n means the n-th parameter,
+where n is an integer greater or equal to 1.
+
+=item * tex_content (optional boolean)
+
+indicates if the content contains LaTeX code (if true)
+or HTML code (if false - default).
+
+=back
+
+=cut
+sub addtrans_cmd_html($$$;$) {
+ confess( 'you must supply the TeX command name' ) unless $_[0] ;
+ my $params = $_[1] || confess( 'you must supply the parameter description' ) ;
+ my $html = $_[2] || '' ;
+ if ( ( $params eq '-' ) ||
+ ( $params =~ /(?:(?:\{\})|(?:\[[^\]]*\])|\\)+/ ) ) {
+ Bib2HTML::General::Verbose::three( "\tadd the TeX translation for \\".$_[0].$params ) ;
+ if ( $_[3] ) {
+ %{$TEX_HTML_COMMANDS{$_[0]}} = ( 'params' => $params,
+ 'latex' => $html,
+ ) ;
+ }
+ else {
+ %{$TEX_HTML_COMMANDS{$_[0]}} = ( 'params' => $params,
+ 'html' => $html,
+ ) ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::syserr( "invalid syntax for the parameters of the ".
+ "TeX command '".$_[0]."': ".$params ) ;
+ }
+}
+
+=pod
+
+=item * addtrans_cmd_func()
+
+Static method which permits to add a translation entry
+for a TeX command. The new TeX command has parameters, but
+a callback function must be called to treat this command.
+Takes 3 args:
+
+=over
+
+=item * cmd (string)
+
+is the name od the TeX command
+
+=item * params (string)
+
+is the description of the parameters:
+
+=over
+
+=item {} for a parameter
+
+=item [val] for an optional parameter where val is the default value
+
+=item \ for a TeX command name
+
+=item ! will avoid the LaTeX interpretation of the following sign ({} or [])
+
+=item - for all the text until the end of the current context
+
+=back
+
+=item * func (string)
+
+is the name of the method to call.
+
+=back
+
+=cut
+sub addtrans_cmd_func($$$) {
+ confess( 'you must supply the TeX command name' ) unless $_[0] ;
+ my $params = $_[1] || confess( 'you must supply the parameter description' ) ;
+ my $func = $_[2] || confess( 'you must supply the callback function' ) ;
+ if ( ( $params eq '-' ) ||
+ ( $params =~ /(?:(?:\{\})|(?:\[[^\]]*\])|\\)+/ ) ) {
+ Bib2HTML::General::Verbose::three( "\tadd the TeX translation for \\".$_[0].$params ) ;
+ %{$TEX_HTML_COMMANDS{$_[0]}} = ( 'params' => $params,
+ 'func' => $func,
+ ) ;
+ }
+ else {
+ Bib2HTML::General::Error::syserr( "invalid syntax for the parameters of the ".
+ "TeX command '".$_[0]."': ".$params ) ;
+ }
+}
+
+=pod
+
+=item * gettrans_cmd()
+
+Replies the translation table from a TeX command to HTML string.
+
+=cut
+sub gettrans_cmd() {
+ return \%TEX_HTML_COMMANDS ;
+}
+
+=pod
+
+=item * __texcommand_map_to()
+
+Makes the specified mapping of a TeX command.
+Takes at least 4 args:
+
+=over
+
+=item * map (hash)
+
+is the mapping associative array
+
+=item * default (string)
+
+is the default value return if the mapping was unavailable
+
+=item * lineno (integer)
+
+=item * params (array)
+
+is the list of parameters
+
+=back
+
+=cut
+sub __texcommand_map_to($$$) {
+ my $self = shift ;
+ my $lineno = $_[2] || 0 ;
+ if ( ( $_[3] ) &&
+ ( $_[3]->{'text'} ) ) {
+ if ( $_[0]->{$_[3]->{'text'}} ) {
+ return "&".$_[0]->{$_[3]->{'text'}}.";" ;
+ }
+ else {
+ # Patch by Norbert Preining added the 2003/03/17
+ Bib2HTML::General::Error::warm( "An accentuation command was found, but the corresponding character '".
+ $_[3]->{'text'}.
+ "' is not supported. Assume '".
+ $_[1].$_[3]->{'text'}."'.",
+ $self->{'FILENAME'}, $lineno ) ;
+ }
+ }
+ else {
+ Bib2HTML::General::Error::warm( "no command name after a slash. Assume '".$_[1].$_[3]->{'text'}."'.",
+ $self->{'FILENAME'}, $lineno ) ;
+ }
+ # Patch by Norbert Preining added the 2003/03/17
+ return "$_[1]$_[3]->{'text'}";
+}
+
+=pod
+
+=item * __texcommand_font_series()
+
+Apply the specified font series (Medium or Bold).
+Takes at least 4 args:
+
+=over
+
+=item * start_balise (hash)
+
+is the HTML balise used to start this style
+
+=item * end_balise (hash)
+
+is the HTML balise used to end this style
+
+=item * fontset (string)
+
+is the name of the font set to manage (eg, SERIES, SHAPES...)
+
+=item * lineno (integer)
+
+=item * params (array)
+
+is the list of parameters
+
+=back
+
+=cut
+sub __texcommand_font_style($$$$;@) {
+ my $self = shift ;
+ my $lineno = $_[2] || 0 ;
+ my ($begin,$end) = ( $_[0] || '', $_[1] || '' ) ;
+ my ($set,$text) = ( $_[2] || '', '' ) ;
+
+ confess( "You must supply a valid fontset name (from ".
+ join( ', ', keys %{$self->{'FONTS'}} ).
+ ")." ) unless ( exists $self->{'FONTS'}{$set} ) ;
+
+ my $last = ( int(@{$self->{'FONTS'}{$set}}) > 0 ) ?
+ $self->{'FONTS'}{$set}->[$#{$self->{'FONTS'}{$set}}] : '' ;
+
+ my $elt = { 'begin' => $begin,
+ 'end' => $end,
+ } ;
+ push @{$self->{'FONTS'}{$set}}, $elt ;
+ push @{$self->{'FONTS'}{'ALLS'}}, $elt ;
+
+ if ( ( ! $last ) ||
+ ( ! ishash( $last ) ) ||
+ ( $last->{'begin'} ne $begin ) ) {
+ $text .= ( ( $last && ( ishash($last) ) ) ? $last->{'end'} : '' ).$begin ;
+ }
+
+ if ( ( $_[4] ) && ( ishash( $_[4] ) ) ) {
+ if ( $_[4]->{'eval'} ) {
+ $text .= $self->translate( $_[4]->{'text'}, undef, $lineno ) ;
+ }
+ else {
+ $text .= $_[4] ;
+ }
+ }
+
+ if ( ( ! $last ) ||
+ ( ! ishash( $last ) ) ||
+ ( $last->{'begin'} ne $begin ) ) {
+ $text .= $end.( ( $last && ( ishash($last) ) ) ? $last->{'begin'} : '' ) ;
+ }
+
+ pop @{$self->{'FONTS'}{'ALLS'}} ;
+ pop @{$self->{'FONTS'}{$set}} ;
+
+ if ( $begin || $end ) {
+ $text =~ s/\Q$begin$end\E//g ;
+ $text =~ s/\Q$end$begin\E//g ;
+ }
+
+ return $text ;
+}
+
+#------------------------------------------------------
+#
+# TeX command callbacks
+#
+#------------------------------------------------------
+
+=pod
+
+=item * texcommand_font_medium()
+
+Treats \textmd or \mdseries
+
+=cut
+sub texcommand_font_medium {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '',
+ '',
+ 'SERIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_mathset()
+
+Treats \mathbb
+
+=cut
+sub texcommand_font_mathset {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<i>',
+ '</i>',
+ 'SERIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_bold()
+
+Treats \bf or \textbf
+
+=cut
+sub texcommand_font_bold {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<b>',
+ '</b>',
+ 'SERIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_roman()
+
+Treats \rm or \textrm
+
+=cut
+sub texcommand_font_roman {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '',
+ '',
+ 'FAMILIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_serif()
+
+Treats \sf or \textsf
+
+=cut
+sub texcommand_font_serif {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<font face="Sans Serif">',
+ '<!-- /fontSF --></font>',
+ 'FAMILIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_typewriter()
+
+Treats \tt or \texttt
+
+=cut
+sub texcommand_font_typewriter {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<tt>',
+ '</tt>',
+ 'FAMILIES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_upright()
+
+Treats \upshape or \textup
+
+=cut
+sub texcommand_font_upright {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '',
+ '',
+ 'SHAPES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_italic()
+
+Treats \it or \textit
+
+=cut
+sub texcommand_font_italic {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<i>',
+ '</i>',
+ 'SHAPES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_slanted()
+
+Treats \sl or \textsl
+
+=cut
+sub texcommand_font_slanted {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_font_style( '<i><tt>',
+ '</tt></i>',
+ 'SHAPES',
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_font_smallcap()
+
+Treats \sc or \textsc
+
+=cut
+sub texcommand_font_smallcap {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $text = $self->__texcommand_font_style( '<!-- SMALL CAPS -->',
+ '<!-- /SMALL CAPS -->',
+ 'SHAPES',
+ $lineno, @_ ) ;
+ my $r = '' ;
+ while ( ( $text ) &&
+ ( $text =~ /^(.*?)<!-- SMALL CAPS -->(.*?)<!-- \/SMALL CAPS -->(.*)$/ ) ) {
+ (my $prev, my $sc, $text) = ($1,$2,$3) ;
+ $r .= $prev . html_sc( $sc ) ;
+ }
+ if ( $text ) {
+ $r .= $text ;
+ }
+ return $r ;
+}
+
+=pod
+
+=item * texcommand_font_normal()
+
+Treats \textnormal or \normalfont
+
+=cut
+sub texcommand_font_normal {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my ($begin,$end)=('','');
+ foreach my $envs ( @{$self->{'FONTS'}{'ALLS'}} ) {
+ if ( $envs ) {
+ $begin .= $envs->{'begin'} ;
+ $end = $envs->{'end'} . $end ;
+ }
+ }
+ return $end.($_[0]->{'text'}||'').$begin ;
+}
+
+=pod
+
+=item * texcommand_cedil()
+
+Treats \c{}
+
+=cut
+sub texcommand_cedil {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'C' => 'Ccedil',
+ 'c' => 'ccedil',
+ 'S' => '#x015e',
+ 's' => '#x015f',
+ 'T' => '#x0162',
+ 't' => '#x0163',
+ },
+ "&cedil;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_ucircle()
+
+Treats \u{}
+
+=cut
+sub texcommand_ucircle { # added by Tobia
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => '#x0102',
+ 'a' => '#x0103',
+ },
+ "&#x0306;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_acute()
+
+Treats \'{}
+
+=cut
+sub texcommand_acute {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => 'Aacute',
+ 'E' => 'Eacute',
+ 'I' => 'Iacute',
+ 'O' => 'Oacute',
+ 'U' => 'Uacute',
+ 'Y' => 'Yacute',
+ 'a' => 'aacute',
+ 'e' => 'eacute',
+ 'i' => 'iacute',
+ 'o' => 'oacute',
+ 'u' => 'uacute',
+ 'y' => 'yacute',
+ '\\i' => 'iacute',
+ #Patched by Gasper Jaklic <gasper.jaklic@fmf.uni-lj.si>
+ 'C' => '#262',
+ 'c' => '#263',
+ },
+ "&acute;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_grave()
+
+Treats \'{}
+
+=cut
+sub texcommand_grave {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => 'Agrave',
+ 'E' => 'Egrave',
+ 'I' => 'Igrave',
+ 'O' => 'Ograve',
+ 'U' => 'Ugrave',
+ 'a' => 'agrave',
+ 'e' => 'egrave',
+ 'i' => 'igrave',
+ 'o' => 'ograve',
+ 'u' => 'ugrave',
+ '\\i' => 'igrave',
+ },
+ "&grave;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_tilde()
+
+Treats \~{}
+
+=cut
+sub texcommand_tilde {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => 'Atilde',
+ 'N' => 'Ntilde',
+ 'O' => 'Otilde',
+ 'a' => 'atilde',
+ 'n' => 'ntilde',
+ 'o' => 'otilde',
+ },
+ "&tilde;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_uml()
+
+Treats \"{}
+
+=cut
+sub texcommand_uml {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => 'Auml',
+ 'E' => 'Euml',
+ 'I' => 'Iuml',
+ 'O' => 'Ouml',
+ 'U' => 'Uuml',
+ 'Y' => 'Yuml',
+ 'a' => 'auml',
+ 'e' => 'euml',
+ 'i' => 'iuml',
+ 'o' => 'ouml',
+ 'u' => 'uuml',
+ 'y' => 'yuml',
+ '\\i' => 'iuml',
+ },
+ "&uml;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_circ()
+
+Treats \^{}
+
+=cut
+sub texcommand_circ {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'A' => 'Acirc',
+ 'E' => 'Ecirc',
+ 'I' => 'Icirc',
+ 'O' => 'Ocirc',
+ 'U' => 'Ucirc',
+ 'a' => 'acirc',
+ 'e' => 'ecirc',
+ 'i' => 'icirc',
+ 'o' => 'ocirc',
+ 'u' => 'ucirc',
+ '\\i' => 'icirc',
+ },
+ "&circ;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_caron()
+
+Treats \v{}
+
+=cut
+sub texcommand_caron {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return $self->__texcommand_map_to( { 'S' => 'Scaron',
+ 's' => 'scaron',
+ #Patched by Luca Paolini <paolini@di.unito.it>
+ #Patched by Gasper Jaklic <gasper.jaklic@fmf.uni-lj.si>
+ 'C' => '#268',
+ 'c' => '#269',
+ 'D' => '#270',
+ 'd' => '#271',
+ 'E' => '#282',
+ 'e' => '#283',
+ 'L' => '#317',
+ 'l' => '#318',
+ 'N' => '#327',
+ 'n' => '#328',
+ 'R' => '#344',
+ 'r' => '#345',
+ 'T' => '#356',
+ 't' => '#357',
+ 'Z' => '#381',
+ 'z' => '#382',
+ },
+ "",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_bar()
+
+Treats \={}
+
+=cut
+sub texcommand_bar {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ return "&macr;" unless $_[0] ;
+ return $self->__texcommand_map_to( { },
+ "&macr;",
+ $lineno, @_ ) ;
+}
+
+=pod
+
+=item * texcommand_def()
+
+Treats \def and \gdef
+
+=cut
+sub texcommand_def {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ Bib2HTML::General::Error::warm( "command name expected after a \\def or a \\gdef",
+ $self->{'FILENAME'},
+ $lineno )
+ unless $_[0]->{'text'} ;
+ # The command definition is never evaluated
+ my $trans_txt = $_[1]->{'text'} ;
+ addtrans_cmd_noparam( $_[0]->{'text'}, $trans_txt, 1 ) ;
+ return '' ;
+}
+
+=pod
+
+=item * texcommand_edef()
+
+Treats \edef and \xdef
+
+=cut
+sub texcommand_edef {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ Bib2HTML::General::Error::warm( "command name expected after a \\edef or a \\xdef",
+ $self->{'FILENAME'},
+ $lineno )
+ unless $_[0]->{'text'} ;
+ # The command definition is always evaluated
+ my $trans_txt = $self->translate( $_[1]->{'text'} || '', undef, $lineno ) ;
+ addtrans_cmd_noparam( $_[0]->{'text'}, $trans_txt, 0 ) ;
+ return '' ;
+}
+
+=pod
+
+=item * texcommand_newcommand()
+
+Treats \newcommand and \renewcommand
+
+=cut
+sub texcommand_newcommand {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ # Check for command name
+ my $name = $_[0]->{'text'} || '' ;
+ $name =~ s/^\\// ;
+ if ( ! $name ) {
+ Bib2HTML::General::Error::warm( "command name expected after a \\def",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ return '' ;
+ }
+ # Builds the parameter definition
+ my $params = "" ;
+ if ( ( $_[1]->{'text'} ) && ( $_[1]->{'text'} > 0 ) ) {
+ my $count = $_[1]->{'text'} ;
+ if ( $_[2]->{'text'} ) {
+ $count -- ;
+ $params .= '['.$_[2]->{'text'}.']' ;
+ }
+ while ( $count > 0 ) {
+ $count -- ;
+ $params .= '{}' ;
+ }
+ }
+
+ # The command definition is never evaluated
+ my $trans = $_[3]->{'text'} || '' ;
+
+ # Adds the command definition
+ if ( $params ) {
+ addtrans_cmd_html( $name, $params, $trans, 1 ) ;
+ }
+ else {
+ addtrans_cmd_noparam( $name, $trans, 1 ) ;
+ }
+ return '' ;
+}
+
+=pod
+
+=item * texcommand_ensuremath()
+
+Treats \ensuremath
+
+=cut
+sub texcommand_ensuremath {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $trans = '' ;
+ my $math = $self->is_math_mode() ;
+
+ $trans = $self->start_math_mode(1) unless ( $math ) ;
+
+ if ( $_[0]->{'eval'} ) {
+ $trans .= $self->translate( $_[0]->{'text'} || '', undef, $lineno ) ;
+ }
+ else {
+ $trans .= $_[0]->{'text'} || '' ;
+ }
+
+ $trans .= $self->stop_math_mode() unless ( $math ) ;
+
+ return $trans ;
+}
+
+=pod
+
+=item * texcommand_ensuretext()
+
+Treats \text
+
+=cut
+sub texcommand_ensuretext {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $trans = '' ;
+ my $math ;
+ if ( $self->is_inline_math_mode() ) {
+ $math = 1 ;
+ }
+ elsif ( $self->is_multiline_math_mode() ) {
+ $math = 2 ;
+ }
+ else {
+ $math = 0 ;
+ }
+
+ $trans = $self->stop_math_mode() if ( $math ) ;
+
+ if ( $_[0]->{'eval'} ) {
+ $trans .= $self->translate( $_[0]->{'text'} || '', undef, $lineno ) ;
+ }
+ else {
+ $trans .= $_[0]->{'text'} || '' ;
+ }
+
+ $trans .= $self->start_math_mode( $math ) if ( $math ) ;
+
+ return $trans ;
+}
+
+=pod
+
+=item * texcommand_cite()
+
+Treats \cite
+
+=cut
+sub texcommand_cite {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $key = $_[1]->{'text'} || '' ;
+ my $label = $_[0]->{'text'} || '' ;
+ my $cite = $label || '?' ;
+ if ( ($key) &&
+ ( ishash($self->{'DATABASE'}) ) &&
+ ( ! isemptyhash( $self->{'DATABASE'} ) ) &&
+ ( exists $self->{'DATABASE'}{$key} ) ) {
+ $cite = "<BIB2HTML action=CITE key=\"$key\"" ;
+ if ( $label ) {
+ my $bibtex = new Bib2HTML::Translator::BibTeXEntry() ;
+ $bibtex->save_citation_label( $key, $label ) ;
+ $cite .= " label=\"".addslashes( $label )."\"" ;
+ }
+ $cite .= ">". ( $label || '?' ) . "</BIB2HTML>" ;
+ }
+ return "[".$cite."]" ;
+}
+
+=pod
+
+=item * texcommand_beginenv()
+
+Treats \begin
+
+=cut
+sub texcommand_beginenv {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $env = $_[0]->{'text'} || '' ;
+
+ if ( ! $env ) {
+ Bib2HTML::General::Error::warm( "environment name not found for a command \\begin",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ return '' ;
+ }
+
+ # register the environment opening here to
+ # prevent error during the closing
+ push @{$self->{'ENVIRONMENTS'}}, $env ;
+
+ return "\\start$env" ;
+}
+
+=pod
+
+=item * texcommand_endenv()
+
+Treats \end
+
+=cut
+sub texcommand_endenv {
+ my $self = shift ;
+ my $lineno = shift || 0 ;
+ my $env = $_[0]->{'text'} || '' ;
+
+ if ( ! $env ) {
+ Bib2HTML::General::Error::warm( "environment name not found for a command \\end",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ return '' ;
+ }
+
+ # Pop the environment contex
+ # and warm if the closed environment
+ # does not match the opened
+ if ( isemptyarray($self->{'ENVIRONMENTS'}) ) {
+ Bib2HTML::General::Error::warm( "found \\end{$env} without \\begin{$env}",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ return '' ;
+ }
+
+ my $opened = $self->{'ENVIRONMENTS'}->[$#{$self->{'ENVIRONMENTS'}}] ;
+ if ( ( !$opened ) ||
+ ( $opened ne $env ) ) {
+ Bib2HTML::General::Error::warm( "found \\end{$env} instead of \\end{$opened}",
+ $self->{'FILENAME'},
+ $lineno ) ;
+ return '' ;
+ }
+
+ pop @{$self->{'ENVIRONMENTS'}} ;
+
+ return "\\end$env" ;
+}
+
+1;
+__END__
+
+=back
+
+=head1 COPYRIGHT
+
+(c) Copyright 1998-09 Stéphane Galland E<lt>galland@arakhne.orgE<gt>, under GPL.
+
+=head1 AUTHORS
+
+=over
+
+=item *
+
+Conceived and initially developed by Stéphane Galland E<lt>galland@arakhne.orgE<gt>.
+Some TeX commands are added by Dimitris Michail E<lt>michail@mpi-sb.mpg.deE<gt>
+and Tobias Loew E<lt>loew@mathematik.tu-darmstadt.deE<gt>
+
+=back
+
+=head1 SEE ALSO
+
+bib2html.pl
diff --git a/biblio/bibtex/utils/bib2ml/src/bib2html.php b/biblio/bibtex/utils/bib2ml/src/bib2html.php
new file mode 100755
index 0000000000..841a79fda9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/bib2html.php
@@ -0,0 +1,41 @@
+<?php
+
+/* bib2html script to generate an HTML document for BibTeX database
+ * Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+$BIBFILE = '/path/to/my/bibtex/file';
+
+$ARGUMENTS = array(
+ 'bib2html',
+ '--stdout',
+ '-q',
+ "$BIBFILE",
+ );
+
+$cmd = "";
+foreach($ARGUMENTS as $arg) {
+ if ($cmd) {
+ $cmd .= '.';
+ }
+ $cmd .= escapeshellarg("$arg");
+}
+
+exec("$cmd");
+
+?>
diff --git a/biblio/bibtex/utils/bib2ml/src/bib2html.pl b/biblio/bibtex/utils/bib2ml/src/bib2html.pl
new file mode 100755
index 0000000000..4d867a7654
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/bib2html.pl
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w
+
+# bib2html script to generate an HTML document for BibTeX database
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+use strict ;
+use File::Basename ;
+use File::Spec ;
+
+#------------------------------------------------------
+#
+# Initialization code
+#
+#------------------------------------------------------
+my $PERLSCRIPTDIR ;
+my $PERLSCRIPTNAME ;
+BEGIN{
+ # Where is this script?
+ $PERLSCRIPTDIR = "$0";
+ my $scriptdir = dirname( $PERLSCRIPTDIR );
+ while ( -e $PERLSCRIPTDIR && -l $PERLSCRIPTDIR ) {
+ $PERLSCRIPTDIR = readlink($PERLSCRIPTDIR);
+ if ( substr( $PERLSCRIPTDIR, 0, 1 ) eq '.' ) {
+ $PERLSCRIPTDIR = File::Spec->catfile( $scriptdir, "$PERLSCRIPTDIR" ) ;
+ }
+ $scriptdir = dirname( $PERLSCRIPTDIR );
+ }
+ $PERLSCRIPTNAME = basename( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = dirname( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = File::Spec->rel2abs( "$PERLSCRIPTDIR" );
+ # Push the path where the script is to retreive the arakhne.org packages
+ push(@INC,"$PERLSCRIPTDIR");
+
+}
+
+use Bib2HTML::Main;
+
+launchBib2HTML("$PERLSCRIPTDIR","$PERLSCRIPTNAME");
+
+__END__
diff --git a/biblio/bibtex/utils/bib2ml/src/bib2sql.pl b/biblio/bibtex/utils/bib2ml/src/bib2sql.pl
new file mode 100755
index 0000000000..d358d7e878
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/bib2sql.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl -w
+
+# bib2sql script to generate a SQL document for BibTeX database
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+use strict ;
+use File::Basename ;
+use File::Spec ;
+
+#------------------------------------------------------
+#
+# Initialization code
+#
+#------------------------------------------------------
+my $PERLSCRIPTDIR ;
+my $PERLSCRIPTNAME ;
+BEGIN{
+ # Where is this script?
+ $PERLSCRIPTDIR = "$0";
+ my $scriptdir = dirname( $PERLSCRIPTDIR );
+ while ( -e $PERLSCRIPTDIR && -l $PERLSCRIPTDIR ) {
+ $PERLSCRIPTDIR = readlink($PERLSCRIPTDIR);
+ if ( substr( $PERLSCRIPTDIR, 0, 1 ) eq '.' ) {
+ $PERLSCRIPTDIR = File::Spec->catfile( $scriptdir, "$PERLSCRIPTDIR" ) ;
+ }
+ $scriptdir = dirname( $PERLSCRIPTDIR );
+ }
+ $PERLSCRIPTNAME = basename( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = dirname( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = File::Spec->rel2abs( "$PERLSCRIPTDIR" );
+ # Push the path where the script is to retreive the arakhne.org packages
+ push(@INC,"$PERLSCRIPTDIR");
+
+}
+
+use Bib2HTML::Main;
+
+push @ARGV, "-g", "SQL";
+
+launchBib2HTML("$PERLSCRIPTDIR","$PERLSCRIPTNAME");
+
+__END__
diff --git a/biblio/bibtex/utils/bib2ml/src/bib2xml.pl b/biblio/bibtex/utils/bib2ml/src/bib2xml.pl
new file mode 100755
index 0000000000..c37b41a83a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/src/bib2xml.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl -w
+
+# bib2xml script to generate a XML document for BibTeX database
+# Copyright (C) 1998-09 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+use strict ;
+use File::Basename ;
+use File::Spec ;
+
+#------------------------------------------------------
+#
+# Initialization code
+#
+#------------------------------------------------------
+my $PERLSCRIPTDIR ;
+my $PERLSCRIPTNAME ;
+BEGIN{
+ # Where is this script?
+ $PERLSCRIPTDIR = "$0";
+ my $scriptdir = dirname( $PERLSCRIPTDIR );
+ while ( -e $PERLSCRIPTDIR && -l $PERLSCRIPTDIR ) {
+ $PERLSCRIPTDIR = readlink($PERLSCRIPTDIR);
+ if ( substr( $PERLSCRIPTDIR, 0, 1 ) eq '.' ) {
+ $PERLSCRIPTDIR = File::Spec->catfile( $scriptdir, "$PERLSCRIPTDIR" ) ;
+ }
+ $scriptdir = dirname( $PERLSCRIPTDIR );
+ }
+ $PERLSCRIPTNAME = basename( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = dirname( $PERLSCRIPTDIR ) ;
+ $PERLSCRIPTDIR = File::Spec->rel2abs( "$PERLSCRIPTDIR" );
+ # Push the path where the script is to retreive the arakhne.org packages
+ push(@INC,"$PERLSCRIPTDIR");
+
+}
+
+use Bib2HTML::Main;
+
+push @ARGV, "-g", "XML";
+
+launchBib2HTML("$PERLSCRIPTDIR","$PERLSCRIPTNAME");
+
+__END__
diff --git a/biblio/bibtex/utils/bib2ml/test.bib b/biblio/bibtex/utils/bib2ml/test.bib
new file mode 100644
index 0000000000..2ecb457a85
--- /dev/null
+++ b/biblio/bibtex/utils/bib2ml/test.bib
@@ -0,0 +1,5 @@
+@ARTICLE{ test
+ author = { Galland, Stéphane },
+ title = {My Test},
+ year = 2009,
+}
diff --git a/biblio/bibtex/utils/bib2xhtml/COPYING b/biblio/bibtex/utils/bib2xhtml/COPYING
new file mode 100644
index 0000000000..e77696ae8d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/biblio/bibtex/utils/bib2xhtml/ChangeLog b/biblio/bibtex/utils/bib2xhtml/ChangeLog
new file mode 100644
index 0000000000..d83859f491
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/ChangeLog
@@ -0,0 +1,892 @@
+Sun Dec 12 20:16:58 2010
+
+ * Version 2.35 released.
+
+ * New -n option will highlight the specified author name.
+ (Contributed by Todd Gamblin.)
+
+ * Chronological ordering now takes also into account month and day.
+ (Contributed by Todd Gamblin.)
+
+ * Correct handling of nested LaTeX braces.
+ (Suggested by Todd Gamblin.)
+
+ * Add support for the \href appearing in bibliography entries.
+ (Contributed by Frank Loeffler.)
+
+ * Fix problem where when a list of citations is given, and a
+ bibtex macro file is specified, the macro file will not be
+ applied. (Contributed by Rogan Carr)
+
+ * The project's home page supports the interactive choice
+ of formatting examples.
+
+Thu Feb 04 16:22:07 2010
+
+ * Version 2.31 released.
+
+ * new option "paragraph" now produces paragraphs (no bullets)
+
+ * Use crlf IO open option in order to avoid problems under Windows
+ with Cygwin.
+
+Thu Jul 02 16:27:03 GTB Daylight Time 2009
+
+ * Version 2.30 released.
+
+ * Correct operation when the PDF::API2 module is not available.
+
+ * Dropped the deprecated compact dl attribute. The appearance of
+ the list can be controlled through the bib2xhtml CSS style.
+ (Pointed by Mark Jelasity.)
+
+ * Correct handling of cross references containing tildes.
+ (Pointed by Ken Pierce.)
+
+ * Escape XML-special characters appearing in URLs and DOIs.
+ (Pointed by Mark Jelasity.)
+ The last two changes make the generated documents pass XHTML
+ validators.
+
+Thu Jun 14 17:59:59 2007
+
+ * Version 2.26 released.
+
+ * New -e option for specifying how extended file information is
+ displayed. This can be used for including PDF file icons.
+
+ * Support for counting the pages of PDF documents (requires
+ PDF::API2).
+
+ * Document the -D option for specifying file path to URL mappings.
+
+Mon May 29 16:57:06 2006
+
+ * Version 2.23 released.
+
+ * Add support for some missing Czech characters (Vasek Smidl).
+
+ * Correct the handling of the degree symbol and handle \dots
+ (Bruno Salvy)
+
+ * Prevent tildes in URLs from being converted into spaces.
+
+Sun Sep 04 17:27:13 2005
+
+ * Version 2.20 released.
+
+ * The lists generated now contain CSS hooks (class bib2xhtml).
+ The list items are not explicitly separated with <p />;
+ if you want that behavior, simply add a style entry like
+ the following
+ <style type="text/css">
+ dl.bib2xhtml dd { padding-bottom: 1em }
+ </style>
+ <style type="text/css">
+ ul.bib2xhtml li { padding-bottom: 1em }
+ </style>
+ in the page's header. (suggested by Mark Jelasity)
+
+ * Correct the handling of circumflex escapes (fix by Mark Jelasity)
+
+ * Stray & symbols (e.g. in URLs) are converted into &amp;
+
+Wed Jul 13 00:06:55 2005
+
+ * Version 2.18 released.
+
+ * New -k option to display in the generated file the
+ original bibtex key together with the label.
+
+ * Correctly terminate <dd> tag in the numbered styles.
+
+ * Fix duplicate periods appearing in the XHTML output.
+
+ * Correct the creation of the compact attribute in <dl> tags.
+
+ * Support DOI fields lacking a doi or http prefix.
+
+ * Added support for the \url{} LaTeX command. It is converted
+ into a hypertext link. (Contributed by Mark Jelasity.)
+
+Fri Jul 02 01:17:24 2004
+
+ * Version 2.12 released.
+
+ * Added support for a DOI (digital object identifier) bibliography
+ field in the bibliography entries. The DOI will appear in the
+ XHTML bibliograpy in its human readable form, hyperlinked through
+ dx.doi.org.
+
+Sat Jun 06 23:09:04 2004
+
+ * Version 2.11 released.
+
+ * Remove output duplication caused by unflushed buffers after a fork.
+ Many thanks to Mark Jelasity for drawing my attention to this
+ problem, and testing the solution.
+
+ * New -u option to convert LaTeX special characters into the
+ corresponding Unicode characters, and output valid XML coded
+ in UTF-8.
+ Note with this option documents must specify
+ <?xml version="1.0" encoding="utf-8"?>
+ at their top.
+ HTML documents should better also specify
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ and/or arrange with their web server to indicate the UTF-8 encoding
+ as part of the HTTP header.
+ The documents produced by this option may be easier to parse and
+ validate with some XML parsers.
+
+ * Removed the deprecated -3 option (output HTML-3 character entities).
+ Many HTML entities are now encoded by their symbolic name rather
+ than numerically.
+
+ * Added http-equiv and Generator tags
+
+Wed Apr 07 17:03:43 2004
+
+ * Version 2.6 released.
+
+ * Improved documentaion includes examples.
+
+ * Clarified the sorting options in the code and the
+ manual page.
+
+Sun Apr 04 17:30:17 2004
+
+ * Version 2.4 released.
+
+ * Prevent Win32 filehandle resource leakage introduced
+ in version 2.3. This prevented the final rename operation.
+
+Sat Apr 03 12:04:08 2004
+
+ * Version 2.3 released.
+
+ * Changes by Panos Louridas <louridas@aueb.gr>
+ to allow the specification of the citations
+ in-line in the HTML file.
+
+Mon Mar 29 15:08:52 2004 Diomidis Spinellis <dds@aueb.gr>
+
+ * Version 2.2 released.
+
+ * Change project name from bib2html into bib2xhtml.
+
+Mon Jan 19 10:43:44 2004 Diomidis Spinellis <dds@aueb.gr>
+
+ * Version 2.1 released.
+
+ * bib2html: Corrected the handling of the -b option.
+
+Wed Jan 14 21:46:17 2004 Diomidis Spinellis <dds@aueb.gr>
+
+ * Version 2.1 released.
+
+ * Makefile: adjust for new public distribution
+
+ * gen-bst: Create the named reversedate (nr) style by default
+
+ * bib2html: Correct the usage information.
+
+ * bib2html.man: Document a number of missing options.
+ Add HISTORY section.
+ Update for public release of version 2.1
+
+Fri Nov 21 23:38:06 2003 Diomidis Spinellis <dds@aueb.gr>
+
+ * html-btxbst.doc: Convert tags and their syntax to make them
+ compatible with XHTML 1.0
+
+ * bib2html: Convert HTML output and post processing code to make it
+ compatible with XHTML 1.0
+
+Tue Apr 30 10:17:36 2002 Diomidis Spinellis <dds@aueb.gr>
+
+ * bib2html: Add -m option for specifying an additional macro file
+ Add unsortlist format for creating non-sorted empty lists.
+
+Fri Apr 24 22:27:56 1998 David Hull <hull@cs.uiuc.edu>
+
+ * Version 1.33 released.
+
+ * README: Update THANKS.
+
+ * bib2html: In plain style, combine <A NAME="..."></A> with following
+ <A HREF="mailto:..."> which may exist because of mailto field
+ in bibliography file.
+
+ * html-btxbst.doc: Add support for mailto field (thanks to Eric Vinck).
+
+Wed Apr 22 21:10:57 1998 David Hull <hull@cs.uiuc.edu>
+
+ * bib2html: Add -b <bibtex-options> to pass options through bib2html to
+ bibtex.
+ Yet another try at forking bibtex that works on all systems.
+ Fix pattern for \textasciitilde.
+
+Mon Mar 16 18:22:20 1998 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.32 released.
+
+ * README: Updated thanks.
+
+ * html-btxbst.doc:
+ Fix newlines around postscript, pdf, dvi, and abstract fields
+ (an extra newline was being output).
+
+ * gen-bst: Fix declaration for cpp (prototype needed to be repeated).
+
+ * bib2html: Tmp file filename fix for VMS from Martin P. J. Zinser.
+
+Thu Feb 26 15:39:11 1998 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.31 released.
+
+ * bib2html: Fixed some "use of uninitialized value" warnings, thanks to
+ Martin P.J. Zinser.
+
+ * bib2html: Fix a "use of unitialized value" bug.
+ Use unicode characters for m-dash and n-dash instead of &mdash; and
+ &ndash;, because they seem to be supported by more browsers.
+
+Wed Feb 11 19:22:30 1998 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch: Perl 5.004 apparently requires that -T switch be first.
+
+Wed Jan 21 21:08:52 1998 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Allow user-specified BibTeX style (.bst) file. This required
+ allowing the .bst file to specify what label type to use with it.
+
+ * html-btxbst.doc: Add label-style definitions to begin.bib.
+
+Thu Jan 8 19:45:43 1998 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.30 released.
+
+ * bib2html:
+ Fix link problem for postscript (and other) files when URL is
+ given (thanks to Aki Vehtari).
+ Change pattern for ^ and _ expansion.
+
+ * README: Update bibtex mode information (thanks to Aki Vehtari).
+
+Tue Oct 14 16:34:56 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.29 released.
+
+ * bib2html: Add -D option to define URL to directory mappings.
+
+ * gen-bst: Fix REVERSEBYDATE -> REVERSEDATE.
+
+Fri Jun 27 20:19:53 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Translate \textasciitilde.
+ Better search pattern for fixing <A NAME=""></A>.
+
+Thu Jun 5 17:06:19 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.28 released.
+
+ * README: Update thanks.
+
+ * html-btxbst.doc:
+ Use organization field for Authors: comment if entry has neither
+ author or editor field.
+
+ * bibsearch: Fix bug: entry was not being skipped correctly if it
+ didn't have an Authors: comment.
+
+Fri Apr 4 20:13:31 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.27 released.
+
+ * gen-bst: Convert gen-bst from a shell script that calls CPP to a Perl
+ script that implements "just enough" CPP to do the job.
+
+ * README: Update Thanks section.
+
+ * html-btxbst.doc: Change "et al." to "et~al." in format.lab.names.
+
+ * html-btxbst.doc: Simplify the CPP statements a little so that my fake
+ Perl CPP interpreter can handle them.
+
+ * bib2html: Get rid of fork and open of /dev/null so that bib2html will
+ run on non-UNIX platforms.
+
+Fri Mar 14 15:31:31 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch: Make compatible with perl 4 again.
+
+Tue Mar 4 21:56:50 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.26 released.
+
+Tue Feb 18 18:46:30 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Fix: open /dev/null for OHTMLFILE if no old HTML file exists.
+ Get mode differently.
+
+Tue Feb 11 15:30:35 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Fix "unitialized value" warning with pageCount.
+
+Fri Feb 7 21:05:03 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.25 released.
+
+ * bib2html: Add -w flag to perl.
+
+ * README: Warn about change to bibsearch.
+
+Fri Feb 7 20:42:03 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch:
+ No longer do path translation on database ourselves, but rely
+ on server to do it in PATH_TRANSLATED environment variable. This
+ increases the security of bibsearch (or at least moves the problem
+ into the http server instead of in bibsearch).
+ Code cleanup so that "-w" doesn't cause complaints.
+
+Fri Jan 31 21:51:29 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch:
+ More informative error message when unable to open database.
+ Default values for $open_list and $close_list.
+ Correct error in determining list type (was giving up too
+ soon in looking for beginning of list).
+
+Fri Jan 24 17:46:11 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Add '\ ' to ' ' translation (was getting translated to '').
+
+ * html-btxbst.doc:
+ Fix str.to.int. The logic was completely wrong. What could
+ I have been thinking of?
+
+ * bib2html:
+ In a regular expression, "." doen't match newline, and so some
+ patterns weren't matching that should. I replaced the "." with
+ [^\001]. An alternative would have been to add the /s option,
+ but that would have only worked under Perl 5.
+
+Wed Jan 22 19:29:33 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-btxbst.doc:
+ Add str.to.int function, to convert string to integer.
+ Add REVERSEDATE support, to sort into reverse chronological order.
+ Add SORTBYYEAR support, to sort first by year and then by author.
+
+ * bib2html.man: Describe new -c and -r options.
+
+ * README: Describe how to generate .bst files for -c and -r options.
+
+ * bib2html: It's the -c option, not the -y option.
+
+ * gen-bst: Add support for -r and -c options.
+
+ * bib2html: Add new -c and -r options.
+
+ * gen-bst: Initial revision
+
+ * bib2html:
+ Correct patterns for accented characters. They were sometimes
+ incorrectly swallowing the following space.
+
+Thu Jan 9 16:15:48 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ Version 1.24 released.
+
+ * bib2html:
+ Remove blank line in comment at beginning of bibliography (introduced
+ yesterday) that confused bibsearch.
+
+Wed Jan 8 17:12:37 1997 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ Version 1.23 released.
+
+ * bib2html:
+ Output command line used to generate bibliography as comment in
+ HTML file.
+ Fix a problem with the pattern that was used to ensure that the
+ contents of the A NAME tag in the empty style weren't empty.
+ Be more careful about &emdash; and &endash;.
+
+Tue Dec 17 15:57:05 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * README: *** empty log message ***
+
+ * bib2html:
+ Move "require 'ctime.pl'" to the top of the file. It was causing
+ an error in perl 4 where it was.
+
+Tue Nov 26 15:40:03 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.22 released.
+
+ * bib2html: Fix \aa -> &aring.
+ Start up perl explicitly if $running_under_some_shell.
+
+Thu Sep 26 22:47:10 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Add count of number of references to timestamp.
+
+Wed Aug 7 14:42:33 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Added \circ to degree symbol translation for math mode.
+
+Tue Jul 30 21:04:15 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch: Improve documentation.
+
+Tue Jul 30 20:30:36 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.20 released.
+
+ * bib2html: Handle LaTeX inline math \( ... \).
+
+Tue Jul 30 19:46:46 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Only do superscript and subscript processing in inline math mode.
+ Make -w be quiet about identifier used only once warnings.
+ Fix syntax error in \, pattern.
+
+Tue Jul 30 19:13:56 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html.man: Say how to produce ~'s in bibliography.
+
+ * bib2html: Do proper matching on curly braces. This involved changing
+ all of the patterns that matched on any curly braces.
+ Add (null) translations for a hacek, macron, and dot accents.
+ Be more careful on \par translation.
+ Add crude superscript and subscript support. Doesn't check to
+ make sure it's inside math mode.
+ More translations: \, \ldots etc.
+
+Mon Jul 8 20:27:41 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.19 released.
+
+ * bibsearch: Fix bugs in iso8859-1 mapping to plain ASCII.
+
+Fri Jul 5 20:34:00 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.18 released.
+
+ * README: Update installation instructions.
+
+ * bib2html: Fix handling of \i, the dotless i, in accents.
+
+ * bib2html: Be more careful when translating accent commands to not
+ generate invalid ISO8859-1 HTML character entities.
+ Translate \l to l and \L to L.
+
+ * bibsearch: Update example of form to use to call bibsearch.
+ Add mapping for ISO characters to map them to ASCII.
+ Read database a line at a time instead of a paragraph at a
+ time so that we can't miss the beginning of a bibliography
+ when there is more than one bibliography in a database.
+ Print "no matches found" message when no matches are found.
+
+Wed Jul 3 14:49:30 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.17 released.
+
+ * bib2html: BibTeX was wrapping the postscript, pdf, and dvi comments.
+ Modify the grep patterns to account for it.
+
+Mon Jul 1 19:15:10 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.16 released.
+
+ * README: Update thanks.
+
+ * html-btxbst.doc:
+ Also add links for url entries in book-like titles (format.btitle).
+
+ * bib2html: Suppress extra white space after TeX macros.
+
+Mon Jun 24 15:04:40 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.15 released.
+
+ * bib2html: Fix translation of \'{\i} and \ss.
+
+Fri Jun 7 15:49:51 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.14 released.
+
+ * bib2html: Fix error in circumflex grep pattern.
+
+Thu Apr 18 02:48:52 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.13 released.
+
+ * bib2html: More changes for Perl 5.
+
+Wed Apr 17 17:56:42 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch, bib2html: Small cleanups to make perl -w happy.
+
+Mon Apr 15 12:16:43 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.12 released.
+
+Wed Apr 10 17:42:22 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-btxbst.doc:
+ In entries that have no author field, emit an HTML comment with the
+ editors instead.
+
+ * bibsearch:
+ Fix: If author search was requested, and bibliography entry had no
+ Authors: comment, it matched. Now it doesn't match.
+
+Mon Apr 8 21:37:31 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bibsearch: Handle more than one bibliography in a HTML file.
+ Fix error in determining list type.
+
+ * bibsearch:
+ Fix: make type of generated bibliography list match the type of
+ the bibliography list in the original document.
+
+ * html-btxbst.doc:
+ Eliminate useless comma in label in named style with no year specified.
+
+ * bib2html: Attempt to eliminate extra periods at ends of blocks.
+
+Fri Apr 5 22:03:03 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * Version 1.11 released.
+
+ * README: *** empty log message ***
+
+ * bib2html: Be more careful about removing redundancy in crossrefs.
+
+ * bib2html:
+ Only go to end of line when getting text to put inside A NAME tag.
+ Remove \rm and \textrm commands (there's no easy way to handle them).
+ Add improved macro handling from Joe Wells.
+
+ * bib2html: In plain style, be more careful about not enclosing
+ another HTML element when fixing empty NAME anchor.
+
+ * html-btxbst.doc: Update comments.
+ Add <P> tag at end of bibliography entry.
+ Use \citelabel instead of \cite to refer to other bibliography
+ entries.
+
+ * bib2html: Change \cite processing. A \cite is now expanded so that
+ the label is a link to the entry the \cite refers to. A \citelabel
+ expands to only the label, without the link. This is accompanied
+ by a corresponding change in the bst style files so that bib2html
+ does not create nested links.
+
+ * html-btxbst.doc: Initial revision
+
+ * bib2html: Cleanup: escape more { and } in regex patterns.
+ Add support for math font handling from Joe Wells.
+
+ * bib2html: Fix: escape { and } in regex patterns.
+ Simplify accent and greek character replacement patterns.
+
+ * bib2html:
+ Bug in \cite processing was sometimes creating nested A HREF tags.
+ Back off on converting \cite entries to links until I can figure
+ out a way to prevent the nesting.
+
+Mon Apr 1 18:39:41 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Add translation for \htmladdnormallinkfoot{text}{url}.
+
+ * bib2html: Make \cite crossrefs be hyperized in more cases.
+
+ * bib2html: Translate \htmladdnormallink{text}{url}.
+
+Mon Feb 26 16:50:45 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * README: Update THANKS.
+
+ * bib2html: Add new -h option.
+ Output some boilerplate HTML when creating a new HTML file from
+ scratch.
+
+ * bib2html.man: Document new -h option.
+
+ * Version 1.10 released.
+
+Mon Feb 5 20:40:17 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-n.bst: Fix spacing around "et al." in labels.
+
+ * bib2html:
+ Remove \n is regexp for finding citations and labels. This was causing
+ problems on entries with no authors.
+
+Wed Jan 24 21:04:07 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Get rid of -A option. Instead use file extension of source file
+ (.aux or .bib) to determine input file type.
+
+ * bib2html.man: Document new unsort bibliography style.
+
+ * Version 1.9 released.
+
+Wed Jan 24 18:51:04 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-u.bst: Add RCS header.
+
+ * html-n.bst, html-a.bst: Change spacing in output.
+
+ * bib2html: Add unsort bibliography style.
+ Add -A option to read an already-existing .aux file for citations
+ instead of using all citations from one bibtex bibliography file.
+ Be a little more careful about removing "scratch" files.
+
+ * html-u.bst: Initial revision
+
+Tue Jan 23 19:11:51 1996 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Bibtex sometimes inserts "%\n" to break long lines. Remove it.
+
+ * html-a.bst, html-n.bst:
+ Don't output Authors: comment if author is empty.
+
+ * README: Update thanks.
+
+ * Version 1.8 released.
+
+Wed Dec 20 23:19:39 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * README: Update thanks.
+
+ * bib2html.man: Update FILES section. Document -v option.
+
+ * bibsearch:
+ Bug fix: did some pattern substitutions on author names in the
+ wrong order.
+
+ * Version 1.7 released.
+
+Fri Dec 15 23:15:17 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Oops! Fixed recent \~{} fix.
+
+Fri Dec 15 22:48:45 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html:
+ Handle \char'377, \char"ff, and \char255 by converting to &#255;.
+
+ * bib2html:
+ Fix handling of \~{}, which should produce a ~ in the output.
+
+Thu Dec 7 21:44:44 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html.man: Document new named style.
+
+ * README: Update installation instructions.
+
+ * bib2html 1.6 released.
+
+Thu Dec 7 21:00:59 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-n.bst: Initial revision
+
+ * html-a.bst:
+ Changed name from html.bst to html-a.bst to indicate that this
+ is used for the alpha html style.
+
+ * bib2html:
+ Handle postscript, pdf, and dvi tags that are URLs. At his point,
+ we handle them by pretty much ignoring them, and not attempting to
+ get the file size or number of pages.
+ Add named ([Hull, 1995]) style. Use this style as the basis for
+ the empty (bulletted) and plain ([1]) styles, because it results
+ in a more sensible alphabetization than the named style does.
+ Produce better cross-referenced citations.
+
+Fri Nov 3 18:35:44 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Add version (-v) option.
+ Remove incorrect \rm mapping.
+ Add LaTeX2e-style font commands (\textit{}, etc).
+
+Fri Oct 27 21:05:45 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html 1.5 released.
+
+ * bibsearch:
+ Add author search. Keyword search is no longer straight grep
+ pattern. Built-in help.
+
+ * bib2html: Oops! Missing "#".
+
+Thu Oct 26 17:26:17 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * README: Update Thanks.
+
+ * bib2html: htmlfile argument is now optional. If it is not specified,
+ the bibliography is written to stdout.
+ Give usage message if an improper number of arguments is
+ specified.
+
+ * bib2html.man: htmlfile argument is now optional.
+
+Tue Oct 17 18:41:55 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html.bst: Add url field, a replacement for html field.
+
+ * bib2html.man: Document url field, a replacement for html.
+
+ * bib2html:
+ Change \cite{} retain original cite key if citation is not found.
+ Swallow up space after \rm, \it, \em, or \tt.
+
+ * README: More people to thank....
+
+ * bibsearch: Fix error in HREF qualification.
+
+ * bib2html: Fix: move ~ -> &nbsp; translation to after \~ translation.
+
+Mon Oct 16 22:18:38 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-abs.bst.diffs: Initial revision
+
+ * html.bst: Use \cite{} in crossref instead of [[]].
+
+ * bib2html.man: Document new delimiter (-d delim) option.
+
+ * bib2html:
+ Citations were being formatted incorrectly in alpha style. Fixed.
+ Expand \cite{} so that citations are allowed anywhere in entry.
+ Add delimiter (-d delim) option.
+
+Mon Oct 16 19:41:35 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html.man: Document new "-s style" option.
+
+ * bib2html: Check options and print usage message if illegal option.
+ Change $htmldir derivation.
+
+ * bib2html: Add support for plain and alpha bibliography styles.
+
+ * html.bst: Generate alpha labels instead of plain labels. Code stolen
+ from alpha.bst.
+
+ * html.bst: Support both empty (<LI>) and plain (<DT>[nn]</DD>) lists.
+ Show crossref field in cross references.
+
+Fri Oct 6 18:50:20 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html-abs.bst, html.bst: Fix crossref code for HTML.
+
+ * bib2html: Remove empty crossrefs.
+
+ * README: Update emacs and thanks sections.
+
+ * bibsearch:
+ Fix relative URLs (<A HREF="#...">) so that they still work.
+
+ * bib2html.man: Document new abstract (-a) option.
+
+ * bib2html: Add \par to <P> conversion for abstracts.
+ Fix another bug in deriving $htmldir.
+
+Thu Oct 5 21:02:31 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * README: Added "Thanks" section.
+
+ * bib2html:
+ Oops! Lost command line processing. Put call to Getopt() back in.
+ Add -a option, which puts abstract in HTML file.
+ Add more LaTeX to HTML character entity translations.
+
+ * html-abs.bst: Initial revision
+
+Wed Oct 4 19:32:45 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html.man: Mention support for compressed and gzipped files.
+
+Wed Oct 4 19:18:27 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html 1.3 released.
+
+ * bib2html: Printing warning if paper is not found.
+
+ * bib2html.man: Added under "BUGS": requires dviselect.
+
+ * bib2html: Removed debugging prints.
+
+ * bib2html: Generalized parsing of paper files.
+ Added support for DVI files.
+ Fixed bug: were deriving $htmldir incorrectly.
+
+ * html.bst: Add dvi field type.
+
+Wed Oct 4 15:32:07 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html 1.2 released.
+
+ * README: Initial revision
+
+Tue Oct 3 23:16:50 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html: Added redistribution under GNU Public License.
+
+ * bib2html.man:
+ Document new postscript and pdf field handling, and changed html
+ field handling.
+
+ * html.bst: Added pdf bibtex tag.
+
+ * bib2html:
+ Added pdf bibtex tag. Improved PostScript file parsing. Automagically
+ handle compressed (.Z) and gzipped (.z and .gz) files.
+
+Mon Oct 2 23:50:09 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html.bst: Added postscript bibtex tag.
+
+ * bib2html:
+ Added postscript bibtex tag. Added postscript file parsing to
+ get file size and number of pages.
+
+Mon Sep 11 20:43:04 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html.man: Document new -3 option.
+
+ * bib2html:
+ Add limited support for translation of TeX greek to HTML 3.0 greek
+ entities. Add &ndash; and &mdash; entities. These translations
+ are enabled by the command line option "-3".
+
+Fri Aug 25 18:40:36 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * bib2html 1.1 released.
+
+Fri Aug 25 13:44:27 1995 David Hull <hull@pertsserver.cs.uiuc.edu>
+
+ * html.bst:
+ Change name anchor so that it no longer encloses
+ entire entry. That sometimes creates nested anchor tags, which
+ is bad HTML. Instead, create an empty name anchor, and bib2html
+ will try to fix it.
+
+ * html.bst:
+ Change order of <LI> and <A NAME=...> to produce conforming HTML.
+
+ * bib2html:
+ Try to move close tag of empty name anchors
+ (<A NAME=...></A>) so that they are not empty. Some browsers
+ don't handle empty anchors correctly.
+
+
diff --git a/biblio/bibtex/utils/bib2xhtml/Makefile b/biblio/bibtex/utils/bib2xhtml/Makefile
new file mode 100644
index 0000000000..a727306019
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/Makefile
@@ -0,0 +1,118 @@
+#
+# $Id: Makefile 1.27 2010/12/12 19:01:08 dds Exp $
+#
+
+NAME=bib2xhtml
+BINDIR=$(HOME)/bin/
+BIBTEXDIR=$(HOME)/texmf/bibtex/bst/
+CGIDIR=/usr/dcs/www/cgi-bin/
+DISTDIR=/cygdrive/c/dds/pubs/web/home/sw/textproc/$(NAME)
+
+BSTFILES=$(wildcard *.bst)
+DOCFILES=$(NAME).html $(NAME).txt $(NAME).pdf index.html static.html showeg.js example.bib
+EGFILES=$(wildcard eg/*.html)
+ROOTFILES=README COPYING $(NAME) ${BSTFILES} $(DOCFILES) bibsearch Makefile $(NAME).man ChangeLog html-btxbst.doc gen-bst
+VERSION=$(shell ident $(NAME) | awk '/Id:/{print $$3; exit 0} ')
+
+default: $(DOCFILES) $(EGFILES) ${BSTFILES} syntax
+
+dist: default $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION).zip
+ -mkdir -p $(DISTDIR)/eg 2>/dev/null
+ cp -f $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION).zip $(DISTDIR)
+ cp -f $(DOCFILES) $(DISTDIR)
+ cp -f $(EGFILES) $(DISTDIR)/eg
+ cp -f ChangeLog $(DISTDIR)/ChangeLog.txt
+ rm -f ${DISTDIR}/index.html
+ sed -e "s/VERSION/${VERSION}/" index.html >${DISTDIR}/index.html
+
+$(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION).zip: $(ROOTFILES) $(EGFILES)
+ -cmd /c "rd /s/q $(NAME)-$(VERSION)"
+ mkdir -p $(NAME)-$(VERSION)/eg
+ cp -f ${ROOTFILES} $(NAME)-$(VERSION)
+ rm -f $(NAME)-$(VERSION)/index.html
+ sed -e "s/VERSION/${VERSION}/" index.html >$(NAME)-$(VERSION)/index.html
+ cp -f ${EGFILES} $(NAME)-$(VERSION)/eg
+ tar czf $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION)
+ zip -r $(NAME)-$(VERSION).zip $(NAME)-$(VERSION)
+ cmd /c "rd /s/q $(NAME)-$(VERSION)"
+
+$(NAME).ps: $(NAME).man
+ groff -man -Tps <$? > $@
+
+$(NAME).txt: $(NAME).man
+ groff -man -Tascii <$? | col -b > $@
+
+$(NAME).pdf: $(NAME).ps
+ cmd /c ps2pdf $? $@
+
+$(NAME).html: $(NAME).man
+ groff -mhtml -Thtml -man <$? | sed -e 's/&minus;/-/g;s/&bull;/\&#8226;/g' >$@
+
+${BSTFILES} : html-btxbst.doc
+ perl gen-bst
+
+syntax: $(NAME) bibsearch
+ -perl -w -c $(NAME) >syntax 2>&1
+ -perl -T -w -c bibsearch >>syntax 2>&1
+ -perl -w -c gen-bst >>syntax 2>&1
+
+install:
+ for i in *.bst; do\
+ install -m 644 $$i $(BIBTEXDIR);\
+ done
+
+# Create example files
+# Some nonsensical option combinations cause bib2xhtml to exit with an error
+# Hence the || true part
+example: bib2xhtml Makefile
+ -rm -f eg/*.html
+ cp v23n5.pdf eg
+ for style in empty plain alpha named unsort unsortlist paragraph ; \
+ do \
+ for n in '' '-n Spinellis' ; \
+ do \
+ nopt=`expr "$$n" : '\(..\)'` ;\
+ for u in '' -u ; \
+ do \
+ for c in '' -c ; \
+ do \
+ for r in '' -r ; \
+ do \
+ for k in '' -k ; \
+ do \
+ perl bib2xhtml -s $$style $$n $$u $$c $$r $$k -h "Example: bib2xhtml -s $$style $$n $$u $$c $$r $$k" example.bib eg/$${style}$${nopt}$${u}$${c}$${r}$${k}.html || true;\
+ done ; \
+ done ; \
+ done ; \
+ done ; \
+ done ; \
+ done ; \
+ for i in eg/*.html ; \
+ do \
+ sed -i '/$$Id/d' $$i ; \
+ done ; \
+ touch example
+
+# Regression test
+test: example static.html
+ xml val -d /pub/schema/xhtml1-transitional.dtd index.html ;\
+ xml val -d /pub/schema/xhtml1-transitional.dtd static.html ;\
+ cd eg ; \
+ for i in *.html ; \
+ do \
+ xml val -d /pub/schema/xhtml1-transitional.dtd $$i 2>/dev/null ; \
+ diff ../test.ok/$$i $$i ; \
+ done
+
+# Seed regression test files
+seed: example
+ -mkdir test.ok 2>/dev/null
+ cp eg/* test.ok
+
+# Static HTML file version with links to the eg files
+static.html: index.html Makefile example
+ (sed -n '1,/<meta/p' index.html ; \
+ echo '</head><body><ul>' ; \
+ grep '<title>' eg/* | sed 's/\([^:]*\):<title>Example: \(.*\)<\/title>/<li><a href="\1">\2<\/a><\/li>/' ; \
+ echo '</ul></body></html>' ; \
+ ) >static.html
diff --git a/biblio/bibtex/utils/bib2xhtml/README b/biblio/bibtex/utils/bib2xhtml/README
new file mode 100644
index 0000000000..aa9d3778c2
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/README
@@ -0,0 +1,83 @@
+This is Free Software:
+
+ The bib2html package is copyright 1996, David Hull.
+ In 2002, due to the lack of visible updates on the web, the program
+ was adopted for maintenance, distribution, and further evolution by
+ Diomidis Spinellis. Changes made by him include support for XHTML
+ 1.0 and documentation bug fixes. The first public release of the
+ maintenance effort was in 2004 (version 2.1). On March 2004 the program
+ was renamed into bib2xhtml to avoid confusion with projects using the
+ name bib2html .
+ Changes Copyright 2002-2010, Diomidis Spinellis.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU GenerERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Softwre
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+Important news for people who already use bib2html:
+
+ The way that the bibsearch CGI script is called from HTML has changed
+ in bib2html-1.25. Read the comments at the beginning of bibsearch
+ for the new calling conventions.
+
+
+Installation:
+
+* Update the first line of bib2xhtml and bibsearch to point to the
+ location of perl on your local machine.
+
+* Install html-*.bst somewhere that bibtex can find them. If you have
+ installed an earlier version of bib2xhtml, remove html.bst and
+ html-abs.bst.
+
+* If you plan to use the bibsearch CGI script, edit the configuration
+ section at the beginning of it and install it in your http server's
+ cgi-bin directory. The script has comments with instructions on how
+ to call it from another HTML page.
+
+* If you want to modify the bst (bibtex style) files, edit
+ html-btxbst.doc and then run gen-bst to generate the new versions.
+ You probably won't need to, though.
+
+* To support the -r, -c, and -a options, there are now 18 possible
+ style files. Rather than generate and install all of these .bst
+ files by default, gen-bst now only generates the ones that are most
+ likely to be used. To create the missing ones (that is, if you plan
+ to use the -r and -c options), uncomment the lines at the end of
+ gen-bst and re-run it.
+
+
+GNU emacs:
+
+ For use with bibtex mode (available at
+ http://www.ida.ing.tu-bs.de/people/dirk/bibtex/),
+ I add the following to my ~/.emacs file:
+
+ (setq bibtex-user-optional-fields
+ '(("url" "URL link (for bib2xhtml)")
+ ("postscript" "PostScript file (for bib2xhtml)")
+ ("pdf" "PDF file (for bib2xhtml)"))
+ ("dvi" "DVI file (for bib2xhtml))
+
+
+Thanks to these people, who have contributed to bib2html:
+
+ Peter J Knaggs, Juergen Vollmer, Chris Torrence, Michael Sanders,
+ Vispi Bulsara, Nick Cropper, Joe Wells, Luis Mandel, Ricardo E. Gonzalez,
+ Daniel Kapitan, Tammy Kolda, Walter M. Lioen, Panos Louridas, Aki Vehtari,
+ Martin P. J. Zinser, Eric Vinck, Mark Jelasity, Vasek Smidl, Bruno Salvy,
+ and Wilfried Elmenreich.
+
+$Id: README 1.3 2010/02/04 14:31:08 dds Exp $
diff --git a/biblio/bibtex/utils/bib2xhtml/bib2xhtml b/biblio/bibtex/utils/bib2xhtml/bib2xhtml
new file mode 100755
index 0000000000..2c93697dca
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bib2xhtml
@@ -0,0 +1,1279 @@
+#!/usr/bin/perl -w
+# -*- perl -*-
+# vim: syntax=perl
+eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
+ if 0;
+
+$version = '$Id: bib2xhtml 2.35 2010/12/08 19:38:16 dds Exp $';
+
+#
+# Convert from bibtex to XHTML.
+#
+# (C) Copyright 1995, 1996 David Hull.
+# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
+#
+# (C) Copyright 2002-2010 Diomidis Spinellis
+# http://www.spinellis.gr
+#
+# This program is free software. You can redistribute it and/or modify
+# it under the terms of the GNU General Public License. See the
+# files README and COPYING for details.
+#
+# This source code contains UTF-8 characters. You might want to use
+# an appropriate editor, if you want to view/modify the LaTeX to Unicode
+# substitution commands.
+#
+
+use Getopt::Std;
+use open IO => ':crlf';
+
+require 'ctime.pl';
+
+eval "use PDF::API2";
+$have_pdf_api = 1 unless (defined $@ && $@ ne '');
+
+# Label styles.
+$label_styles{'plain'} = $LABEL_PLAIN = 1;
+$label_styles{'numbered'} = $LABEL_NUMBERED = 2;
+$label_styles{'default'} = $LABEL_DEFAULT = 3;
+$label_styles{'paragraph'} = $LABEL_PARAGRAPH = 4;
+
+$list_start[$LABEL_PLAIN] = 'ul class="bib2xhtml"';
+$list_end[$LABEL_PLAIN] = "/ul";
+$list_start[$LABEL_NUMBERED] = 'dl class="bib2xhtml"';
+$list_end[$LABEL_NUMBERED] = "/dl";
+$list_start[$LABEL_DEFAULT] = 'dl class="bib2xhtml"';
+$list_end[$LABEL_DEFAULT] = "/dl";
+$list_start[$LABEL_PARAGRAPH] = 'div class="bib2xhtml"';
+$list_end[$LABEL_PARAGRAPH] = "/div";
+
+@tmpfiles = ();
+
+sub usage {
+ $program = $0;
+ $program =~ s+^.*/++;
+ print STDERR <<_EOF_;
+usage: $program [-a] [-b bibtex-options] [-c] [-d delim] [-D mappings]
+ [-e extended-information] [-h heading] [-i] [-k]
+ [-m macro file] [-n name] [-r] [-s style] [-t] [-u] [-v]
+ sourcefile [htmlfile]
+
+ -a Write abstract to htmlfile.
+ -b bibtex-options
+ Options to pass to bibtex.
+ -c Sort chronologically, by year, month, day, and then by author.
+ -d delim
+ Specify bibliography delimiter.
+ -D mappings
+ Specify file path to URL mappings.
+ -e extended-information
+ Specify the extended metadata information (page count, size, PDF icon)
+ that will be included in each citation.
+ -h heading
+ String to use instead of default title when creating a new htmlfile.
+ If updating an existing htmlfile, this option is ignored.
+ -i Use included citations
+ -k In labeled styles append to the label of each entry its BibTeX key.
+ -m macro file
+ Specify an additional macro file.
+ -n name
+ Highlight the specified author name in the output.
+ -r Sort in reverse chronological order.
+ -s style
+ Control style of bibliography:
+ (empty, plain, alpha, named, paragraph, unsort, or unsortlist).
+ -t Write timestamp to htmlfile.
+ -u Output a Unicode-coded document.
+ -v Report the version number.
+_EOF_
+ exit(1);
+}
+
+# Return the command needed to open a (perhaps compressed) file,
+# as well as the type of compression.
+sub openCommand {
+ local($path) = @_;
+ local($cmd);
+ local($cmp);
+
+command: {
+ ($path =~ m/\.Z$/ &&
+ ($cmd = "uncompress -c $path |", $cmp = "Compressed", last command));
+ ($path =~ m/\.g?z$/ &&
+ ($cmd = "gzip -d -c $path |", $cmp = "Gzipped", last command));
+ ($cmd = "<$path", $cmp = "", last command);
+ }
+
+ ($cmd, $cmp);
+}
+
+@paperTypes = ("PostScript", "PDF", "DVI", "DOI");
+
+sub PostScriptPageCount {
+ local($cmd) = @_;
+ local($pageCount);
+
+ #print "in PostScriptPageCount $cmd\n";
+
+ open(FILE, $cmd) || (warn "error opening $cmd: $!\n", return undef);
+
+ local($_);
+ local($/) = "\n";
+
+line:
+ while (<FILE>) {
+ last line if m/^%%EndComments/;
+ if (m/^%%Pages:\s*(\d+)/) {
+ $pageCount = $1 if ($1 > 0);
+ last line;
+ }
+ }
+ close(FILE);
+
+ $pageCount;
+}
+
+sub PDFPageCount {
+ return undef unless ($have_pdf_api);
+ my($file) = @_;
+ $file =~ s/^\<//;
+ # print "in PDFPageCount $file\n";
+ my($pdf);
+ eval {$pdf = PDF::API2->open($file)};
+ return undef if (defined $@ && $@ ne '');
+ return $pdf->pages;
+}
+
+sub DVIPageCount {
+ local($cmd) = @_;
+ local($pageCount);
+
+ #print "in DVIPageCount $cmd\n";
+
+ if ($cmd =~ m/^</) {
+ # Simple file.
+ $cmd = "dviselect : $cmd >/dev/null";
+ } else {
+ # Compressed file.
+ $cmd .= "dviselect : >/dev/null";
+ }
+
+ # Look at dviselect's stderr.
+ open(DVISELECT, "-|") || (open(STDERR, ">&STDOUT"), exec $cmd);
+
+ local($_);
+ local($/) = "\n";
+line:
+ while (<DVISELECT>) {
+ if (m/[Ww]rote (\d+) pages/) {
+ $pageCount = $1;
+ last line;
+ }
+ }
+ close(DVISELECT);
+
+ $pageCount;
+}
+
+# Make an intelligent link to a paper file.
+sub doPaperLinks {
+ local($file);
+ local($url);
+ local($paper, $ppaper);
+ local($cstr, $pstr, $sstr);
+
+papertype:
+ foreach $paper (@paperTypes) {
+
+ $ppaper = $paper unless defined($notype); # Paper type
+ $sstr = ""; # size string
+ $pstr = ""; # pages string
+ $cstr = ""; # compression type string
+
+ if (($url) = m/\<\!\-\- $paper:[\s\n]+(\S+)[\s\n]+\-\-\>/) {
+
+ # If $url looks like a file (doesn't begin with http://, ftp://,
+ # etc.), get more info.
+ if ($paper ne 'DOI' && $url !~ m/^[^\:\/]+\:\//) {
+ local($file) = $url;
+ local($path);
+ local($dir);
+ foreach $dir (@filedir) {
+ $path = join('/', $dir, $file);
+ if ( -f $path) {
+ if (defined $dirmap{$dir}) {
+ $url = join('/', $dirmap{$dir}, $file);
+ } else {
+ $url = $path;
+ }
+ last;
+ }
+ }
+
+ if (! -f $path) {
+ print STDERR "couldn't find $file\n";
+ next papertype;
+ }
+
+ local($opencmd);
+ local($size);
+ local($pageCountRoutine);
+ local($pageCount) = 0;
+
+ ($opencmd, $cstr) = &openCommand($path);
+
+ # Get size.
+ $size = -s _;
+ $sstr = ", $size bytes" unless(defined($nosize));
+
+ # Get page count.
+ $pageCountRoutine = $paper . "PageCount";
+ $pageCount = &$pageCountRoutine($opencmd);
+ $pstr = ", $pageCount pages" if (defined $pageCount && !defined $nopages);
+
+ # Get compression type.
+ $cstr = "$cstr " if ($cstr ne "");
+ undef $cstr if (defined $nocompression);
+ } elsif ($paper eq 'DOI' &&
+ (($url =~ m/^doi:(.*)/i) ||
+ ($url =~ m/^http:\/\/[\w.]+\/(.*)/i) ||
+ ($url =~ m/^(.*)$/))) {
+ # Convert the DOI URL into an HTTP link
+ $url = html_encode("http://dx.doi.org/$1");
+ $ppaper = "doi:" . html_encode($1) unless (defined($nodoi));
+ }
+
+ $ppaper = $typeicon{$paper} if (defined $typeicon{$paper});
+
+ #print STDERR "found $paper $file$pstr$sstr\n";
+
+ if ($nobrackets) {
+ s/\<\!\-\- $paper:[\s\n]+\S+[\s\n]+\-\-\>/<a href=\"$url\">${cstr}$ppaper<\/a>$pstr$sstr/;
+ } else {
+ s/\<\!\-\- $paper:[\s\n]+\S+[\s\n]+\-\-\>/(<a href=\"$url\">${cstr}$ppaper<\/a>$pstr$sstr)/;
+ }
+ }
+ }
+}
+
+# highlight_name(string)
+# Return name with Highlighted name if it was passed in as an option from the command line.
+#
+sub highlight_name {
+ local($name) = @_;
+ if (defined($highlighted_name) && $name =~ /$highlighted_name/) {
+ return "<strong>$name</strong>";
+ } else {
+ return $name;
+ }
+}
+
+# html_encode(string)
+# Protect character entities in string.
+sub html_encode {
+ local($_) = @_;
+
+ s/&/&amp;/g; # Must be first.
+ s/</&lt;/g;
+ s/>/&gt;/g;
+ s/"/&quot;/g;
+
+ $_;
+}
+
+# Convert $_ into an HTML entity representation
+sub html_ent {
+ # Accents.
+ s/\\i\b/i/g; # dotless i.
+ s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs; # acute accent \'{x}
+ s/\\\'([AEIOUaeiou])/&$1acute;/g; # acute accent \'x
+ s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs; # grave accent \`{x}
+ s/\\\`([AEIOUaeiou])/&$1grave;/g; # grave accent \`x
+ s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs; # umlaut \"{x}
+ s/\\\"([AEIOUaeiouy])/&$1uml;/g; # umlaut \"x
+ s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs; # tilde \~{x}
+ s/\\\~([ANOano])/&$1tilde;/g; # tilde \~x
+ s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs; # circumflex \^{x}
+ s/\\\^([AEIOUaeiou])/&$1circ;/g; # circumflex \^x
+ s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs; # cedilla \c{x}
+ # The following accents have no HTML equivalent.
+ # (This list is still not complete.)
+ s/\\u(\001\d+)\{(.)\1\}/$2/gs; # breve accent \u{x}
+ s/\\v(\001\d+)\{(.)\1\}/$2/gs; # hacek accent \v{x}
+ s/\\([lL])\b/$1/g; # slashed l
+ s/\\\=(\001\d+)\{(.)\1\}/$2/gs; # macron \={x}
+ s/\\\=(.)/$1/g; # macron accent \=x
+ s/\\\.(\001\d+)\{(.)\1\}/$2/gs; # dot \.{x}
+ s/\\\.(.)/$1/g; # dot accent \.x
+
+ # Other special characters.
+ s/\\([Oo])\b\s*/&$1slash;/g; # \[Oo] -> &[Oo]slash;
+ s/\\AA\b\s*/&Aring;/g; # \AA -> &Aring;
+ s/\\aa\b\s*/&aring;/g; # \aa -> &aring;
+ s/\\AE\b\s*/&AElig;/g; # \AE -> &AElig;
+ s/\\ae\b\s*/&aelig;/g; # \ae -> &aelig;
+ s/\\ss\b\s*/&szlig;/g; # \ss -> &szlig;
+ s/\\S\b\s*/&sect;/g; # \S -> &sect;
+ s/\\P\b\s*/&para;/g; # \P -> &para;
+ s/\\pounds\b\s*/&pound;/g; # \pounds -> &pound;
+ s/\?\`/&iquest;/g; # ?` -> &iquest;
+ s/\!\`/&iexcl;/g; # !` -> &iexcl;
+
+ # Other special characters.
+ # Try to be careful to not change the dashes in HTML comments
+ # (<!-- comment -->) to &ndash;s.
+ s/\-\-\-/&mdash;/g; # --- -> &mdash;
+ s/([^\!])\-\-([^\>])/$1&ndash;$2/g; # -- -> &ndash;
+ #s/\-\-\-/\227/g; # --- -> &mdash;
+ #s/([^\!])\-\-([^\>])/$1\226$2/g; # -- -> &ndash;
+
+ # Upper and lower case greek
+ s/\\([aA]lpha)\b/&$1;/g;
+ s/\\([bB]eta)\b/&$1;/g;
+ s/\\([gG]amma)\b/&$1;/g;
+ s/\\([dD]elta)\b/&$1;/g;
+ s/\\varepsilon\b/&epsilon;/g;
+ s/\\([eE]psilon)\b/&$1;/g;
+ s/\\([zZ]eta)\b/&$1;/g;
+ s/\\([eE]ta)\b/&$1;/g;
+ s/\\([tT]heta)\b/&$1;/g;
+ s/\\vartheta\b/&theta;/g;
+ s/\\([iI]ota)\b/&$1;/g;
+ s/\\([kK]appa)\b/&$1;/g;
+ s/\\([lL]ambda)\b/&$1;/g;
+ s/\\([mM]u)\b/&$1;/g;
+ s/\\([nN]u)\b/&$1;/g;
+ s/\\([xX]i)\b/&$1;/g;
+ s/\\([oO]micron)\b/&$1;/g;
+ s/\\([pP]i)\b/&$1;/g;
+ s/\\varpi\b/&pi;/g;
+ s/\\([rR]ho)\b/&$1;/g;
+ s/\\varrho\b/&rho;/g;
+ s/\\([sS]igma)\b/&$1;/g;
+ s/\\varsigma\b/&sigmaf;/g;
+ s/\\([tT]au)\b/&$1;/g;
+ s/\\([uU]psilon)\b/&$1;/g;
+ s/\\([pP]hi)\b/&$1;/g;
+ s/\\varphi\b/&phi;/g;
+ s/\\([cC]hi)\b/&$1;/g;
+ s/\\([pP]si)\b/&$1;/g;
+ s/\\([oO]mega)\b/&$1;/g;
+}
+
+# Convert $_ into a UTF-8 character
+sub utf_ent {
+ # Accents.
+ s/\\i\b/ı/g; # dotless i.
+
+ # acute accent \'{x}
+ s/\\\'(\001\d+)\{A\1\}/Ã/gs;
+ s/\\\'(\001\d+)\{C\1\}/Ć/gs;
+ s/\\\'(\001\d+)\{E\1\}/É/gs;
+ s/\\\'(\001\d+)\{I\1\}/Ã/gs;
+ s/\\\'(\001\d+)\{L\1\}/Ĺ/gs;
+ s/\\\'(\001\d+)\{N\1\}/Ń/gs;
+ s/\\\'(\001\d+)\{O\1\}/Ó/gs;
+ s/\\\'(\001\d+)\{R\1\}/Å”/gs;
+ s/\\\'(\001\d+)\{S\1\}/Åš/gs;
+ s/\\\'(\001\d+)\{U\1\}/Ú/gs;
+ s/\\\'(\001\d+)\{Y\1\}/Ã/gs;
+ s/\\\'(\001\d+)\{Z\1\}/Ź/gs;
+ s/\\\'(\001\d+)\{a\1\}/á/gs;
+ s/\\\'(\001\d+)\{c\1\}/ć/gs;
+ s/\\\'(\001\d+)\{e\1\}/é/gs;
+ s/\\\'(\001\d+)\{ı\1\}/í/gs;
+ s/\\\'(\001\d+)\{i\1\}/í/gs;
+ s/\\\'(\001\d+)\{l\1\}/ĺ/gs;
+ s/\\\'(\001\d+)\{n\1\}/Å„/gs;
+ s/\\\'(\001\d+)\{o\1\}/ó/gs;
+ s/\\\'(\001\d+)\{r\1\}/Å•/gs;
+ s/\\\'(\001\d+)\{s\1\}/Å›/gs;
+ s/\\\'(\001\d+)\{u\1\}/ú/gs;
+ s/\\\'(\001\d+)\{y\1\}/ý/gs;
+ s/\\\'(\001\d+)\{z\1\}/ź/gs;
+
+ # acute accent \'x
+ s/\\\'A/Ã/g;
+ s/\\\'C/Ć/g;
+ s/\\\'E/É/g;
+ s/\\\'I/Ã/g;
+ s/\\\'L/Ĺ/g;
+ s/\\\'N/Ń/g;
+ s/\\\'O/Ó/g;
+ s/\\\'R/Å”/g;
+ s/\\\'S/Åš/g;
+ s/\\\'U/Ù/g;
+ s/\\\'Y/Ã/g;
+ s/\\\'Z/Ź/g;
+ s/\\\'a/á/g;
+ s/\\\'c/ć/g;
+ s/\\\'e/é/g;
+ s/\\\'i/í/g;
+ s/\\\'ı/í/g;
+ s/\\\'l/ĺ/g;
+ s/\\\'n/Å„/g;
+ s/\\\'o/ó/g;
+ s/\\\'r/Å•/g;
+ s/\\\'s/Å›/g;
+ s/\\\'u/ú/g;
+ s/\\\'y/ý/g;
+ s/\\\'z/ź/g;
+
+ # grave accent \`{x}
+ s/\\\`(\001\d+)\{A\1\}/À/gs;
+ s/\\\`(\001\d+)\{E\1\}/È/gs;
+ s/\\\`(\001\d+)\{I\1\}/Ì/gs;
+ s/\\\`(\001\d+)\{O\1\}/Ã’/gs;
+ s/\\\`(\001\d+)\{U\1\}/Ù/gs;
+ s/\\\`(\001\d+)\{a\1\}/à/gs;
+ s/\\\`(\001\d+)\{e\1\}/è/gs;
+ s/\\\`(\001\d+)\{i\1\}/ì/gs;
+ s/\\\`(\001\d+)\{o\1\}/ò/gs;
+ s/\\\`(\001\d+)\{u\1\}/ù/gs;
+
+ # grave accent \`x
+ s/\\\`A/À/g;
+ s/\\\`E/È/g;
+ s/\\\`I/Ì/g;
+ s/\\\`O/Ã’/g;
+ s/\\\`U/Ù/g;
+ s/\\\`a/à/g;
+ s/\\\`e/è/g;
+ s/\\\`i/ì/g;
+ s/\\\`o/ò/g;
+ s/\\\`u/ù/g;
+
+ # umlaut \"{x}
+ s/\\\"(\001\d+)\{A\1\}/Ä/gs;
+ s/\\\"(\001\d+)\{E\1\}/Ë/gs;
+ s/\\\"(\001\d+)\{I\1\}/Ã/gs;
+ s/\\\"(\001\d+)\{O\1\}/Ö/gs;
+ s/\\\"(\001\d+)\{U\1\}/Ü/gs;
+ s/\\\"(\001\d+)\{Y\1\}/Ÿ/gs;
+ s/\\\"(\001\d+)\{a\1\}/ä/gs;
+ s/\\\"(\001\d+)\{e\1\}/ë/gs;
+ s/\\\"(\001\d+)\{i\1\}/ï/gs;
+ s/\\\"(\001\d+)\{o\1\}/ö/gs;
+ s/\\\"(\001\d+)\{u\1\}/ü/gs;
+ s/\\\"(\001\d+)\{y\1\}/ÿ/gs;
+
+ # umlaut \"x
+ s/\\\"A/Ä/g;
+ s/\\\"E/Ë/g;
+ s/\\\"I/Ã/g;
+ s/\\\"O/Ö/g;
+ s/\\\"U/Ü/g;
+ s/\\\"Y/Ÿ/g;
+ s/\\\"a/ä/g;
+ s/\\\"e/ë/g;
+ s/\\\"i/ï/g;
+ s/\\\"o/ö/g;
+ s/\\\"u/ü/g;
+ s/\\\"y/ÿ/g;
+
+ # tilde \~{x}
+ s/\\\~(\001\d+)\{A\1\}/Ã/gs;
+ s/\\\~(\001\d+)\{N\1\}/Ñ/gs;
+ s/\\\~(\001\d+)\{O\1\}/Õ/gs;
+ s/\\\~(\001\d+)\{a\1\}/ã/gs;
+ s/\\\~(\001\d+)\{n\1\}/ñ/gs;
+ s/\\\~(\001\d+)\{o\1\}/õ/gs;
+
+ # tilde \~x
+ s/\\\~A/Ã/g;
+ s/\\\~N/Ñ/g;
+ s/\\\~O/Õ/g;
+ s/\\\~a/ã/g;
+ s/\\\~n/ñ/g;
+ s/\\\~O/õ/g;
+
+ # circumflex \^{x}
+ s/\\\^(\001\d+)\{A\1\}/Â/gs;
+ s/\\\^(\001\d+)\{E\1\}/Ê/gs;
+ s/\\\^(\001\d+)\{G\1\}/Ĝ/gs;
+ s/\\\^(\001\d+)\{H\1\}/Ĥ/gs;
+ s/\\\^(\001\d+)\{I\1\}/ÃŽ/gs;
+ s/\\\^(\001\d+)\{J\1\}/Ä´/gs;
+ s/\\\^(\001\d+)\{O\1\}/Ô/gs;
+ s/\\\^(\001\d+)\{U\1\}/Û/gs;
+ s/\\\^(\001\d+)\{W\1\}/Å´/gs;
+ s/\\\^(\001\d+)\{Y\1\}/Ŷ/gs;
+ s/\\\^(\001\d+)\{a\1\}/â/gs;
+ s/\\\^(\001\d+)\{e\1\}/ê/gs;
+ s/\\\^(\001\d+)\{g\1\}/Ä/gs;
+ s/\\\^(\001\d+)\{h\1\}/Ä¥/gs;
+ s/\\\^(\001\d+)\{i\1\}/î/gs;
+ s/\\\^(\001\d+)\{j\1\}/ĵ/gs;
+ s/\\\^(\001\d+)\{o\1\}/ô/gs;
+ s/\\\^(\001\d+)\{u\1\}/û/gs;
+ s/\\\^(\001\d+)\{w\1\}/ŵ/gs;
+ s/\\\^(\001\d+)\{y\1\}/Å·/gs;
+
+ # circumflex \^x
+ s/\\\^A/Â/g;
+ s/\\\^E/Ê/g;
+ s/\\\^G/Ĝ/g;
+ s/\\\^H/Ĥ/g;
+ s/\\\^I/ÃŽ/g;
+ s/\\\^J/Ä´/g;
+ s/\\\^O/Ô/g;
+ s/\\\^U/Û/g;
+ s/\\\^W/Å´/g;
+ s/\\\^Y/Ŷ/g;
+ s/\\\^a/â/g;
+ s/\\\^e/ê/g;
+ s/\\\^g/Ä/g;
+ s/\\\^h/Ä¥/g;
+ s/\\\^i/î/g;
+ s/\\\^J/ĵ/g;
+ s/\\\^o/ô/g;
+ s/\\\^u/û/g;
+ s/\\\^w/ŵ/g;
+ s/\\\^y/Å·/g;
+
+ # cedilla \c{x}
+ s/\\c(\001\d+)\{C\1\}/Ç/gs;
+ s/\\c(\001\d+)\{c\1\}/ç/gs;
+ s/\\c(\001\d+)\{K\1\}/Ķ/gs;
+ s/\\c(\001\d+)\{k\1\}/Ä·/gs;
+ s/\\c(\001\d+)\{L\1\}/Ä»/gs;
+ s/\\c(\001\d+)\{l\1\}/ļ/gs;
+ s/\\c(\001\d+)\{N\1\}/Å…/gs;
+ s/\\c(\001\d+)\{n\1\}/ņ/gs;
+ s/\\c(\001\d+)\{N\1\}/Å–/gs;
+ s/\\c(\001\d+)\{n\1\}/Å—/gs;
+
+ # double acute accent \H{x}
+ s/\\H(\001\d+)\{O\1\}/Å/gs;
+ s/\\H(\001\d+)\{U\1\}/Å°/gs;
+ s/\\H(\001\d+)\{o\1\}/Å‘/gs;
+ s/\\H(\001\d+)\{u\1\}/ű/gs;
+
+ # breve accent \u{x}
+ s/\\u(\001\d+)\{A\1\}/Ä‚/gs;
+ s/\\u(\001\d+)\{E\1\}/Ä”/gs;
+ s/\\u(\001\d+)\{G\1\}/Äž/gs;
+ s/\\u(\001\d+)\{I\1\}/Ĭ/gs;
+ s/\\u(\001\d+)\{O\1\}/ÅŽ/gs;
+ s/\\u(\001\d+)\{U\1\}/Ŭ/gs;
+ s/\\u(\001\d+)\{a\1\}/ă/gs;
+ s/\\u(\001\d+)\{e\1\}/Ä•/gs;
+ s/\\u(\001\d+)\{g\1\}/ÄŸ/gs;
+ s/\\u(\001\d+)\{i\1\}/Ä­/gs;
+ s/\\u(\001\d+)\{o\1\}/Å/gs;
+ s/\\u(\001\d+)\{u\1\}/Å­/gs;
+
+ # hacek/caron? accent \v{x}
+ s/\\v(\001\d+)\{C\1\}/Č/gs;
+ s/\\v(\001\d+)\{D\1\}/ÄŽ/gs;
+ s/\\v(\001\d+)\{E\1\}/Äš/gs;
+ s/\\v(\001\d+)\{L\1\}/Ľ/gs;
+ s/\\v(\001\d+)\{N\1\}/Ň/gs;
+ s/\\v(\001\d+)\{R\1\}/Ř/gs;
+ s/\\v(\001\d+)\{S\1\}/Å /gs;
+ s/\\v(\001\d+)\{T\1\}/Ť/gs;
+ s/\\v(\001\d+)\{Z\1\}/Ž/gs;
+ s/\\v(\001\d+)\{c\1\}/Ä/gs;
+ s/\\v(\001\d+)\{d\1\}/Ä/gs;
+ s/\\v(\001\d+)\{e\1\}/Ä›/gs;
+ s/\\v(\001\d+)\{l\1\}/ľ/gs;
+ s/\\v(\001\d+)\{n\1\}/ň/gs;
+ s/\\v(\001\d+)\{r\1\}/Å™/gs;
+ s/\\v(\001\d+)\{s\1\}/Å¡/gs;
+ s/\\v(\001\d+)\{t\1\}/Å¥/gs;
+ s/\\v(\001\d+)\{z\1\}/ž/gs;
+
+ # macron \={x}
+ s/\\\=(\001\d+)\{A\1\}/Ä€/gs;
+ s/\\\=(\001\d+)\{E\1\}/Ä’/gs;
+ s/\\\=(\001\d+)\{O\1\}/Ō/gs;
+ s/\\\=(\001\d+)\{U\1\}/Ū/gs;
+ s/\\\=(\001\d+)\{a\1\}/Ä/gs;
+ s/\\\=(\001\d+)\{e\1\}/Ä“/gs;
+ s/\\\=(\001\d+)\{o\1\}/Å/gs;
+ s/\\\=(\001\d+)\{u\1\}/Å«/gs;
+
+ # macron \=x
+ s/\\\=A/Ä€/g;
+ s/\\\=E/Ä’/g;
+ s/\\\=O/Ō/g;
+ s/\\\=U/Ū/g;
+ s/\\\=a/Ä/g;
+ s/\\\=e/Ä“/g;
+ s/\\\=o/Å/g;
+ s/\\\=u/Å«/g;
+
+ # dot \.{x}
+ s/\\\.(\001\d+)\{G\1\}/Ä /gs;
+ s/\\\.(\001\d+)\{L\1\}/Ä¿/gs;
+ s/\\\.(\001\d+)\{Z\1\}/Å»/gs;
+ s/\\\.(\001\d+)\{g\1\}/Ä¡/gs;
+ s/\\\.(\001\d+)\{l\1\}/Å€/gs;
+ s/\\\.(\001\d+)\{z\1\}/ż/gs;
+
+ # dot \.x
+ s/\\\.G/Ä /g;
+ s/\\\.L/Ä¿/g;
+ s/\\\.Z/Å»/g;
+ s/\\\.g/Ä¡/g;
+ s/\\\.l/Å€/g;
+ s/\\\.z/ż/g;
+
+
+ # slashed l
+ s/\\l\b/Å‚/g;
+ s/\\L\b/Å/g;
+
+ # krouzek \accent23x or \accent'27
+ s/\{\\accent2[37]\s*u\}/ů/g;
+ s/\\accent2[37]\s*u/ů/g;
+
+ # Other special characters.
+ s/\\O\b\s*/Ø/g;
+ s/\\o\b\s*/ø/g;
+ s/\\AA\b\s*/Ã…/g;
+ s/\\aa\b\s*/Ã¥/g;
+ s/\\AE\b\s*/Æ/g;
+ s/\\ae\b\s*/æ/g;
+ s/\\OE\b\s*/Å’/g;
+ s/\\oe\b\s*/Å“/g;
+ s/\\ss\b\s*/ß/g;
+ s/\\S\b\s*/§/g;
+ s/\\P\b\s*/¶/g;
+ s/\\pounds\b\s*/£/g;
+ s/\?\`/¿/g;
+ s/\!\`/¡/g;
+
+ # en and em dashes
+ # Try to be careful to not change the dashes in HTML comments
+ # (<!-- comment -->) to &ndash;s.
+ s/\-\-\-/—/g; # --- -> &#x2014
+ s/([^\!])\-\-([^\>])/$1–$2/g; # -- -> &#x2013
+
+ # Upper case Greek
+ s/\\Alpha\b/Α/g;
+ s/\\Beta\b/Î’/g;
+ s/\\Gamma\b/Γ/g;
+ s/\\Delta\b/Δ/g;
+ s/\\Epsilon\b/Ε/g;
+ s/\\Zeta\b/Ζ/g;
+ s/\\Eta\b/Η/g;
+ s/\\Theta\b/Θ/g;
+ s/\\Iota\b/Ι/g;
+ s/\\Kappa\b/Κ/g;
+ s/\\Lambda\b/Λ/g;
+ s/\\Mu\b/Μ/g;
+ s/\\Nu\b/Î/g;
+ s/\\Xi\b/Ξ/g;
+ s/\\Omicron\b/Ο/g;
+ s/\\Pi\b/Π/g;
+ s/\\Rho\b/Ρ/g;
+ s/\\Sigma\b/Σ/g;
+ s/\\Tau\b/Τ/g;
+ s/\\Upsilon\b/Î¥/g;
+ s/\\Phi\b/Φ/g;
+ s/\\Chi\b/Χ/g;
+ s/\\Psi\b/Ψ/g;
+ s/\\Omega\b/Ω/g;
+
+ # Lower case Greek
+ s/\\alpha\b/α/g;
+ s/\\beta\b/β/g;
+ s/\\gamma\b/γ/g;
+ s/\\delta\b/δ/g;
+ s/\\varepsilon\b/ε/g;
+ s/\\epsilon\b/ε/g;
+ s/\\zeta\b/ζ/g;
+ s/\\eta\b/η/g;
+ s/\\theta\b/θ/g;
+ s/\\vartheta\b/θ/g;
+ s/\\iota\b/ι/g;
+ s/\\kappa\b/κ/g;
+ s/\\lambda\b/λ/g;
+ s/\\mu\b/μ/g;
+ s/\\nu\b/ν/g;
+ s/\\xi\b/ξ/g;
+ s/\\omicron\b/ο/g;
+ s/\\pi\b/Ï€/g;
+ s/\\varpi\b/Ï€/g;
+ s/\\rho\b/Ï/g;
+ s/\\varrho\b/Ï/g;
+ s/\\sigma\b/σ/g;
+ s/\\varsigma\b/Ï‚/g;
+ s/\\tau\b/Ï„/g;
+ s/\\upsilon\b/Ï…/g;
+ s/\\phi\b/φ/g;
+ s/\\varphi\b/φ/g;
+ s/\\chi\b/χ/g;
+ s/\\psi\b/ψ/g;
+ s/\\omega\b/ω/g;
+}
+
+
+# Prevent "identifier used only once" warnings.
+$opt_a = $opt_b = $opt_c = $opt_D = $opt_d = $opt_e = $opt_h = $opt_m =
+$opt_n = $opt_r = $opt_i = $opt_k = $opt_s = $opt_t = $opt_v = $opt_u = undef;
+
+$macrofile = '';
+
+$command_line = &html_encode(join(' ', $0, @ARGV));
+
+getopts("ab:cd:D:e:h:ikm:n:rs:tuv") || &usage;
+
+if (defined($opt_n)) {
+ $highlighted_name = $opt_n;
+ $highlighted_name =~ s/\s/[\\s~]+/;
+}
+
+if (defined($opt_v)) {
+ print "$version\n";
+ exit 0;
+}
+
+&usage if (($#ARGV < 0) || ($#ARGV > 1));
+
+if ($ARGV[0] =~ m/\.bib$/) {
+ $bibfile = $ARGV[0];
+ $bibfile =~ s/\.bib$//;
+ $delimiter = $bibfile;
+} elsif ($ARGV[0] =~ m/\.aux$/) {
+ if ($opt_i) {
+ print STDERR "source file must be a bibliography (.bib) file when run with the -i switch \n";
+ &usage;
+ }
+ $citefile = $ARGV[0];
+ $citefile =~ s/\.aux$//;
+ $delimiter = $citefile;
+} else {
+ print STDERR "Unknown file extension on $ARGV[0]\n";
+ &usage;
+}
+
+$htmlfile = $ARGV[1] if ($#ARGV == 1);
+
+$delimiter = $opt_d if (defined($opt_d));
+$title = (defined($opt_h) ? $opt_h : "Bibliography generated from $ARGV[0]");
+$macrofile = "$opt_m," if (defined($opt_m));
+
+$opt_s = 'empty' if (! defined $opt_s);
+style: {
+ ($opt_s eq 'empty') &&
+ ($bstfile = "html-n",
+ $label_style = $LABEL_PLAIN,
+ last style);
+ ($opt_s eq 'plain') &&
+ ($bstfile = "html-n",
+ $label_style = $LABEL_NUMBERED,
+ last style);
+ ($opt_s eq 'alpha') &&
+ ($bstfile = "html-a",
+ $label_style = $LABEL_DEFAULT,
+ last style);
+ ($opt_s eq 'named') &&
+ ($bstfile = "html-n",
+ $label_style = $LABEL_DEFAULT,
+ last style);
+ ($opt_s eq 'paragraph') &&
+ ($bstfile = "html-n",
+ $label_style = $LABEL_PARAGRAPH,
+ last style);
+ ($opt_s eq 'unsort') &&
+ ($bstfile = "html-u",
+ $label_style = $LABEL_NUMBERED,
+ last style);
+ ($opt_s eq 'unsortlist') &&
+ ($bstfile = "html-u",
+ $label_style = $LABEL_PLAIN,
+ last style);
+ ($opt_s =~ s/\.bst$//) &&
+ ($bstfile = $opt_s,
+ # label-style will be defined in .bst file.
+ last style);
+ print STDERR "Unknown style: $_\n";
+ &usage;
+}
+
+if ($bstfile eq "html-u" && ($opt_r || $opt_c)) {
+ print STDERR "Unsorted styles do not support a sort specification\n";
+ exit(1);
+}
+
+if ($opt_k && !($label_style == $LABEL_NUMBERED || $label_style == $LABEL_DEFAULT)) {
+ print STDERR "The specified style does not support the display of BibTeX keys\n";
+ exit(1);
+}
+
+
+$bstfile .= "c" if (defined ($opt_c));
+$bstfile .= "r" if (defined ($opt_r));
+$bstfile .= "a" if (defined ($opt_a));
+
+# Extended information is specified as a sequence of
+# (PostScript|PDF|DVI|DOI):icon or
+# (notype|nosize|nopages|nocompression|nodoi|nobrackets)
+# Set correspondingly the associative array %typeicon and the no* variables
+# Example usage:
+# perl bib2xhtml -e 'nosize,nopages,PDF:<img src="pdficon_small.gif" alt="PDF" border="0" />' example.bib >example.html
+undef $nopages;
+undef $nosize;
+undef $nodoi;
+undef $notype;
+undef $nocompression;
+undef $nobrackets;
+
+if (defined($opt_e)) {
+ my(@opts) = split(/,/, $opt_e);
+ for $opt (@opts) {
+ if ($opt =~ m/(PostScript|PDF|DVI|DOI):(.*)/) {
+ $typeicon{$1} = $2;
+ } elsif ($opt =~ m/(notype|nosize|nopages|nocompression|nodoi|nobrackets)/) {
+ eval "\$$1 = 1";
+ } else {
+ print STDERR qq{Invalid extended information specification: $opt
+This can be a comma-separated list of the following specifications:
+PostScript|PDF|DVI|DOI:new-text (e.g. PDF file icon)
+notype|nosize|nopages|nocompression|nodoi|nobrackets
+};
+ exit 1;
+ }
+ }
+}
+
+# PostScript and PDF files are assumed to be in same directory
+# as the target HTML file.
+if (defined($htmlfile) && ($htmlfile =~ m+(^.*)/+)) {
+ push @filedir, $1;
+} else {
+ push @filedir, "."
+}
+if (defined $opt_D) {
+ local($dir, $url);
+ foreach $dir (split(/\,/, $opt_D)) {
+ $url = $dir;
+ if ($dir =~ s/\@(.*)$//) { $url = $1; }
+ push @filedir, $dir;
+ $dirmap{$dir} = $url;
+ }
+}
+
+umask(077);
+
+open(HTMLFILE, (defined($htmlfile) ? ">$htmlfile$$" : ">&STDOUT"));
+if (defined($htmlfile) && open(OHTMLFILE, "$htmlfile")) {
+ $mode = (stat OHTMLFILE)[2] & 0xfff;
+ $updating = 1;
+} else {
+ $mode = 0644;
+ $updating = 0;
+
+ # An existing HTML file does not exist, so output some boilerplate.
+ if ($opt_u) {
+ $enc = 'UTF-8';
+ } else {
+ $enc = 'US-ASCII';
+ }
+ print HTMLFILE
+qq{<?xml version="1.0" encoding="$enc"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>$title</title>
+<meta http-equiv="Content-type" content="text/html; charset=$enc" />} . q{
+<meta name="Generator" content="$Id: bib2xhtml 2.35 2010/12/08 19:38:16 dds Exp $" />
+</head>
+<body>
+}
+}
+
+$beginstring = "<!-- BEGIN CITATIONS $delimiter -->";
+$endstring = "<!-- END CITATIONS $delimiter -->";
+
+@citations = ();
+
+if ($opt_i && $updating) {
+ loop:
+ while (<OHTMLFILE>) {
+ print HTMLFILE;
+ last loop if m/^$beginstring$/;
+ }
+ loop:
+ while (<OHTMLFILE>) {
+ print HTMLFILE;
+ last loop if m/^$endstring$/;
+ push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
+ }
+ push(@citations, "\\bibdata{$macrofile$bibfile}");
+}
+
+# Create an .aux file for bibtex to read.
+
+$auxfile = "bib$$";
+push(@tmpfiles, "$auxfile.aux");
+
+open(AUXFILE, ">$auxfile" . ".aux");
+
+print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
+
+if (defined($citefile)) {
+ $citefile .= ".aux";
+ open(CITEFILE, "<$citefile") || die "error opening $citefile: $!\n";
+ while (<CITEFILE>) {
+ print AUXFILE $_ if (m/^\\(citation|bibdata){/);
+ }
+ close(CITEFILE);
+} elsif (@citations) {
+ foreach $citation (@citations) {
+ print AUXFILE "$citation\n";
+ }
+} else {
+ print AUXFILE "\\citation{*}\n\\bibdata{$macrofile$bibfile}\n";
+}
+
+close(AUXFILE);
+
+
+# run bibtex, redirecting bibtex's output from STDOUT to STDERR.
+
+push(@tmpfiles, "$auxfile.blg");
+push(@tmpfiles, "$auxfile.bbl");
+
+#Flush HTMLFILE to avoid duplicate buffer writes after the fork
+select(HTMLFILE);
+$| = 1; $| = 0;
+select(STDOUT);
+
+# We attempt to fork in order to redirect bibtex's stdout to stderr.
+# This is needed when bib2xhtml is generating its output on the
+# standard output.
+# The shell redirection syntax used in the system() alternative
+# is by no means portable.
+eval { fork || (open(STDOUT, ">&STDERR"),
+ # Handle leakage in Win32 prevents the final rename()
+ close(HTMLFILE),
+ close(OHTMLFILE),
+ exec('bibtex', (split(/\s+/, ($opt_b ? $opt_b : "")), $auxfile)));
+ wait; };
+# fork is not implemented on some non-Unix platforms.
+if ($@) {
+ # The fork failed (perhaps not implemented on this system).
+ system("bibtex $opt_b $auxfile 1>&2");
+}
+
+$beginstring = "<!-- BEGIN BIBLIOGRAPHY $delimiter -->";
+$endstring = "<!-- END BIBLIOGRAPHY $delimiter -->";
+
+if ($updating) {
+loop:
+ while (<OHTMLFILE>) {
+ last loop if m/^$beginstring$/;
+ print HTMLFILE;
+ }
+loop:
+ while (<OHTMLFILE>) {
+ last loop if m/^$endstring$/;
+ }
+}
+
+print HTMLFILE "$beginstring\n";
+print HTMLFILE <<EOF;
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: $command_line -->
+EOF
+# Now we make two passes over the .bbl file. In the first pass, we
+# just collect the {cite, label} pairs, which we will use later for
+# crossrefs.
+
+$t = $auxfile . ".bbl";
+
+$/ = "";
+
+# Make a first pass through the .bbl file, collecting citation/label pairs.
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+ # Check for definitions at start of .bbl file.
+ if (($nentry == 0) && (m/^#/)) {
+ if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
+ $label_style = $label_styles{$1};
+ if (! defined $label_style) {
+ print STDERR "label style unknown: \n";
+ next loop;
+ }
+ }
+ next loop;
+ }
+ $nentry++;
+ ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
+ $blabel = "$nentry" if ($label_style == $LABEL_NUMBERED);
+ $bibcite{$bcite} = $blabel;
+}
+close(BBLFILE);
+
+$label_style = $LABEL_DEFAULT if (! defined $label_style);
+$list_start = $list_start[$label_style];
+$list_end = $list_end[$label_style];
+
+if (defined($opt_t)) {
+ print HTMLFILE "$nentry references, last updated " . &ctime(time) . "<p />\n";
+}
+
+print HTMLFILE "<$list_start>\n\n";
+
+#foreach $key (sort (keys(%bibcite))) {
+# print "$key : $bibcite{$key}\n";
+#}
+
+open(BBLFILE, "<$t") || die "error opening $t: $!\n";
+$nentry = 0;
+loop:
+while (<BBLFILE>) {
+ # Skip definitions at start of .bbl file.
+ next loop if (($nentry == 0) && (m/^#/));
+
+ $nentry++;
+
+ # Protect \{, \}, and \$, and then assign matching {} pairs a unique ID.
+ s/\\\{/\002/g;
+ s/\\\}/\003/g;
+ s/\\\$/\004/g;
+ {
+ local ($c, $l, $z) = (0, 0, ());
+ s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
+ }
+
+ # bibtex sometimes breaks long lines by inserting "%\n". We remove
+ # that because it might accidently break the line in the middle
+ # of a URL. We don't need to deal with TeX comments in general
+ # because bibtex seems to munge them up anyway, so there shouldn't
+ # be any in the bibliography file.
+ s/\%\n//g;
+
+ # bibtex's add.period$ knows how to avoid adding extra periods
+ # when a block already ends in a period. bib2xhtml's modifications
+ # of bibtex's style files break that. We fix it here.
+ s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
+
+ # Adjust beginning of entry based on bibliography style.
+ if ($label_style == $LABEL_PLAIN) {
+ s:<dt>(<a name=\"[^\"]*\">)\[[^\]]*\](</a>)</dt><dd>:<li>$1$2:;
+ s:</dd>:</li>:;
+
+ # Attempt to fix up empty <a name=...></a> tag, which some browsers
+ # don't handle properly (even though it *is* legal HTML).
+ # First try to combine a <a name=...></a> with a following <A ".
+ s:(<a name=\"[^\"]*\")></a><a\b:$1:
+ # If that doesn't work, try to swallow following word.
+ or s:(<a name=\"[^\"]*\">)</a>([\w]+):$1$2<\/a>:;
+ } elsif ($label_style == $LABEL_PARAGRAPH) {
+ s:<dt>(<a name=\"[^\"]*\">)\[[^\]]*\](</a>)</dt><dd>:<p>$1$2:;
+ s:</dd>:</p>:;
+
+ # Attempt to fix up empty <a name=...></a> tag, which some browsers
+ # don't handle properly (even though it *is* legal HTML).
+ # First try to combine a <a name=...></a> with a following <A ".
+ s:(<a name=\"[^\"]*\")></a><a\b:$1:
+ # If that doesn't work, try to swallow following word.
+ or s:(<a name=\"[^\"]*\">)</a>([\w]+):$1$2<\/a>:;
+ } elsif ($label_style == $LABEL_NUMBERED) {
+ s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
+ }
+
+ # Append the key name, if asked so
+ if ($opt_k && ($label_style == $LABEL_NUMBERED || $label_style == $LABEL_DEFAULT)) {
+ # $1 $2 $3 $4 $5
+ s:(<dt><a name=\")([^\"]*)(\">\[)([^\]]*)(\]</a></dt><dd>):$1$2$3$4 --- $2$5:;
+ }
+
+ # Attempt to fix up crossrefs.
+ while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
+ $old = $1;
+ $cmd = $2;
+ $doxref = defined($3);
+ $bcite = $5;
+ if (! defined $bibcite{$bcite}) {
+ $blabel = " [" . $bcite . "]";
+ } elsif ($doxref) {
+ $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
+ } else {
+ $blabel = " [" . $bibcite{$bcite} . "]";
+ }
+ $old =~ s/(\W)/\\$1/g;
+ s/\s*$old/$blabel/g;
+ }
+ # In some styles crossrefs become something like
+ # "In Doe and Roe [Doe and Roe, 1995]." Change this to
+ # "In [Doe and Roe, 1995]." to remove the redundancy.
+ s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
+
+ # Handle the latex2html commands \htmladdnormallink{text}{url}
+ # and \htmladdnormallinkfoot{text}{url}.
+ s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
+
+ s/\&amp;/\005/g; # Protect original &amp; sequences
+ s/\\?&/&amp;/g; # \& -> &amp; and & -> &amp;
+ s/\005/&amp;/g; # Restore original &amp; sequences
+
+ if ($opt_u) {
+ utf_ent();
+ } else {
+ html_ent();
+ }
+
+ # Handle \char123 -> &123;.
+ while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
+ $o = $r = $1;
+ if ($r =~ s/^\'//) {
+ $r = oct($r);
+ } elsif ($r =~ s/^\"//) {
+ $r = hex($r);
+ }
+ s/\\char$o\s*/&#$r;/g;
+ }
+
+ s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g; # {\etalchar{x}} -> x
+
+ s/\\par\b/<p \/>/g;
+
+ s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs; #\url{text} -> <a href"text">text</a>
+ s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs; #\href{text} -> <a href"link">text</a>
+ s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs; #\href{text} -> <a href"text">text</a>
+
+
+ # There's no way to easily handle \rm and \textrm because
+ # HTML has no tag to convert back to plain text. Since it's very
+ # difficult to do the right thing, we do the wrong thing, and just
+ # remove them.
+ s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs; # {\rm text} -> text
+ s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs; # \textrm{text} -> text
+
+ # This doesn't create correct HTML, because HTML doesn't allow nested
+ # character style tags. Oh well.
+ s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs; # {\em text} -> <EM>text</EM>
+ s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs; # {\it text} -> <I>text</I>
+ s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs; # {\bf text} -> <B>text</B>
+ s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs; # {\tt text} -> <TT>text</TT>
+
+ s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs; # \emph{text} -> <EM>text</EM>
+ s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs; # \textit{text} -> <I>text</I>
+ s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs; # \textbf{text} -> <B>text</B>
+ s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;# \textit{text} -> <TT>text</TT>
+
+ s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs; # \mathrm{text} -> text
+ s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs; # \mathnormal{text} -> text
+ s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs; # \mathsf{text} -> text
+ s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs; # \mathbf{text} -> <B>text</B>
+ s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;# \mathcal{text} -> <I>text</I>
+ s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs; # \mathit{text} -> <I>text</I>
+ s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;# \mathtt{text} -> <TT>text</TT>
+
+ # Custom highlighting for the -n option.
+ s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/&highlight_name($2)/ges;
+
+ # {\boldmath $mathstuff$} -> <B>mathstuff</B>
+# s/(\001\d+)\{\s*\\boldmath ?([^A-Za-z\{\}][^\{\}]*)\}/<b>$1<\/b>/gs;
+
+
+sub domath {
+ local($t) = @_;
+ $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs; # ^{\circ}->degree
+ $t =~ s/\^\\circ/\&\#176;/g; # ^\circ->degree
+# $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs; # ^{x}
+ $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs; # ^{x}
+ $t =~ s/\^(\w)/<sup>$1<\/sup>/g; # ^x
+# $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs; # _{x}
+ $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs; # _{x}
+ $t =~ s/\_(\w)/<sub>$1<\/sub>/g; # _x
+ $t;
+}
+
+ # Handle superscripts and subscripts in inline math mode.
+ s/(\$([^\$]+)\$)/&domath($2)/ge; # $ ... $
+ s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge; # \( ... \)
+
+ # Remove \mbox.
+ s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs; # \mbox{x}
+
+ # Escape and protect tildes in URLs
+ # For some reason /g doesn't work
+ while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
+ if ($opt_u) {
+ s/([^\\])~/$1 /g; # ~ non-breaking space - &#xa0;
+ s/\\\,/ /g; # \, thin space - &#x2009;
+ s/\\ldots\b\s*/…/g; # Horizontal ellipsis
+ s/\\dots\b\s*/…/g; # Horizontal ellipsis
+ } else {
+ s/([^\\])~/$1&nbsp;/g; # ~ non-breaking space
+ s/\\\,/&thinsp;/g; # \, thin space
+ s/\\ldots\b/&hellip;/g; # Horizontal ellipsis
+ s/\\dots\b/&hellip;/g; # Horizontal ellipsis
+
+ }
+ s/\005/\~/g; # Unescape tildes
+ s/\\ / /g; # \ (normal space)
+ s/\\textasciitilde\b\s*/~/g; # \textasciitilde -> ~
+
+ # Non-alphabetic macros that we keep.
+ s/\\([\#\&\%\~\_\^\|])/$1/g;
+
+ # Non-alphabetic macros that we remove.
+ # (discretionary hyphen)
+ # (italic correction)
+ s/\\\W//g;
+
+ # Clean up things we don't handle.
+# s/\\//g;
+
+ # The format {\Xyz{Abc}} is interpreted by BibTeX as a single letter
+ # whose text is given by "Abc". If we see this pattern, it is
+ # likely that discarding the \Xyz will do the right thing.
+ s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
+
+ # Macro names may be meaningful, so keep them and don't run them together.
+ s/\\([A-Za-z]+)/ $1 /g;
+
+ # Remove an empty <a href=...></a> tag that bad cross-referencing
+ # in the BibTeX file may have left us with.
+ s+In <a href=\"[^\"]*\"></a>++;
+
+ &doPaperLinks;
+
+ # Get rid of { } ids, and put protected { } back.
+ s/\001\d+[\{\}]//gs;
+ tr/\002\003\004/{}$/;
+
+ print HTMLFILE $_;
+}
+
+close(BBLFILE);
+
+print HTMLFILE "<$list_end>\n\n$endstring\n";
+
+if ($updating) {
+ while (<OHTMLFILE>) {
+ print HTMLFILE;
+ }
+ close (OHTMLFILE);
+} else {
+ print HTMLFILE "</body></html>\n";
+}
+
+close(HTMLFILE);
+
+if (defined ($htmlfile)) {
+ #$mode &= 0777;
+ #print "setting $htmlfile$$ to $mode\n";
+ #printf("mode = %lo\n", $mode);
+
+ chmod($mode, "$htmlfile$$");
+ rename("$htmlfile$$", $htmlfile);
+}
+
+unlink(@tmpfiles);
+
+exit(0);
diff --git a/biblio/bibtex/utils/bib2xhtml/bib2xhtml.html b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.html
new file mode 100644
index 0000000000..ee07fa07fb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.html
@@ -0,0 +1,767 @@
+<!-- Creator : groff version 1.20.1 -->
+<!-- CreationDate: Sun Dec 12 20:17:37 2010 -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta name="generator" content="groff -Thtml, see www.gnu.org">
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<meta name="Content-Style" content="text/css">
+<style type="text/css">
+ p { margin-top: 0; margin-bottom: 0; vertical-align: top }
+ pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
+ table { margin-top: 0; margin-bottom: 0; vertical-align: top }
+ h1 { text-align: center }
+</style>
+<title>BIB2XHTML</title>
+
+</head>
+<body>
+
+<h1 align="center">BIB2XHTML</h1>
+
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<a href="#BUGS">BUGS</a><br>
+<a href="#AUTHORS">AUTHORS</a><br>
+<a href="#HISTORY">HISTORY</a><br>
+
+<hr>
+
+
+<h2>NAME
+<a name="NAME"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">bib2xhtml
+- BibTeX bibliography to XHTML converter</p>
+
+<h2>SYNOPSIS
+<a name="SYNOPSIS"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>bib2xhtml</b>
+[ <b>-a</b> ] [ <b>-b</b> <i>bibtex-options</i>
+] [ <b>-c</b> ] [ <b>-D</b> <i>mappings</i> ] [
+<b>-d</b> <i>delimiter</i> ] [ <b>-e</b>
+<i>extended-information</i> ] [ <b>-h</b>
+<i>heading</i> ] [ <b>-i</b> ] [ <b>-k</b> ] [
+<b>-m</b> <i>macro-file</i> ] [ <b>-n</b>
+<i>author-name</i> ] [ <b>-r</b> ] [ <b>-s</b>
+<i>style</i> ] [ <b>-t</b> ] [ <b>-v</b> ] [
+<b>-u</b> ] <i>sourcefile</i> [ <i>htmlfile</i> ]</p>
+
+<h2>DESCRIPTION
+<a name="DESCRIPTION"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>bib2xhtml</b>
+converts a bibtex-format bibliography file to XHTML.
+<i>sourcefile</i> may be either a BibTeX-format bibliography
+(<b>.bib</b>) file or a LaTeX-fomatted bibliography
+auxillary file (<b>.aux</b>). <i>htmlfile</i> will often be
+just part of a larger XHTML file; <b>bib2xhtml</b> attempts
+to update the XHTML file in place. It does this by searching
+<i>htmlfile</i> for two special strings, which delimit the
+bibliography part of the file. These strings are the XHTML
+comments</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- BEGIN
+BIBLIOGRAPHY <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- END
+BIBLIOGRAPHY <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:11%; margin-top: 1em">If these
+delimiters are found, the old bibliography between them is
+replaced with the new bibliography. Otherwise the new
+bibliography, with the appropriate delimiters, is appended
+to the end of <i>htmlfile</i>, and it will be necessary to
+move it to the proper location by hand. Note that it is
+possible for <i>htmlfile</i> to contain any number of
+bibliographies, and they may be updated independently. If no
+<i>htmlfile</i> is specified, the bibliography is written to
+standard output.</p>
+
+<p style="margin-left:11%; margin-top: 1em">The tag of each
+BibTeX bibliography entry is converted into a name anchor
+(&lt;A NAME=&quot;tag&quot;&gt;) in <i>htmlfile</i>, and may
+be used to construct a link to this particular entry.</p>
+
+<p style="margin-left:11%; margin-top: 1em">By default the
+contents of the bibliography are determined by the contents
+of the <i>sourcefile</i>. It is also possible to specify the
+contents of the bibliography in the <i>htmlfile</i> itself
+by setting the <b>-i</b> option and using two special
+strings to delimit the citations to be used for generating
+the bibliography. These strings are the XHTML comments</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- BEGIN
+CITATIONS <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- END
+CITATIONS <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:11%; margin-top: 1em">If these
+delimiters are found, the contents between them are searched
+for XHTML comments containing the citations (one citation
+per line), for example</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- BEGIN
+CITATIONS <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!--
+\citation{knuth:1997} <br>
+\citation{knuth:1984} --&gt;</p>
+
+<p style="margin-left:22%; margin-top: 1em">&lt;!-- END
+CITATIONS <i>delimiter</i> --&gt;</p>
+
+<p style="margin-left:11%; margin-top: 1em">These citations
+are then used for choosing the bibliography entries from the
+<i>sourcefile</i>.</p>
+
+<p style="margin-left:11%; margin-top: 1em"><b>Special
+Field Processing</b> <br>
+Several BibTeX fields are treated specially. The filenames
+specified in the <b>postscript</b>, <b>pdf</b>, and
+<b>dvi</b> fields are relative to the <i>htmlfile</i>
+directory. In addition, <b>bib2xhtml</b> recognizes
+compressed or gzipped files (those with filenames ending in
+<b>.Z</b>, <b>.gz</b>, or <b>.z</b>).</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="9%">
+
+
+<p><b>url</b></p></td>
+<td width="2%"></td>
+<td width="78%">
+
+
+<p>If the <b>url</b> field exists, a link
+(&lsquo;&lsquo;A&rsquo;&rsquo; tag) is created. The
+destination of the link is the <b>url</b> tag&rsquo;s value.
+The bibliography entry&rsquo;s title is the source of the
+link. This can be used to create a link to a XHTML version
+of the paper, or to a version that is available by ftp.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="9%">
+
+
+<p><b>mailto</b></p></td>
+<td width="2%"></td>
+<td width="78%">
+
+
+<p>If the <b>mailto</b> field exists, a link
+(&lsquo;&lsquo;A&rsquo;&rsquo; tag) is created. The
+destination of the link is the <b>mailto</b> tag&rsquo;s
+value. The bibliography entry&rsquo;s author name is the
+source of the link.</p></td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>postscript</b></p>
+
+<p style="margin-left:22%;">If the <b>postscript</b> field
+exists, its value is used as the name of a PostScript file.
+<b>bib2xhtml</b> creates a link to the file, and updates
+<i>htmlfile</i> with the number of pages and size of the
+PostScript file.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="4%">
+
+
+<p><b>doi</b></p></td>
+<td width="7%"></td>
+<td width="78%">
+
+
+<p>If the <b>doi</b> field exists, its value is used as the
+designation of a digital object identifier. <b>bib2xhtml</b>
+creates a link to the object through
+<i>http://dx.doi.org</i> and updates <i>htmlfile</i> with
+the <b>doi</b> as a hyperlink. The <b>doi</b> should
+normally be in a canonical form like the following:
+<i>doi:10.1145/363347.363387.</i> However, if the <b>doi</b>
+designator is formed as an HTTP hyperlink, it will be
+converted to the canonical form by replacing the HTTP
+protocol designation and the host name of the hyperlink with
+the <i>doi:</i> literal string.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="4%">
+
+
+<p><b>pdf</b></p></td>
+<td width="7%"></td>
+<td width="78%">
+
+
+<p>If the <b>pdf</b> field exists, its value is used as the
+name of a PDF (portable document format) file.
+<b>bib2xhtml</b> creates a link to the file and updates
+<i>htmlfile</i> with the size of the PDF file.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="4%">
+
+
+<p><b>dvi</b></p></td>
+<td width="7%"></td>
+<td width="78%">
+
+
+<p>If the <b>dvi</b> field exists, its value is used as the
+name of a TeX DVI file. <b>bib2xhtml</b> creates a link to
+the file and updates <i>htmlfile</i> with the number of
+pages and size of the DVI file.</p></td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>author</b>,
+<b>keywords</b></p>
+
+<p style="margin-left:22%;">The full <b>author</b> and
+<b>keywords</b> fields of each BibTeX entry are included in
+<i>htmlfile</i> as XHTML comments, and may be used by CGI
+scripts (such as <b>bibsearch</b>, which is supplied) to
+select only certain entries.</p>
+
+<p style="margin-left:11%; margin-top: 1em"><b>Hints <br>
+bib2xhtml</b>&rsquo;s LaTeX to XHTML conversion is not very
+smart. If something isn&rsquo;t being converted correctly,
+try doing it in a different way.</p>
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>bib2xhtml</b>
+does not currently understand <i>\verb</i>. To get a tilde
+into a filename or an embedded URL, use <i>\~{}</i>. On the
+other hand, entries containing <i>URL</i> fields or
+<i>\url{}</i> commands, are correctly converted into
+hyperlinks. Leave such hyperlinks as they are; do not embed
+any LaTeX commands in them.</p>
+
+<p style="margin-left:11%; margin-top: 1em">The lists that
+<b>bib2xhtml</b> generates contain CSS hooks of the class
+<i>bib2xhtml</i>. You can therefore modify the appearance of
+the lists by adding style entries like the following in the
+web page&rsquo;s header.</p>
+<pre style="margin-left:11%;"> &lt;style type=&quot;text/css&quot;&gt;
+ dl.bib2xhtml dd { padding-bottom: 1em }
+ &lt;/style&gt;
+
+
+ &lt;style type=&quot;text/css&quot;&gt;
+ ul.bib2xhtml li { padding-bottom: 1em }
+ &lt;/style&gt;</pre>
+
+
+<p style="margin-left:11%; margin-top: 1em">The value of
+the named attributes can contain arbitrary HTML markup
+commands, and can thus be used for substituting the text
+with icons. For example, the following Unix command can be
+used for creating stand-alone PDF icons.</p>
+
+<pre style="margin-left:11%;"> perl bib2xhtml -e &rsquo;nosize,nopages,PDF:&lt;img src=&quot;pdficon_small.gif&quot;
+ alt=&quot;PDF&quot; border=&quot;0&quot; /&gt;&rsquo; example.bib example.html</pre>
+
+
+<p style="margin-left:11%;">Unser the Windows shell the
+corresponding command would be.</p>
+
+<pre style="margin-left:11%;"> perl bib2xhtml -e &quot;nosize,nopages,PDF:&lt;img src=&rsquo;pdficon_small.gif&rsquo;
+ alt=&rsquo;PDF&rsquo; border=&rsquo;0&rsquo; /&gt;&quot; example.bib example.html</pre>
+
+
+<p style="margin-left:11%;">A couple of PDF icons and the
+conditions for their use are available at
+<i>http://www.adobe.com/misc/linking.html#pdficon .</i></p>
+
+<p style="margin-left:11%; margin-top: 1em">To display the
+number of pages in local PDF files, the Perl module
+<i>PDF::API2</i> must be installed on the system where
+<b>bib2xhtml</b> is running. A command like the following
+will accomplish this.</p>
+
+<pre style="margin-left:11%;"> perl -MCPAN -e &quot;install PDF::API2&quot;</pre>
+
+
+<h2>OPTIONS
+<a name="OPTIONS"></a>
+</h2>
+
+
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p style="margin-top: 1em"><b>-a</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p style="margin-top: 1em">Include the BibTeX file&rsquo;s
+abstract field in the bibliography.</p></td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>-b</b>
+<i>bibtex-options</i></p>
+
+<p style="margin-left:22%;">Provide the specified options
+to the BibTeX program.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-c</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>Sort chronologically. Normally, the bibliography is
+ordered first by author and then by date. With this option,
+the bibliography is ordered by year, month, day, and then by
+author.</p> </td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>-d</b>
+<i>delimiter</i></p>
+
+<p style="margin-left:22%;">Specify the delimiter that sets
+the bibliography off from the rest of the XHTML file. The
+default delimiter is the name of the bibliography file with
+the <b>.bib</b> extension stripped.</p>
+
+<p style="margin-left:11%;"><b>-D</b>
+<i>mappings</i></p>
+
+<p style="margin-left:22%;">Define URL to directory
+mappings. The <i>mappings</i> argument contains a sequence
+of comma-separated values. Each value contains a local file
+path and the corresponding URL, separated by an <i>@</i>
+sign. The resulting URL is used for linking the various
+paper file format types.</p>
+
+<p style="margin-left:11%;"><b>-e</b>
+<i>extended-information</i></p>
+
+<p style="margin-left:22%;">Specify how an entry&rsquo;s
+extended information will be displayed. The extended
+information is specified as a series of comma-separated
+attributes. The following plain attributes are
+supported.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="9%">
+
+
+<p><b>notype</b></p></td>
+<td width="1%"></td>
+<td width="68%">
+
+
+<p>Do not display the file&rsquo;s type (PDF, Postscript,
+DVI).</p> </td></tr>
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="9%">
+
+
+<p><b>nosize</b></p></td>
+<td width="1%"></td>
+<td width="68%">
+
+
+<p>Do not display the file&rsquo;s size in bytes.</p></td></tr>
+</table>
+
+<p style="margin-left:22%;"><b>nopages</b></p>
+
+<p style="margin-left:32%;">Do not display the file&rsquo;s
+number of pages.</p>
+
+<p style="margin-left:22%;"><b>nocompression</b></p>
+
+<p style="margin-left:32%;">Do not display the file&rsquo;s
+compression type.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="7%">
+
+
+<p><b>nodoi</b></p></td>
+<td width="3%"></td>
+<td width="46%">
+
+
+<p>Do not display the file&rsquo;s DOI.</p></td>
+<td width="22%">
+</td></tr>
+</table>
+
+<p style="margin-left:22%;"><b>nobrackets</b></p>
+
+<p style="margin-left:32%;">Do not enclose the DOI link or
+the file&rsquo;s extended information in brackets.</p>
+
+<p style="margin-left:11%; margin-top: 1em">A number of
+valued attributes allow the specification of the text to
+display for various file types. These are written as a
+<i>name</i>:<i>value</i> pair. The following names are
+supported for valued attributes.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="1%">
+
+
+<p>&#8226;</p></td>
+<td width="9%"></td>
+<td width="16%">
+
+
+<p>PostScript</p></td>
+<td width="52%">
+</td></tr>
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="1%">
+
+
+<p>&#8226;</p></td>
+<td width="9%"></td>
+<td width="16%">
+
+
+<p>PDF</p></td>
+<td width="52%">
+</td></tr>
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="1%">
+
+
+<p>&#8226;</p></td>
+<td width="9%"></td>
+<td width="16%">
+
+
+<p>DVI</p></td>
+<td width="52%">
+</td></tr>
+<tr valign="top" align="left">
+<td width="22%"></td>
+<td width="1%">
+
+
+<p>&#8226;</p></td>
+<td width="9%"></td>
+<td width="16%">
+
+
+<p>DOI</p></td>
+<td width="52%">
+</td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>-h</b> <i>heading</i>
+Use the string <i>heading</i> instead of the default title
+when creating a new <i>htmlfile</i>. If updating an existing
+<i>htmlfile</i>, this option is ignored.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p style="margin-top: 1em"><b>-i</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p style="margin-top: 1em">The citations are included in
+the <i>htmlfile</i>. When this option is set, the
+<i>sourcefile</i> must be a .bib file.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-k</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>In labeled styles (<b>alpha</b>, <b>named</b>,
+<b>plain</b>, and <b>unsort</b>) append to the label of each
+entry its BibTeX key. Thus, the label of each entry will
+consist of the original label, followed by an em-dash,
+followed by the BibTeX key.</p></td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>-m</b> <i>macro
+file</i></p>
+
+<p style="margin-left:22%;">Specify a BibTeX macro file to
+supply to BibTeX when processing the bibliography file.
+Macro files typically contain local abbreviations and other
+macro definitions.</p>
+
+<p style="margin-left:11%;"><b>-n</b> <i>author
+name</i></p>
+
+<p style="margin-left:22%;">Specify an author name to
+highlight. Any bibliography entry author names that match
+the name specified as a regular expression will be set in
+HTML <i>strong</i> tags and will therefore be displayed in a
+bold (or similar) font.</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-r</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>Reverse the chronological sorting order. Normally, the
+bibliography is sorted (by year; BibTeX ignores the month)
+from the earliest entry to the latest entry. With this
+option, the order is reversed. Note that to obtain a
+bibliography ordered by chronological order you must also
+specify the <b>-c</b> option.</p></td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>-s</b>
+<i>style</i></p>
+
+<p style="margin-left:22%;">Create a
+<i>style</i>-style bibliography. Supported styles are
+<b>empty</b> (the default), <b>plain</b>, <b>alpha</b>,
+<b>named</b>, <b>paragraph</b>, <b>unsort</b>, and
+<b>unsortlist</b>. An <b>empty</b> bibliography is a
+bulleted list. A <b>plain</b> bibliography is a numbered
+list. <b>paragraph</b> produces just paragraphs (no
+bullets). <b>unsort</b> is like <b>plain</b> except that the
+entries in the XHTML file are in the same order as as they
+are in the source file. <b>unsortlist</b> is like
+<b>unsort</b> but entry labels are bullets instead of
+numbers. An <b>alpha</b> bibliography has labels that are in
+the BibTeX alpha style. A <b>named</b> bibliography has
+labels of the form [name, year].</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-t</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>Write a timestamp with the date at which the
+bibliography was updated to <i>htmlfile</i>.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-v</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>Report version number on stderr.</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="3%">
+
+
+<p><b>-u</b></p></td>
+<td width="8%"></td>
+<td width="78%">
+
+
+<p>Convert LaTeX special characters into the corresponding
+Unicode characters, and output XML coded in UTF-8. The
+output produced by this option may be easier to parse and
+validate with some XML parsers. By default LaTeX special
+characters are converted into HTML character entities.</p></td></tr>
+</table>
+
+<h2>FILES
+<a name="FILES"></a>
+</h2>
+
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="15%">
+
+
+<p style="margin-top: 1em"><b>html-a.bst</b></p></td>
+<td width="6%"></td>
+<td width="46%">
+
+
+<p style="margin-top: 1em">alpha XHTML BibTeX style
+file</p> </td>
+<td width="22%">
+</td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="15%">
+
+
+<p><b>html-n.bst</b></p></td>
+<td width="6%"></td>
+<td width="46%">
+
+
+<p>named XHTML BibTeX style file</p></td>
+<td width="22%">
+</td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="15%">
+
+
+<p><b>html-u.bst</b></p></td>
+<td width="6%"></td>
+<td width="46%">
+
+
+<p>unsort XHTML BibTeX style file</p></td>
+<td width="22%">
+</td></tr>
+</table>
+
+<p style="margin-left:11%;"><b>html-aa.bst</b>,
+<b>html-na.bst</b>, <b>html-ua.bst</b></p>
+
+<p style="margin-left:32%;">versions of the above style
+files with abstracts</p>
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="14%">
+
+
+<p><b>bibsearch</b></p></td>
+<td width="7%"></td>
+<td width="68%">
+
+
+<p>a CGI script for performing bibliography searches</p></td></tr>
+</table>
+
+<h2>SEE ALSO
+<a name="SEE ALSO"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>perl</b>(L),
+<b>bibtex</b>(L).</p>
+
+<h2>BUGS
+<a name="BUGS"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">The LaTeX to
+XHTML translation, while decent, is not perfect.</p>
+
+<p style="margin-left:11%; margin-top: 1em">Requires bibtex
+and perl. However, I think that most sites that would want
+to convert BibTeX to XHTML will already have both programs
+installed.</p>
+
+<p style="margin-left:11%; margin-top: 1em">Relies on
+dviselect to count the number of pages in a DVI file.</p>
+
+<h2>AUTHORS
+<a name="AUTHORS"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">David Hull
+while at the University of Illinois at Urbana-Champaign.</p>
+
+<p style="margin-left:11%; margin-top: 1em">Diomidis
+Spinellis (<i>dds@aueb.gr</i>), Athens University of
+Economics and Business.</p>
+
+<h2>HISTORY
+<a name="HISTORY"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">The program was
+originally written as <b>bib2html</b> by David Hull in 1996,
+who maintained it until 1998 (version 1.33). In 2002, due to
+the lack of visible updates on the web, the program was
+adopted for maintenance, distribution, and further evolution
+by Diomidis Spinellis. Changes made by him include support
+for XHTML 1.0 and documentation bug fixes. The first public
+release of the maintenance effort was in 2004 (version 2.1).
+On March 2004 the program was renamed into <b>bib2xhtml</b>
+to avoid confusion with projects using the name <b>bib2html
+.</b> Panos Louridas (<i>louridas@aueb.gr</i>) added the
+functionality for including the citations in the <i>htmlfile
+.</i></p>
+
+<p style="margin-left:11%; margin-top: 1em">See
+<i>http://www.spinellis.gr/sw/textproc/bib2xhtml</i> for the
+latest version. This is free software, and may be modified
+or redistributed under the terms of the GNU Public
+License.</p>
+<hr>
+</body>
+</html>
diff --git a/biblio/bibtex/utils/bib2xhtml/bib2xhtml.man b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.man
new file mode 100644
index 0000000000..65c0657c08
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.man
@@ -0,0 +1,534 @@
+.\" $Id: bib2xhtml.man 1.25 2010/12/08 19:02:34 dds Exp $
+.TH BIB2XHTML L "5 December 2010"
+.SH NAME
+bib2xhtml \- BibTeX bibliography to XHTML converter
+.SH SYNOPSIS
+.B bib2xhtml
+[
+.B \-a
+] [
+.B \-b
+.I bibtex-options
+] [
+.B \-c
+] [
+.B \-D
+.I mappings
+] [
+.B \-d
+.I delimiter
+] [
+.B \-e
+.I extended-information
+] [
+.B \-h
+.I heading
+] [
+.B \-i
+] [
+.B \-k
+] [
+.B \-m
+.I macro-file
+] [
+.B \-n
+.I author-name
+] [
+.B \-r
+] [
+.B \-s
+.I style
+] [
+.B \-t
+] [
+.B \-v
+] [
+.B \-u
+]
+.I sourcefile
+[
+.I htmlfile
+]
+.SH DESCRIPTION
+.LP
+.B bib2xhtml
+converts a bibtex-format bibliography file to XHTML.
+.I sourcefile
+may be either a BibTeX-format bibliography
+.RB ( .bib )
+file or a LaTeX-fomatted bibliography auxillary file
+.RB ( .aux ).
+.I htmlfile
+will often be just part of a larger
+XHTML file;
+.B bib2xhtml
+attempts to update the XHTML file in place. It does this
+by searching
+.I htmlfile
+for two special strings, which delimit
+the bibliography part of the file.
+These strings are the XHTML comments
+.IP
+<!-- BEGIN BIBLIOGRAPHY
+.I delimiter
+-->
+.IP
+<!-- END BIBLIOGRAPHY
+.I delimiter
+-->
+.P
+If these delimiters are found, the old bibliography between them is
+replaced with the new bibliography.
+Otherwise the new bibliography, with the appropriate delimiters,
+is appended to the end of
+.IR htmlfile ,
+and it will be necessary to move it to the proper location by hand.
+Note that it is possible for
+.I htmlfile
+to contain any number of bibliographies, and they may be updated
+independently.
+If no
+.I htmlfile
+is specified, the bibliography is written to standard output.
+.P
+The tag of each BibTeX bibliography entry is converted into a name
+anchor (<A NAME="tag">) in
+.IR htmlfile ,
+and may be used to construct a link to this particular entry.
+.P
+By default the contents of the bibliography are determined by
+the contents of the
+.IR sourcefile .
+It is also possible to specify the contents of the bibliography in the
+.I htmlfile
+itself by setting the
+.B \-i
+option and using two special strings to delimit
+the citations to be used for generating the bibliography.
+These strings are the XHTML comments
+.IP
+<!-- BEGIN CITATIONS
+.I delimiter
+-->
+.IP
+<!-- END CITATIONS
+.I delimiter
+-->
+.P
+If these delimiters are found, the contents between them are searched for
+XHTML comments containing the citations (one citation per line), for example
+.IP
+<!-- BEGIN CITATIONS
+.I delimiter
+-->
+.IP
+.br
+<!-- \\citation{knuth:1997}
+.br
+ \\citation{knuth:1984} -->
+.br
+.IP
+<!-- END CITATIONS
+.I delimiter
+-->
+.P
+These citations are then used for choosing the bibliography entries from
+the
+.IR sourcefile .
+.SS Special Field Processing
+.P
+Several BibTeX fields are treated specially. The filenames specified
+in the
+.BR postscript ,
+.BR pdf ,
+and
+.B dvi
+fields are relative to the
+.I htmlfile
+directory. In addition,
+.B bib2xhtml
+recognizes compressed or gzipped files
+(those with filenames ending in
+.BR .Z ,
+.BR .gz ,
+or
+.BR .z ).
+.TP
+.B url
+If the
+.B url
+field exists, a link (``A'' tag) is created. The destination
+of the link is the
+.B url
+tag's value.
+The bibliography entry's title is the source of the link.
+This can be used to create a link to a XHTML version of the paper,
+or to a version that is available by ftp.
+.TP
+.B mailto
+If the
+.B mailto
+field exists, a link (``A'' tag) is created. The destination
+of the link is the
+.B mailto
+tag's value.
+The bibliography entry's author name is the source of the link.
+.TP
+.B postscript
+If the
+.B postscript
+field exists, its value is used as the name of a PostScript file.
+.B bib2xhtml
+creates a link to the file,
+and updates
+.I htmlfile
+with the number of pages and size of the PostScript file.
+.TP
+.B doi
+If the
+.B doi
+field exists, its value is used as the designation of a digital
+object identifier.
+.B bib2xhtml
+creates a link to the object through
+.I http://dx.doi.org
+and updates
+.I htmlfile
+with the
+.B doi
+as a hyperlink.
+The
+.B doi
+should normally be in a canonical form like the following:
+.I doi:10.1145/363347.363387.
+However,
+if the
+.B doi
+designator is formed as an HTTP hyperlink, it will be converted to the
+canonical form by replacing the HTTP protocol designation and the host
+name of the hyperlink with the
+.I doi:
+literal string.
+.TP
+.B pdf
+If the
+.B pdf
+field exists, its value is used as the name of a PDF (portable document
+format) file.
+.B bib2xhtml
+creates a link to the file and updates
+.I htmlfile
+with the size of the PDF file.
+.TP
+.B dvi
+If the
+.B dvi
+field exists, its value is used as the name of a TeX DVI file.
+.B bib2xhtml
+creates a link to the file and updates
+.I htmlfile
+with the number of pages and size of the DVI file.
+.TP
+.BR author , " keywords"
+The full
+.B author
+and
+.B keywords
+fields of each BibTeX entry are included in
+.I htmlfile
+as XHTML comments, and may be used by CGI scripts (such as
+.BR bibsearch ,
+which is supplied) to select only certain entries.
+.SS Hints
+.BR bib2xhtml 's
+LaTeX to XHTML conversion is not very smart.
+If something isn't being converted correctly, try doing it in a different way.
+.P
+.B bib2xhtml
+does not currently understand \fI\\verb\fR.
+To get a tilde into a filename or an embedded URL, use \fI\\~{}\fR.
+On the other hand, entries containing \fIURL\fR fields or
+\fI\\url{}\fR commands,
+are correctly converted into hyperlinks.
+Leave such hyperlinks as they are;
+do not embed any LaTeX commands in them.
+.P
+The lists that
+.B bib2xhtml
+generates contain CSS hooks of the class \fIbib2xhtml\fR.
+You can therefore modify the appearance of the lists
+by adding style entries like the following in the web page's header.
+.ft C
+.nf
+ <style type="text/css">
+ dl.bib2xhtml dd { padding-bottom: 1em }
+ </style>
+
+ <style type="text/css">
+ ul.bib2xhtml li { padding-bottom: 1em }
+ </style>
+.fi
+.ft P
+.P
+The value of the named attributes can contain arbitrary HTML markup commands,
+and can thus be used for substituting the text with icons.
+For example, the following Unix command can be used for creating stand-alone
+PDF icons.
+.ft C
+.nf
+ perl bib2xhtml -e 'nosize,nopages,PDF:<img src="pdficon_small.gif"
+ alt="PDF" border="0" />' example.bib example.html
+.fi
+.ft P
+Unser the Windows shell the corresponding command would be.
+.ft C
+.nf
+ perl bib2xhtml -e "nosize,nopages,PDF:<img src='pdficon_small.gif'
+ alt='PDF' border='0' />" example.bib example.html
+.fi
+.ft P
+A couple of PDF icons and the conditions for their use are available
+at
+.I http://www.adobe.com/misc/linking.html#pdficon .
+.P
+To display the number of pages in local PDF files, the Perl module
+\fIPDF::API2\fP must be installed on the system where
+.B bib2xhtml
+is running.
+A command like the following will accomplish this.
+.ft C
+.nf
+ perl -MCPAN -e "install PDF::API2"
+.fi
+.ft P
+
+.SH OPTIONS
+.TP
+.B \-a
+Include the BibTeX file's abstract field in the bibliography.
+.TP
+.BI \-b " bibtex-options"
+Provide the specified options to the BibTeX program.
+.TP
+.B \-c
+Sort chronologically. Normally, the bibliography is ordered first by
+author and then by date. With this option, the bibliography is
+ordered by year, month, day, and then by author.
+.TP
+.BI \-d " delimiter"
+Specify the delimiter that sets the bibliography off from the rest
+of the XHTML file. The default delimiter is the name of the bibliography
+file with the
+.B .bib
+extension stripped.
+.TP
+.BI \-D " mappings"
+Define URL to directory mappings.
+The \fImappings\fP argument contains a sequence of comma-separated
+values.
+Each value contains a local file path and the corresponding URL,
+separated by an \fI@\fP sign.
+The resulting URL is used for linking the various paper file format types.
+.TP
+.BI \-e " extended-information"
+Specify how an entry's extended information will be displayed.
+The extended information is specified as a series of comma-separated
+attributes.
+The following plain attributes are supported.
+.RS
+.TP
+.B notype
+Do not display the file's type (PDF, Postscript, DVI).
+.TP
+.B nosize
+Do not display the file's size in bytes.
+.TP
+.B nopages
+Do not display the file's number of pages.
+.TP
+.B nocompression
+Do not display the file's compression type.
+.TP
+.B nodoi
+Do not display the file's DOI.
+.TP
+.B nobrackets
+Do not enclose the DOI link or the file's extended information in brackets.
+.RE
+.LP
+A number of valued attributes allow the specification of the text
+to display for various file types.
+These are written as a \fIname\fP:\fIvalue\fP pair.
+The following names are supported for valued attributes.
+.RS
+.IP \(bu
+PostScript
+.IP \(bu
+PDF
+.IP \(bu
+DVI
+.IP \(bu
+DOI
+.RE
+.BI \-h " heading"
+Use the string
+.I heading
+instead of the default title when creating a new
+.IR htmlfile .
+If updating an existing
+.IR htmlfile ,
+this option is ignored.
+.TP
+.BI \-i
+The citations are included in the
+.IR htmlfile .
+When this option is set, the
+.I sourcefile
+must be a .bib file.
+.TP
+.B -k
+In labeled styles
+.BR "" ( alpha ,
+.BR named ,
+.BR plain ,
+and
+.BR unsort )
+append to the label of each entry its BibTeX key.
+Thus, the label of each entry will consist of the original label,
+followed by an em-dash, followed by the BibTeX key.
+.TP
+.BI \-m " macro file"
+Specify a BibTeX macro file to supply to BibTeX when processing the
+bibliography file.
+Macro files typically contain local abbreviations and other macro
+definitions.
+.TP
+.BI \-n " author name"
+Specify an author name to highlight.
+Any bibliography entry author names that match the name specified as a regular
+expression will be set in HTML \fIstrong\fP tags and will therefore
+be displayed in a bold (or similar) font.
+.TP
+.B -r
+Reverse the chronological sorting order. Normally, the bibliography
+is sorted (by year; BibTeX ignores the month)
+from the earliest entry to the latest entry.
+With this option, the order is reversed.
+Note that to obtain a bibliography ordered by chronological order you
+must also specify the
+.B \-c
+option.
+.TP
+.BI \-s " style"
+Create a
+.IR style \-style
+bibliography. Supported styles are
+.B empty
+(the default),
+.BR plain ,
+.BR alpha ,
+.BR named ,
+.BR paragraph ,
+.BR unsort ,
+and
+.BR unsortlist .
+An
+.B empty
+bibliography is a bulleted list. A
+.B plain
+bibliography is a numbered list.
+.B paragraph
+produces just paragraphs (no bullets).
+.B unsort
+is like
+.B plain
+except that the entries in the XHTML file are in the same order as
+as they are in the source file.
+.B unsortlist
+is like
+.B unsort
+but entry labels are bullets instead of numbers.
+An
+.B alpha
+bibliography has labels that are in the BibTeX alpha style. A
+.B named
+bibliography has labels of the form [name, year].
+.TP
+.B \-t
+Write a timestamp with the date at which the bibliography was
+updated to
+.IR htmlfile .
+.TP
+.B \-v
+Report version number on stderr.
+.TP
+.B \-u
+Convert LaTeX special characters into the corresponding
+Unicode characters, and output XML coded in UTF-8.
+The output produced by this option may be easier to parse and validate
+with some XML parsers.
+By default LaTeX special characters are converted into HTML character entities.
+.SH FILES
+.PD 0
+.TP 14
+.B html-a.bst
+alpha XHTML BibTeX style file
+.TP
+.B html-n.bst
+named XHTML BibTeX style file
+.TP
+.B html-u.bst
+unsort XHTML BibTeX style file
+.TP
+.BR html-aa.bst ", " html-na.bst ", " html-ua.bst
+versions of the above style files with abstracts
+.TP
+.B bibsearch
+a CGI script for performing bibliography searches
+.PD
+.SH SEE ALSO
+.BR perl (L),
+.BR bibtex (L).
+.br
+.ne 8
+.SH BUGS
+.LP
+The LaTeX to XHTML translation, while decent, is not perfect.
+.LP
+Requires bibtex and perl. However, I think that most
+sites that would want to convert BibTeX to XHTML will already
+have both programs installed.
+.LP
+Relies on dviselect to count the number of pages in a DVI file.
+.SH AUTHORS
+David Hull
+while at the University of Illinois at Urbana-Champaign.
+.LP
+Diomidis Spinellis
+.RI ( dds@aueb.gr ),
+Athens University of Economics and Business.
+
+.SH HISTORY
+The program was originally written as
+.B bib2html
+by David Hull in 1996, who
+maintained it until 1998 (version 1.33).
+In 2002, due to the lack of visible updates on the web,
+the program was adopted for maintenance, distribution, and further evolution
+by Diomidis Spinellis.
+Changes made by him include support for XHTML 1.0 and documentation bug fixes.
+The first public release of the maintenance effort was in 2004 (version 2.1).
+On March 2004 the program was renamed into
+.B bib2xhtml
+to avoid confusion with projects using the name
+.B bib2html .
+Panos Louridas
+.RI ( louridas@aueb.gr )
+added the functionality for including the citations in the
+.I htmlfile .
+.LP
+See
+.I http://www.spinellis.gr/sw/textproc/bib2xhtml
+for the latest version.
+This is free software, and may be modified or redistributed under
+the terms of the GNU Public License.
diff --git a/biblio/bibtex/utils/bib2xhtml/bib2xhtml.pdf b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.pdf
new file mode 100644
index 0000000000..e2982477da
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bib2xhtml/bib2xhtml.txt b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.txt
new file mode 100644
index 0000000000..862f52fcbd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bib2xhtml.txt
@@ -0,0 +1,299 @@
+BIB2XHTML(L) BIB2XHTML(L)
+
+
+
+1mNAME0m
+ bib2xhtml - BibTeX bibliography to XHTML converter
+
+1mSYNOPSIS0m
+ 1mbib2xhtml 22m[ 1m-a 22m] [ 1m-b 4m22mbibtex-options24m ] [ 1m-c 22m] [ 1m-D 4m22mmappings24m ] [ 1m-d0m
+ 4mdelimiter24m ] [ 1m-e 4m22mextended-information24m ] [ 1m-h 4m22mheading24m ] [ 1m-i 22m] [ 1m-k 22m] [
+ 1m-m 4m22mmacro-file24m ] [ 1m-n 4m22mauthor-name24m ] [ 1m-r 22m] [ 1m-s 4m22mstyle24m ] [ 1m-t 22m] [ 1m-v 22m] [
+ 1m-u 22m] 4msourcefile24m [ 4mhtmlfile24m ]
+
+1mDESCRIPTION0m
+ 1mbib2xhtml 22mconverts a bibtex-format bibliography file to XHTML. 4msource-0m
+ 4mfile24m may be either a BibTeX-format bibliography (1m.bib22m) file or a LaTeX-
+ fomatted bibliography auxillary file (1m.aux22m). 4mhtmlfile24m will often be
+ just part of a larger XHTML file; 1mbib2xhtml 22mattempts to update the
+ XHTML file in place. It does this by searching 4mhtmlfile24m for two spe-
+ cial strings, which delimit the bibliography part of the file. These
+ strings are the XHTML comments
+
+ <!-- BEGIN BIBLIOGRAPHY 4mdelimiter24m -->
+
+ <!-- END BIBLIOGRAPHY 4mdelimiter24m -->
+
+ If these delimiters are found, the old bibliography between them is
+ replaced with the new bibliography. Otherwise the new bibliography,
+ with the appropriate delimiters, is appended to the end of 4mhtmlfile24m,
+ and it will be necessary to move it to the proper location by hand.
+ Note that it is possible for 4mhtmlfile24m to contain any number of bibli-
+ ographies, and they may be updated independently. If no 4mhtmlfile24m is
+ specified, the bibliography is written to standard output.
+
+ The tag of each BibTeX bibliography entry is converted into a name
+ anchor (<A NAME="tag">) in 4mhtmlfile24m, and may be used to construct a
+ link to this particular entry.
+
+ By default the contents of the bibliography are determined by the con-
+ tents of the 4msourcefile24m. It is also possible to specify the contents
+ of the bibliography in the 4mhtmlfile24m itself by setting the 1m-i 22moption and
+ using two special strings to delimit the citations to be used for gen-
+ erating the bibliography. These strings are the XHTML comments
+
+ <!-- BEGIN CITATIONS 4mdelimiter24m -->
+
+ <!-- END CITATIONS 4mdelimiter24m -->
+
+ If these delimiters are found, the contents between them are searched
+ for XHTML comments containing the citations (one citation per line),
+ for example
+
+ <!-- BEGIN CITATIONS 4mdelimiter24m -->
+
+ <!-- \citation{knuth:1997}
+ \citation{knuth:1984} -->
+
+ <!-- END CITATIONS 4mdelimiter24m -->
+
+ These citations are then used for choosing the bibliography entries
+ from the 4msourcefile24m.
+
+ 1mSpecial Field Processing0m
+ Several BibTeX fields are treated specially. The filenames specified
+ in the 1mpostscript22m, 1mpdf22m, and 1mdvi 22mfields are relative to the 4mhtmlfile0m
+ directory. In addition, 1mbib2xhtml 22mrecognizes compressed or gzipped
+ files (those with filenames ending in 1m.Z22m, 1m.gz22m, or 1m.z22m).
+
+ 1murl 22mIf the 1murl 22mfield exists, a link (``A'' tag) is created. The
+ destination of the link is the 1murl 22mtag's value. The bibliogra-
+ phy entry's title is the source of the link. This can be used
+ to create a link to a XHTML version of the paper, or to a ver-
+ sion that is available by ftp.
+
+ 1mmailto 22mIf the 1mmailto 22mfield exists, a link (``A'' tag) is created. The
+ destination of the link is the 1mmailto 22mtag's value. The bibliog-
+ raphy entry's author name is the source of the link.
+
+ 1mpostscript0m
+ If the 1mpostscript 22mfield exists, its value is used as the name of
+ a PostScript file. 1mbib2xhtml 22mcreates a link to the file, and
+ updates 4mhtmlfile24m with the number of pages and size of the Post-
+ Script file.
+
+ 1mdoi 22mIf the 1mdoi 22mfield exists, its value is used as the designation of
+ a digital object identifier. 1mbib2xhtml 22mcreates a link to the
+ object through 4mhttp://dx.doi.org24m and updates 4mhtmlfile24m with the
+ 1mdoi 22mas a hyperlink. The 1mdoi 22mshould normally be in a canonical
+ form like the following: 4mdoi:10.1145/363347.363387.24m However, if
+ the 1mdoi 22mdesignator is formed as an HTTP hyperlink, it will be
+ converted to the canonical form by replacing the HTTP protocol
+ designation and the host name of the hyperlink with the 4mdoi:0m
+ literal string.
+
+ 1mpdf 22mIf the 1mpdf 22mfield exists, its value is used as the name of a PDF
+ (portable document format) file. 1mbib2xhtml 22mcreates a link to
+ the file and updates 4mhtmlfile24m with the size of the PDF file.
+
+ 1mdvi 22mIf the 1mdvi 22mfield exists, its value is used as the name of a TeX
+ DVI file. 1mbib2xhtml 22mcreates a link to the file and updates
+ 4mhtmlfile24m with the number of pages and size of the DVI file.
+
+ 1mauthor22m, 1mkeywords0m
+ The full 1mauthor 22mand 1mkeywords 22mfields of each BibTeX entry are
+ included in 4mhtmlfile24m as XHTML comments, and may be used by CGI
+ scripts (such as 1mbibsearch22m, which is supplied) to select only
+ certain entries.
+
+ 1mHints0m
+ 1mbib2xhtml22m's LaTeX to XHTML conversion is not very smart. If something
+ isn't being converted correctly, try doing it in a different way.
+
+ 1mbib2xhtml 22mdoes not currently understand 4m\verb24m. To get a tilde into a
+ filename or an embedded URL, use 4m\~{}24m. On the other hand, entries con-
+ taining 4mURL24m fields or 4m\url{}24m commands, are correctly converted into
+ hyperlinks. Leave such hyperlinks as they are; do not embed any LaTeX
+ commands in them.
+
+ The lists that 1mbib2xhtml 22mgenerates contain CSS hooks of the class
+ 4mbib2xhtml24m. You can therefore modify the appearance of the lists by
+ adding style entries like the following in the web page's header.
+ <style type="text/css">
+ dl.bib2xhtml dd { padding-bottom: 1em }
+ </style>
+
+ <style type="text/css">
+ ul.bib2xhtml li { padding-bottom: 1em }
+ </style>
+
+ The value of the named attributes can contain arbitrary HTML markup
+ commands, and can thus be used for substituting the text with icons.
+ For example, the following Unix command can be used for creating stand-
+ alone PDF icons.
+ perl bib2xhtml -e 'nosize,nopages,PDF:<img src="pdficon_small.gif"
+ alt="PDF" border="0" />' example.bib example.html
+ Unser the Windows shell the corresponding command would be.
+ perl bib2xhtml -e "nosize,nopages,PDF:<img src='pdficon_small.gif'
+ alt='PDF' border='0' />" example.bib example.html
+ A couple of PDF icons and the conditions for their use are available at
+ 4mhttp://www.adobe.com/misc/linking.html#pdficon24m 4m.0m
+
+ To display the number of pages in local PDF files, the Perl module
+ 4mPDF::API224m must be installed on the system where 1mbib2xhtml 22mis running.
+ A command like the following will accomplish this.
+ perl -MCPAN -e "install PDF::API2"
+
+
+1mOPTIONS0m
+ 1m-a 22mInclude the BibTeX file's abstract field in the bibliography.
+
+ 1m-b 4m22mbibtex-options0m
+ Provide the specified options to the BibTeX program.
+
+ 1m-c 22mSort chronologically. Normally, the bibliography is ordered
+ first by author and then by date. With this option, the bibli-
+ ography is ordered by year, month, day, and then by author.
+
+ 1m-d 4m22mdelimiter0m
+ Specify the delimiter that sets the bibliography off from the
+ rest of the XHTML file. The default delimiter is the name of
+ the bibliography file with the 1m.bib 22mextension stripped.
+
+ 1m-D 4m22mmappings0m
+ Define URL to directory mappings. The 4mmappings24m argument con-
+ tains a sequence of comma-separated values. Each value contains
+ a local file path and the corresponding URL, separated by an 4m@0m
+ sign. The resulting URL is used for linking the various paper
+ file format types.
+
+ 1m-e 4m22mextended-information0m
+ Specify how an entry's extended information will be displayed.
+ The extended information is specified as a series of comma-sepa-
+ rated attributes. The following plain attributes are supported.
+
+ 1mnotype 22mDo not display the file's type (PDF, Postscript, DVI).
+
+ 1mnosize 22mDo not display the file's size in bytes.
+
+ 1mnopages0m
+ Do not display the file's number of pages.
+
+ 1mnocompression0m
+ Do not display the file's compression type.
+
+ 1mnodoi 22mDo not display the file's DOI.
+
+ 1mnobrackets0m
+ Do not enclose the DOI link or the file's extended infor-
+ mation in brackets.
+
+ A number of valued attributes allow the specification of the text to
+ display for various file types. These are written as a 4mname24m:4mvalue0m
+ pair. The following names are supported for valued attributes.
+
+ o PostScript
+
+ o PDF
+
+ o DVI
+
+ o DOI
+ 1m-h 4m22mheading24m Use the string 4mheading24m instead of the default title when
+ creating a new 4mhtmlfile24m. If updating an existing 4mhtmlfile24m, this option
+ is ignored.
+
+ 1m-i 22mThe citations are included in the 4mhtmlfile24m. When this option is
+ set, the 4msourcefile24m must be a .bib file.
+
+ 1m-k 22mIn labeled styles (1malpha22m, 1mnamed22m, 1mplain22m, and 1munsort22m) append to
+ the label of each entry its BibTeX key. Thus, the label of each
+ entry will consist of the original label, followed by an em-
+ dash, followed by the BibTeX key.
+
+ 1m-m 4m22mmacro24m 4mfile0m
+ Specify a BibTeX macro file to supply to BibTeX when processing
+ the bibliography file. Macro files typically contain local
+ abbreviations and other macro definitions.
+
+ 1m-n 4m22mauthor24m 4mname0m
+ Specify an author name to highlight. Any bibliography entry
+ author names that match the name specified as a regular expres-
+ sion will be set in HTML 4mstrong24m tags and will therefore be dis-
+ played in a bold (or similar) font.
+
+ 1m-r 22mReverse the chronological sorting order. Normally, the bibliog-
+ raphy is sorted (by year; BibTeX ignores the month) from the
+ earliest entry to the latest entry. With this option, the order
+ is reversed. Note that to obtain a bibliography ordered by
+ chronological order you must also specify the 1m-c 22moption.
+
+ 1m-s 4m22mstyle0m
+ Create a 4mstyle24m-style bibliography. Supported styles are 1mempty0m
+ (the default), 1mplain22m, 1malpha22m, 1mnamed22m, 1mparagraph22m, 1munsort22m, and
+ 1munsortlist22m. An 1mempty 22mbibliography is a bulleted list. A 1mplain0m
+ bibliography is a numbered list. 1mparagraph 22mproduces just para-
+ graphs (no bullets). 1munsort 22mis like 1mplain 22mexcept that the
+ entries in the XHTML file are in the same order as as they are
+ in the source file. 1munsortlist 22mis like 1munsort 22mbut entry labels
+ are bullets instead of numbers. An 1malpha 22mbibliography has
+ labels that are in the BibTeX alpha style. A 1mnamed 22mbibliography
+ has labels of the form [name, year].
+
+ 1m-t 22mWrite a timestamp with the date at which the bibliography was
+ updated to 4mhtmlfile24m.
+
+ 1m-v 22mReport version number on stderr.
+
+ 1m-u 22mConvert LaTeX special characters into the corresponding Unicode
+ characters, and output XML coded in UTF-8. The output produced
+ by this option may be easier to parse and validate with some XML
+ parsers. By default LaTeX special characters are converted into
+ HTML character entities.
+
+1mFILES0m
+ 1mhtml-a.bst 22malpha XHTML BibTeX style file
+ 1mhtml-n.bst 22mnamed XHTML BibTeX style file
+ 1mhtml-u.bst 22munsort XHTML BibTeX style file
+ 1mhtml-aa.bst22m, 1mhtml-na.bst22m, 1mhtml-ua.bst0m
+ versions of the above style files with abstracts
+ 1mbibsearch 22ma CGI script for performing bibliography searches
+
+1mSEE ALSO0m
+ 1mperl22m(L), 1mbibtex22m(L).
+
+1mBUGS0m
+ The LaTeX to XHTML translation, while decent, is not perfect.
+
+ Requires bibtex and perl. However, I think that most sites that would
+ want to convert BibTeX to XHTML will already have both programs
+ installed.
+
+ Relies on dviselect to count the number of pages in a DVI file.
+
+1mAUTHORS0m
+ David Hull while at the University of Illinois at Urbana-Champaign.
+
+ Diomidis Spinellis (4mdds@aueb.gr24m), Athens University of Economics and
+ Business.
+
+
+1mHISTORY0m
+ The program was originally written as 1mbib2html 22mby David Hull in 1996,
+ who maintained it until 1998 (version 1.33). In 2002, due to the lack
+ of visible updates on the web, the program was adopted for maintenance,
+ distribution, and further evolution by Diomidis Spinellis. Changes
+ made by him include support for XHTML 1.0 and documentation bug fixes.
+ The first public release of the maintenance effort was in 2004 (version
+ 2.1). On March 2004 the program was renamed into 1mbib2xhtml 22mto avoid
+ confusion with projects using the name 1mbib2html . 22mPanos Louridas
+ (4mlouridas@aueb.gr24m) added the functionality for including the citations
+ in the 4mhtmlfile24m 4m.0m
+
+ See 4mhttp://www.spinellis.gr/sw/textproc/bib2xhtml24m for the latest ver-
+ sion. This is free software, and may be modified or redistributed
+ under the terms of the GNU Public License.
+
+
+
+ 5 December 2010 BIB2XHTML(L)
diff --git a/biblio/bibtex/utils/bib2xhtml/bibsearch b/biblio/bibtex/utils/bib2xhtml/bibsearch
new file mode 100755
index 0000000000..066199307f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/bibsearch
@@ -0,0 +1,333 @@
+#!/local/bin/perl -T -w
+
+# $Id: bibsearch,v 1.20 1998/02/11 19:22:30 hull Exp hull $
+#
+# CGI script for search bibliographies.
+#
+# Copyright 1995, 1996 David Hull.
+# David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull
+
+# Call this script using the HTML form something like:
+#
+# <FORM ACTION="/cgi-bin/bibsearch/path/to/database" method="POST">
+# <PRE><SMALL>
+# Keywords: <INPUT TYPE=TEXT NAME="keyword" SIZE=40>
+# Authors: <INPUT TYPE=TEXT NAME="author" SIZE=40>
+# <INPUT TYPE=SUBMIT VALUE="Submit search"> <INPUT TYPE=RESET> <INPUT TYPE=SUBMIT NAME="help" VALUE="Help">
+# </SMALL></PRE>
+# </FORM>
+#
+# If the "database" input tag is omitted, $DEFAULT_BIB will be searched.
+# It should *always* have a leading "/", even when tilde expansion
+# is to be performed.
+#
+# Note: if the database file specified in the "database"
+# input tag contains slashes, they should be encoded as %2F
+# to insure that someone's browser does not munge them.
+#
+# You can also write the URL and put it directly in an HTML file.
+# Here's an example:
+#
+# <A HREF="/cgi-bin/bibsearch/path/to/database?author=hull"
+# >my publications</A>
+#
+
+### Configuration section.
+
+# Path of default bibliography database, if not specified in URL.
+$DEFAULT_BIB_PATH = "/usr/dcs/www/www-root/papers/index.html";
+
+# URL of default biblipgraphy database, if not specified in URL.
+$DEFAULT_BIB_URL = "http://pertsserver.cs.uiuc.edu/papers/index.html";
+
+### End of configuration section.
+
+%iso_map = (
+ "\300", 'A', # (192) A grave
+ "\301", 'A', # (193) A acute
+ "\302", 'A', # (194) A circumflex
+ "\303", 'A', # (195) A tilde
+ "\304", 'A', # (196) A umlaut
+ "\305", 'A', # (197) A ring
+ "\306", 'AE', # (198) AE ligature
+ "\307", 'C', # (199) C cedilla
+ "\310", 'E', # (200) E grave
+ "\311", 'E', # (201) E acute
+ "\312", 'E', # (202) E circumflex
+ "\313", 'E', # (203) E umlaut
+ "\314", 'I', # (204) I grave
+ "\315", 'I', # (205) I acute
+ "\316", 'I', # (206) I circumflex
+ "\317", 'I', # (207) I umlaut
+ "\321", 'N', # (209) N tilde
+ "\322", 'O', # (210) O grave
+ "\323", 'O', # (211) O acute
+ "\324", 'O', # (212) O circumflex
+ "\325", 'O', # (213) O tilde
+ "\326", 'O', # (214) O umlaut
+ "\330", 'O', # (216) O slash
+ "\331", 'U', # (217) U grave
+ "\332", 'U', # (218) U acute
+ "\333", 'U', # (219) U circumflex
+ "\334", 'U', # (220) U umlaut
+ "\335", 'Y', # (221) Y acute
+ "\337", 'ss', # (223) sz ligature
+ "\340", 'a', # (224) a grave
+ "\341", 'a', # (225) a acute
+ "\342", 'a', # (226) a circumflex
+ "\343", 'a', # (227) a tilde
+ "\344", 'a', # (228) a umlaut
+ "\345", 'a', # (229) a ring
+ "\346", 'ae', # (230) ae ligature
+ "\347", 'c', # (231) c cedilla
+ "\350", 'e', # (232) e grave
+ "\351", 'e', # (233) e acute
+ "\352", 'e', # (234) e circumflex
+ "\353", 'e', # (235) e umlaut
+ "\354", 'i', # (236) i grave
+ "\355", 'i', # (237) i acute
+ "\356", 'i', # (238) i circumflex
+ "\357", 'i', # (239) i umlaut
+ "\361", 'n', # (241) n tilde
+ "\362", 'o', # (242) o grave
+ "\363", 'o', # (243) o acute
+ "\364", 'o', # (244) o circumflex
+ "\365", 'o', # (245) o tilde
+ "\366", 'o', # (246) o umlaut
+ "\370", 'o', # (248) o slash
+ "\371", 'u', # (249) u grave
+ "\372", 'u', # (250) u acute
+ "\373", 'u', # (251) u circumflex
+ "\374", 'u', # (252) u umlaut
+ "\375", 'y', # (253) y acute
+ "\377", 'y', # (255) y umlaut
+);
+$iso_pat = join('', keys %iso_map);
+$iso_pat =~ s/(\W)/\\$1/g;
+$iso_pat = '[' . $iso_pat . ']';
+
+&get_args;
+
+if ($in{'help'}) {
+ print STDOUT <<_EOF_;
+Content-type: text/html
+
+<HTML><HEAD>
+<TITLE>Search Help</TITLE>
+</HEAD><BODY>
+<H1>Search help</H1>
+To find a paper, you can specify keywords, authors, or both.
+If you specify both keywords and authors, only papers that match
+on both the keywords and authors will be found.
+Matches are case insensitive.<P>
+
+For the keyword field, you can specify multiple keywords separated by commas.
+A paper will match if <EM>any one</EM> of the keywords matches.
+A keyword will match only at the beginning of a word, so that
+``do'' will match ``domain'' but not ``tandom.''
+The keyword search finds words anywhere in the bibliography entry.<P>
+
+For author field, you can specify multiply authors separated by commas.
+A paper will match only if <EM>all</EM> of the authors match.
+An author must match a whole word, so that ``smith'' will not match
+``Smithy.''
+Because first names are often abbreviated in bibliographies,
+it is safer to search only on last names.<P>
+</BODY></HTML>
+_EOF_
+ exit 0;
+}
+
+# Keywords match on any keyword.
+# Keywords match only at start of word.
+if (defined($in{'keyword'}) && ($in{'keyword'} ne '')) {
+ $keyword = $in{'keyword'};
+ local(@keywords) = split(/\s*,\s*/, $keyword);
+ local($s);
+
+ foreach $s (@keywords) {
+ $s =~ s/\s+/\\s\+/g; # Whitespace matches any amount of whitespace.
+ $s =~ s/(\w+)/\\b$1/g; # Match only at start of words.
+ }
+ $keyword_pat = join('|', @keywords);
+}
+# Authors match on all authors.
+# Authors match only whole words.
+if (defined($in{'author'}) && ($in{'author'} ne "")) {
+ $author = $in{'author'};
+ @author_pat = split(/\s*,\s*/, &map_iso($author));
+ local($s);
+ foreach $s (@author_pat) {
+ $s =~ s/\W/ /g; # Change non-word to whitespace.
+ $s =~ s/(\w+)/\\b$1\\b/g; # Match only at whole words.
+ $s =~ s/\s+/\\s\+/g; # Whitespace matches any amount of whitespace.
+ }
+}
+
+if (defined($ENV{'PATH_INFO'})) {
+ $db_url = "http://${ENV{SERVER_NAME}}${ENV{'PATH_INFO'}}";
+} else {
+ $db_url = $DEFAULT_BIB_URL;
+}
+
+if (defined($ENV{'PATH_TRANSLATED'})) {
+ $db_file = $ENV{'PATH_TRANSLATED'};
+} else {
+ $db_file = $DEFAULT_BIB_PATH;
+}
+
+# Fake ".nosuch" URL in BASE tag is so that browser caching does not get
+# confused (as Netscape 1.1N did without it).
+if (!$in{"noheader"}) {
+ print STDOUT <<_EOF_;
+Content-type: text/html
+
+<HTML><HEAD>
+<BASE HREF="$db_url.nosuch">
+<TITLE>Search Results</TITLE>
+</HEAD>
+<BODY>
+<H1>Search results for
+_EOF_
+ print "author `$author'\n" if (defined($author));
+ print "keyword `$keyword'\n" if (defined($keyword));
+ print STDOUT <<_EOF_;
+</H1>
+Search performed on <A HREF="$db_url">$db_url</A>.<P>
+<HR>
+_EOF_
+# print "keyword_pat = $keyword_pat<P>\n";
+# print "author_pat = " . join(', ', @author_pat) . "<P>\n";
+}
+
+#&print_env;
+#&print_request;
+
+open(FILE, "<$db_file") || die "Can't open $db_file: $!";
+
+$found = 0;
+
+while (1) {
+ # Skip to start of bibliography.
+ while(<FILE>) {
+ last if /^<!-- BEGIN BIBLIOGRAPHY/;
+ }
+
+ # Read the next couple of lines to determine what kind of list
+ # the bibliography is.
+ $open_list = '<UL>';
+ $close_list = '</UL>';
+line:
+ while (<FILE>) {
+ if (m/^\<[DU]L/) {
+ $close_list = $open_list = $_;
+ $close_list =~ s/^\<(\w+).*/<\/$1>/;
+ }
+ last line if (m/^\s*$/);
+ }
+ print "$open_list";
+
+ $entry = '';
+bib_entry:
+ while(<FILE>) {
+ last bib_entry if (/^<!-- END BIBLIOGRAPHY/);
+
+ if (m/^$/) {
+ if (defined($keyword)) {
+ if ($entry !~ m/$keyword_pat/i) {
+ $entry = ''; next bib_entry;
+ }
+ }
+ if (defined($author)) {
+ if ($entry !~ m/<!-- Authors: ([^-]*)-->/) {
+ $entry = ''; next bib_entry;
+ }
+ local($bib_authors) = $1;
+ foreach $s (@author_pat) {
+ if ($bib_authors !~ m/$s/i) {
+ $entry = ''; next bib_entry;
+ }
+ }
+ }
+
+ $found = 1;
+
+ # Fully qualify local HREFs.
+ $entry =~ s/HREF=\"(\#[^\"]*)\"/HREF=\"$db_url$1\"/g;
+ print STDOUT $entry;
+ $entry = '';
+ } else {
+ $entry .= $_;
+ }
+ }
+
+ if (!$in{"noheader"}) {
+ print "$close_list";
+ }
+
+ last if eof;
+}
+
+if (!$found) {
+ print "No matches found.<P>\n";
+}
+
+if (!$in{"noheader"}) {
+ print STDOUT <<_EOF_;
+</BODY></HTML>
+_EOF_
+}
+
+close(FILE);
+exit;
+
+sub print_env {
+ local ($key);
+
+ print "Environment:<BR>\n<UL>\n";
+ for $key (keys(%ENV)) {
+ print "<LI> $key : $ENV{$key}\n";
+ }
+ print "</UL><P>\n";
+}
+
+sub print_request {
+ local ($key);
+
+ print "Request:<BR>\n<UL>\n";
+ for $key (keys(%in)) {
+ print "<LI> $key : $in{$key}\n";
+ }
+ print "</UL>\n";
+}
+
+# Some of the following code stolen from James Tappin's cgi_handlers.pl
+
+sub url_decode {
+ foreach (@_) {
+ tr/+/ /;
+ s/%(..)/pack("c",hex($1))/ge;
+ }
+ @_;
+}
+
+sub get_args {
+ local($request) = '';
+
+ return if (!defined($ENV{'REQUEST_METHOD'}));
+
+ if ($ENV{'REQUEST_METHOD'} eq "GET") {
+ $request = $ENV{'QUERY_STRING'};
+ } elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
+ read(STDIN, $request, $ENV{'CONTENT_LENGTH'});
+ }
+
+ %in = &url_decode(split(/[&=]/, $request));
+}
+
+sub map_iso {
+ local ($s) = @_;
+
+ $s =~ s/($iso_pat)/$iso_map{$1}/ge;
+ $s;
+}
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-k.html
new file mode 100644
index 0000000000..3d00a20d1d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -c -k -h Example: bib2xhtml -s alpha -c -k example.bib eg/alpha-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r-k.html
new file mode 100644
index 0000000000..aaa2327c7a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -c -r -k -h Example: bib2xhtml -s alpha -c -r -k example.bib eg/alpha-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r.html
new file mode 100644
index 0000000000..35c444e88f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -c -r -h Example: bib2xhtml -s alpha -c -r example.bib eg/alpha-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-c.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c.html
new file mode 100644
index 0000000000..6d5be5ff9d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-c.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -c -h Example: bib2xhtml -s alpha -c example.bib eg/alpha-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-k.html
new file mode 100644
index 0000000000..953c22c234
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -k -h Example: bib2xhtml -s alpha -k example.bib eg/alpha-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-k.html
new file mode 100644
index 0000000000..ee106efb9e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -c -k -h Example: bib2xhtml -s alpha -n Spinellis -c -k example.bib eg/alpha-n-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r-k.html
new file mode 100644
index 0000000000..3f58b9c870
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -c -r -k -h Example: bib2xhtml -s alpha -n Spinellis -c -r -k example.bib eg/alpha-n-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r.html
new file mode 100644
index 0000000000..5449e0ef22
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -c -r -h Example: bib2xhtml -s alpha -n Spinellis -c -r example.bib eg/alpha-n-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c.html
new file mode 100644
index 0000000000..fdac8e6bb4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-c.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -c -h Example: bib2xhtml -s alpha -n Spinellis -c example.bib eg/alpha-n-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-k.html
new file mode 100644
index 0000000000..332bed8944
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -k -h Example: bib2xhtml -s alpha -n Spinellis -k example.bib eg/alpha-n-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r-k.html
new file mode 100644
index 0000000000..70e61e634f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -r -k -h Example: bib2xhtml -s alpha -n Spinellis -r -k example.bib eg/alpha-n-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r.html
new file mode 100644
index 0000000000..138bd4fb62
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -r -h Example: bib2xhtml -s alpha -n Spinellis -r example.bib eg/alpha-n-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-k.html
new file mode 100644
index 0000000000..a65f8a1680
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -c -k -h Example: bib2xhtml -s alpha -n Spinellis -u -c -k example.bib eg/alpha-n-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r-k.html
new file mode 100644
index 0000000000..1495d4890d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -c -r -k -h Example: bib2xhtml -s alpha -n Spinellis -u -c -r -k example.bib eg/alpha-n-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r.html
new file mode 100644
index 0000000000..72d20fac2d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -c -r -h Example: bib2xhtml -s alpha -n Spinellis -u -c -r example.bib eg/alpha-n-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c.html
new file mode 100644
index 0000000000..c6e093ab01
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-c.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -c -h Example: bib2xhtml -s alpha -n Spinellis -u -c example.bib eg/alpha-n-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-k.html
new file mode 100644
index 0000000000..25a55551f4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -k -h Example: bib2xhtml -s alpha -n Spinellis -u -k example.bib eg/alpha-n-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r-k.html
new file mode 100644
index 0000000000..11f96a24a4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -r -k -h Example: bib2xhtml -s alpha -n Spinellis -u -r -k example.bib eg/alpha-n-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r.html
new file mode 100644
index 0000000000..57b7eea88d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -r -h Example: bib2xhtml -s alpha -n Spinellis -u -r example.bib eg/alpha-n-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u.html
new file mode 100644
index 0000000000..97804cc93b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n-u.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -u -h Example: bib2xhtml -s alpha -n Spinellis -u example.bib eg/alpha-n-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-n.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n.html
new file mode 100644
index 0000000000..c13ea37082
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-n.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -n Spinellis -h Example: bib2xhtml -s alpha -n Spinellis example.bib eg/alpha-n.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, <strong>Diomidis Spinellis</strong>, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-r-k.html
new file mode 100644
index 0000000000..d43c3fd214
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -r -k -h Example: bib2xhtml -s alpha -r -k example.bib eg/alpha-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 &mdash; Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 &mdash; Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 &mdash; Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 &mdash; Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 &mdash; Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 &mdash; Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 &mdash; Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-r.html
new file mode 100644
index 0000000000..3d16d502e5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -r -h Example: bib2xhtml -s alpha -r example.bib eg/alpha-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-k.html
new file mode 100644
index 0000000000..172fba350f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -c -k -h Example: bib2xhtml -s alpha -u -c -k example.bib eg/alpha-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r-k.html
new file mode 100644
index 0000000000..420ee5b48c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -c -r -k -h Example: bib2xhtml -s alpha -u -c -r -k example.bib eg/alpha-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r.html
new file mode 100644
index 0000000000..5989a8f2fc
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -c -r -h Example: bib2xhtml -s alpha -u -c -r example.bib eg/alpha-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c.html
new file mode 100644
index 0000000000..d5d90ee2d8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-c.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -c -h Example: bib2xhtml -s alpha -u -c example.bib eg/alpha-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-k.html
new file mode 100644
index 0000000000..9e62482a3b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -k -h Example: bib2xhtml -s alpha -u -k example.bib eg/alpha-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r-k.html
new file mode 100644
index 0000000000..311c192282
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r-k.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -r -k -h Example: bib2xhtml -s alpha -u -r -k example.bib eg/alpha-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99 — Gritzalis:1999]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06 — Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03 — Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03 — Spinellis:2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00 — Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96 — Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94 — Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93 — Spinellis:1993]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90 — Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r.html
new file mode 100644
index 0000000000..b8c011bd89
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u-r.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -r -h Example: bib2xhtml -s alpha -u -r example.bib eg/alpha-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha-u.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u.html
new file mode 100644
index 0000000000..06ca961798
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha-u.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -u -h Example: bib2xhtml -s alpha -u example.bib eg/alpha-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/alpha.html b/biblio/bibtex/utils/bib2xhtml/eg/alpha.html
new file mode 100644
index 0000000000..44243e3cae
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/alpha.html
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s alpha </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s alpha -h Example: bib2xhtml -s alpha example.bib eg/alpha.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[AHU74]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[ASS85]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[ATS04]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[BdSP+00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[GR89]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[GSG99]</a></dt><dd>Stefanos
+ Gritzalis, Diomidis Spinellis, and Panagiotis
+ Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spi90]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spi93]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spi94]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spi96]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spi00]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spi03]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spi06]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Tho68]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[ZCC00]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-c-r.html
new file mode 100644
index 0000000000..e34f594ea4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -c -r -h Example: bib2xhtml -s empty -c -r example.bib eg/empty-c-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-c.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-c.html
new file mode 100644
index 0000000000..8866dc0c3c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -c -h Example: bib2xhtml -s empty -c example.bib eg/empty-c.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c-r.html
new file mode 100644
index 0000000000..54a632df27
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -c -r -h Example: bib2xhtml -s empty -n Spinellis -c -r example.bib eg/empty-n-c-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c.html
new file mode 100644
index 0000000000..e66a6c4c8e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -c -h Example: bib2xhtml -s empty -n Spinellis -c example.bib eg/empty-n-c.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-r.html
new file mode 100644
index 0000000000..1297222e7c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -r -h Example: bib2xhtml -s empty -n Spinellis -r example.bib eg/empty-n-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c-r.html
new file mode 100644
index 0000000000..3b2470d459
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -u -c -r -h Example: bib2xhtml -s empty -n Spinellis -u -c -r example.bib eg/empty-n-u-c-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c.html
new file mode 100644
index 0000000000..48d62b0757
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -u -c -h Example: bib2xhtml -s empty -n Spinellis -u -c example.bib eg/empty-n-u-c.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-r.html
new file mode 100644
index 0000000000..d6ce889c4f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -u -r -h Example: bib2xhtml -s empty -n Spinellis -u -r example.bib eg/empty-n-u-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u.html
new file mode 100644
index 0000000000..29e11ad0a1
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -u -h Example: bib2xhtml -s empty -n Spinellis -u example.bib eg/empty-n-u.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-n.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-n.html
new file mode 100644
index 0000000000..8225e1ee95
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-n.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -n Spinellis -h Example: bib2xhtml -s empty -n Spinellis example.bib eg/empty-n.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-r.html
new file mode 100644
index 0000000000..256d12d029
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -r -h Example: bib2xhtml -s empty -r example.bib eg/empty-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c-r.html
new file mode 100644
index 0000000000..cb626e95fd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -u -c -r -h Example: bib2xhtml -s empty -u -c -r example.bib eg/empty-u-c-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c.html
new file mode 100644
index 0000000000..5d40cf64ee
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -u -c -h Example: bib2xhtml -s empty -u -c example.bib eg/empty-u-c.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-r.html
new file mode 100644
index 0000000000..ae2068c16c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -u -r -h Example: bib2xhtml -s empty -u -r example.bib eg/empty-u-r.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty-u.html b/biblio/bibtex/utils/bib2xhtml/eg/empty-u.html
new file mode 100644
index 0000000000..06d6cd06c9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -u -h Example: bib2xhtml -s empty -u example.bib eg/empty-u.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/empty.html b/biblio/bibtex/utils/bib2xhtml/eg/empty.html
new file mode 100644
index 0000000000..c5c9224989
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/empty.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s empty </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s empty -h Example: bib2xhtml -s empty example.bib eg/empty.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-c-k.html
new file mode 100644
index 0000000000..7247b8d1ab
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-c-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -c -k -h Example: bib2xhtml -s named -c -k example.bib eg/named-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-c-r-k.html
new file mode 100644
index 0000000000..ae12f91470
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-c-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -c -r -k -h Example: bib2xhtml -s named -c -r -k example.bib eg/named-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-c-r.html
new file mode 100644
index 0000000000..c755a15f7a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-c-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -c -r -h Example: bib2xhtml -s named -c -r example.bib eg/named-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-c.html b/biblio/bibtex/utils/bib2xhtml/eg/named-c.html
new file mode 100644
index 0000000000..05b785e8d8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-c.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -c -h Example: bib2xhtml -s named -c example.bib eg/named-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-k.html
new file mode 100644
index 0000000000..20ed8daf59
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -k -h Example: bib2xhtml -s named -k example.bib eg/named-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-k.html
new file mode 100644
index 0000000000..c7f9b751d1
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -c -k -h Example: bib2xhtml -s named -n Spinellis -c -k example.bib eg/named-n-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r-k.html
new file mode 100644
index 0000000000..9ff800ad62
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -c -r -k -h Example: bib2xhtml -s named -n Spinellis -c -r -k example.bib eg/named-n-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r.html
new file mode 100644
index 0000000000..b07bbc981e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -c -r -h Example: bib2xhtml -s named -n Spinellis -c -r example.bib eg/named-n-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-c.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c.html
new file mode 100644
index 0000000000..8048ffa614
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-c.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -c -h Example: bib2xhtml -s named -n Spinellis -c example.bib eg/named-n-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-k.html
new file mode 100644
index 0000000000..53b73adb34
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -k -h Example: bib2xhtml -s named -n Spinellis -k example.bib eg/named-n-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-r-k.html
new file mode 100644
index 0000000000..f896f23777
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -r -k -h Example: bib2xhtml -s named -n Spinellis -r -k example.bib eg/named-n-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-r.html
new file mode 100644
index 0000000000..ccacb85b19
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -r -h Example: bib2xhtml -s named -n Spinellis -r example.bib eg/named-n-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-k.html
new file mode 100644
index 0000000000..b2cbf5e1fa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -c -k -h Example: bib2xhtml -s named -n Spinellis -u -c -k example.bib eg/named-n-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r-k.html
new file mode 100644
index 0000000000..a97f4450f2
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -c -r -k -h Example: bib2xhtml -s named -n Spinellis -u -c -r -k example.bib eg/named-n-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r.html
new file mode 100644
index 0000000000..b288e58a11
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -c -r -h Example: bib2xhtml -s named -n Spinellis -u -c -r example.bib eg/named-n-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c.html
new file mode 100644
index 0000000000..08e9c55f05
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-c.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -c -h Example: bib2xhtml -s named -n Spinellis -u -c example.bib eg/named-n-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-k.html
new file mode 100644
index 0000000000..b375b0286c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -k -h Example: bib2xhtml -s named -n Spinellis -u -k example.bib eg/named-n-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r-k.html
new file mode 100644
index 0000000000..53ef3a9e88
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -r -k -h Example: bib2xhtml -s named -n Spinellis -u -r -k example.bib eg/named-n-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r.html
new file mode 100644
index 0000000000..b7e308c0b7
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -r -h Example: bib2xhtml -s named -n Spinellis -u -r example.bib eg/named-n-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u.html
new file mode 100644
index 0000000000..2b6a3ba9e5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n-u.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -u -h Example: bib2xhtml -s named -n Spinellis -u example.bib eg/named-n-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-n.html b/biblio/bibtex/utils/bib2xhtml/eg/named-n.html
new file mode 100644
index 0000000000..6a8bc56b2b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-n.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -n Spinellis -h Example: bib2xhtml -s named -n Spinellis example.bib eg/named-n.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-r-k.html
new file mode 100644
index 0000000000..caa84f875f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -r -k -h Example: bib2xhtml -s named -r -k example.bib eg/named-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-r.html
new file mode 100644
index 0000000000..e8b1181487
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -r -h Example: bib2xhtml -s named -r example.bib eg/named-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-k.html
new file mode 100644
index 0000000000..8abcedd5ff
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -c -k -h Example: bib2xhtml -s named -u -c -k example.bib eg/named-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r-k.html
new file mode 100644
index 0000000000..205ed92b3e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -c -r -k -h Example: bib2xhtml -s named -u -c -r -k example.bib eg/named-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r.html
new file mode 100644
index 0000000000..e68ef5758d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -c -r -h Example: bib2xhtml -s named -u -c -r example.bib eg/named-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c.html
new file mode 100644
index 0000000000..4adde00f09
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-c.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -c -h Example: bib2xhtml -s named -u -c example.bib eg/named-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-k.html
new file mode 100644
index 0000000000..ac01b95cbb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -k -h Example: bib2xhtml -s named -u -k example.bib eg/named-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-r-k.html
new file mode 100644
index 0000000000..e616b776be
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-r-k.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -r -k -h Example: bib2xhtml -s named -u -r -k example.bib eg/named-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u-r.html
new file mode 100644
index 0000000000..4b7b1eaa74
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u-r.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -r -h Example: bib2xhtml -s named -u -r example.bib eg/named-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named-u.html b/biblio/bibtex/utils/bib2xhtml/eg/named-u.html
new file mode 100644
index 0000000000..8c65024010
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named-u.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -u -h Example: bib2xhtml -s named -u example.bib eg/named-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et al., 1974]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barabási et al.,
+ 2000]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/named.html b/biblio/bibtex/utils/bib2xhtml/eg/named.html
new file mode 100644
index 0000000000..90a2a3e05b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/named.html
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s named </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s named -h Example: bib2xhtml -s named example.bib eg/named.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[Abelson et&nbsp;al., 1985]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[Aho et&nbsp;al., 1974]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[Androutsellis-Theotokis and Spinellis,
+ 2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[Barab&aacute;si et&nbsp;al.,
+ 2000]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[Goldberg and Robson,
+ 1989]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[Gritzalis et&nbsp;al.,
+ 1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[Spinellis,
+ 1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[Spinellis,
+ 1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[Spinellis,
+ 1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[Spinellis,
+ 1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[Spinellis,
+ 2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[Spinellis,
+ 2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[Spinellis, 2003]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[Spinellis, 2006]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[Thompson, 1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[Zwicky et&nbsp;al.,
+ 2000]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c-r.html
new file mode 100644
index 0000000000..98d16e7dfb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -c -r -h Example: bib2xhtml -s paragraph -c -r example.bib eg/paragraph-c-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c.html
new file mode 100644
index 0000000000..a449367c31
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -c -h Example: bib2xhtml -s paragraph -c example.bib eg/paragraph-c.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c-r.html
new file mode 100644
index 0000000000..adafbf2c08
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -c -r -h Example: bib2xhtml -s paragraph -n Spinellis -c -r example.bib eg/paragraph-n-c-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c.html
new file mode 100644
index 0000000000..c33a6e1cd5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -c -h Example: bib2xhtml -s paragraph -n Spinellis -c example.bib eg/paragraph-n-c.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-r.html
new file mode 100644
index 0000000000..0f1df57d75
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -r -h Example: bib2xhtml -s paragraph -n Spinellis -r example.bib eg/paragraph-n-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c-r.html
new file mode 100644
index 0000000000..afacaf4048
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -u -c -r -h Example: bib2xhtml -s paragraph -n Spinellis -u -c -r example.bib eg/paragraph-n-u-c-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c.html
new file mode 100644
index 0000000000..fbd48bee22
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -u -c -h Example: bib2xhtml -s paragraph -n Spinellis -u -c example.bib eg/paragraph-n-u-c.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-r.html
new file mode 100644
index 0000000000..c2dbe7173c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -u -r -h Example: bib2xhtml -s paragraph -n Spinellis -u -r example.bib eg/paragraph-n-u-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u.html
new file mode 100644
index 0000000000..da906a86e6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -u -h Example: bib2xhtml -s paragraph -n Spinellis -u example.bib eg/paragraph-n-u.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n.html
new file mode 100644
index 0000000000..9212d661fd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-n.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -n Spinellis -h Example: bib2xhtml -s paragraph -n Spinellis example.bib eg/paragraph-n.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-r.html
new file mode 100644
index 0000000000..fd3f492853
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -r -h Example: bib2xhtml -s paragraph -r example.bib eg/paragraph-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c-r.html
new file mode 100644
index 0000000000..573dfdefc1
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -u -c -r -h Example: bib2xhtml -s paragraph -u -c -r example.bib eg/paragraph-u-c-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c.html
new file mode 100644
index 0000000000..58f529072d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -u -c -h Example: bib2xhtml -s paragraph -u -c example.bib eg/paragraph-u-c.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-r.html
new file mode 100644
index 0000000000..078f1b6c3a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -u -r -h Example: bib2xhtml -s paragraph -u -r example.bib eg/paragraph-u-r.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u.html
new file mode 100644
index 0000000000..ef84f4940e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -u -h Example: bib2xhtml -s paragraph -u example.bib eg/paragraph-u.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/paragraph.html b/biblio/bibtex/utils/bib2xhtml/eg/paragraph.html
new file mode 100644
index 0000000000..28c347436a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/paragraph.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s paragraph </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s paragraph -h Example: bib2xhtml -s paragraph example.bib eg/paragraph.html -->
+<div class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<p><a name="SICP"></a>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</p>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<p><a name="RedDragon"></a>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</p>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<p><a name="Androutsellis:2004"></a>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</p>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<p><a name="XXX00"></a>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</p>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<p><a name="Smalltalk"></a>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</p>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<p><a name="Gritzalis:1999"></a>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1990"></a>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1994"></a>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:1996"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2000"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spinellis:2003b"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="CodeReading"></a>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</p>
+
+<!-- Authors: Diomidis Spinellis -->
+<p><a name="Spi06i"></a>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</p>
+
+<!-- Authors: Ken Thompson -->
+<p><a name="Thompson:1968"></a>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</p>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<p><a name="Firewalls"></a>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</p>
+
+</div>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-k.html
new file mode 100644
index 0000000000..7a3ffa688b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -c -k -h Example: bib2xhtml -s plain -c -k example.bib eg/plain-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r-k.html
new file mode 100644
index 0000000000..ae70225325
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -c -r -k -h Example: bib2xhtml -s plain -c -r -k example.bib eg/plain-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r.html
new file mode 100644
index 0000000000..5a0c207300
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -c -r -h Example: bib2xhtml -s plain -c -r example.bib eg/plain-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-c.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-c.html
new file mode 100644
index 0000000000..916d09563b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -c -h Example: bib2xhtml -s plain -c example.bib eg/plain-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-k.html
new file mode 100644
index 0000000000..9b93062026
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -k -h Example: bib2xhtml -s plain -k example.bib eg/plain-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-k.html
new file mode 100644
index 0000000000..37bc5b0fe6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -c -k -h Example: bib2xhtml -s plain -n Spinellis -c -k example.bib eg/plain-n-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r-k.html
new file mode 100644
index 0000000000..ca217e09a2
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -c -r -k -h Example: bib2xhtml -s plain -n Spinellis -c -r -k example.bib eg/plain-n-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r.html
new file mode 100644
index 0000000000..d4c54481e4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -c -r -h Example: bib2xhtml -s plain -n Spinellis -c -r example.bib eg/plain-n-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c.html
new file mode 100644
index 0000000000..1ecbc90be6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -c -h Example: bib2xhtml -s plain -n Spinellis -c example.bib eg/plain-n-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-k.html
new file mode 100644
index 0000000000..ef5310e9ed
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -k -h Example: bib2xhtml -s plain -n Spinellis -k example.bib eg/plain-n-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r-k.html
new file mode 100644
index 0000000000..dccecc084d
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -r -k -h Example: bib2xhtml -s plain -n Spinellis -r -k example.bib eg/plain-n-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7 &mdash; Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8 &mdash; CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r.html
new file mode 100644
index 0000000000..cbd85fcb66
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -r -h Example: bib2xhtml -s plain -n Spinellis -r example.bib eg/plain-n-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-k.html
new file mode 100644
index 0000000000..dc46dabffe
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -c -k -h Example: bib2xhtml -s plain -n Spinellis -u -c -k example.bib eg/plain-n-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r-k.html
new file mode 100644
index 0000000000..1d102b4be4
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -c -r -k -h Example: bib2xhtml -s plain -n Spinellis -u -c -r -k example.bib eg/plain-n-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r.html
new file mode 100644
index 0000000000..b92b1a5024
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -c -r -h Example: bib2xhtml -s plain -n Spinellis -u -c -r example.bib eg/plain-n-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c.html
new file mode 100644
index 0000000000..267ae34fcb
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -c -h Example: bib2xhtml -s plain -n Spinellis -u -c example.bib eg/plain-n-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-k.html
new file mode 100644
index 0000000000..811acd63da
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -k -h Example: bib2xhtml -s plain -n Spinellis -u -k example.bib eg/plain-n-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r-k.html
new file mode 100644
index 0000000000..718c26a85e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -r -k -h Example: bib2xhtml -s plain -n Spinellis -u -r -k example.bib eg/plain-n-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7 — Spi06i]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8 — CodeReading]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9 — Spinellis:2003b]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12 — Spinellis:1996]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13 — Spinellis:1994]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15 — Spinellis:1990]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r.html
new file mode 100644
index 0000000000..d5fb21c4d8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -r -h Example: bib2xhtml -s plain -n Spinellis -u -r example.bib eg/plain-n-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u.html
new file mode 100644
index 0000000000..0fe34ed0d9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -u -h Example: bib2xhtml -s plain -n Spinellis -u example.bib eg/plain-n-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-n.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-n.html
new file mode 100644
index 0000000000..80b677ad20
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-n.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -n Spinellis -h Example: bib2xhtml -s plain -n Spinellis example.bib eg/plain-n.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, <strong>Diomidis
+ Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-r-k.html
new file mode 100644
index 0000000000..bbf8abd1dd
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -r -k -h Example: bib2xhtml -s plain -r -k example.bib eg/plain-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 &mdash; SICP]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7 &mdash; Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8 &mdash; CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12 &mdash; Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13 &mdash; Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15 &mdash; Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 &mdash; Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-r.html
new file mode 100644
index 0000000000..ce494f01c3
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -r -h Example: bib2xhtml -s plain -r example.bib eg/plain-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-k.html
new file mode 100644
index 0000000000..8b35097825
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -c -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -c -k -h Example: bib2xhtml -s plain -u -c -k example.bib eg/plain-u-c-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r-k.html
new file mode 100644
index 0000000000..5645b183c7
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -c -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -c -r -k -h Example: bib2xhtml -s plain -u -c -r -k example.bib eg/plain-u-c-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r.html
new file mode 100644
index 0000000000..ae2c90d991
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -c -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -c -r -h Example: bib2xhtml -s plain -u -c -r example.bib eg/plain-u-c-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[1]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[2]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[3]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[5]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[6]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[7]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[11]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[14]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[15]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[16]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[17]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c.html
new file mode 100644
index 0000000000..b9da45d878
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-c.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -c </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -c -h Example: bib2xhtml -s plain -u -c example.bib eg/plain-u-c.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[1]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[3]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[4]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[5]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[6]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[7]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[9]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[11]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[12]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[13]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[14]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[15]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-k.html
new file mode 100644
index 0000000000..f8a520b387
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -k -h Example: bib2xhtml -s plain -u -k example.bib eg/plain-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r-k.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r-k.html
new file mode 100644
index 0000000000..a581d032d0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r-k.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -r -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -r -k -h Example: bib2xhtml -s plain -u -r -k example.bib eg/plain-u-r-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1 — SICP]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2 — RedDragon]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3 — Androutsellis:2004]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4 — XXX00]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5 — Smalltalk]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7 — Spi06i]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8 — CodeReading]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9 — Spinellis:2003b]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12 — Spinellis:1996]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13 — Spinellis:1994]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15 — Spinellis:1990]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16 — Thompson:1968]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17 — Firewalls]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r.html
new file mode 100644
index 0000000000..501839f6aa
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u-r.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u -r </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -r -h Example: bib2xhtml -s plain -u -r example.bib eg/plain-u-r.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[7]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[8]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[9]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[13]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[14]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[15]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain-u.html b/biblio/bibtex/utils/bib2xhtml/eg/plain-u.html
new file mode 100644
index 0000000000..d0ded683b0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain-u.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -u -h Example: bib2xhtml -s plain -u example.bib eg/plain-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred V.
+ Aho, John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-László Barabási,
+ Mônica Ferreira da Silva, F. Paternò,
+ Władysław M. Turski, Sten-Åke
+ Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/plain.html b/biblio/bibtex/utils/bib2xhtml/eg/plain.html
new file mode 100644
index 0000000000..ce27635cea
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/plain.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s plain </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s plain -h Example: bib2xhtml -s plain example.bib eg/plain.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[1]</a></dt><dd>Harold
+ Abelson, Gerald&nbsp;Jay Sussman, and Jullie
+ Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[2]</a></dt><dd>Alfred&nbsp;V.
+ Aho, John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[3]</a></dt><dd>Stephanos Androutsellis-Theotokis and
+ Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[4]</a></dt><dd>Albert-L&aacute;szl&oacute; Barab&aacute;si,
+ M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva, F.&nbsp;Patern&ograve;,
+ Wladyslaw&nbsp;M. Turski, Sten-&Aring;ke
+ T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[5]</a></dt><dd>Adele Goldberg and David
+ Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[6]</a></dt><dd>Stefanos Gritzalis, Diomidis
+ Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[7]</a></dt><dd>Diomidis Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[8]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[9]</a></dt><dd>Diomidis Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[10]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[12]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[13]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[14]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[15]</a></dt><dd>Diomidis
+ Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[16]</a></dt><dd>Ken
+ Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[17]</a></dt><dd>Elizabeth Zwicky, Simon
+ Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-k.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-k.html
new file mode 100644
index 0000000000..13e9aa79c8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-k.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -k -h Example: bib2xhtml -s unsort -k example.bib eg/unsort-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1 &mdash; Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3 &mdash; Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 &mdash; Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5 &mdash; CodeReading]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12 &mdash; Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 &mdash; Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14 &mdash; Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 &mdash; Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-k.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-k.html
new file mode 100644
index 0000000000..f3426715a0
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-k.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -n Spinellis -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -n Spinellis -k -h Example: bib2xhtml -s unsort -n Spinellis -k example.bib eg/unsort-n-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1 &mdash; Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2 &mdash; Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3 &mdash; Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 &mdash; Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5 &mdash; CodeReading]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6 &mdash; Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7 &mdash; SICP]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8 &mdash; RedDragon]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9 &mdash; Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10 &mdash; Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 &mdash; Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12 &mdash; Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 &mdash; Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14 &mdash; Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15 &mdash; XXX00]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 &mdash; Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 &mdash; Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u-k.html
new file mode 100644
index 0000000000..827c80f4c5
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u-k.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -n Spinellis -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -n Spinellis -u -k -h Example: bib2xhtml -s unsort -n Spinellis -u -k example.bib eg/unsort-n-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1 — Spinellis:1993]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3 — Spinellis:2003]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 — Spinellis:2003b]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5 — CodeReading]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12 — Spinellis:1994]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 — Spinellis:1990]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14 — Spinellis:1996]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 — Spi06i]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u.html
new file mode 100644
index 0000000000..7d3105dade
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n-u.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -n Spinellis -u -h Example: bib2xhtml -s unsort -n Spinellis -u example.bib eg/unsort-n-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2]</a></dt><dd>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-n.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n.html
new file mode 100644
index 0000000000..9ee0176370
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-n.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -n Spinellis -h Example: bib2xhtml -s unsort -n Spinellis example.bib eg/unsort-n.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2]</a></dt><dd>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14]</a></dt><dd><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-u-k.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-u-k.html
new file mode 100644
index 0000000000..99a1cf8750
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-u-k.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -u -k</title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -u -k -h Example: bib2xhtml -s unsort -u -k example.bib eg/unsort-u-k.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1 — Spinellis:1993]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2 — Gritzalis:1999]</a></dt><dd>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3 — Spinellis:2003]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4 — Spinellis:2003b]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5 — CodeReading]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6 — Smalltalk]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7 — SICP]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8 — RedDragon]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9 — Firewalls]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10 — Thompson:1968]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11 — Spinellis:2000]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12 — Spinellis:1994]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13 — Spinellis:1990]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14 — Spinellis:1996]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15 — XXX00]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16 — Androutsellis:2004]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17 — Spi06i]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort-u.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort-u.html
new file mode 100644
index 0000000000..f1f29e2abc
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort-u.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -u -h Example: bib2xhtml -s unsort -u example.bib eg/unsort-u.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2]</a></dt><dd>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7]</a></dt><dd>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8]</a></dt><dd>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15]</a></dt><dd>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsort.html b/biblio/bibtex/utils/bib2xhtml/eg/unsort.html
new file mode 100644
index 0000000000..a6438c4906
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsort.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsort </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsort -h Example: bib2xhtml -s unsort example.bib eg/unsort.html -->
+<dl class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1993">[1]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</dd>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<dt><a name="Gritzalis:1999">[2]</a></dt><dd>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003">[3]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2003b">[4]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="CodeReading">[5]</a></dt><dd>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</dd>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<dt><a name="Smalltalk">[6]</a></dt><dd>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</dd>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<dt><a name="SICP">[7]</a></dt><dd>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</dd>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<dt><a name="RedDragon">[8]</a></dt><dd>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</dd>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<dt><a name="Firewalls">[9]</a></dt><dd>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</dd>
+
+<!-- Authors: Ken Thompson -->
+<dt><a name="Thompson:1968">[10]</a></dt><dd>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:2000">[11]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1994">[12]</a></dt><dd>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1990">[13]</a></dt><dd>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spinellis:1996">[14]</a></dt><dd>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</dd>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<dt><a name="XXX00">[15]</a></dt><dd>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</dd>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<dt><a name="Androutsellis:2004">[16]</a></dt><dd>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</dd>
+
+<!-- Authors: Diomidis Spinellis -->
+<dt><a name="Spi06i">[17]</a></dt><dd>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</dd>
+
+</dl>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n-u.html b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n-u.html
new file mode 100644
index 0000000000..2e418f3249
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n-u.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsortlist -n Spinellis -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsortlist -n Spinellis -u -h Example: bib2xhtml -s unsortlist -n Spinellis -u example.bib eg/unsortlist-n-u.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n.html b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n.html
new file mode 100644
index 0000000000..ffb15dd4e2
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-n.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsortlist -n Spinellis </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsortlist -n Spinellis -h Example: bib2xhtml -s unsortlist -n Spinellis example.bib eg/unsortlist-n.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis,
+ <strong>Diomidis Spinellis</strong>, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a><strong>Diomidis Spinellis</strong>.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a><strong>Diomidis
+ Spinellis</strong>.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a><strong>Diomidis
+ Spinellis</strong>.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a><strong>Diomidis
+ Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos
+ Androutsellis-Theotokis and <strong>Diomidis Spinellis</strong>.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a><strong>Diomidis Spinellis</strong>.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-u.html b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-u.html
new file mode 100644
index 0000000000..09eba8b482
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist-u.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsortlist -u </title>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsortlist -u -h Example: bib2xhtml -s unsortlist -u example.bib eg/unsortlist-u.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37–48,
+ 1993.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695–707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71–77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019–1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold Abelson,
+ Gerald Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred V. Aho,
+ John E. Hopcroft, and Jeffrey D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419–422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149–158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-László
+ Barabási, Mônica Ferreira da Silva,
+ F. Paternò, Władysław M. Turski,
+ Sten-Åke Tärnlund, Ketil Bø,
+ J. Encarnação,
+ Διομηδης
+ Σπινελλης, and
+ Pëßtêr ČĕżÅÄ¡.
+Cite this paper.
+<cite>¡Journal of Authors Against ASCII!</cite>, 45(281):69–77, 2000.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335–371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70–71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/eg/unsortlist.html b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist.html
new file mode 100644
index 0000000000..c5ea2c0f27
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/eg/unsortlist.html
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Example: bib2xhtml -s unsortlist </title>
+<meta http-equiv="Content-type" content="text/html; charset=US-ASCII" />
+</head>
+<body>
+<!-- BEGIN BIBLIOGRAPHY example -->
+<!--
+ DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY!
+ YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED!
+-->
+<!-- Generated by: bib2xhtml -s unsortlist -h Example: bib2xhtml -s unsortlist example.bib eg/unsortlist.html -->
+<ul class="bib2xhtml">
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1993"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html">Implementing Haskell: Language implementation as a tool building
+ exercise</a>.
+<cite>Structured Programming (Software Concepts and Tools)</cite>, 14:37&ndash;48,
+ 1993.</li>
+
+<!-- Authors: Stefanos Gritzalis and Diomidis Spinellis and Panagiotis
+ Georgiadis -->
+<li><a name="Gritzalis:1999"></a>Stefanos Gritzalis,
+ Diomidis Spinellis, and Panagiotis Georgiadis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm">Security protocols over open networks and distributed systems: Formal
+ methods for their analysis, design, and verification</a>.
+<cite>Computer Communications</cite>, 22(8):695&ndash;707, May 1999.
+(<a href="http://dx.doi.org/10.1016/S0140-3664(99)00030-4">doi:10.1016/S0140-3664(99)00030-4</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003"></a>Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html">The decay and failures of web references</a>.
+<cite>Communications of the ACM</cite>, 46(1):71&ndash;77, January 2003.
+(<a href="http://dx.doi.org/10.1145/602421.602422">doi:10.1145/602421.602422</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2003b"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html">Global analysis and transformations in preprocessed languages</a>.
+<cite>IEEE Transactions on Software Engineering</cite>, 29(11):1019&ndash;1030,
+ November 2003.
+(<a href="http://dx.doi.org/10.1109/TSE.2003.1245303">doi:10.1109/TSE.2003.1245303</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="CodeReading"></a>Diomidis Spinellis.
+<a href="http://www.spinellis.gr/codereading"><cite>Code Reading: The Open
+ Source Perspective</cite></a>.
+Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.</li>
+
+<!-- Authors: Adele Goldberg and David Robson -->
+<li><a name="Smalltalk"></a>Adele Goldberg and
+ David Robson.
+<cite>Smalltalk-80: The Language</cite>.
+Addison-Wesley, Reading, MA, 1989.</li>
+
+<!-- Authors: Harold Abelson and Gerald Jay Sussman and Jullie Sussman -->
+<li><a name="SICP"></a>Harold Abelson,
+ Gerald&nbsp;Jay Sussman, and Jullie Sussman.
+<cite>Structure and Interpretation of Computer Programs</cite>.
+MIT Press, Cambridge, 1985.</li>
+
+<!-- Authors: Alfred V Aho and John E Hopcroft and Jeffrey D Ullman -->
+<li><a name="RedDragon"></a>Alfred&nbsp;V. Aho,
+ John&nbsp;E. Hopcroft, and Jeffrey&nbsp;D. Ullman.
+<cite>The Design and Analysis of Computer Algorithms</cite>.
+Addison-Wesley, Reading, MA, 1974.</li>
+
+<!-- Authors: Elizabeth Zwicky and Simon Cooper and D Brent Chapman -->
+<li><a name="Firewalls"></a>Elizabeth Zwicky,
+ Simon Cooper, and D. Brent Chapman.
+<cite>Building Internet Firewalls</cite>.
+O'Reilly and Associates, Sebastopol, CA, second edition, 2000.</li>
+
+<!-- Authors: Ken Thompson -->
+<li><a name="Thompson:1968"></a>Ken Thompson.
+Programming techniques: Regular expression search algorithm.
+<cite>Communications of the ACM</cite>, 11(6):419&ndash;422, 1968.
+(<a href="http://dx.doi.org/10.1145/363347.363387">doi:10.1145/363347.363387</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:2000"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html">Outwit: Unix tool-based programming meets the Windows world</a>.
+In Christopher Small, editor, <cite>USENIX 2000 Technical
+ Conference Proceedings</cite>, pages 149&ndash;158, Berkeley, CA, June 2000.
+ Usenix Association.</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1994"></a>Diomidis
+ Spinellis.
+<cite>Programming Paradigms as Object Classes: A Structuring Mechanism for
+ Multiparadigm Programming</cite>.
+PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
+ February 1994.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1990"></a>Diomidis
+ Spinellis.
+An implementation of the Haskell language.
+Master's thesis, Imperial College, London, UK, June 1990.
+(<a href="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf">PDF</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spinellis:1996"></a>Diomidis
+ Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html">Greek
+ character encoding for electronic mail messages</a>.
+Network Information Center, Request for Comments 1947, May 1996.
+RFC-1947.</li>
+
+<!-- Authors: Albert Laszlo Barabasi and Monica Ferreira da Silva and F Paterno
+ and Wladyslaw M Turski and Sten AAke Tarnlund and Ketil Bo and J Encarnaccao
+ and Deltaiotaomicronmuetadeltaetavarsigma
+ Sigmapiiotanuepsilonlambdalambdaetavarsigma and Pesster vCuezog -->
+<li><a name="XXX00"></a>Albert-L&aacute;szl&oacute;
+ Barab&aacute;si, M&ocirc;nica&nbsp;Ferreira da&nbsp;Silva,
+ F.&nbsp;Patern&ograve;, Wladyslaw&nbsp;M. Turski,
+ Sten-&Aring;ke T&auml;rnlund, Ketil B&oslash;,
+ J.&nbsp;Encarna&ccedil;&atilde;o,
+ &Delta;&iota;&omicron;&mu;&eta;&delta;&eta;&sigmaf;
+ &Sigma;&pi;&iota;&nu;&epsilon;&lambda;&lambda;&eta;&sigmaf;, and
+ P&euml;&szlig;t&ecirc;r Cezog.
+Cite this paper.
+<cite>&iexcl;Journal of Authors Against ASCII!</cite>, 45(281):69&ndash;77, 2000.</li>
+
+<!-- Authors: Stephanos Androutsellis Theotokis and Diomidis Spinellis -->
+<li><a name="Androutsellis:2004"></a>Stephanos
+ Androutsellis-Theotokis and Diomidis Spinellis.
+<a href="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html">A
+ survey of peer-to-peer content distribution technologies</a>.
+<cite>ACM Computing Surveys</cite>, 36(4):335&ndash;371, December 2004.
+(<a href="http://dx.doi.org/10.1145/1041680.1041681">doi:10.1145/1041680.1041681</a>)</li>
+
+<!-- Authors: Diomidis Spinellis -->
+<li><a name="Spi06i"></a>Diomidis Spinellis.
+Open source and professional advancement.
+<cite>IEEE Software</cite>, 23(5):70&ndash;71, September/October 2006.
+(<a href="eg/v23n5.pdf">PDF</a>, 2 pages, 116157 bytes)
+(<a href="http://dx.doi.org/10.1109/MS.2006.136">doi:10.1109/MS.2006.136</a>)</li>
+
+</ul>
+
+<!-- END BIBLIOGRAPHY example -->
+</body></html>
diff --git a/biblio/bibtex/utils/bib2xhtml/example.bib b/biblio/bibtex/utils/bib2xhtml/example.bib
new file mode 100644
index 0000000000..afdab48654
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/example.bib
@@ -0,0 +1,201 @@
+%
+% bib2xhtml example input file. Some of the references are ficticious.
+%
+% $Id: example.bib 1.5 2007/06/14 14:28:52 dds Exp $
+%
+
+@Article{Spinellis:1993,
+ Title="Implementing {H}askell: Language Implementation as a Tool Building Exercise",
+ Author="Diomidis Spinellis",
+ Journal="Structured Programming (Software Concepts and Tools)",
+ Volume="14",
+ Pages="37--48",
+ Year="1993",
+ URL="http://www.dmst.aueb.gr/dds/pubs/jrnl/1993-StrProg-Haskell/html/exp.html"
+ }
+
+@Article{Gritzalis:1999,
+ Title="Security Protocols Over Open Networks and Distributed Systems: Formal Methods for their Analysis, Design, and Verification",
+ Author="Stefanos Gritzalis and Diomidis Spinellis and Panagiotis Georgiadis",
+ Journal="Computer Communications",
+ Year="1999",
+ DOI="doi:10.1016/S0140-3664(99)00030-4",
+ Volume=22,
+ Number=8,
+ Pages="695--707",
+ Month=may,
+ URL="http://www.dmst.aueb.gr/dds/pubs/jrnl/1997-CompComm-Formal/html/formal.htm"
+ }
+
+@Article{Spinellis:2003,
+ Author="Diomidis Spinellis",
+ Title="The Decay and Failures of Web References",
+ Journal=cacm,
+ Year=2003,
+ Month=jan,
+ Pages="71--77",
+ Volume=46,
+ Number=1,
+ JIF="1.64",
+ URL="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-CACM-URLcite/html/urlcite.html",
+ DOI="doi:10.1145/602421.602422"
+ }
+
+@Article{Spinellis:2003b,
+ Title="Global Analysis and Transformations in Preprocessed Languages",
+ DOI="doi:10.1109/TSE.2003.1245303",
+ Author="Diomidis Spinellis",
+ Journal=ieeese,
+ Pages="1019--1030",
+ Volume=29,
+ Number=11,
+ Month=nov,
+ URL="http://www.dmst.aueb.gr/dds/pubs/jrnl/2003-TSE-Refactor/html/Spi03r.html",
+ Year=2003
+ }
+
+@Book {CodeReading,
+ Author="Diomidis Spinellis",
+ Title="Code Reading: The Open Source Perspective",
+ Publisher="Addison-Wesley",
+ Address="Boston, MA",
+ Series="Effective Software Development Series",
+ URL="http://www.spinellis.gr/codereading",
+ ISBN="0-201-79940-5",
+ Year=2003
+ }
+
+@Book{Smalltalk,
+ Title="{S}malltalk-80: The Language",
+ Author="Adele Goldberg and David Robson",
+ Publisher="Addison-Wesley",
+ Address="Reading, MA",
+ Year="1989",
+ ISBN="0-201-13688-0"
+ }
+
+@Book{SICP,
+ Title="Structure and Interpretation of Computer Programs",
+ Author="Harold Abelson and Gerald Jay Sussman and Jullie Sussman",
+ Publisher="MIT Press",
+ Address="Cambridge",
+ Year="1985",
+ NewISBN="0262011530",
+ ISBN="0262010771"
+ }
+
+@Book{RedDragon,
+ Author="Alfred V. Aho and John E. Hopcroft and Jeffrey D. Ullman",
+ Title="The Design and Analysis of Computer Algorithms",
+ Publisher="Addison-Wesley",
+ Address="Reading, MA",
+ Year="1974",
+ ISBN="0-201-00029-6",
+ Keys="dds"
+ }
+
+@Book{Firewalls,
+ Title="Building Internet Firewalls",
+ Author="Elizabeth Zwicky and Simon Cooper and {D. Brent} Chapman",
+ Publisher="O'Reilly and Associates",
+ Address="Sebastopol, CA",
+ Edition="Second",
+ Year="2000",
+ ISBN="1-56592-871-7",
+ Keys="dds"
+ }
+
+@article{Thompson:1968,
+ author = {Ken Thompson},
+ title = {Programming Techniques: Regular expression search algorithm},
+ journal = cacm,
+ volume = {11},
+ number = {6},
+ year = {1968},
+ issn = {0001-0782},
+ pages = {419--422},
+ doi = {http://doi.acm.org/10.1145/363347.363387},
+ publisher = {ACM Press},
+ Where="pub/lib,have"
+ }
+
+@InProceedings{Spinellis:2000,
+ Title="Outwit: {Unix} tool-based programming meets the {Windows} world",
+ Author="Diomidis Spinellis",
+ Editor="Christopher Small",
+ Booktitle="{USENIX} 2000 Technical Conference Proceedings",
+ Pages="149--158",
+ Location="San Diego, CA",
+ Month=jun,
+ Year=2000,
+ URL="http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html",
+ Address="Berkeley, CA",
+ Organization="Usenix Association"
+ }
+
+@PhDThesis{Spinellis:1994,
+ Address="London, UK",
+ Author="Diomidis Spinellis",
+ Month="February",
+ School="Imperial College of Science, Technology and Medicine",
+ Title="Programming Paradigms as Object Classes: A Structuring Mechanism for Multiparadigm Programming",
+ PDF="http://www.dmst.aueb.gr/dds/pubs/thesis/PhD/html/thesis.pdf",
+ Year="1994"
+ }
+
+@MastersThesis{Spinellis:1990,
+ Title="An Implementation of the {H}askell Language",
+ Author="Diomidis Spinellis",
+ School="Imperial College",
+ Year="1990",
+ Month=jun,
+ PDF="http://www.dmst.aueb.gr/dds/pubs/thesis/MEng/html/haskell.pdf",
+ Address="London, UK"
+ }
+
+@Misc{Spinellis:1996,
+ Title="Greek Character Encoding for Electronic Mail Messages",
+ Author="Diomidis Spinellis",
+ HowPublished="Network Information Center, Request for Comments 1947",
+ Month="May",
+ Note="RFC-1947",
+ Year="1996",
+ URL="http://www.dmst.aueb.gr/dds/pubs/tr/rfc-1947/html/RFC1947.html"
+ }
+
+@Article{XXX00,
+ Author={Albert-L\'{a}szl\'{o} Barab\'{a}si and M\^{o}nica Ferreira da Silva and F. Patern\`{o} and W{\l}adys{\l}aw M. Turski and Sten-\AA{ke} T\"{a}rnlund and Ketil B{\o} and J. Encarna\c{c}{\~a}o and \Delta\iota\omicron\mu\eta\delta\eta\varsigma \Sigma\pi\iota\nu\epsilon\lambda\lambda\eta\varsigma and P\"{e}\ss{}t\^{e}r \v{C}\u{e}\.{z}\={o}\.{g}},
+ Journal="!`Journal of Authors Against ASCII!",
+ Title="Cite this Paper",
+ Volume={45},
+ Number=281,
+ Pages="69--77",
+ Year=2000
+ }
+
+@Article{Androutsellis:2004,
+ Title="A Survey of Peer-to-Peer Content Distribution Technologies",
+ Author="Stephanos Androutsellis-Theotokis and Diomidis Spinellis",
+ Journal=acmcs,
+ Volume=36,
+ Number=4,
+ Year="2004",
+ Pages="335--371",
+ Month=dec,
+ DOI="doi:10.1145/1041680.1041681",
+ URL="http://www.dmst.aueb.gr/dds/pubs/jrnl/2004-ACMCS-p2p/html/AS04.html"
+ }
+
+@Article{Spi06i,
+ Title="Open Source and Professional Advancement",
+ Author="Diomidis Spinellis",
+ Journal="IEEE Software",
+ ISSN="0740-7459",
+ Month="September/October",
+ Volume=23,
+ Number=5,
+ Pages="70--71",
+ DOI="10.1109/MS.2006.136",
+ Year=2006,
+ PDF="v23n5.pdf"
+ }
diff --git a/biblio/bibtex/utils/bib2xhtml/gen-bst b/biblio/bibtex/utils/bib2xhtml/gen-bst
new file mode 100755
index 0000000000..38e77cedae
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/gen-bst
@@ -0,0 +1,135 @@
+#!/local/bin/perl -w
+#
+# $Id: gen-bst 1.4 2004/04/07 12:59:49 dds Exp $
+#
+
+$DEFS = "html-btxbst.doc";
+
+sub cpp ($@);
+
+&cpp('a', 'ALPHA');
+&cpp('aa', 'ALPHA', 'ABSTRACT');
+&cpp('n', 'NAMED');
+&cpp('na', 'NAMED', 'ABSTRACT');
+&cpp('u', 'UNSRT');
+&cpp('ua', 'UNSRT', 'ABSTRACT');
+&cpp('nr', 'NAMED', 'REVERSEDATE');
+&cpp('ar', 'ALPHA', 'REVERSEDATE');
+&cpp('ara', 'ALPHA', 'ABSTRACT', 'REVERSEDATE');
+&cpp('nra', 'NAMED', 'ABSTRACT', 'REVERSEDATE');
+&cpp('acr', 'ALPHA', 'REVERSEDATE', 'SORTBYYEAR');
+&cpp('acra', 'ALPHA', 'ABSTRACT', 'REVERSEDATE', 'SORTBYYEAR');
+&cpp('ncr', 'NAMED', 'REVERSEDATE', 'SORTBYYEAR');
+&cpp('ncra', 'NAMED', 'ABSTRACT', 'REVERSEDATE', 'SORTBYYEAR');
+&cpp('ac', 'ALPHA', 'SORTBYYEAR');
+&cpp('aca', 'ALPHA', 'ABSTRACT', 'SORTBYYEAR');
+&cpp('nc', 'NAMED', 'SORTBYYEAR');
+&cpp('nca', 'NAMED', 'ABSTRACT', 'SORTBYYEAR');
+
+# ----------------------------------------------------------------------------
+# cpp function does just enough cpp parsing to process the $DEFS file.
+sub cpp ($@) {
+ my $suffix = shift;
+ my @defs = @_;
+
+ my $word;
+ my $value;
+ my %defs;
+ my $skipping = 0;
+ my $blank = 0;
+ my $outfile = "html-${suffix}.bst";
+
+ print STDERR "creating $outfile...\n";
+
+ $defs{'HTML'} = 1;
+ foreach $word (@defs) {
+#print "define $word 1\n";
+ $defs{$word} = 1;
+ }
+
+ open(FILE, "<$DEFS") || die "error opening $DEFS for read: $!\n";
+ open(OUTFILE, ">$outfile") || die "error opening $outfile for write: $!\n";
+
+line:
+ while (<FILE>) {
+ next line if (m/^%/);
+
+ if (m/^#/) {
+ if (m/^#\s*ifdef\s+(\w+)/) {
+ $word = $1;
+#print "ifdef $word: " . (exists($defs{$word}) ? "1" : "0") . "\n";
+ if ($skipping) {
+ $skipping++;
+ next line;
+ }
+ if (!exists($defs{$word})) {
+ $skipping++;
+ }
+ next line;
+ }
+ if (m/^#\s*ifndef\s+(\w+)/) {
+ $word = $1;
+ if ($skipping) {
+ $skipping++;
+ next line;
+ }
+ if (exists($defs{$word})) {
+ $skipping++;
+ }
+#print "ifndef $word: " . (exists($defs{$word}) ? "0" : "1") . "\n";
+ next line;
+ }
+ if (m/^#\s*if\s+(\!?)\s*(\w+)/) {
+ $negate = ($1 ne '');
+ $word = $2;
+ if ($skipping) {
+ $skipping++;
+ next line;
+ }
+ if (($negate && $defs{$word}) || (!$negate && !$defs{$word})) {
+ $skipping++;
+ }
+#print "if $word: (". $defs{$word} . ") " . ($defs{$word} != 0 ? "1" : "0") . "\n";
+ next line;
+ }
+ if (m/^#\s*else\b/) {
+ if ($skipping == 1) {
+ $skipping--;
+ } elsif ($skipping == 0) {
+ $skipping++;
+ }
+#print "else\n";
+ next line;
+ }
+ if (m/^#\s*endif\b/) {
+#print "endif\n";
+ if ($skipping > 0) {
+ $skipping--;
+ }
+ next line;
+ }
+ if (m/^#\s*define\s+(\w+)\s+(\S+)?/) {
+ next line if $skipping;
+ $word = $1;
+ $value = $2;
+#print "define $word = $value\n";
+ $defs{$word} = (defined($value) ? $value : 1);
+ next line;
+ }
+ }
+
+ if (m/^$/) {
+ next line if ($blank);
+ $blank = 1;
+ } else {
+ $blank = 0;
+ }
+
+ print OUTFILE if (!$skipping);
+ }
+
+ die "#ifdef/#endif mismatch!\n" if ($skipping != 0);
+
+ close(FILE);
+ close(OUTFILE);
+}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-a.bst b/biblio/bibtex/utils/bib2xhtml/html-a.bst
new file mode 100644
index 0000000000..31bb0c5331
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-a.bst
@@ -0,0 +1,1406 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-aa.bst b/biblio/bibtex/utils/bib2xhtml/html-aa.bst
new file mode 100644
index 0000000000..61db17b9e9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-aa.bst
@@ -0,0 +1,1411 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ac.bst b/biblio/bibtex/utils/bib2xhtml/html-ac.bst
new file mode 100644
index 0000000000..03b2799af1
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ac.bst
@@ -0,0 +1,1407 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-aca.bst b/biblio/bibtex/utils/bib2xhtml/html-aca.bst
new file mode 100644
index 0000000000..cd1685356b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-aca.bst
@@ -0,0 +1,1412 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-acr.bst b/biblio/bibtex/utils/bib2xhtml/html-acr.bst
new file mode 100644
index 0000000000..7bee2b50cc
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-acr.bst
@@ -0,0 +1,1408 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-acra.bst b/biblio/bibtex/utils/bib2xhtml/html-acra.bst
new file mode 100644
index 0000000000..6d57a0f4d9
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-acra.bst
@@ -0,0 +1,1413 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ar.bst b/biblio/bibtex/utils/bib2xhtml/html-ar.bst
new file mode 100644
index 0000000000..10bb6d2132
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ar.bst
@@ -0,0 +1,1407 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ara.bst b/biblio/bibtex/utils/bib2xhtml/html-ara.bst
new file mode 100644
index 0000000000..02501a1055
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ara.bst
@@ -0,0 +1,1412 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" * }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" * }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+
+ year field.or.null purify$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-btxbst.doc b/biblio/bibtex/utils/bib2xhtml/html-btxbst.doc
new file mode 100644
index 0000000000..fd661512e6
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-btxbst.doc
@@ -0,0 +1,2900 @@
+% BibTeX `plain/html' family
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+% Please notify Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU) of any bugs in
+% these standard styles or in this documentation file.
+%
+% This is file btxbxt.doc; it helps document bibliography styles,
+% and is also a template file that you can use to make
+% several different style files, if you have access to a C preprocessor.
+% For example, the standard styles were made by doing something like
+% cpp -P -DPLAIN btxbst.doc plain.txt
+% cpp -P -DUNSRT btxbst.doc unsrt.txt
+% cpp -P -DALPHA btxbst.doc alpha.txt
+% cpp -P -DABBRV btxbst.doc abbrv.txt
+% and then renaming after removing unwanted comments and blank lines.
+% If you don't have access,
+% you can edit this file by hand to imitate the preprocessor,
+% with the following explanation of the C preprocessor constructs used here.
+%
+% The output of the preprocessor is the same as the input, except that certain
+% lines will be excluded (and some blank lines will be added). The sequence
+% #if VAR
+% lines to be included when VAR is not zero
+% #else
+% lines to be included when VAR is zero
+% #endif
+% (with the #-signs appearing in column 1) means that one set or the other of
+% the lines are to be included depending on the value of VAR.
+% The #else part is optional. Comments can be added after #else and #endif.
+% Variables can be set by
+% #define VAR value
+% and one can also use #ifdef VAR to see if VAR has any value, and #ifndef
+% to see if it has none.
+% Another #if form used in this file is #if !VAR, which includes the lines
+% after the #if only if VAR is zero.
+%
+% Convention: Use all uppercase identifiers for these preprocessor variables
+% so you can spot them easily
+%
+% The command line to the preprocessor should define one of PLAIN, UNSRT, ALPHA
+% or ABBRV (though PLAIN will be used by default if none is given),
+% and the following lines will set various boolean variables to control the
+% various lines that are chosen from the rest of the file.
+% Each boolean variable should be set true (1) or false (0) in each style.
+% Here are the current variables, and their meanings:
+% LAB_ALPH: an alphabetic label is used (if false then a numeric
+% label is used)
+% SORTED: the entries should be sorted by label (if nonnumeric)
+% and other info, like authors (if false, then
+% entries remain in order of occurrence)
+% NAME_FULL: the authors, editors, etc., get the full names as
+% given in the bibliography file (if false, the first
+% names become initials)
+% ATIT_LOWER: titles of non-"books" (e.g., articles) should be
+% converted to lower-case, except the first letter or
+% first letter after a colon
+% (if false then they appear as in the database)
+% MONTH_FULL: months are spelled out in full (if false, then
+% they're abbreviated)
+% JOUR_FULL: macro journal names are spelled out in full
+% (if false then they are abbreviated, currently
+% as they appear in ACM publications)
+%
+% HTML: output will be suitable for use by bib2html rather
+% than by LaTeX. This variable should NOT be
+% set by the styles since it is orthogonal to
+% all of them.
+% ABSTRACT: currently only implemented when HTML is also true.
+% Includes the abstract field in a BLOCKQUOTE
+% element at the end of the entry. This
+% variable should NOT be set by the styles since
+% it is orthogonal to all of them.
+#ifndef UNSRT
+# ifndef ALPHA
+# ifndef ABBRV
+# ifndef NAMED
+# define PLAIN 1
+# endif
+# endif
+# endif
+#endif
+#ifdef PLAIN
+% plain style (sorted numbers)
+# define LAB_ALPH 0
+# define SORTED 1
+# define NAME_FULL 1
+# define ATIT_LOWER 1
+# define MONTH_FULL 1
+# define JOUR_FULL 1
+#endif
+#ifdef UNSRT
+% unsrt style (unsorted numbers)
+# define LAB_ALPH 0
+# define SORTED 0
+# define NAME_FULL 1
+# define ATIT_LOWER 1
+# define MONTH_FULL 1
+# define JOUR_FULL 1
+#endif
+#ifdef ALPHA
+% alpha style (sorted short alphabetics)
+# define LAB_ALPH 1
+# define SORTED 1
+# define NAME_FULL 1
+# define ATIT_LOWER 1
+# define MONTH_FULL 1
+# define JOUR_FULL 1
+#endif
+#ifdef ABBRV
+% abbrv style (sorted numbers, with abbreviations)
+# define LAB_ALPH 0
+# define SORTED 1
+# define NAME_FULL 0
+# define ATIT_LOWER 1
+# define MONTH_FULL 0
+# define JOUR_FULL 0
+#endif
+#ifdef NAMED
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+# define LAB_ALPH 1
+# define SORTED 1
+# define NAME_FULL 1
+# define ATIT_LOWER 1
+# define MONTH_FULL 1
+# define JOUR_FULL 1
+#endif
+%
+% Entry formatting: Similar to that recommended by Mary-Claire van Leunen
+% in "A Handbook for Scholars". Book-like titles are italicized
+% (emphasized) and non-book titles are converted to sentence
+% capitilization (and not enclosed in quotes).
+% This file outputs a \newblock between major blocks of an entry
+% (the name \newblock is analogous to the names \newline and \newpage)
+% so that the user can obtain an "open" format, which has a line break
+% before each block and lines after the first are indented within blocks,
+% by giving the optional \documentstyle argument `openbib';
+% The default is the "closed" format---blocks runs together.
+%
+% Citation alphabetic label format:
+% [Knu73] for single author (or editor or key)
+% [AHU83] (first letters of last names) for multiple authors
+%
+% Citation label numberic format:
+% [number]
+%
+% Reference list ordering for sorted, alphabetic lables:
+% alphabetical by citation label, then by author(s) or whatever
+% passes for author in the absence of one, then by year,
+% then title
+%
+% Reference list ordering for sorted, numeric lables:
+% alphabetical by author(s) or whatever passes
+% for author in the absence of one, then by year, then title
+%
+% Reference list ordering for unsorted:
+% by the order cited in the text
+%
+% History
+% 12/16/84 (HWT) Original `plain' version, by Howard Trickey.
+% 12/23/84 (LL) Some comments made by Leslie Lamport.
+% 2/16/85 (OP) Changes based on LL's comments, Oren Patashnik.
+% 2/17/85 (HWT) Template file and other standard styles made.
+% 3/28/85 (OP) First release, version 0.98b for BibTeX 0.98f.
+% 5/ 9/85 (OP) Version 0.98c for BibTeX 0.98i:
+% fixed Theoretical Computer Science macro name;
+% fixed the format.vol.num.pages function.
+% 1/24/88 (OP) Version 0.99a for BibTeX 0.99a, main changes:
+% assignment operator (:=) arguments reversed;
+% the preamble$ function outputs the database PREAMBLE;
+% entry.max$ and global.max$ (built-in) variables replace
+% entry.string.max and global.string.max functions;
+% alphabetizing by year then title, not just title;
+% many unnecessary ties removed; \it ==> \em;
+% the `alpha' style uses a superscripted `+' instead of a
+% `*' for unnamed names in constructing the label;
+% the `abbrv' style now uses "Mar." and "Sept.";
+% the functions calc.label and presort now look at just
+% the fields they're supposed to;
+% BOOKLET, MASTERSTHESIS, TECHREPORT use nonbook titles;
+% INBOOK and INCOLLECTION take an optional type (e.g.
+% type = "Section"), overriding the default "chapter";
+% BOOK, INBOOK, INCOLLECTION, and PROCEEDINGS now allow
+% either volume or number, not just volume;
+% INCOLLECTION now allows an edition and series field;
+% PROCEEDINGS and INPROCEEDINGS now use the address field
+% to tell where a conference was held;
+% INPROCEEDINGS and PROCEEDINGS now allow either volume
+% or number, and also a series field;
+% MASTERSTHESIS and PHDTHESIS accept types other than
+% "Master's thesis" and "PhD thesis";
+% UNPUBLISHED now outputs, in one block, note then date;
+% MANUAL now prints out the organization in
+% the first block if the author field is empty;
+% MISC can't be empty---it requires some optional field.
+% 3/23/88 (OP) Version 0.99b for BibTeX 0.99c---changed the three
+% erroneous occurrences of `cite ' to `cite$ '; this
+% change didn't affect the four standard styles, so the
+% 0.99a versions of those styles are still current.
+%
+% The ENTRY declaration
+% Like Scribe's (according to pages 231-2 of the April '84 edition),
+% but no fullauthor or editors fields because BibTeX does name handling.
+% The annote field is commented out here because this family doesn't
+% include an annotated bibliography style. And in addition to the fields
+% listed here, BibTeX has a built-in crossref field, explained later.
+
+ENTRY
+% Fields:
+ { address
+% Usually the address of a publisher or other type of organization.
+% Put information in this field only if it helps the reader find the
+% thing---for example you should omit the address of a major
+% publisher entirely. For a PROCEEDINGS or an INPROCEEDINGS,
+% however, it's the address of the conference; for those two entry
+% types, include the publisher's or organization's address, if
+% necessary, in the publisher or organization field.
+% annote
+% Long annotation---for annotated bibliographies (begins sentence).
+ author
+% Name(s) of author(s), in BibTeX name format.
+ booktitle
+% Book title when the thing being referenced isn't the whole book.
+% For book entries, the title field should be used instead.
+ chapter
+% Chapter (or section or whatever) number.
+ edition
+% Edition of a book---should be an ordinal (e.g., "Second").
+ editor
+% Name(s) of editor(s), in BibTeX name format.
+% If there is also an author field, then the editor field should be
+% for the book or collection that the work appears in.
+ howpublished
+% How something strange has been published (begins sentence).
+ institution
+% Sponsoring institution of a technical report.
+ journal
+% Journal name (macros are provided for many).
+ key
+% Alphabetizing, labeling, and cross-referencing key
+% (needed when an entry has no author or editor).
+ month
+% Month (macros are provided).
+ note
+% To help the reader find a reference (begins sentence).
+ number
+% Number of a journal or technical report, or of a work in a series.
+ organization
+% Organization sponsoring a conference (or publishing a manual); if
+% the editor (or author) is empty, and if the organization produces
+% an awkward label or cross reference, you should put appropriately
+% condensed organization information in the key field as well.
+ pages
+% Page number or numbers (use `--' to separate a range, use `+'
+% to indicate pages following that don't form a simple range).
+ publisher
+% Publisher name.
+ school
+% School name (for theses).
+ series
+% The name of a series or set of books.
+% An individual book will will also have it's own title.
+ title
+% The title of the thing you're referred to.
+ type
+% Type of a Techreport (e.g., "Research Note") to be used instead of
+% the default "Technical Report"; or, similarly, the type of a
+% thesis; or of a part of a book.
+ volume
+% The volume number of a journal or multivolume work.
+ year
+% The year should contain only numerals (technically, it should end
+% with four numerals, after purification; doesn't a begin sentence).
+#ifdef HTML
+ dvi
+% DVI source file. bib2html will create a link to this
+% file in the HTML it generates.
+ html
+% Deprecated: old name for "url"
+ keywords
+% Obvious. bib2html will create a HTML comment containing these
+% keywords in the HTML it generates.
+ pdf
+% PDF source file. bib2html will create a link to this
+% file in the HTML it generates.
+ postscript
+% PostScript source file. bib2html will create a link to this
+% file in the HTML it generates.
+ url
+% URL of document. Used by bib2html.
+ doi
+% Digital Object Identifier of document. Used by bib2html.
+% to append a doi entry link at the end of the citation.
+ mailto
+% E-mail contact address for paper. Used by bib2html to create a
+% mailto link for authors.
+#endif /* HTML */
+#ifdef ABSTRACT
+ abstract
+% Abstract of document. Used by bib2html.
+#endif /* ABSTRACT */
+ }
+% There are no integer entry variables
+ {}
+% These string entry variables are used to form the citation label.
+% In a storage pinch, sort.label can be easily computed on the fly.
+#if LAB_ALPH
+#if SORTED
+ { label extra.label sort.label }
+#else !SORTED
+% It doesn't seem like a good idea to use an order-of-citation
+% reference list when using alphabetic labels, but when this happens
+% we do things a little differently
+ { label }
+#endif SORTED
+#else !LAB_ALPH
+ { label }
+#endif LAB_ALPH
+
+% Each entry function starts by calling output.bibitem, to write the
+% \bibitem and its arguments to the .BBL file. Then the various fields
+% are formatted and printed by output or output.check. Those functions
+% handle the writing of separators (commas, periods, \newblock's),
+% taking care not to do so when they are passed a null string.
+% Finally, fin.entry is called to add the final period and finish the
+% entry.
+%
+% A bibliographic reference is formatted into a number of `blocks':
+% in the open format, a block begins on a new line and subsequent
+% lines of the block are indented. A block may contain more than
+% one sentence (well, not a grammatical sentence, but something to
+% be ended with a sentence ending period). The entry functions should
+% call new.block whenever a block other than the first is about to be
+% started. They should call new.sentence whenever a new sentence is
+% to be started. The output functions will ensure that if two
+% new.sentence's occur without any non-null string being output between
+% them then there won't be two periods output. Similarly for two
+% successive new.block's.
+%
+% The output routines don't write their argument immediately.
+% Instead, by convention, that argument is saved on the stack to be
+% output next time (when we'll know what separator needs to come
+% after it). Meanwhile, the output routine has to pop the pending
+% output off the stack, append any needed separator, and write it.
+%
+% To tell which separator is needed, we maintain an output.state.
+% It will be one of these values:
+% before.all just after the \bibitem
+% mid.sentence in the middle of a sentence: comma needed
+% if more sentence is output
+% after.sentence just after a sentence: period needed
+% after.block just after a block (and sentence):
+% period and \newblock needed.
+% Note: These styles don't use after.sentence
+%
+% VAR: output.state : INTEGER -- state variable for output
+%
+% The output.nonnull function saves its argument (assumed to be nonnull)
+% on the stack, and writes the old saved value followed by any needed
+% separator. The ordering of the tests is decreasing frequency of
+% occurrence.
+%
+% output.nonnull(s) ==
+% BEGIN
+% s := argument on stack
+% if output.state = mid.sentence then
+% write$(pop() * ", ")
+% -- "pop" isn't a function: just use stack top
+% else
+% if output.state = after.block then
+% write$(add.period$(pop()))
+% newline$
+% write$("\newblock ")
+% else
+% if output.state = before.all then
+% write$(pop())
+% else -- output.state should be after.sentence
+% write$(add.period$(pop()) * " ")
+% fi
+% fi
+% output.state := mid.sentence
+% fi
+% push s on stack
+% END
+%
+% The output function calls output.nonnull if its argument is non-empty;
+% its argument may be a missing field (thus, not necessarily a string)
+%
+% output(s) ==
+% BEGIN
+% if not empty$(s) then output.nonnull(s)
+% fi
+% END
+%
+% The output.check function is the same as the output function except that, if
+% necessary, output.check warns the user that the t field shouldn't be empty
+% (this is because it probably won't be a good reference without the field;
+% the entry functions try to make the formatting look reasonable even when
+% such fields are empty).
+%
+% output.check(s,t) ==
+% BEGIN
+% if empty$(s) then
+% warning$("empty " * t * " in " * cite$)
+% else output.nonnull(s)
+% fi
+% END
+%
+% The output.bibitem function writes the \bibitem for the current entry
+% (the label should already have been set up), and sets up the separator
+% state for the output functions. And, it leaves a string on the stack
+% as per the output convention.
+%
+% output.bibitem ==
+% BEGIN
+% newline$
+% write$("\bibitem[") % for alphabetic labels,
+% write$(label) % these three lines
+% write$("]{") % are used
+% write$("\bibitem{") % this line for numeric labels
+% write$(cite$)
+% write$("}")
+% push "" on stack
+% output.state := before.all
+% END
+%
+% The fin.entry function finishes off an entry by adding a period to the
+% string remaining on the stack. If the state is still before.all
+% then nothing was produced for this entry, so the result will look bad,
+% but the user deserves it. (We don't omit the whole entry because the
+% entry was cited, and a bibitem is needed to define the citation label.)
+%
+% fin.entry ==
+% BEGIN
+% write$(add.period$(pop()))
+% newline$
+% END
+%
+% The new.block function prepares for a new block to be output, and
+% new.sentence prepares for a new sentence.
+%
+% new.block ==
+% BEGIN
+% if output.state <> before.all then
+% output.state := after.block
+% fi
+% END
+%
+% new.sentence ==
+% BEGIN
+% if output.state <> after.block then
+% if output.state <> before.all then
+% output.state := after.sentence
+% fi
+% fi
+% END
+%
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+% the variables s and t are temporary string holders
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+#ifndef HTML
+ "\newblock " write$
+#endif
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+#ifndef HTML
+#if LAB_ALPH
+ "\bibitem[" write$
+ label write$
+ "]{" write$
+#else
+ "\bibitem{" write$
+#endif LAB_ALPH
+ cite$ write$
+ "}" write$
+ newline$
+#else /* HTML */
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+#endif
+ ""
+ before.all 'output.state :=
+}
+
+% This function finishes all entries.
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+#ifdef HTML
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+#ifdef ABSTRACT
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+#endif /* ABSTRACT */
+ "</dd>" write$
+ newline$
+#endif /* HTML */
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+% These three functions pop one or two (integer) arguments from the stack
+% and push a single one, either 0 or 1.
+% The 'skip$ in the `and' and `or' functions are used because
+% the corresponding if$ would be idempotent
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+% Sometimes we begin a new block only if the block will be big enough. The
+% new.block.checka function issues a new.block if its argument is nonempty;
+% new.block.checkb does the same if either of its TWO arguments is nonempty.
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+% The new.sentence.check functions are analogous.
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+% Here are some functions for formatting chunks of an entry.
+% By convention they either produce a string that can be followed by
+% a comma or period (using add.period$, so it is OK to end in a period),
+% or they produce the null string.
+%
+% A useful utility is the field.or.null function, which checks if the
+% argument is the result of pushing a `missing' field (one for which no
+% assignment was made when the current entry was read in from the database)
+% or the result of pushing a string having no non-white-space characters.
+% It returns the null string if so, otherwise it returns the field string.
+% Its main (but not only) purpose is to guarantee that what's left on the
+% stack is a string rather than a missing field.
+%
+% field.or.null(s) ==
+% BEGIN
+% if empty$(s) then return ""
+% else return s
+% END
+%
+% Another helper function is emphasize, which returns the argument emphazised,
+% if that is non-empty, otherwise it returns the null string. Italic
+% corrections aren't used, so this function should be used when punctation
+% will follow the result.
+%
+% emphasize(s) ==
+% BEGIN
+% if empty$(s) then return ""
+% else return "{\em " * s * "}"
+%
+% The format.names function formats the argument (which should be in
+% BibTeX name format) into "First Von Last, Junior", separated by commas
+% and with an "and" before the last (but ending with "et~al." if the last
+% of multiple authors is "others"). This function's argument should always
+% contain at least one name.
+%
+% VAR: nameptr, namesleft, numnames: INTEGER
+% pseudoVAR: nameresult: STRING (it's what's accumulated on the stack)
+%
+% format.names(s) ==
+% BEGIN
+% nameptr := 1
+% numnames := num.names$(s)
+% namesleft := numnames
+% while namesleft > 0
+% do
+% % for full names:
+% t := format.name$(s, nameptr, "{ff~}{vv~}{ll}{, jj}")
+% % for abbreviated first names:
+% t := format.name$(s, nameptr, "{f.~}{vv~}{ll}{, jj}")
+% if nameptr > 1 then
+% if namesleft > 1 then nameresult := nameresult * ", " * t
+% else if numnames > 2
+% then nameresult := nameresult * ","
+% fi
+% if t = "others"
+% then nameresult := nameresult * " et~al."
+% else nameresult := nameresult * " and " * t
+% fi
+% fi
+% else nameresult := t
+% fi
+% nameptr := nameptr + 1
+% namesleft := namesleft - 1
+% od
+% return nameresult
+% END
+%
+% The format.authors function returns the result of format.names(author)
+% if the author is present, or else it returns the null string
+%
+% format.authors ==
+% BEGIN
+% if empty$(author) then return ""
+% else return format.names(author)
+% fi
+% END
+%
+% Format.editors is like format.authors, but it uses the editor field,
+% and appends ", editor" or ", editors"
+%
+% format.editors ==
+% BEGIN
+% if empty$(editor) then return ""
+% else
+% if num.names$(editor) > 1 then
+% return format.names(editor) * ", editors"
+% else
+% return format.names(editor) * ", editor"
+% fi
+% fi
+% END
+%
+% Other formatting functions are similar, so no "comment version" will be
+% given for them.
+%
+% The `pop$' in this function gets rid of the duplicate `empty' value and
+% the `skip$' returns the duplicate field value
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+#ifndef HTML
+ { "{\em " swap$ * "}" * }
+#else /* HTML */
+ { "<cite>" swap$ * "</cite>" * }
+#endif /* HTML */
+ if$
+}
+
+#ifdef HTML
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+#endif /* HTML */
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+#if NAME_FULL
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+#else
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+#endif NAME_FULL
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% The format.title function is used for non-book-like titles.
+% For most styles we convert to lowercase (except for the very first letter,
+% and except for the first one after a colon (followed by whitespace)),
+% and hope the user has brace-surrounded words that need to stay capitilized;
+% for some styles, however, we leave it as it is in the database.
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+#if ATIT_LOWER
+ { title "t" change.case$ }
+#else
+ 'title
+#endif ATIT_LOWER
+ if$
+#ifdef HTML
+ add.link
+#endif /* HTML */
+}
+
+% By default, BibTeX sets the global integer variable global.max$ to the BibTeX
+% constant glob_str_size, the maximum length of a global string variable.
+% Analogously, BibTeX sets the global integer variable entry.max$ to
+% ent_str_size, the maximum length of an entry string variable.
+% The style designer may change these if necessary (but this is unlikely)
+
+% The n.dashify function makes each single `-' in a string a double `--'
+% if it's not already
+%
+% pseudoVAR: pageresult: STRING (it's what's accumulated on the stack)
+%
+% n.dashify(s) ==
+% BEGIN
+% t := s
+% pageresult := ""
+% while (not empty$(t))
+% do
+% if (first character of t = "-")
+% then
+% if (next character isn't)
+% then
+% pageresult := pageresult * "--"
+% t := t with the "-" removed
+% else
+% while (first character of t = "-")
+% do
+% pageresult := pageresult * "-"
+% t := t with the "-" removed
+% od
+% fi
+% else
+% pageresult := pageresult * the first character
+% t := t with the first character removed
+% fi
+% od
+% return pageresult
+% END
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+% The format.date function is for the month and year, but we give a warning if
+% there's an empty year but the month is there, and we return the empty string
+% if they're both empty.
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% The format.btitle is for formatting the title field when it is a book-like
+% entry---the style used here keeps it in uppers-and-lowers and emphasizes it.
+
+FUNCTION {format.btitle}
+{ title emphasize
+#ifdef HTML
+ add.link
+#endif /* HTML */
+}
+
+% For several functions we'll need to connect two strings with a
+% tie (~) if the second one isn't very long (fewer than 3 characters).
+% The tie.or.space.connect function does that. It concatenates the two
+% strings on top of the stack, along with either a tie or space between
+% them, and puts this concatenation back onto the stack:
+%
+% tie.or.space.connect(str1,str2) ==
+% BEGIN
+% if text.length$(str2) < 3
+% then return the concatenation of str1, "~", and str2
+% else return the concatenation of str1, " ", and str2
+% END
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+% The either.or.check function complains if both fields or an either-or pair
+% are nonempty.
+%
+% either.or.check(t,s) ==
+% BEGIN
+% if empty$(s) then
+% warning$(can't use both " * t * " fields in " * cite$)
+% fi
+% END
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+% The format.bvolume function is for formatting the volume and perhaps
+% series name of a multivolume work. If both a volume and a series field
+% are there, we assume the series field is the title of the whole multivolume
+% work (the title field should be the title of the thing being referred to),
+% and we add an "of <series>". This function is called in mid-sentence.
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+% The format.number.series function is for formatting the series name
+% and perhaps number of a work in a series. This function is similar to
+% format.bvolume, although for this one the series must exist (and the
+% volume must not exist). If the number field is empty we output either
+% the series field unchanged if it exists or else the null string.
+% If both the number and series fields are there we assume the series field
+% gives the name of the whole series (the title field should be the title
+% of the work being one referred to), and we add an "in <series>".
+% We capitilize Number when this function is used at the beginning of a block.
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+% The format.edition function appends " edition" to the edition, if present.
+% We lowercase the edition (it should be something like "Third"), because
+% this doesn't start a sentence.
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+% The format.pages function is used for formatting a page range in a book
+% (and in rare circumstances, an article).
+%
+% The multi.page.check function examines the page field for a "-" or "," or "+"
+% so that format.pages can use "page" instead of "pages" if none exists.
+% Note: global.max$ here means "take the rest of the string"
+%
+% VAR: multiresult: INTEGER (actually, a boolean)
+%
+% multi.page.check(s) ==
+% BEGIN
+% t := s
+% multiresult := false
+% while ((not multiresult) and (not empty$(t)))
+% do
+% if (first character of t = "-" or "," or "+")
+% then multiresult := true
+% else t := t with the first character removed
+% fi
+% od
+% return multiresult
+% END
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+% This function doesn't begin a sentence so "pages" isn't capitalized.
+% Other functions that use this should keep that in mind.
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+% The format.vol.num.pages function is for the volume, number, and page range
+% of a journal article. We use the format: vol(number):pages, with some
+% variations for empty fields. This doesn't begin a sentence.
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+
+% The format.chapter.pages, if the chapter is present, puts whatever is in the
+% type field (or else "chapter" if type is empty) in front of a chapter number.
+% It then appends the pages, if present. This doesn't begin a sentence.
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+% The format.in.ed.booktitle function is used for starting out a sentence
+% that begins "In <booktitle>", putting an editor before the title if one
+% exists.
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+% The function empty.misc.check complains if all six fields are empty, and
+% if there's been no sorting or alphabetic-label complaint.
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+#if SORTED
+ key empty$ not and
+#else !SORTED
+#if LAB_ALPH
+ key empty$ not and
+#endif LAB_ALPH
+#endif SORTED
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+% The function format.thesis.type returns either the (case-changed) type field,
+% if it is defined, or else the default string already on the stack
+% (like "Master's thesis" or "PhD thesis").
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+% The function format.tr.number makes a string starting with "Technical Report"
+% (or type, if that field is defined), followed by the number if there is one;
+% it returns the starting part (with a case change) even if there is no number.
+% This is used at the beginning of a sentence.
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+% Now come the cross-referencing functions (these are invoked because
+% one entry in the database file(s) cross-references another, by giving
+% the other entry's database key in a `crossref' field). This feature
+% allows one or more titled things that are part of a larger titled
+% thing to cross-reference the larger thing. These styles allow for
+% five posibilities: (1) an ARTICLE may cross-reference an ARTICLE;
+% (2) a BOOK, (3) INBOOK, or (4) INCOLLECTION may cross-reference a BOOK;
+% or (5) an INPROCEEDINGS may cross-reference a PROCEEDINGS.
+% Each of these is explained in more detail later.
+%
+% An ARTICLE entry type may cross reference another ARTICLE (this is
+% intended for when an entire journal is devoted to a single topic---
+% but since there is no JOURNAL entry type, the journal, too, should be
+% classified as an ARTICLE but without the author and title fields).
+% This will result in two warning messages for the journal's entry
+% if it's included in the reference list, but such is life.
+%
+% format.article.crossref ==
+% BEGIN
+% if empty$(key) then
+% if empty$(journal) then
+% warning$("need key or journal for " * cite$ *
+% " to crossref " * crossref)
+% return(" \cite{" * crossref * "}")
+% else
+% return("In " * emphazise.correct (journal) *
+% " \cite{" * crossref * "}")
+% fi
+% else
+% return("In " * key * " \cite{" * crossref * "}")
+% fi
+% END
+%
+% The other cross-referencing functions are similar, so no "comment version"
+% will be given for them.
+
+FUNCTION {format.article.crossref}
+{
+#ifdef HTML
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+#endif /* HTML */
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+#ifndef HTML
+ { "In {\em " journal * "\/}" * }
+#else /* HTML */
+ { "<cite>" * journal * "</cite>" * }
+#endif /* HTML */
+ if$
+ }
+#ifndef HTML
+ { "In " key * }
+#else /* HTML */
+ { key * }
+#endif /* HTML */
+ if$
+#ifndef HTML
+ " \cite{" * crossref * "}" *
+#else /* HTML */
+ "</a> \citelabel{" * crossref * "}" *
+#endif /* HTML */
+}
+
+% We use just the last names of editors for a cross reference: either
+% "editor", or "editor1 and editor2", or "editor1 et~al." depending on
+% whether there are one, or two, or more than two editors.
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+% A BOOK (or INBOOK) entry type (assumed to be for a single volume in a
+% multivolume work) may cross reference another BOOK (the entire multivolume).
+% Usually there will be an editor, in which case we use that to construct the
+% cross reference; otherwise we use a nonempty key field or else the series
+% field (since the series gives the title of the multivolume work).
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+#ifdef HTML
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+#endif /* HTML */
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+#ifndef HTML
+ { "{\em " * series * "\/}" * }
+#else /* HTML */
+ { "<cite>" * series * "</cite>" * }
+#endif /* HTML */
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+#ifndef HTML
+ " \cite{" * crossref * "}" *
+#else /* HTML */
+ "</a> \citelabel{" * crossref * "}" *
+#endif /* HTML */
+}
+
+% An INCOLLECTION entry type may cross reference a BOOK (assumed to be the
+% collection), or an INPROCEEDINGS may cross reference a PROCEEDINGS.
+% Often there will be an editor, in which case we use that to construct
+% the cross reference; otherwise we use a nonempty key field or else
+% the booktitle field (which gives the cross-referenced work's title).
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+#ifdef HTML
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+#endif /* HTML */
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+#ifndef HTML
+ { "In {\em " booktitle * "\/}" * }
+#else /* HTML */
+ { "<cite>" * booktitle * "</cite>" * }
+#endif /* HTML */
+ if$
+ }
+#ifndef HTML
+ { "In " key * }
+#else /* HTML */
+ { key * }
+#endif /* HTML */
+ if$
+ }
+#ifndef HTML
+ { "In " format.crossref.editor * }
+#else /* HTML */
+ { format.crossref.editor * }
+#endif /* HTML */
+ if$
+#ifndef HTML
+ " \cite{" * crossref * "}" *
+#else /* HTML */
+ "</a> \citelabel{" * crossref * "}" *
+#endif /* HTML */
+}
+
+% Now we define the type functions for all entry types that may appear
+% in the .BIB file---e.g., functions like `article' and `book'. These
+% are the routines that actually generate the .BBL-file output for
+% the entry. These must all precede the READ command. In addition, the
+% style designer should have a function `default.type' for unknown types.
+% Note: The fields (within each list) are listed in order of appearance,
+% except as described for an `inbook' or a `proceedings'.
+%
+% The article function is for an article in a journal. An article may
+% CROSSREF another article.
+% Required fields: author, title, journal, year
+% Optional fields: volume, number, pages, month, note
+%
+% article ==
+% BEGIN
+% output.bibitem
+% output.check(format.authors,"author")
+% new.block
+% output.check(format.title,"title")
+% new.block
+% if missing$(crossref) then
+% output.check(emphasize(journal),"journal")
+% output(format.vol.num.pages)
+% output.check(format.date,"year")
+% else
+% output.nonnull(format.article.crossref)
+% output(format.pages)
+% fi
+% new.block
+% output(note)
+% fin.entry
+% END
+%
+% The book function is for a whole book. A book may CROSSREF another book.
+% Required fields: author or editor, title, publisher, year
+% Optional fields: volume or number, series, address, edition, month,
+% note
+%
+% book ==
+% BEGIN
+% if empty$(author) then output.check(format.editors,"author and editor")
+% else output.check(format.authors,"author")
+% if missing$(crossref) then
+% either.or.check("author and editor",editor)
+% fi
+% fi
+% new.block
+% output.check(format.btitle,"title")
+% if missing$(crossref) then
+% output(format.bvolume)
+% new.block
+% output(format.number.series)
+% new.sentence
+% output.check(publisher,"publisher")
+% output(address)
+% else
+% new.block
+% output.nonnull(format.book.crossref)
+% fi
+% output(format.edition)
+% output.check(format.date,"year")
+% new.block
+% output(note)
+% fin.entry
+% END
+%
+% The other entry functions are all quite similar, so no "comment version"
+% will be given for them.
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+% A booklet is a bound thing without a publisher or sponsoring institution.
+% Required: title
+% Optional: author, howpublished, address, month, year, note
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+% For the conference entry type, see inproceedings.
+
+% An inbook is a piece of a book: either a chapter and/or a page range.
+% It may CROSSREF a book. If there's no volume field, the type field
+% will come before number and series.
+% Required: author or editor, title, chapter and/or pages, publisher,year
+% Optional: volume or number, series, type, address, edition, month, note
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+% An incollection is like inbook, but where there is a separate title
+% for the referenced thing (and perhaps an editor for the whole).
+% An incollection may CROSSREF a book.
+% Required: author, title, booktitle, publisher, year
+% Optional: editor, volume or number, series, type, chapter, pages,
+% address, edition, month, note
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+% An inproceedings is an article in a conference proceedings, and it may
+% CROSSREF a proceedings. If there's no address field, the month (& year)
+% will appear just before note.
+% Required: author, title, booktitle, year
+% Optional: editor, volume or number, series, pages, address, month,
+% organization, publisher, note
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+% The conference function is included for Scribe compatibility.
+
+FUNCTION {conference} { inproceedings }
+
+% A manual is technical documentation.
+% Required: title
+% Optional: author, organization, address, edition, month, year, note
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+% A mastersthesis is a Master's thesis.
+% Required: author, title, school, year
+% Optional: type, address, month, note
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+% A misc is something that doesn't fit elsewhere.
+% Required: at least one of the `optional' fields
+% Optional: author, title, howpublished, month, year, note
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+% A phdthesis is like a mastersthesis.
+% Required: author, title, school, year
+% Optional: type, address, month, note
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+% A proceedings is a conference proceedings.
+% If there is an organization but no editor field, the organization will
+% appear as the first optional field (we try to make the first block nonempty);
+% if there's no address field, the month (& year) will appear just before note.
+% Required: title, year
+% Optional: editor, volume or number, series, address, month,
+% organization, publisher, note
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+% A techreport is a technical report.
+% Required: author, title, institution, year
+% Optional: type, number, address, month, note
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+% An unpublished is something that hasn't been published.
+% Required: author, title, note
+% Optional: month, year
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+% We use entry type `misc' for an unknown type; BibTeX gives a warning.
+
+FUNCTION {default.type} { misc }
+
+% Here are macros for common things that may vary from style to style.
+% Users are encouraged to use these macros.
+%
+% Months are either written out in full or abbreviated
+
+#if MONTH_FULL
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+#else !MONTH_FULL
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+#endif MONTH_FULL
+
+% Journals are either written out in full or abbreviated;
+% the abbreviations are like those found in ACM publications.
+%
+% To get a completely different set of abbreviations, it may be best to make
+% a separate .bib file with nothing but those abbreviations; users could then
+% include that file name as the first argument to the \bibliography command
+
+#if JOUR_FULL
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+#else !JOUR_FULL
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+#endif JOUR_FULL
+
+% Now we read in the .BIB entries.
+
+READ
+
+% The sortify function converts to lower case after purify$ing; it's
+% used in sorting and in computing alphabetic labels after sorting
+%
+% The chop.word(w,len,s) function returns either s or, if the first len
+% letters of s equals w (this comparison is done in the third line of the
+% function's definition), it returns that part of s after w.
+
+#if SORTED
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+#else !SORTED
+#if LAB_ALPH
+
+% We need the chop.word stuff for the dubious unsorted-list-with-labels case.
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+#endif LAB_ALPH
+#endif SORTED
+
+% This long comment applies only to alphabetic labels
+%
+% The format.lab.names function makes a short label by using the initials of
+% the von and Last parts of the names (but if there are more than four names,
+% (i.e., people) it truncates after three and adds a superscripted "+";
+% it also adds such a "+" if the last of multiple authors is "others").
+% If there is only one name, and its von and Last parts combined have just
+% a single name-token ("Knuth" has a single token, "Brinch Hansen" has two),
+% we take the first three letters of the last name. The boolean
+% et.al.char.used tells whether we've used a superscripted "+", so that we
+% know whether to include a LaTeX macro for it.
+%
+% format.lab.names(s) ==
+% BEGIN
+% numnames := num.names$(s)
+% if numnames > 1 then
+% if numnames > 4 then
+% namesleft := 3
+% else
+% namesleft := numnames
+% nameptr := 1
+% nameresult := ""
+% while namesleft > 0
+% do
+% if (name_ptr = numnames) and
+% format.name$(s, nameptr, "{ff }{vv }{ll}{ jj}") = "others"
+% then nameresult := nameresult * "{\etalchar{+}}"
+% et.al.char.used := true
+% else nameresult := nameresult *
+% format.name$(s, nameptr, "{v{}}{l{}}")
+% nameptr := nameptr + 1
+% namesleft := namesleft - 1
+% od
+% if numnames > 4 then
+% nameresult := nameresult * "{\etalchar{+}}"
+% et.al.char.used := true
+% else
+% t := format.name$(s, 1, "{v{}}{l{}}")
+% if text.length$(t) < 2 then % there's just one name-token
+% nameresult := text.prefix$(format.name$(s,1,"{ll}"),3)
+% else
+% nameresult := t
+% fi
+% fi
+% return nameresult
+% END
+%
+% Exactly what fields we look at in constructing the primary part of the label
+% depends on the entry type; this selectivity (as opposed to, say, always
+% looking at author, then editor, then key) helps ensure that "ignored" fields,
+% as described in the LaTeX book, really are ignored. Note that MISC is part
+% of the deepest `else' clause in the nested part of calc.label; thus, any
+% unrecognized entry type in the database is handled correctly.
+%
+% There is one auxiliary function for each of the four different sequences of
+% fields we use. The first of these functions looks at the author field, and
+% then, if necessary, the key field. The other three functions, which might
+% look at two fields and the key field, are similar, except that the key field
+% takes precedence over the organization field (for labels---not for sorting).
+%
+% The calc.label function calculates the preliminary label of an entry, which
+% is formed by taking three letters of information from the author or editor or
+% key or organization field (depending on the entry type and on what's empty,
+% but ignoring a leading "The " in the organization), and appending the last
+% two characters (digits) of the year. It is an error if the appropriate fields
+% among author, editor, organization, and key are missing, and we use
+% the first three letters of the cite$ in desperation when this happens.
+% The resulting label has the year part, but not the name part, purify$ed
+% (purify$ing the year allows some sorting shenanigans by the user).
+%
+% This function also calculates the version of the label to be used in sorting.
+%
+% The final label may need a trailing 'a', 'b', etc., to distinguish it from
+% otherwise identical labels, but we can't calculated those "extra.label"s
+% until after sorting.
+%
+% calc.label ==
+% BEGIN
+% if type$ = "book" or "inbook" then
+% author.editor.key.label
+% else if type$ = "proceedings" then
+% editor.key.organization.label
+% else if type$ = "manual" then
+% author.key.organization.label
+% else
+% author.key.label
+% fi fi fi
+% label := label * substring$(purify$(field.or.null(year)), -1, 2)
+% % assuming we will also sort, we calculate a sort.label
+% sort.label := sortify(label), but use the last four, not two, digits
+% END
+
+#if LAB_ALPH
+
+#ifndef HTML
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+#endif /* ! HTML */
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+#ifndef NAMED
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+#ifndef HTML
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+#else /* HTML */
+ { "+" * }
+#endif /* HTML */
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+#ifndef HTML
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+#else /* HTML */
+ { "+" * }
+#endif /* HTML */
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+#else /* NAMED */
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+#endif /* NAMED */
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+#if SORTED
+ { cite$ #1 #3 substring$ }
+#else !SORTED % need warning here because we won't give it later
+ { "for label, need author or key in " cite$ * warning$
+ cite$ #1 #3 substring$
+ }
+#endif SORTED
+#ifndef NAMED
+ { key #3 text.prefix$ }
+#else /* NAMED */
+ { key }
+#endif /* NAMED */
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+#if SORTED
+ { cite$ #1 #3 substring$ }
+#else !SORTED % need warning here because we won't give it later
+ { "for label, need author, editor, or key in " cite$ * warning$
+ cite$ #1 #3 substring$
+ }
+#endif SORTED
+#ifndef NAMED
+ { key #3 text.prefix$ }
+#else /* NAMED */
+ { key }
+#endif /* NAMED */
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+#if SORTED
+ { cite$ #1 #3 substring$ }
+#else !SORTED % need warning here because we won't give it later
+ { "for label, need author, key, or organization in " cite$ *
+ warning$
+ cite$ #1 #3 substring$
+ }
+#endif SORTED
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+#ifndef NAMED
+ { key #3 text.prefix$ }
+#else /* NAMED */
+ { key }
+#endif /* NAMED */
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+#if SORTED
+ { cite$ #1 #3 substring$ }
+#else !SORTED % need warning here because we won't give it later
+ { "for label, need editor, key, or organization in " cite$ *
+ warning$
+ cite$ #1 #3 substring$
+ }
+#endif SORTED
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+#ifndef NAMED
+ { key #3 text.prefix$ }
+#else /* NAMED */
+ { key }
+#endif /* NAMED */
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+
+% Converts a month to an integer. Watch out for the byte limit on
+% subroutines here.
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+
+% If there's a day in the month field (e.g. April 14th, Apr 14-17, etc)
+% Strips it out and puts the first number on the stack.
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+
+% This produces a 4-digit sort string from (max) 4-digit number
+% Used to sortfy years.
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+#if REVERSEDATE
+ str.to.int #9999 swap$ - int.to.str$
+#endif /* REVERSEDATE */
+ }
+ if$
+}
+
+% This produces a 2-digit sort string from a (max) 2-digit number
+% Used to sortfy months and days. Note that this won't really work on
+% things that aren't months or days of months, as the sum can exceed
+% 100. Should really pad things with zeros instead of this hack.
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+#if REVERSEDATE
+ str.to.int #99 swap$ - int.to.str$
+#else /* REVERSEDATE */
+ str.to.int #10 + int.to.str$
+#endif /* REVERSEDATE */
+ }
+ if$
+}
+
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+#ifndef NAMED
+ year field.or.null purify$ #-1 #2 substring$
+ *
+#else /* NAMED */
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+#endif /* NAMED */
+ 'label :=
+
+ year field.or.null purify$
+#ifdef NAMED
+ #-1 #4 substring$
+#endif /* NAMED */
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+#if SORTBYYEAR
+ swap$
+#endif /* SORTBYYEAR */
+ * sortify 'sort.label :=
+}
+
+% It doesn't seem like a particularly good idea to use an order-of-citation
+% reference list when using alphabetic labels, but we need to have a
+% special pass to calculate labels when this happens.
+
+#if !SORTED
+
+ITERATE {calc.label}
+
+#endif !SORTED
+
+#endif LAB_ALPH
+
+% When sorting, we compute the sortkey by executing "presort" on each entry.
+% The presort key contains a number of "sortify"ed strings, concatenated
+% with multiple blanks between them. This makes things like "brinch per"
+% come before "brinch hansen per".
+%
+% The fields used here are: the sort.label for alphabetic labels (as set by
+% calc.label), followed by the author names (or editor names or organization
+% (with a leading "The " removed) or key field, depending on entry type and on
+% what's empty), followed by year, followed by the first bit of the title
+% (chopping off a leading "The ", "A ", or "An ").
+% Names are formatted: Von Last First Junior.
+% The names within a part will be separated by a single blank
+% (such as "brinch hansen"), two will separate the name parts themselves
+% (except the von and last), three will separate the names,
+% four will separate the names from year (and from label, if alphabetic),
+% and four will separate year from title.
+%
+% The sort.format.names function takes an argument that should be in
+% BibTeX name format, and returns a string containing " "-separated
+% names in the format described above. The function is almost the same
+% as format.names.
+
+#if SORTED
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+#if NAME_FULL
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+#else
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
+#endif NAME_FULL
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+% The sort.format.title function returns the argument,
+% but first any leading "A "'s, "An "'s, or "The "'s are removed.
+% The chop.word function uses s, so we need another string variable, t
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+% The auxiliary functions here, for the presort function, are analogous to
+% the ones for calc.label; the same comments apply, except that the
+% organization field takes precedence here over the key field. For sorting
+% purposes, we still remove a leading "The " from the organization field.
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+% There is a limit, entry.max$, on the length of an entry string variable
+% (which is what its sort.key$ is), so we take at most that many characters
+% of the constructed key, and hope there aren't many references that match
+% to that many characters!
+
+FUNCTION {presort}
+#if LAB_ALPH
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+#else !LAB_ALPH
+{ type$ "book" =
+#endif LAB_ALPH
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+#if LAB_ALPH
+ *
+#endif LAB_ALPH
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+% And now we can sort
+
+SORT
+
+#endif SORTED
+
+% This long comment applies only to alphabetic labels, when sorted
+%
+% Now comes the final computation for alphabetic labels, putting in the 'a's
+% and 'b's and so forth if required. This involves two passes: a forward
+% pass to put in the 'b's, 'c's and so on, and a backwards pass
+% to put in the 'a's (we don't want to put in 'a's unless we know there
+% are 'b's).
+% We have to keep track of the longest (in width$ terms) label, for use
+% by the "thebibliography" environment.
+%
+% VAR: longest.label, last.sort.label, next.extra: string
+% longest.label.width, last.extra.num: integer
+%
+% initialize.longest.label ==
+% BEGIN
+% longest.label := ""
+% last.sort.label := int.to.chr$(0)
+% next.extra := ""
+% longest.label.width := 0
+% last.extra.num := 0
+% END
+%
+% forward.pass ==
+% BEGIN
+% if last.sort.label = sort.label then
+% last.extra.num := last.extra.num + 1
+% extra.label := int.to.chr$(last.extra.num)
+% else
+% last.extra.num := chr.to.int$("a")
+% extra.label := ""
+% last.sort.label := sort.label
+% fi
+% END
+%
+% reverse.pass ==
+% BEGIN
+% if next.extra = "b" then
+% extra.label := "a"
+% fi
+% label := label * extra.label
+% if width$(label) > longest.label.width then
+% longest.label := label
+% longest.label.width := width$(label)
+% fi
+% next.extra := extra.label
+% END
+
+#if LAB_ALPH
+
+#if SORTED
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+#else !SORTED
+
+% It still doesn't seem like a good idea to use an order-of-citation
+% reference list when using alphabetic labels, but when this happens we
+% must compute the longest label
+
+STRINGS { longest.label }
+
+INTEGERS { longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+#endif SORTED
+
+#else !LAB_ALPH
+
+% Now comes the computation for numeric labels.
+% We use either the sorted order or original order.
+% We still have to keep track of the longest (in width$ terms) label, for use
+% by the "thebibliography" environment.
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+#endif LAB_ALPH
+
+% Now we're ready to start writing the .BBL file.
+% We begin, if necessary, with a LaTeX macro for unnamed names in an alphabetic
+% label; next comes stuff from the `preamble' command in the database files.
+% Then we give an incantation containing the command
+% \begin{thebibliography}{...}
+% where the `...' is the longest label.
+%
+% We also call init.state.consts, for use by the output routines.
+
+FUNCTION {begin.bib}
+{
+#ifndef HTML
+#if LAB_ALPH
+ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+#endif /* LAB_ALPH */
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+#else /* HTML */
+% defined label-styles are:
+% plain (produces bulleted list: "* entry")
+% numbered (produced numbered list: "[1] entry")
+% default (uses bibtex-generated label: "[label] entry")
+#ifdef ALPHA
+ "# label-style: default" write$ newline$
+#endif
+#ifdef NAMED
+ "# label-style: default" write$ newline$
+#endif
+#ifdef UNSRT
+ "# label-style: numbered" write$ newline$
+#endif
+#endif /* ! HTML */
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+% Now we produce the output for all the entries
+
+ITERATE {call.type$}
+
+% Finally, we finish up by writing the `\end{thebibliography}' command.
+
+FUNCTION {end.bib}
+{ newline$
+#ifndef HTML
+ "\end{thebibliography}" write$ newline$
+#endif /* ! HTML */
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-n.bst b/biblio/bibtex/utils/bib2xhtml/html-n.bst
new file mode 100644
index 0000000000..dfd9f4b1a8
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-n.bst
@@ -0,0 +1,1388 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-na.bst b/biblio/bibtex/utils/bib2xhtml/html-na.bst
new file mode 100644
index 0000000000..c905c25ced
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-na.bst
@@ -0,0 +1,1393 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-nc.bst b/biblio/bibtex/utils/bib2xhtml/html-nc.bst
new file mode 100644
index 0000000000..04df58f6af
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-nc.bst
@@ -0,0 +1,1389 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-nca.bst b/biblio/bibtex/utils/bib2xhtml/html-nca.bst
new file mode 100644
index 0000000000..f72d1d9b4b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-nca.bst
@@ -0,0 +1,1394 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #10 + int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ncr.bst b/biblio/bibtex/utils/bib2xhtml/html-ncr.bst
new file mode 100644
index 0000000000..92a049e078
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ncr.bst
@@ -0,0 +1,1390 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ncra.bst b/biblio/bibtex/utils/bib2xhtml/html-ncra.bst
new file mode 100644
index 0000000000..a57460b74a
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ncra.bst
@@ -0,0 +1,1395 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ swap$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-nr.bst b/biblio/bibtex/utils/bib2xhtml/html-nr.bst
new file mode 100644
index 0000000000..ef8dc6fd04
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-nr.bst
@@ -0,0 +1,1389 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-nra.bst b/biblio/bibtex/utils/bib2xhtml/html-nra.bst
new file mode 100644
index 0000000000..6becf94395
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-nra.bst
@@ -0,0 +1,1394 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {month.to.int}
+{
+ "l" change.case$ #3 text.prefix$
+ 's :=
+ s "jan" = { #1 } {
+ s "feb" = { #2 } {
+ s "mar" = { #3 } {
+ s "apr" = { #4 } {
+ s "may" = { #5 } {
+ s "jun" = { #6 } {
+ s "jul" = { #7 } {
+ s "aug" = { #8 } {
+ s "sep" = { #9 } {
+ s "oct" = { #10 } {
+ s "nov" = { #11 } {
+ s "dec" = { #12 } { #13 } % 13 if nothing matches
+ if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
+}
+
+INTEGERS { done c }
+FUNCTION { get.day }
+{ month field.or.null 's :=
+
+ % Strip out month name
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ " " = 'done :=
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ % Build up first number in t
+ "0" 't :=
+ #0 'done :=
+ { s "" = not done not and }
+ { s #1 #1 substring$ chr.to.int$ 'c :=
+ c #47 > c #58 < and
+ { t c int.to.chr$ * 't := }
+ { #1 'done := }
+ if$
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+
+ t str.to.int
+}
+
+FUNCTION { sortify.fourdigit }
+{ 's :=
+ s empty$
+ { "0000" }
+ { s
+ str.to.int #9999 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION { sortify.twodigit }
+{ 's :=
+ s empty$
+ { "00" }
+ { s
+ str.to.int #99 swap$ - int.to.str$
+ }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ year field.or.null purify$
+ #-1 #4 substring$
+ sortify.fourdigit
+ " " *
+ month field.or.null month.to.int int.to.str$ sortify.twodigit *
+ " " *
+ get.day int.to.str$ sortify.twodigit *
+ " " *
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-u.bst b/biblio/bibtex/utils/bib2xhtml/html-u.bst
new file mode 100644
index 0000000000..24a62a8a5c
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-u.bst
@@ -0,0 +1,1044 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: numbered" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/html-ua.bst b/biblio/bibtex/utils/bib2xhtml/html-ua.bst
new file mode 100644
index 0000000000..d1553f696e
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/html-ua.bst
@@ -0,0 +1,1049 @@
+ % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ abstract
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ abstract empty$
+ 'skip$
+ { newline$ "<blockquote>" abstract * "</blockquote>" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ "\bibxhtmlname{" t * "}" * 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: numbered" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bib2xhtml/index.html b/biblio/bibtex/utils/bib2xhtml/index.html
new file mode 100644
index 0000000000..3eb82f131b
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/index.html
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="us-ascii"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- No not edit this page in the web directory. -->
+<head>
+<title>bib2xhtml - Convert BibTeX Files into HTML</title>
+<meta name="AUTHOR" content="Diomidis Spinellis" />
+<script src="showeg.js" type="text/javascript"></script>
+</head>
+<body>
+<h1 align="right"><tt><font color="#ff0000">bib2xhtml dds</font></tt></h1>
+<h2>bib2xhtml - Convert BibTeX Files into HTML</h2>
+ <!-- Introduction {{{1 -->
+ <em>bib2xhtml</em> is a program that converts BibTeX files into
+HTML (specifically <a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a>).
+The conversion is mostly done by specialized BibTeX style files,
+derived from a converted bibliography style template.
+This ensures that the original BibTeX styles are faithfully
+reproduced.
+Some postprocessing is performed by Perl code.
+<p />
+This is a fork of the
+<em>bib2html</em> program written by David Hull in 1996 and
+maintained by him until 1998.
+I have been a happy user of the program since 1995, using the program
+to keep my
+<a href="../../../pubs/index.html">publication list</a> up to date,
+and, to generate the
+<a href="../../../codereading/bib.html">on-line bibliography list</a>
+for my books
+<a href="../../../codequality">Code Quality: The Open Source Perspective</a>
+(Addison-Wesley 2006) and
+<a href="../../../codereading">Code Reading: The Open Source Perspective</a>
+(Addison-Wesley 2003).
+After 1998 no other changes were made to the program, and I failed
+to locate an active program home page.
+Since there were a number of changes I needed to bring the program
+up to date with evolving web standards,
+I decided to adopt <em>bib2html</em> for
+maintenance, evolution, and further distribution.
+The first new public release made in 2004, featured support for
+<a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a>.
+A number of subsequent releases fixed a number of problems, and
+added many significant features,
+such as new presentation formats, more flexible output, and Unicode support.
+Given that two projects on <a href="http://freshmeat.net">freshmeat.net</a>
+claim the name <em>bib2html</em>,
+on March 2004, I decided to rename the project
+into <em>bib2xhtml</em>, to emphasize the result's
+<a href="http://www.w3.org/TR/xhtml1/">XHTML</a> conformance.
+
+ <!-- Downloads and Documentation {{{1 -->
+<h3>Downloads and Documentation </h3>
+The current <em>bib2xhtml</em> version is 2.35.
+The following pages do not contain navigation links.
+Following a link will open a new browser window.
+<ul>
+<li><a href="bib2xhtml-2.35.tar.gz">Source and documentation package (gzip tar format)</a></li>
+<li><a href="bib2xhtml-2.35.zip">Source and documentation package (zip format)</a></li>
+<li><a href="bib2xhtml.html" target="NEW">Formatted manual page (HTML)</a></li>
+<li><a href="bib2xhtml.pdf" target="NEW">Formatted manual page (PDF)</a></li>
+<li><a href="ChangeLog.txt" target="NEW">Change log</a></li>
+<li> <a href="http://freshmeat.net/projects/bib2xhtml/">freshmeat.net page</a> (use it to subscribe and post comments)</li>
+</ul>
+
+ <!-- Examples {{{1 -->
+<h3>Examples</h3>
+Choose from the following options to see some examples that were generated
+by running <em>bib2xhtml</em> on this
+<a href="example.bib">bibliography input file</a>.
+
+<form name="myform" action="" method="get">
+<h4>Style</h4>
+<input type="radio" name="style" value="alpha" />alpha<br />
+<input type="radio" name="style" value="empty" />empty<br />
+<input type="radio" name="style" value="named" />named<br />
+<input type="radio" name="style" value="plain" />plain<br />
+<input type="radio" name="style" value="paragraph" />paragraph<br />
+<input type="radio" name="style" value="unsort" />unsort<br />
+<input type="radio" name="style" value="unsortlist" />unsortlist<br />
+<h4>Other options</h4>
+<input type="checkbox" name="chrono" value="-c" />-c (chronological sort) <br />
+<input type="checkbox" name="reverse" value="-r" />-r (reverse sort order) <br />
+<input type="checkbox" name="append" value="-k" />-k (append to the label of each entry its BibTeX key) <br />
+<input type="checkbox" name="unicode" value="-u" />-u (Unicode UTF-8 text) <br />
+<input type="checkbox" name="name" value="-n" />-n Spinellis (emphasize an author's name) <br />
+<p />
+
+<input type="button" name="button" value="See the result" onclick="showBib(this.form)" />
+(If your browser doesn't support JavaScipt, choose an example from
+<a href="static.html">this list</a>.)
+</form>
+
+
+<!-- End matter {{{1 -->
+<p />
+<a href="../../../">Diomidis Spinellis home page</a>
+
+<hr />
+<table>
+<tr><td>
+<a href="http://validator.w3.org/check/referer"><img src="../../../valid-xhtml10.png" border="0" alt="Valid XHTML 1.0!" height="31" width="88" /></a>
+<a href="http://www.w3.org/WAI/WCAG1AAA-Conformance" title="Explanation of Level Triple-A Conformance"><img border="0" height="32" width="88" src="../../../wcag1AAA.gif" alt="Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0" /></a>
+</td><td>
+<font size="-2">
+(C) Copyright 2002-2010 D. Spinellis.
+May be freely uploaded by WWW viewers and similar programs.
+All other rights reserved.
+<br />
+Last modified: $Date: 2010/12/09 07:12:10 $
+</font>
+</td></tr>
+</table>
+</body>
+</html>
diff --git a/biblio/bibtex/utils/bib2xhtml/showeg.js b/biblio/bibtex/utils/bib2xhtml/showeg.js
new file mode 100644
index 0000000000..77e2e0300f
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/showeg.js
@@ -0,0 +1,32 @@
+/*
+ * Show the example file specified.
+ *
+ * $Id: showeg.js,v 1.1 2010/12/08 18:47:48 dds Exp $
+ */
+
+function showBib(form) {
+ for(i = 0; i < form.style.length; i++)
+ if( form.style[i].checked)
+ style = form.style[i].value;
+ if ((style == 'empty' ||
+ style == 'paragraph' ||
+ style == 'unsortlist') &&
+ form.append.checked) {
+ alert ('The specified style does not support the display of BibTeX keys');
+ return;
+ }
+ if ((style == 'unsort' || style == 'unsortlist') &&
+ (form.chrono.checked || form.reverse.checked)) {
+ alert ('Unsorted styles do not support a sort specification');
+ return;
+ }
+ open('eg/' +
+ style +
+ (form.name.checked ? form.name.value : '') +
+ (form.unicode.checked ? form.unicode.value : '') +
+ (form.chrono.checked ? form.chrono.value : '') +
+ (form.reverse.checked ? form.reverse.value : '') +
+ (form.append.checked ? form.append.value : '') +
+ '.html'
+ );
+}
diff --git a/biblio/bibtex/utils/bib2xhtml/static.html b/biblio/bibtex/utils/bib2xhtml/static.html
new file mode 100644
index 0000000000..642bc8e703
--- /dev/null
+++ b/biblio/bibtex/utils/bib2xhtml/static.html
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="us-ascii"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- No not edit this page in the web directory. -->
+<head>
+<title>bib2xhtml - Convert BibTeX Files into HTML</title>
+<meta name="AUTHOR" content="Diomidis Spinellis" />
+</head><body><ul>
+<li><a href="eg/alpha-c-k.html">bib2xhtml -s alpha -c -k</a></li>
+<li><a href="eg/alpha-c-r-k.html">bib2xhtml -s alpha -c -r -k</a></li>
+<li><a href="eg/alpha-c-r.html">bib2xhtml -s alpha -c -r </a></li>
+<li><a href="eg/alpha-c.html">bib2xhtml -s alpha -c </a></li>
+<li><a href="eg/alpha-k.html">bib2xhtml -s alpha -k</a></li>
+<li><a href="eg/alpha-n-c-k.html">bib2xhtml -s alpha -n Spinellis -c -k</a></li>
+<li><a href="eg/alpha-n-c-r-k.html">bib2xhtml -s alpha -n Spinellis -c -r -k</a></li>
+<li><a href="eg/alpha-n-c-r.html">bib2xhtml -s alpha -n Spinellis -c -r </a></li>
+<li><a href="eg/alpha-n-c.html">bib2xhtml -s alpha -n Spinellis -c </a></li>
+<li><a href="eg/alpha-n-k.html">bib2xhtml -s alpha -n Spinellis -k</a></li>
+<li><a href="eg/alpha-n-r-k.html">bib2xhtml -s alpha -n Spinellis -r -k</a></li>
+<li><a href="eg/alpha-n-r.html">bib2xhtml -s alpha -n Spinellis -r </a></li>
+<li><a href="eg/alpha-n-u-c-k.html">bib2xhtml -s alpha -n Spinellis -u -c -k</a></li>
+<li><a href="eg/alpha-n-u-c-r-k.html">bib2xhtml -s alpha -n Spinellis -u -c -r -k</a></li>
+<li><a href="eg/alpha-n-u-c-r.html">bib2xhtml -s alpha -n Spinellis -u -c -r </a></li>
+<li><a href="eg/alpha-n-u-c.html">bib2xhtml -s alpha -n Spinellis -u -c </a></li>
+<li><a href="eg/alpha-n-u-k.html">bib2xhtml -s alpha -n Spinellis -u -k</a></li>
+<li><a href="eg/alpha-n-u-r-k.html">bib2xhtml -s alpha -n Spinellis -u -r -k</a></li>
+<li><a href="eg/alpha-n-u-r.html">bib2xhtml -s alpha -n Spinellis -u -r </a></li>
+<li><a href="eg/alpha-n-u.html">bib2xhtml -s alpha -n Spinellis -u </a></li>
+<li><a href="eg/alpha-n.html">bib2xhtml -s alpha -n Spinellis </a></li>
+<li><a href="eg/alpha-r-k.html">bib2xhtml -s alpha -r -k</a></li>
+<li><a href="eg/alpha-r.html">bib2xhtml -s alpha -r </a></li>
+<li><a href="eg/alpha-u-c-k.html">bib2xhtml -s alpha -u -c -k</a></li>
+<li><a href="eg/alpha-u-c-r-k.html">bib2xhtml -s alpha -u -c -r -k</a></li>
+<li><a href="eg/alpha-u-c-r.html">bib2xhtml -s alpha -u -c -r </a></li>
+<li><a href="eg/alpha-u-c.html">bib2xhtml -s alpha -u -c </a></li>
+<li><a href="eg/alpha-u-k.html">bib2xhtml -s alpha -u -k</a></li>
+<li><a href="eg/alpha-u-r-k.html">bib2xhtml -s alpha -u -r -k</a></li>
+<li><a href="eg/alpha-u-r.html">bib2xhtml -s alpha -u -r </a></li>
+<li><a href="eg/alpha-u.html">bib2xhtml -s alpha -u </a></li>
+<li><a href="eg/alpha.html">bib2xhtml -s alpha </a></li>
+<li><a href="eg/empty-c-r.html">bib2xhtml -s empty -c -r </a></li>
+<li><a href="eg/empty-c.html">bib2xhtml -s empty -c </a></li>
+<li><a href="eg/empty-n-c-r.html">bib2xhtml -s empty -n Spinellis -c -r </a></li>
+<li><a href="eg/empty-n-c.html">bib2xhtml -s empty -n Spinellis -c </a></li>
+<li><a href="eg/empty-n-r.html">bib2xhtml -s empty -n Spinellis -r </a></li>
+<li><a href="eg/empty-n-u-c-r.html">bib2xhtml -s empty -n Spinellis -u -c -r </a></li>
+<li><a href="eg/empty-n-u-c.html">bib2xhtml -s empty -n Spinellis -u -c </a></li>
+<li><a href="eg/empty-n-u-r.html">bib2xhtml -s empty -n Spinellis -u -r </a></li>
+<li><a href="eg/empty-n-u.html">bib2xhtml -s empty -n Spinellis -u </a></li>
+<li><a href="eg/empty-n.html">bib2xhtml -s empty -n Spinellis </a></li>
+<li><a href="eg/empty-r.html">bib2xhtml -s empty -r </a></li>
+<li><a href="eg/empty-u-c-r.html">bib2xhtml -s empty -u -c -r </a></li>
+<li><a href="eg/empty-u-c.html">bib2xhtml -s empty -u -c </a></li>
+<li><a href="eg/empty-u-r.html">bib2xhtml -s empty -u -r </a></li>
+<li><a href="eg/empty-u.html">bib2xhtml -s empty -u </a></li>
+<li><a href="eg/empty.html">bib2xhtml -s empty </a></li>
+<li><a href="eg/named-c-k.html">bib2xhtml -s named -c -k</a></li>
+<li><a href="eg/named-c-r-k.html">bib2xhtml -s named -c -r -k</a></li>
+<li><a href="eg/named-c-r.html">bib2xhtml -s named -c -r </a></li>
+<li><a href="eg/named-c.html">bib2xhtml -s named -c </a></li>
+<li><a href="eg/named-k.html">bib2xhtml -s named -k</a></li>
+<li><a href="eg/named-n-c-k.html">bib2xhtml -s named -n Spinellis -c -k</a></li>
+<li><a href="eg/named-n-c-r-k.html">bib2xhtml -s named -n Spinellis -c -r -k</a></li>
+<li><a href="eg/named-n-c-r.html">bib2xhtml -s named -n Spinellis -c -r </a></li>
+<li><a href="eg/named-n-c.html">bib2xhtml -s named -n Spinellis -c </a></li>
+<li><a href="eg/named-n-k.html">bib2xhtml -s named -n Spinellis -k</a></li>
+<li><a href="eg/named-n-r-k.html">bib2xhtml -s named -n Spinellis -r -k</a></li>
+<li><a href="eg/named-n-r.html">bib2xhtml -s named -n Spinellis -r </a></li>
+<li><a href="eg/named-n-u-c-k.html">bib2xhtml -s named -n Spinellis -u -c -k</a></li>
+<li><a href="eg/named-n-u-c-r-k.html">bib2xhtml -s named -n Spinellis -u -c -r -k</a></li>
+<li><a href="eg/named-n-u-c-r.html">bib2xhtml -s named -n Spinellis -u -c -r </a></li>
+<li><a href="eg/named-n-u-c.html">bib2xhtml -s named -n Spinellis -u -c </a></li>
+<li><a href="eg/named-n-u-k.html">bib2xhtml -s named -n Spinellis -u -k</a></li>
+<li><a href="eg/named-n-u-r-k.html">bib2xhtml -s named -n Spinellis -u -r -k</a></li>
+<li><a href="eg/named-n-u-r.html">bib2xhtml -s named -n Spinellis -u -r </a></li>
+<li><a href="eg/named-n-u.html">bib2xhtml -s named -n Spinellis -u </a></li>
+<li><a href="eg/named-n.html">bib2xhtml -s named -n Spinellis </a></li>
+<li><a href="eg/named-r-k.html">bib2xhtml -s named -r -k</a></li>
+<li><a href="eg/named-r.html">bib2xhtml -s named -r </a></li>
+<li><a href="eg/named-u-c-k.html">bib2xhtml -s named -u -c -k</a></li>
+<li><a href="eg/named-u-c-r-k.html">bib2xhtml -s named -u -c -r -k</a></li>
+<li><a href="eg/named-u-c-r.html">bib2xhtml -s named -u -c -r </a></li>
+<li><a href="eg/named-u-c.html">bib2xhtml -s named -u -c </a></li>
+<li><a href="eg/named-u-k.html">bib2xhtml -s named -u -k</a></li>
+<li><a href="eg/named-u-r-k.html">bib2xhtml -s named -u -r -k</a></li>
+<li><a href="eg/named-u-r.html">bib2xhtml -s named -u -r </a></li>
+<li><a href="eg/named-u.html">bib2xhtml -s named -u </a></li>
+<li><a href="eg/named.html">bib2xhtml -s named </a></li>
+<li><a href="eg/paragraph-c-r.html">bib2xhtml -s paragraph -c -r </a></li>
+<li><a href="eg/paragraph-c.html">bib2xhtml -s paragraph -c </a></li>
+<li><a href="eg/paragraph-n-c-r.html">bib2xhtml -s paragraph -n Spinellis -c -r </a></li>
+<li><a href="eg/paragraph-n-c.html">bib2xhtml -s paragraph -n Spinellis -c </a></li>
+<li><a href="eg/paragraph-n-r.html">bib2xhtml -s paragraph -n Spinellis -r </a></li>
+<li><a href="eg/paragraph-n-u-c-r.html">bib2xhtml -s paragraph -n Spinellis -u -c -r </a></li>
+<li><a href="eg/paragraph-n-u-c.html">bib2xhtml -s paragraph -n Spinellis -u -c </a></li>
+<li><a href="eg/paragraph-n-u-r.html">bib2xhtml -s paragraph -n Spinellis -u -r </a></li>
+<li><a href="eg/paragraph-n-u.html">bib2xhtml -s paragraph -n Spinellis -u </a></li>
+<li><a href="eg/paragraph-n.html">bib2xhtml -s paragraph -n Spinellis </a></li>
+<li><a href="eg/paragraph-r.html">bib2xhtml -s paragraph -r </a></li>
+<li><a href="eg/paragraph-u-c-r.html">bib2xhtml -s paragraph -u -c -r </a></li>
+<li><a href="eg/paragraph-u-c.html">bib2xhtml -s paragraph -u -c </a></li>
+<li><a href="eg/paragraph-u-r.html">bib2xhtml -s paragraph -u -r </a></li>
+<li><a href="eg/paragraph-u.html">bib2xhtml -s paragraph -u </a></li>
+<li><a href="eg/paragraph.html">bib2xhtml -s paragraph </a></li>
+<li><a href="eg/plain-c-k.html">bib2xhtml -s plain -c -k</a></li>
+<li><a href="eg/plain-c-r-k.html">bib2xhtml -s plain -c -r -k</a></li>
+<li><a href="eg/plain-c-r.html">bib2xhtml -s plain -c -r </a></li>
+<li><a href="eg/plain-c.html">bib2xhtml -s plain -c </a></li>
+<li><a href="eg/plain-k.html">bib2xhtml -s plain -k</a></li>
+<li><a href="eg/plain-n-c-k.html">bib2xhtml -s plain -n Spinellis -c -k</a></li>
+<li><a href="eg/plain-n-c-r-k.html">bib2xhtml -s plain -n Spinellis -c -r -k</a></li>
+<li><a href="eg/plain-n-c-r.html">bib2xhtml -s plain -n Spinellis -c -r </a></li>
+<li><a href="eg/plain-n-c.html">bib2xhtml -s plain -n Spinellis -c </a></li>
+<li><a href="eg/plain-n-k.html">bib2xhtml -s plain -n Spinellis -k</a></li>
+<li><a href="eg/plain-n-r-k.html">bib2xhtml -s plain -n Spinellis -r -k</a></li>
+<li><a href="eg/plain-n-r.html">bib2xhtml -s plain -n Spinellis -r </a></li>
+<li><a href="eg/plain-n-u-c-k.html">bib2xhtml -s plain -n Spinellis -u -c -k</a></li>
+<li><a href="eg/plain-n-u-c-r-k.html">bib2xhtml -s plain -n Spinellis -u -c -r -k</a></li>
+<li><a href="eg/plain-n-u-c-r.html">bib2xhtml -s plain -n Spinellis -u -c -r </a></li>
+<li><a href="eg/plain-n-u-c.html">bib2xhtml -s plain -n Spinellis -u -c </a></li>
+<li><a href="eg/plain-n-u-k.html">bib2xhtml -s plain -n Spinellis -u -k</a></li>
+<li><a href="eg/plain-n-u-r-k.html">bib2xhtml -s plain -n Spinellis -u -r -k</a></li>
+<li><a href="eg/plain-n-u-r.html">bib2xhtml -s plain -n Spinellis -u -r </a></li>
+<li><a href="eg/plain-n-u.html">bib2xhtml -s plain -n Spinellis -u </a></li>
+<li><a href="eg/plain-n.html">bib2xhtml -s plain -n Spinellis </a></li>
+<li><a href="eg/plain-r-k.html">bib2xhtml -s plain -r -k</a></li>
+<li><a href="eg/plain-r.html">bib2xhtml -s plain -r </a></li>
+<li><a href="eg/plain-u-c-k.html">bib2xhtml -s plain -u -c -k</a></li>
+<li><a href="eg/plain-u-c-r-k.html">bib2xhtml -s plain -u -c -r -k</a></li>
+<li><a href="eg/plain-u-c-r.html">bib2xhtml -s plain -u -c -r </a></li>
+<li><a href="eg/plain-u-c.html">bib2xhtml -s plain -u -c </a></li>
+<li><a href="eg/plain-u-k.html">bib2xhtml -s plain -u -k</a></li>
+<li><a href="eg/plain-u-r-k.html">bib2xhtml -s plain -u -r -k</a></li>
+<li><a href="eg/plain-u-r.html">bib2xhtml -s plain -u -r </a></li>
+<li><a href="eg/plain-u.html">bib2xhtml -s plain -u </a></li>
+<li><a href="eg/plain.html">bib2xhtml -s plain </a></li>
+<li><a href="eg/unsort-k.html">bib2xhtml -s unsort -k</a></li>
+<li><a href="eg/unsort-n-k.html">bib2xhtml -s unsort -n Spinellis -k</a></li>
+<li><a href="eg/unsort-n-u-k.html">bib2xhtml -s unsort -n Spinellis -u -k</a></li>
+<li><a href="eg/unsort-n-u.html">bib2xhtml -s unsort -n Spinellis -u </a></li>
+<li><a href="eg/unsort-n.html">bib2xhtml -s unsort -n Spinellis </a></li>
+<li><a href="eg/unsort-u-k.html">bib2xhtml -s unsort -u -k</a></li>
+<li><a href="eg/unsort-u.html">bib2xhtml -s unsort -u </a></li>
+<li><a href="eg/unsort.html">bib2xhtml -s unsort </a></li>
+<li><a href="eg/unsortlist-n-u.html">bib2xhtml -s unsortlist -n Spinellis -u </a></li>
+<li><a href="eg/unsortlist-n.html">bib2xhtml -s unsortlist -n Spinellis </a></li>
+<li><a href="eg/unsortlist-u.html">bib2xhtml -s unsortlist -u </a></li>
+<li><a href="eg/unsortlist.html">bib2xhtml -s unsortlist </a></li>
+</ul></body></html>
diff --git a/biblio/bibtex/utils/bibclean/README b/biblio/bibtex/utils/bibclean/README
new file mode 100644
index 0000000000..693b15b411
--- /dev/null
+++ b/biblio/bibtex/utils/bibclean/README
@@ -0,0 +1,778 @@
+%% /u/sy/beebe/tex/bibclean/2-11/README, Mon Oct 2 10:01:31 1995
+%% Edit by Nelson H. F. Beebe <beebe@sunrise>
+
+========================================================================
+
+==========
+Jump start
+==========
+
+As with most GNUware, you can build, test, and install this program on
+most UNIX systems by these simple steps
+
+csh et amici:
+ setenv CC ...your favorite C or C++ compiler...
+ ./configure && make all check install
+
+sh et amici:
+ CC=...your favorite C or C++ compiler...
+ export CC
+ ./configure && make all check install
+
+If you don't set the CC environment variable, then gcc (or cc, if gcc
+is not available) will be assumed.
+
+If you wish to undo a "make install", just do "make uninstall"; this
+will remove any files in system directories put there by "make
+install".
+
+See below for further details, and for instructions for non-UNIX systems.
+
+
+============
+Introduction
+============
+
+This directory contains bibclean, a BibTeX prettyprinter, portability
+verifier, and syntax checker. It can be used to find errors in .bib
+files, as well as to standardize their format for readability and
+editing convenience. It can also be used to convert Scribe-format
+bibliographies to BibTeX form.
+
+Binary executables for IBM PC DOS, DEC Alpha OpenVMS, DEC VAX VMS, and
+Intel x86 Linux may be included in the distribution.
+
+If you do not require either the IBM PC DOS or LINUX, or the DEC VMS
+(Alpha and VAX) versions, then you can save about 2.5MB of disk space
+by deleting the ibmpc and vms subdirectories.
+
+The default pattern matching in bibclean.c is selected by
+HAVE_PATTERNS; with it, no regular-expression library support is
+needed. Should you wish to compile with regular-expression support
+instead of the HAVE_PATTERNS code, and your system does not have
+compile()/step (HAVE_REGEXP), or re_comp()/re_exec() (HAVE_RECOMP),
+you may be able to use the regex-?-??.tar.Z distribution from the Free
+Software Foundation, available on prep.ai.mit.edu in /pub/gnu.
+
+In most cases, the HAVE_PATTERNS code is recommended, since it will
+give identical results across all machines. I was prompted to write
+it after discovering that there was considerable variety in the
+regular expression library codes that resulted in different matching
+on different machines, a most unsatisfactory situation.
+
+Please report all problems, suggestions, and comments to the author:
+
+ Nelson H. F. Beebe
+ Center for Scientific Computing
+ Department of Mathematics
+ University of Utah
+ Salt Lake City, UT 84112
+ USA
+ Tel: +1 801 581 5254
+ FAX: +1 801 581 4148
+ Email: <beebe@math.utah.edu>
+ WWW URL: http://www.math.utah.edu/~beebe/
+
+
+============
+Installation
+============
+
+Starting with version 2.10.1, bibclean has been adapted to use the GNU
+autoconf automatic configuration system for UNIX installations.
+
+GNU autoconf is run at the author's site to produce the configure
+script from configure.in.
+
+The configure script is run at each installer's UNIX site to produce
+Makefile from Makefile.in, and config.h from config.hin. The
+configure script is a large (1800+ lines) Bourne shell program that
+investigates various aspects of the local C implementation, and
+records its conclusions in config.h. Interestingly, its probes
+uncovered a bug in one compiler: lcc 3.4b on Sun Solaris 2.x has an
+incorrect definition of toupper() in its ctype.h!
+
+autoconf, at least at the current 2.4 version, is not as C++-aware as
+it should be. The Makefile must carry out minor edits of the
+configure script to get it to even work with C++ compilers. The small
+test programs run by configure to determine the existence of assorted
+Standard C library functions all lead to incorrect conclusions for
+config.h, because they intentionally contain function prototypes with
+different argument types. Since C++ functions are compiled into
+external names that encode the function and argument types, along with
+the function name, these prototypes produce references to non-existent
+functions, causing program linking to fail. Fortunately, I've been
+able to fix this problem too with additional automatic edits, all
+carried out by "make configure".
+
+Should you do a "make maintainer-clean" [NOT recommended, except at the
+author's site], the configure script will be deleted, and you will
+need recent versions of both GNU m4 and autoconf correctly installed
+to reconstruct things, which can be done this way:
+
+ autoconf # Regenerate unedited configure
+ ./configure # Regenerate config.h and Makefile
+ rm configure # delete configure
+ make configure # Regenerate edited configure
+
+For convenience and safety, the distribution includes a subdirectory
+named save that contains read-only copies of the files Makefile,
+config.h, and configure created by autoconf and "make configure".
+This will allow recovery from a lost or damaged configure file.
+
+Suitable hand-crafted config.h files are provided for non-UNIX
+systems, and in the unlikely event of a failure of the configure
+script on a UNIX system, config.h can be manually produced from a copy
+of config.hin with a few minutes' editing work. If you do this,
+remember to save a copy of your config.h under a different name,
+because running configure will destroy it. If you have GNU autoconf
+installed (the installation is very simple and source code is
+available from prep.ai.mit.edu:/pub/gnu/autoconf-x.y.tar.gz), you
+might try augmenting config.hin instead, then run autoconf and
+configure.
+
+Thus, on UNIX, installation normally consists of just two steps
+(assuming a csh-compatible shell):
+
+ setenv CC ...your favorite C or C++ compiler...
+ ./configure && make all check install
+
+If you like, add OPT='your favorite optimization flags' to the make
+command; by default, only -g (debug) is assumed. If your compiler
+won't accept -g with other optimization levels, then set CFLAGS
+instead of OPT on the command line; be sure NOT to override any
+non-optimizing flags in the CFLAGS set in the Makefile.
+
+The GNU standard installation directories /usr/local/bin for binaries,
+and /usr/local/man/man1 for manual pages are assumed. The prefix
+/usr/local can be overridden by providing an alternate definition on
+the command line:
+
+ make prefix=/some/other/path install
+
+After installation, you can do
+ make distclean
+to restore the directories to their distribution state. You should
+also do this between builds for different architectures from the same
+source tree; neglecting to do to will almost certainly lead to
+failure, because the config.cache file created by configure will lead
+to an incorrect config.h for the next build.
+
+
+============
+UNIX Systems
+============
+
+The code can be compiled with either C (K&R or ISO/ANSI Standard C) or
+C++ compilers. With some C++ compilers, it may be necessary to supply
+additional switches for force the compiler to stay in C++ mode, rather
+than reverting to C mode (e.g. on DEC Alpha OSF/1, you must do
+setenv CC "cxx -x cxx").
+
+On UNIX systems, the only changes that you are likely to need in the
+Makefile are the settings of CC and CFLAGS, and possibly, DEFINES, and
+if you wish to do "make install", the settings of bindir, MANDIR, and
+MANEXT.
+
+If you are installing bibclean on a new system, you should definitely
+run "make check" before installing it on your system. For the target
+test-bibtex-2, latex is needed. For test-bibtex-2 and test-scribe-1,
+bibtex is needed. Sample output of "make check" from a UNIX system
+is given below.
+
+The code has been tested under more than 55 different C and C++
+compilers, and is in regular use to maintain the TeX User Group
+bibliography collection stored on ftp.math.utah.edu:/pub/tex/bib, as
+well as several other local bibliographies. These files total more
+than 1.08M lines and 62K bibliography entries. Some of these
+bibliographies are mirrored to the Comprehensive TeX Archive Network
+(CTAN) hosts. Do "finger ctan@pip.shsu.edu" to find a CTAN site on
+the Internet near you.
+
+bibclean is also used for the BibNet Project, which collects
+bibliographies in numerical analysis. The master collection is
+available on ftp.math.utah.edu:/pub/bibnet, and is mirrored from there
+to netlib servers at AT&T and Oak Ridge National Laboratory.
+
+If you port bibclean to a new system, please select maximal error and
+warning messages in your compiler, to better uncover problems. If you
+find massive numbers of errors complaining about function and argument
+type mismatches, it is likely that this can be remedied by suitable
+modifications of config.h. As C implementations move towards
+conformance with the December 1989 ISO/ANSI C Language Standard, the C
+language is a moving target that must be tracked by config.h, which is
+why that file is normally automatically generated on UNIX systems by
+the configure script. With C compilers, you can safely ignore
+complaints about implicit declaration of library functions; they are
+caused by deficiencies in the vendor-provided header files.
+
+If you have a C++ compiler, please try that as well. This code has
+been successfully compiled under at least 19 C++ compilers, and the
+stricter type checking has uncovered problems that slipped past other
+compilers.
+
+These programs have been successfully built with C and C++ compilers
+and tested on these systems for the 2.10.1 release:
+
+ DECstation 5000 ULTRIX 4.2 cc, gcc, g++, lcc
+ DEC Alpha OSF/1 3.0, 3.2c cc, c89, cxx, gcc, g++
+ HP 9000/375 BSD 4.3 cc, CC
+ HP 9000/735 HP-UX 9.0 cc, c89, CC, gcc, g++
+ IBM RS/6000 AIX 3.2 cc, c89, xlC, gcc, g++
+ Intel 486 Linux 1.3.15 gcc, g++
+ MIPS RC6280 RISCos 2.1.1AC cc
+ NeXT 68040 Mach 3.0 cc, cc -ObjC, gcc, g++
+ SGI 4D/210 IRIX 4.0.5c cc, gcc, lcc
+ SGI Indigo/2 IRIX 5.3 cc, CC, gcc, g++, lcc
+ SGI Power Challenge IRIX 6.0.1 cc, CC
+ Sun SPARCstation Solaris 2.3,2.4 cc, CC, gcc, g++, lcc
+ Sun SPARCstation SunOS 4.1.3 acc, cc, CC, gcc
+
+Further details are given below. Where builds have failed, it is
+usually because of conflicts between system header files.
+
+The author uses the build-all.sh script for these tests; it tries
+builds with every known compiler on the development systems. If your
+UNIX system has other compilers that can be tested, please send their
+full path names to the author.
+
+
+==========
+IBM PC DOS
+==========
+
+The ibmpc/dos/README file contains details of the builds and tests
+of bibclean under 8 IBM PC DOS C and C++ compilers, and instructions
+for building and testing bibclean with other compilers.
+
+Since bibclean uses no floating-point arithmetic, and PC DOS has no
+shared libraries, I expect that the executables will run on any
+version of DOS greater than 4.0. They may also run on earlier
+versions. At the time of writing, MS-DOS 6.22 is current, and the
+bibclean executables work fine on it.
+
+
+=================
+DEC Alpha OpenVMS
+=================
+
+The vms/alpha subdirectory contains these files for DEC Alpha OpenVMS:
+
+ bibclean.exe bibclean executable program
+ config.h hand-coded configuration file
+ recomp.com do @recomp foo to recompile foo.c
+ vmsclean.com do @vmsclean to cleanup after a build
+ vmsmake.com do @vmsmake to build bibclean
+ vmstest.com do @vmstest to test bibclean
+
+You will have to change one line in vmstest.com to define the disk
+location of bibclean.exe in the foreign command symbol for bibclean.
+
+Unlike the UNIX "make check", execution of vmstest.com does not
+require that latex or bibtex be installed on your system. [I didn't
+have either on the Alpha OpenVMS system that I built bibclean on.]
+
+
+===========
+DEC VAX VMS
+===========
+
+The vms/vax/README file contains details of the building and testing
+of bibclean on VAX VMS 6.1
+
+Unlike the UNIX "make check", execution of vmstest.com does not require
+that latex or bibtex be installed on your system. [I didn't have
+either on the VAX VMS system that I built bibclean on.]
+
+On versions of VMS before 6.1, you may find differences in the vmstest
+output between testbib1.bok (correct Sun) and testbib1.bib (VAX VMS);
+characters with octal values 211--215 and 240 disappear from the VAX
+VMS output. The reason is that on VAX VMS 5.4 (and likely other
+versions of VAX VMS) isspace() from <ctype.h> classifies those
+characters as spaces. This problem does NOT exist on DEC Alpha
+OpenVMS 1.5, or in VMS 6.1. As long as your .bib files do not use
+those six characters, execution should be correct; for portability,
+.bib files should restrict themselves to ASCII/ISO-8859 characters in
+the range 32--127, plus newline and tab.
+
+
+===================================
+Sample "make check" Output for UNIX
+===================================
+
+Here is a log of "make check" on Sun Solaris 2.5 using the native C++
+compiler, CC:
+
+ CC -c -I. -I. -DHAVE_CONFIG_H -g romtol.c
+ /bin/rm -f match.O
+ if [ -f match.o ] ; then /bin/mv match.o match.O ; fi
+ /bin/rm -f match.o
+ CC -I. -I. -DHAVE_CONFIG_H -g -DTEST -o match \
+ match.c romtol.o
+ /bin/rm -f match.o
+ if [ -f match.O ] ; then /bin/mv match.O match.o ; fi
+
+ ===================== begin match test =======================
+
+ ./match <match.dat >match.lst
+ There should be no differences found:
+ diff match.lok match.lst
+
+ ====================== end match test ========================
+
+ /bin/rm -f romtol.O
+ if [ -f romtol.o ] ; then /bin/mv romtol.o romtol.O ; fi
+ /bin/rm -f romtol.o
+ CC -I. -I. -DHAVE_CONFIG_H -g -DTEST -o romtol romtol.c
+ /bin/rm -f romtol.o
+ if [ -f romtol.O ] ; then /bin/mv romtol.O romtol.o ; fi
+
+ ===================== begin romtol test ======================
+
+ ./romtol <romtol.dat >romtol.lst
+ There should be no differences found:
+ diff romtol.lok romtol.lst
+
+ ====================== end romtol test =======================
+
+ CC -c -I. -I. -DHAVE_CONFIG_H -g bibclean.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g chek.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g do.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g fix.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g fndfil.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g isbn.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g keybrd.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g match.c
+ CC -I. -I. -g -c -DHOST=\"`hostname`\" -DUSER=\"beebe\" option.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g strist.c
+ CC -c -I. -I. -DHAVE_CONFIG_H -g strtol.c
+ CC -o bibclean -g bibclean.o chek.o do.o fix.o fndfil.o isbn.o keybrd.o match.o option.o romtol.o strist.o strtol.o
+ ild: (Performing full relink) too many files changed
+
+ ==================== begin BibTeX test 1 =====================
+
+
+ ./bibclean -init-file bibclean.ini testbib1.org >testbib1.bib 2>testbib1.err
+
+ There should be no differences found:
+ diff testbib1.bok testbib1.bib
+
+ There should be no differences found:
+ diff testbib1.eok testbib1.err
+
+ ===================== end BibTeX test 1 ======================
+
+
+ ==================== begin BibTeX test 2 =====================
+
+
+ ./bibclean -init-file bibclean.ini -no-check-values testbib2.org >testbib2.bib 2>testbib2.err
+
+ There should be no differences found:
+ diff testbib2.bok testbib2.bib
+
+ There should be no differences found:
+ diff testbib2.eok testbib2.err
+
+ latex testbib2.ltx >/dev/null
+
+ Expect 6 BibTeX warnings:
+ bibtex testbib2
+ Warning--empty year in Bennett
+ Warning--empty year in Cejchan
+ Warning--there's a number but no volume in Dubowsky:75
+ Warning--empty institution in Diver:88a
+ Warning--empty booktitle in Diver:88
+ Warning--empty year in Diver
+ (There were 6 warnings)
+
+ latex testbib2.ltx >/dev/null
+
+ latex testbib2.ltx
+ This is TeX, Version 3.1415 (C version 6.1)
+ (testbib2.ltx
+ LaTeX Version 2.09 <14 January 1991>
+ (/usr/local/lib/tex/latex/article.sty
+ Document Style `article' <16 Mar 88>.
+ (/usr/local/lib/tex/latex/art10.sty)) (testbib2.aux) (testbib2.bbl [1] [2]
+ [3]
+ Underfull \hbox (badness 1024) in paragraph at lines 261--264
+ [] []\tenrm L. M. Berkovich, V. P. Gerdt, Z. T. Kos-tova, and M. L.
+ [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]) [17] (testbib2.aux)
+ )
+ (see the transcript file for additional information)
+ Output written on testbib2.dvi (17 pages, 49032 bytes).
+ Transcript written on testbib2.log.
+
+ ===================== end BibTeX test 2 ======================
+
+
+ ==================== begin BibTeX test 3 =====================
+
+
+ ./bibclean -init-file bibclean.ini -fix-font-change testbib3.org >testbib3.bib 2>testbib3.err
+
+ There should be no differences found:
+
+ There should be no differences found:
+ diff testbib3.eok testbib3.err
+
+ ===================== end BibTeX test 3 ======================
+
+
+ ==================== begin BibTeX test 4 =====================
+
+
+ ./bibclean -init-file bibclean.ini -fix-font-change testbib4.org >testbib4.bib 2>testbib4.err
+
+ There should be no differences found:
+
+ There should be no differences found:
+ diff testbib4.eok testbib4.err
+
+ ===================== end BibTeX test 4 ======================
+
+
+ ==================== begin BibTeX test 5 =====================
+
+
+ ./bibclean -init-file bibclean.ini -German-style testbib5.org >testbib5.bib 2>testbib5.err
+
+ There should be no differences found:
+
+ There should be no differences found:
+ diff testbib5.eok testbib5.err
+
+ ===================== end BibTeX test 5 ======================
+
+
+ ==================== begin BibTeX test 6 =====================
+
+ ./bibclean -init-file bibclean.ini testisxn.org >testisxn.bib 2>testisxn.err
+
+ There should be no differences found:
+ diff testisxn.bok testisxn.bib
+
+ There should be no differences found:
+ diff testisxn.eok testisxn.err
+
+ ===================== end BibTeX test 6 ======================
+
+
+ ==================== begin BibTeX test 7 =====================
+
+ ./bibclean -init-file bibclean.ini testcodn.org >testcodn.bib 2>testcodn.err
+
+ There should be no differences found:
+ diff testcodn.bok testcodn.bib
+
+ There should be no differences found:
+ diff testcodn.eok testcodn.err
+
+ ===================== end BibTeX test 7 ======================
+
+
+ ==================== begin Scribe test 1 =====================
+
+
+ ----------------------------------------------------
+
+ ./bibclean -init-file bibclean.ini -scribe -no-check testscr1.org >testscr1.bib
+
+ There should be no differences found:
+ diff testscr1.bok testscr1.bib
+
+ There should be no differences found:
+ diff testscr1.eok testscr1.err
+
+ Expect 5 BibTeX warnings
+ bibtex testscr1
+ Warning--empty publisher in hanson-67
+ Warning--can't use both volume and number fields in kendeigh-52
+ Warning--empty author in singer-portion-chapter
+ Warning--empty author in singer-portion-volume
+ Warning--can't use both author and editor fields in wright-63
+ (There were 5 warnings)
+
+ ----------------------------------------------------
+
+ ./bibclean -init-file bibclean.ini -scribe -no-check testscr2.org >testscr2.bib
+
+ There should be no differences found:
+ diff testscr2.bok testscr2.bib
+
+ There should be no differences found:
+ diff testscr2.eok testscr2.err
+
+ There should be no BibTeX warnings:
+ bibtex testscr2
+ ===================== end Scribe test 1 ======================
+
+
+ ==================== begin Scribe test 2 =====================
+
+ ./bibclean -init-file bibclean.ini -scribe -file -no-check testscr2.org \
+ >testscr2.bib 2>testscr2.err
+
+ There should be no differences found:
+ diff testscr2.bok testscr2.bib
+
+ There should be no differences found:
+ diff testscr2.eok testscr2.err
+
+
+ ./bibclean -init-file bibclean.ini -scribe -file -no-check -no-par testscr2.org \
+ >testscr2.bi2 2>testscr2.er2
+ make: [test-scribe-2] Error 1 (ignored)
+
+ There should be no differences found:
+ diff testscr2.bo2 testscr2.bi2
+
+ There should be no differences found:
+ diff testscr2.eo2 testscr2.er2
+
+ ===================== end Scribe test 2 ======================
+
+
+ ==================== begin Scribe test 3 =====================
+
+ ./bibclean -init-file bibclean.ini -scribe -no-check testscr3.org >testscr3.bib 2>testscr3.err
+
+ There should be no differences found:
+ diff testscr3.bok testscr3.bib
+
+ There should be no differences found:
+ diff testscr3.eok testscr3.err
+
+ ===================== end Scribe test 3 ======================
+
+
+
+=====================================
+Details of UNIX installation attempts
+=====================================
+
+Clean builds and validations with "setenv CC xxx && ./configure &&
+make && make check" have been achieved on these systems:
+
+ DEC Alpha OSF/1 3.0
+ /bin/cc
+ /usr/ccs/bin/c89
+ /usr/ccs/bin/cc
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+ /usr/ucb/cc
+
+ For /bin/cxx, compiler switches to c89 for .c files, and
+ then gets an error which arises because
+ /usr/include/sys/signal.h:468: error: Missing ")".
+ stack_t is not defined by types.h except in Standard C
+ or C++ mode.
+
+ Recent versions of cxx have switch "-x cxx" to force
+ use of C++ compilation for .c files, but older ones do
+ not. On one such old system, I made an experiment
+ with changing extensions from .c to .cxx and updating
+ the Makefile accordingly. The build failed with:
+ ``Fatal: An attempt to allocate memory failed.''
+ during compilation of bibclean.cxx, and with
+ conflicting declarations of swab() from
+ /usr/include/unistd.h and /usr/include/cxx/string.h
+ during compilation of fndfil.cxx. These are both
+ vendor problems that may be fixed in newer releases of
+ the C++ compiler.
+
+ DEC Alpha OSF/1 3.2C (Digital UNIX)
+ /usr/ucb/cxx
+
+ The problems with cxx experienced on OSF/1 3.0 have
+ all disappeared, and I regularly use "cxx -x cxx" as
+ my C/C++ compiler of choice on this system. [The
+ DEC 2100-5/250 on which the compiler is installed has
+ 3 CPUs and 2GB of RAM, and each CPU does 250Mflops in
+ benchmarks, so it is a terrific development system!]
+
+ DECstation ULTRIX 4.3
+ /bin/cc
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+
+ Got many "warning: missing prototype" messages for
+ functions in system header files (because they are
+ still K&R style) with:
+ /usr/local/bin/lcc -A -A
+ but build completed and validated.
+
+ HP 9000/735 HP-UX 9.0.3
+ /bin/cc
+ /bin/c89
+ /usr/bin/CC
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+
+ For /bin/cc, the compiler warns
+
+ cc: "bibclean.c", line 3723: warning 30: Character
+ constant contains undefined escape sequence.
+ cc: "bibclean.c", line 3730: warning 30: Character
+ constant contains undefined escape sequence.
+
+ but the escape sequence ('\a') IS correctly translated.
+
+ HP 9000/735 HP-UX 10.0.1
+ /bin/cc
+ /bin/c89
+ /usr/bin/CC
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+
+ The warnings from /bin/cc no longer appear.
+
+ IBM RS/6000 AIX 3.2.5
+ /bin/cc
+ /bin/xlC
+ /usr/bin/c89
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+
+ IBM RS/6000 AIX 4.1
+ /bin/c89
+ /bin/xlC
+ /usr/bin/c89
+
+ Intel 486 Linux 1.3.15 and 1.3.97 (POSIX)
+ /usr/bin/g++
+ /usr/bin/gcc
+
+ MIPS RC 6280 RISCos 2.1.1AC
+ /bin/cc
+
+ NeXT Turbostation Mach 3.0
+ Compilation with any compiler produces failing links
+ with error: /bin/ld: multiple definitions of symbol _strtol
+ The configure.in script attempts to deal with this by
+ AC_REPLACE_FUNCS(strtol), but that results in the created
+ Makefile having LIBOBJS=strtol. Building with
+ make LIBOBJS=
+ provides a temporary workaround.
+
+ /usr/local/bin/gcc
+ /bin/cc
+ /usr/local/bin/g++
+
+ Many compilation "warning: missing prototype", plus
+ bibclean.c:2774: undeclared identifier `__ctype'
+ bibclean.c:3158: type error: pointer expected
+ ...
+ for
+ /usr/local/bin/lcc -A -A
+ lcc on this system is an old version (1.9); the
+ current lcc elsewhere is 3.4b, but unfortunately,
+ lcc 3.x dropped support for the Motorola 68xxx
+ code generator. I'm therefore writing off lcc
+ on the NeXT as not viable for software development.
+
+ NeXT Turbostation Mach 3.1
+ /bin/cc
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+
+ Silicon Graphics Indigo IRIX 4.0.5F
+
+ /usr/bin/cc
+ /usr/local/bin/gcc
+ /usr/local/bin/lcc -A -A
+
+ Compilation fails with
+ /usr/local/bin/g++
+ because of conflicts between system header files and
+ g++ built-in library function declarations.
+
+ Silicon Graphics Indigo-2 IRIX 5.3
+ /bin/cc
+ /usr/local/bin/g++
+ /usr/local/bin/gcc
+ /usr/local/bin/lcc -A -A
+
+ Silicon Graphics Power Challenge IRIX 6.0.1
+ /bin/CC
+ /bin/cc
+
+ For
+ /usr/local/bin/g++
+ and
+ /usr/local/bin/gcc
+ (2.7.0) get assembler errors from generated code.
+
+ Sun SPARC 4/380 Sun SunOS 4.1.3
+ /bin/cc
+ /usr/lang/acc
+ /usr/lang/CC
+ /usr/local/bin/gcc
+ /usr/ucb/cc
+
+ Linking fails with
+ /usr/local/bin/g++
+ because of multiply defined symbols. These arise
+ because g++ generates inline C-style interfaces
+ to library functions like strchr(), but on this
+ system, the library also contains C-style functions
+ with the same name, so linking produces multiple
+ definitions, and failure. Curiously, g++ 2.7.0 on
+ other systems, including Sun Solaris 2.x, does not
+ generate these interface functions, and so does not
+ cause problems there.
+
+ Compilation fails with
+ /usr/local/bin/lcc -A -A
+ because of a conflict in the definition of size_t
+ between /usr/include/sys/stdtypes.h and
+ /usr/local/include/lcc-3.4b/sparc-sun/stdlib.h.
+
+ Sun SPARC 20 Sun Solaris 2.3
+ /opt/SUNWspro/bin/cc
+ /opt/SUNWspro/bin/CC
+ /usr/local/bin/gcc
+ /usr/ucb/cc
+
+ Linking failed for
+ /usr/local/bin/g++
+ with MANY multiply-defined symbols (e.g. memchr in bibclean
+ and fndfil)
+
+ No problem on Solaris 2.4 with g++!
+
+ The reason that configure says
+ checking for strcspn... (cached) no
+ checking for strdup... (cached) no
+ checking for strspn... (cached) no
+ checking for strstr... (cached) no
+ checking for strtod... (cached) no
+ checking for strtol... (cached) no
+ is that it generates a test program with
+ char $ac_func();
+ as the prototype. With C++, that is a separate
+ function that cannot be found in the library. That is
+ also why LIBOBJS is being set incorrectly.
+
+ *** Need to check out g++ and lcc on this system ***
+ Build failed for
+ /usr/local/bin/lcc -A -A
+ with message
+ configure: error: can not run test program while cross compiling
+ This happens because configure uses -g, which blows
+ compilation because of unknown opcode ".stabd" errors
+ in assembler.
+
+ Can be fixed by manually changing configure line
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+ to
+ test "${CFLAGS+set}" = set || CFLAGS=""
+
+ There is another problem: STDC_HEADERS is not defined,
+ because a test program created by configure detects an
+ error in toupper(). This was traced to a bug in lcc's
+ ctype.h, and has been reported to the lcc-bugs list.
+ A manual patch to config.h solves the problem.
+
+===============================[The End]===============================
diff --git a/biblio/bibtex/utils/bibclean/bibclean-2.11.3.tar-lst b/biblio/bibtex/utils/bibclean/bibclean-2.11.3.tar-lst
new file mode 100644
index 0000000000..4d7b24eb39
--- /dev/null
+++ b/biblio/bibtex/utils/bibclean/bibclean-2.11.3.tar-lst
@@ -0,0 +1,219 @@
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/
+-rw-r--r-- beebe/staff 37493 May 4 08:14 1996 bibclean-2.11.3/ChangeLog
+-rw-r--r-- beebe/staff 26456 May 4 09:22 1996 bibclean-2.11.3/README
+-rw-rw-r-- beebe/staff 31755 Jul 1 20:06 1996 bibclean-2.11.3/Makefile
+-rw-r--r-- beebe/staff 31749 Jul 1 20:03 1996 bibclean-2.11.3/Makefile.in
+-rw-r--r-- beebe/staff 52569 May 3 14:11 1996 bibclean-2.11.3/bibclean.c
+-rw-r--r-- beebe/staff 14673 May 3 09:59 1996 bibclean-2.11.3/bibclean.h
+-rw-rw-r-- beebe/staff 51836 Jul 1 20:02 1996 bibclean-2.11.3/bibclean.hlp
+-r--r--r-- beebe/staff 68073 May 3 09:59 1996 bibclean-2.11.3/bibclean.html
+-rw-rw-r-- beebe/staff 7267 Feb 8 12:31 1993 bibclean-2.11.3/bibclean.ini
+-rw-r--r-- beebe/staff 42153 May 3 09:20 1996 bibclean-2.11.3/bibclean.man
+-rw-rw-r-- beebe/staff 55589 Jul 1 20:03 1996 bibclean-2.11.3/bibclean.pdf
+-rw-rw-r-- beebe/staff 75125 Jul 1 20:02 1996 bibclean-2.11.3/bibclean.ps
+-rw-rw-r-- beebe/staff 4474 Jan 30 10:34 1993 bibclean-2.11.3/bibclean.reg
+-rw-rw-r-- beebe/staff 54676 Jul 1 20:02 1996 bibclean-2.11.3/bibclean.txt
+-rwxrwxr-x beebe/staff 1945 Oct 2 11:32 1995 bibclean-2.11.3/build-all.sh
+-rw-rw-r-- beebe/staff 1010 Mar 4 08:04 1996 bibclean-2.11.3/ch.h
+-rw-r--r-- beebe/staff 29251 May 3 14:13 1996 bibclean-2.11.3/chek.c
+-rw-r--r-- beebe/staff 5226 Jul 1 19:54 1996 bibclean-2.11.3/config.h
+-rw-rw-r-- beebe/staff 4948 May 2 11:22 1996 bibclean-2.11.3/config.hin
+-rwxrwxr-x beebe/staff 51659 May 4 08:23 1996 bibclean-2.11.3/configure
+-rw-rw-r-- beebe/staff 3442 Apr 30 06:52 1996 bibclean-2.11.3/configure.in
+-rw-rw-r-- beebe/staff 309 Oct 4 08:40 1995 bibclean-2.11.3/configure.sed
+-rw-rw-r-- beebe/staff 3811 May 2 06:02 1996 bibclean-2.11.3/custom.h
+-rw-rw-r-- beebe/staff 285 Oct 3 11:27 1995 bibclean-2.11.3/delete.h
+-rw-r--r-- beebe/staff 74424 May 3 14:14 1996 bibclean-2.11.3/do.c
+-rw-r--r-- beebe/staff 17229 May 3 14:15 1996 bibclean-2.11.3/fix.c
+-rw-r--r-- beebe/staff 20007 May 3 14:16 1996 bibclean-2.11.3/fndfil.c
+-rw-r--r-- beebe/staff 21250 May 3 14:17 1996 bibclean-2.11.3/isbn.c
+-rw-r--r-- beebe/staff 17949 May 3 14:19 1996 bibclean-2.11.3/keybrd.c
+-rw-rw-r-- beebe/staff 1297 Mar 4 10:34 1996 bibclean-2.11.3/keybrd.h
+-rw-r--r-- beebe/staff 13146 May 3 14:22 1996 bibclean-2.11.3/match.c
+-rw-r--r-- beebe/staff 147662 May 3 07:52 1996 bibclean-2.11.3/match.dat
+-rw-rw-r-- beebe/staff 290 Feb 8 08:00 1993 bibclean-2.11.3/match.h
+-rw-rw-r-- beebe/staff 320466 May 3 08:06 1996 bibclean-2.11.3/match.lok
+-rw-r--r-- beebe/staff 14780 May 3 14:22 1996 bibclean-2.11.3/option.c
+-rw-rw-r-- beebe/staff 363 Oct 3 11:26 1995 bibclean-2.11.3/pattern.h
+-rw-rw-r-- beebe/staff 1858 Nov 7 16:24 1992 bibclean-2.11.3/rofvms.awk
+-rw-r--r-- beebe/staff 4827 May 3 14:23 1996 bibclean-2.11.3/romtol.c
+-rw-r--r-- beebe/staff 188 Jan 6 13:41 1993 bibclean-2.11.3/romtol.dat
+-rw-rw-r-- beebe/staff 1688 Jan 6 14:43 1993 bibclean-2.11.3/romtol.lok
+-rw-rw-r-- beebe/staff 1158 Oct 7 09:50 1995 bibclean-2.11.3/strist.c
+-rw-rw-r-- beebe/staff 4692 Oct 7 09:50 1995 bibclean-2.11.3/strtol.c
+-rw-rw-r-- beebe/staff 474 Oct 3 11:27 1995 bibclean-2.11.3/token.h
+-rw-rw-r-- beebe/staff 1102 Oct 3 11:28 1995 bibclean-2.11.3/toklst.h
+-rw-r--r-- beebe/staff 25631 May 3 14:24 1996 bibclean-2.11.3/vaxvms.c
+-rw-r--r-- beebe/staff 32373 May 3 14:25 1996 bibclean-2.11.3/vmswild.c
+-rw-rw-r-- beebe/staff 969 Oct 3 08:24 1995 bibclean-2.11.3/xctype.h
+-rw-rw-r-- beebe/staff 137 Sep 19 23:34 1995 bibclean-2.11.3/xerrno.h
+-rw-rw-r-- beebe/staff 142 Sep 19 23:34 1995 bibclean-2.11.3/xlimits.h
+-rw-rw-r-- beebe/staff 127 Sep 19 23:34 1995 bibclean-2.11.3/xpwd.h
+-rw-rw-r-- beebe/staff 283 Sep 27 15:53 1995 bibclean-2.11.3/xstat.h
+-rw-rw-r-- beebe/staff 258 Oct 3 17:27 1995 bibclean-2.11.3/xstdlib.h
+-rw-rw-r-- beebe/staff 559 Oct 3 22:25 1995 bibclean-2.11.3/xstring.h
+-rw-rw-r-- beebe/staff 191 Sep 19 23:37 1995 bibclean-2.11.3/xtypes.h
+-rw-rw-r-- beebe/staff 215 Sep 28 09:23 1995 bibclean-2.11.3/xunistd.h
+-rw-rw-r-- beebe/staff 206 Oct 3 07:32 1995 bibclean-2.11.3/yesorno.h
+-rw-rw-r-- beebe/staff 12275 Sep 24 00:55 1993 bibclean-2.11.3/testbib1.org
+-rw-rw-r-- beebe/staff 59097 Nov 24 23:43 1992 bibclean-2.11.3/testbib2.org
+-rw-rw-r-- beebe/staff 4524 Mar 8 13:37 1995 bibclean-2.11.3/testbib3.org
+-rw-rw-r-- beebe/staff 4604 Feb 6 07:15 1993 bibclean-2.11.3/testbib4.org
+-rw-rw-r-- beebe/staff 1689 Oct 16 12:36 1994 bibclean-2.11.3/testbib5.org
+-rw-rw-r-- beebe/staff 22579 Nov 24 23:43 1992 bibclean-2.11.3/testisxn.org
+-rw-rw-r-- beebe/staff 39544 Apr 28 09:01 1996 bibclean-2.11.3/testcodn.org
+-rw-rw-r-- beebe/staff 12509 Jun 4 10:28 1994 bibclean-2.11.3/testbib1.bok
+-rw-rw-r-- beebe/staff 73340 Mar 4 07:04 1996 bibclean-2.11.3/testbib2.bok
+-rw-rw-r-- beebe/staff 4957 Mar 8 13:38 1995 bibclean-2.11.3/testbib3.bok
+-rw-rw-r-- beebe/staff 4765 Jun 4 11:47 1994 bibclean-2.11.3/testbib4.bok
+-rw-rw-r-- beebe/staff 1904 Oct 16 19:53 1994 bibclean-2.11.3/testbib5.bok
+-rw-rw-r-- beebe/staff 22612 Oct 18 12:20 1994 bibclean-2.11.3/testisxn.bok
+-rw-rw-r-- beebe/staff 39543 Apr 28 09:02 1996 bibclean-2.11.3/testcodn.bok
+-rw-rw-r-- beebe/staff 1834 Jan 7 06:26 1993 bibclean-2.11.3/testbib1.eok
+-rw-rw-r-- beebe/staff 0 Nov 24 23:38 1992 bibclean-2.11.3/testbib2.eok
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/doc/
+-rw-r--r-- beebe/staff 2993 May 3 09:34 1996 bibclean-2.11.3/doc/Makefile
+-rw-rw-r-- beebe/staff 4136 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.aux
+-rw-rw-r-- beebe/staff 7112 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.bbl
+-rw-r--r-- beebe/staff 12410 Nov 18 09:33 1993 bibclean-2.11.3/doc/bibclean.bib
+-rw-rw-r-- beebe/staff 0 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.blg
+-rw-rw-r-- beebe/staff 139968 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.dvi
+-rw-rw-r-- beebe/staff 56081 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.idx
+-rw-rw-r-- beebe/staff 386 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.ilg
+-rw-rw-r-- beebe/staff 22304 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.ind
+-rw-rw-r-- beebe/staff 2227 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.log
+-rw-rw-r-- beebe/staff 294 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.lot
+-rw-r--r-- beebe/staff 111894 Dec 31 12:47 1993 bibclean-2.11.3/doc/bibclean.ltx
+-rw-rw-r-- beebe/staff 1635 May 3 09:42 1996 bibclean-2.11.3/doc/bibclean.sok
+-rw-r--r-- beebe/staff 12451 Nov 17 15:41 1993 bibclean-2.11.3/doc/bibclean.sty
+-rw-rw-r-- beebe/staff 976 Jul 1 20:09 1996 bibclean-2.11.3/doc/bibclean.toc
+-rw-r--r-- beebe/staff 31597 Apr 1 19:38 1996 bibclean-2.11.3/doc/is-plain.bst
+-rw-rw-r-- beebe/staff 24043 Feb 22 16:40 1995 bibclean-2.11.3/doc/ltugboat.sty
+-rw-r--r-- beebe/staff 13526 Dec 18 17:48 1991 bibclean-2.11.3/doc/path.sty
+-rw-r--r-- beebe/staff 12268 Mar 16 10:08 1993 bibclean-2.11.3/doc/texnames.sty
+-rw-rw-r-- beebe/staff 32135 Nov 4 12:10 1995 bibclean-2.11.3/doc/tugboat.cmn
+-rw-rw-r-- beebe/staff 330 Jan 9 16:01 1993 bibclean-2.11.3/testbib3.eok
+-rw-rw-r-- beebe/staff 0 Feb 8 10:07 1993 bibclean-2.11.3/testbib4.eok
+-rw-rw-r-- beebe/staff 163 Oct 16 19:53 1994 bibclean-2.11.3/testbib5.eok
+-rw-rw-r-- beebe/staff 5233 Apr 25 10:51 1996 bibclean-2.11.3/testisxn.eok
+-rw-rw-r-- beebe/staff 61113 Apr 28 09:02 1996 bibclean-2.11.3/testcodn.eok
+-rw-rw-r-- beebe/staff 324 Nov 16 16:46 1992 bibclean-2.11.3/testbib2.ltx
+-rw-rw-r-- beebe/staff 24519 Jan 13 10:46 1993 bibclean-2.11.3/testscr1.org
+-rw-rw-r-- beebe/staff 1540 Nov 24 23:43 1992 bibclean-2.11.3/testscr2.org
+-rw-rw-r-- beebe/staff 507 Nov 24 23:43 1992 bibclean-2.11.3/testscr3.org
+-rw-rw-r-- beebe/staff 25946 Feb 8 11:27 1993 bibclean-2.11.3/testscr1.bok
+-rw-rw-r-- beebe/staff 1563 Nov 24 23:39 1992 bibclean-2.11.3/testscr2.bok
+-rw-rw-r-- beebe/staff 427 Nov 24 23:39 1992 bibclean-2.11.3/testscr3.bok
+-rw-rw-r-- beebe/staff 0 Nov 27 15:55 1992 bibclean-2.11.3/testscr1.eok
+-rw-rw-r-- beebe/staff 0 Nov 24 23:38 1992 bibclean-2.11.3/testscr2.eok
+-rw-rw-r-- beebe/staff 0 Nov 24 23:38 1992 bibclean-2.11.3/testscr3.eok
+-rw-rw-r-- beebe/staff 2760 Jun 4 10:29 1994 bibclean-2.11.3/testscr2.bo2
+-rw-rw-r-- beebe/staff 1125 Jun 4 10:33 1994 bibclean-2.11.3/testscr2.eo2
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/
+-rw-rw-r-- beebe/staff 14255 May 2 08:18 1996 bibclean-2.11.3/ibmpc/dos/README
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/
+-rwxrwxr-x beebe/staff 152883 May 2 07:48 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/bibclean.exe
+-rw-rw-r-- beebe/staff 5083 May 1 12:38 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/ibmtest.bat
+-rw-r--r-- beebe/staff 758 May 2 07:30 1996 bibclean-2.11.3/ibmpc/dos/msc5p1/msc51bld.bat
+-rw-r--r-- beebe/staff 271 Dec 3 08:28 1992 bibclean-2.11.3/ibmpc/dos/msc5p1/msc51pth.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/
+-rwxrwxr-x beebe/staff 133563 May 2 07:52 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/bibclean.exe
+-rw-rw-r-- beebe/staff 20299 May 2 07:52 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/bibclean.map
+-rw-rw-r-- beebe/staff 5083 May 1 12:38 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/ibmtest.bat
+-rw-r--r-- beebe/staff 955 May 2 07:31 1996 bibclean-2.11.3/ibmpc/dos/msc6p0/msc60bld.bat
+-rw-r--r-- beebe/staff 290 Dec 4 06:04 1992 bibclean-2.11.3/ibmpc/dos/msc6p0/msc60pth.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/msc7p0/
+-rw-rw-r-- beebe/staff 5083 May 1 12:38 1996 bibclean-2.11.3/ibmpc/dos/msc7p0/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/msc7p0/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/msc7p0/ibmtest.bat
+-rw-r--r-- beebe/staff 955 May 2 07:31 1996 bibclean-2.11.3/ibmpc/dos/msc7p0/msc70bld.bat
+-rw-r--r-- beebe/staff 271 Nov 30 17:16 1992 bibclean-2.11.3/ibmpc/dos/msc7p0/msc70pth.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/
+-rwxrwxr-x beebe/staff 157785 May 2 07:56 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/bibclean.exe
+-rw-rw-r-- beebe/staff 5171 Apr 30 08:45 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/ibmtest.bat
+-rw-r--r-- beebe/staff 1316 May 2 07:37 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/tcc20bld.bat
+-rw-r--r-- beebe/staff 217 May 1 17:55 1996 bibclean-2.11.3/ibmpc/dos/tcc2p0/tcc20pth.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/
+-rwxrwxr-x beebe/staff 156860 May 2 07:58 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/bibclean.exe
+-rw-rw-r-- beebe/staff 5171 Apr 30 08:45 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/ibmtest.bat
+-rw-r--r-- beebe/staff 1732 May 2 07:34 1996 bibclean-2.11.3/ibmpc/dos/tcc3p0/tcc30bld.bat
+-rw-r--r-- beebe/staff 197 Nov 30 13:47 1992 bibclean-2.11.3/ibmpc/dos/tcc3p0/tcc30pth.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/
+-rwxrwxr-x beebe/staff 157004 May 2 07:25 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/bibclean.exe
+-rw-rw-r-- beebe/staff 5171 Apr 30 08:45 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/ibmtest.bat
+-rw-r--r-- beebe/staff 197 Nov 30 13:47 1992 bibclean-2.11.3/ibmpc/dos/tpp3p0/tcc30pth.bat
+-rw-rw-r-- beebe/staff 1699 May 2 07:35 1996 bibclean-2.11.3/ibmpc/dos/tpp3p0/tpp30bld.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/wat10/
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/
+-rwxrwxr-x beebe/staff 133604 May 2 08:03 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/bibclean.exe
+-rw-rw-r-- beebe/staff 18957 May 2 08:03 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/bibclean.map
+-rw-rw-r-- beebe/staff 5085 Apr 29 06:20 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/config.h
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 May 1 20:16 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/ibmtest.bat
+-rw-rw-r-- beebe/staff 993 May 2 07:38 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/watcpp.bat
+-rw-rw-r-- beebe/staff 318 May 2 06:32 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/watpath.bat
+-rw-rw-r-- beebe/staff 679 May 2 07:38 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc/watwcc.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/
+-rwxrwxr-x beebe/staff 112238 May 2 08:07 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/bibclean.exe
+-rw-rw-r-- beebe/staff 5085 Apr 29 06:20 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/config.h
+-rwxrwxr-x beebe/staff 21694 May 31 10:00 1994 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/dos4gw.doc
+-rwxrwxr-x beebe/staff 254556 May 31 10:00 1994 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/dos4gw.exe
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 Apr 30 06:58 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/ibmtest.bat
+-rw-rw-r-- beebe/staff 514 May 2 07:39 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/wat10bld.bat
+-rw-rw-r-- beebe/staff 318 May 2 06:32 1996 bibclean-2.11.3/ibmpc/dos/wat10/wcc386/watpath.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/
+-rwxrwxr-x beebe/staff 113514 May 2 08:11 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/bibclean.exe
+-rw-rw-r-- beebe/staff 5085 Apr 29 06:20 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/config.h
+-rwxrwxr-x beebe/staff 0 May 31 10:00 1994 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/dos4gw.doc link to bibclean-2.11.3/ibmpc/dos/wat10/wcc386/dos4gw.doc
+-rwxrwxr-x beebe/staff 0 May 31 10:00 1994 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/dos4gw.exe link to bibclean-2.11.3/ibmpc/dos/wat10/wcc386/dos4gw.exe
+-rw-rw-r-- beebe/staff 60 Apr 30 07:04 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/ibmclean.bat
+-rw-r--r-- beebe/staff 5906 May 1 20:16 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/ibmtest.bat
+-rw-rw-r-- beebe/staff 514 May 2 07:39 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/w386cpp.bat
+-rw-rw-r-- beebe/staff 318 May 2 06:32 1996 bibclean-2.11.3/ibmpc/dos/wat10/wpp386/watpath.bat
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/ibmpc/linux/
+-rwxr-xr-x beebe/staff 211679 May 1 20:25 1996 bibclean-2.11.3/ibmpc/linux/bibclean
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/save/
+-r--r--r-- beebe/staff 31342 May 3 10:01 1996 bibclean-2.11.3/save/Makefile
+-r--r--r-- beebe/staff 5246 May 2 16:36 1996 bibclean-2.11.3/save/config.h
+-r-xrwxr-x beebe/staff 51659 May 4 08:23 1996 bibclean-2.11.3/save/configure
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/vms/
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/vms/alpha/
+-rw-r--r-- beebe/staff 419 Oct 8 09:26 1993 bibclean-2.11.3/vms/alpha/recomp.com
+-rw-r--r-- beebe/staff 499 Oct 8 09:26 1993 bibclean-2.11.3/vms/alpha/vmsclean.com
+-rw-r--r-- beebe/staff 1917 Oct 8 09:29 1993 bibclean-2.11.3/vms/alpha/vmsmake.com
+-rw-r--r-- beebe/staff 5468 Oct 16 20:06 1994 bibclean-2.11.3/vms/alpha/vmstest.com
+drwxrwsr-x beebe/staff 0 Jul 1 20:10 1996 bibclean-2.11.3/vms/vax/
+-rw-rw-r-- beebe/staff 1837 May 2 18:32 1996 bibclean-2.11.3/vms/vax/README
+-rw-r--r-- beebe/staff 121344 May 2 18:02 1996 bibclean-2.11.3/vms/vax/bibclean.exe
+-rw-r--r-- beebe/staff 37060 May 2 18:02 1996 bibclean-2.11.3/vms/vax/bibclean.obj
+-rw-r--r-- beebe/staff 21536 May 2 18:02 1996 bibclean-2.11.3/vms/vax/chek.obj
+-rw-r--r-- beebe/staff 5424 May 2 18:04 1996 bibclean-2.11.3/vms/vax/config.h
+-rw-r--r-- beebe/staff 72778 May 2 18:02 1996 bibclean-2.11.3/vms/vax/do.obj
+-rw-r--r-- beebe/staff 16572 May 2 18:02 1996 bibclean-2.11.3/vms/vax/fix.obj
+-rw-r--r-- beebe/staff 5866 May 2 18:02 1996 bibclean-2.11.3/vms/vax/fndfil.obj
+-rw-rw-r-- beebe/staff 67 May 2 15:54 1996 bibclean-2.11.3/vms/vax/getoneheader.com
+-rw-rw-r-- beebe/staff 8148 May 2 15:51 1996 bibclean-2.11.3/vms/vax/getvmsheaders.com
+-rw-r--r-- beebe/staff 18916 May 2 18:02 1996 bibclean-2.11.3/vms/vax/isbn.obj
+-rw-r--r-- beebe/staff 31593 May 2 18:02 1996 bibclean-2.11.3/vms/vax/keybrd.obj
+-rw-r--r-- beebe/staff 8549 May 2 18:02 1996 bibclean-2.11.3/vms/vax/match.obj
+-rw-r--r-- beebe/staff 31161 May 2 18:02 1996 bibclean-2.11.3/vms/vax/option.obj
+-rw-r--r-- beebe/staff 413 Oct 8 09:16 1993 bibclean-2.11.3/vms/vax/recomp.com
+-rw-r--r-- beebe/staff 3895 May 2 18:02 1996 bibclean-2.11.3/vms/vax/romtol.obj
+-rw-r--r-- beebe/staff 2575 May 2 18:02 1996 bibclean-2.11.3/vms/vax/strist.obj
+-rw-r--r-- beebe/staff 60071 May 2 18:02 1996 bibclean-2.11.3/vms/vax/vaxvms.obj
+-rw-r--r-- beebe/staff 489 Nov 25 07:49 1992 bibclean-2.11.3/vms/vax/vmsclean.com
+-rw-r--r-- beebe/staff 2910 May 2 17:12 1996 bibclean-2.11.3/vms/vax/vmsmake.com
+-rw-r--r-- beebe/staff 5827 May 2 08:54 1996 bibclean-2.11.3/vms/vax/vmstest.com
+-rw-r--r-- beebe/staff 16693 May 2 18:02 1996 bibclean-2.11.3/vms/vax/vmswild.obj
diff --git a/biblio/bibtex/utils/bibclean/bibclean.pdf b/biblio/bibtex/utils/bibclean/bibclean.pdf
new file mode 100644
index 0000000000..9c148d48a3
--- /dev/null
+++ b/biblio/bibtex/utils/bibclean/bibclean.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibdb b/biblio/bibtex/utils/bibdb
new file mode 120000
index 0000000000..8a922f08d6
--- /dev/null
+++ b/biblio/bibtex/utils/bibdb
@@ -0,0 +1 @@
+../../../support/bibdb \ No newline at end of file
diff --git a/biblio/bibtex/utils/bibexport/README b/biblio/bibtex/utils/bibexport/README
new file mode 100644
index 0000000000..f2b9bf7a84
--- /dev/null
+++ b/biblio/bibtex/utils/bibexport/README
@@ -0,0 +1,27 @@
+ bibexport.sh -- extract BibTeX entries out of .bib file(s).
+ (Nicolas Markey -- <bibexport(at)markey.fr>)
+ version 3.03 -- 2019/03/30
+
+This is a shell script using BibTeX to extract .bib entries that are
+\cite'd in a document. It also permits to expand a BibTeX file,
+i.e. to develop abbreviations (except standard ones) and crossrefs.
+
+
+----------------------------------------------------------------------
+
+(c) 2019/03/30 Nicolas Markey <bibexport at markey dot fr>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Nicolas Markey.
+
+
+
+
diff --git a/biblio/bibtex/utils/bibexport/bibexport.dtx b/biblio/bibtex/utils/bibexport/bibexport.dtx
new file mode 100644
index 0000000000..8ba3261bdc
--- /dev/null
+++ b/biblio/bibtex/utils/bibexport/bibexport.dtx
@@ -0,0 +1,1569 @@
+% \iffalse meta-comment
+%
+% Copyright
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{doc}
+
+\def\script#1{\texttt{#1}}
+\def\ext#1{\texttt{.#1}}
+\def\var#1{\texttt{\$#1}}
+\def\entry#1{\texttt{@#1}}
+\def\lang#1{\textsc{#1}}
+\def\bst#1{\textsf{#1.bst}}
+\def\BibTeX{Bib\TeX}
+
+%%%\AtBeginDocument{\CodelineIndex\EnableCrossrefs}
+%%%\AtEndDocument{\PrintIndex}
+\begin{document}
+ \def\docdate{2019/03/30}
+ \def\fileversion{3.03}
+%%% Please also change date at the beginning of the script %%%
+%%% (VERSION and VDATE below) %%%
+ \DocInput{bibexport.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+% \CheckSum{45}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \title{The \script{bibexport.sh} script}
+% \author{Nicolas Markey}
+% \date{\docdate}
+% \maketitle
+% \StopEventually{}
+%
+% \begin{abstract}
+% \script{bibexport.sh} is a small shell script, relying on \BibTeX, that
+% extracts entries of one or several \ext{bib} file(s). It~will expand
+% abbreviations and cross-references, except standard month and journal
+% abbreviations. The output is indented as neatly as possible, yielding a
+% readable \ext{bib} file even if the original file is~not.
+% \end{abstract}
+%
+%
+% \section{Exporting \ext{bib} files}
+%
+% \subsection{Why and how?}
+%
+% \BibTeX{} aims at allowing for the use of one single \ext{bib} file,
+% containing many entries, from which \BibTeX{} extracts only the
+% \verb+\cite+d ones. When sending a document to someone else, this
+% requires either sending the whole file, or extracting the \verb+\cite+d
+% entries from the \ext{bib} file.
+%
+% \BibTeX{} also has a mechanism for using abbreviations and
+% cross-references. When extracting entries of a large \ext{bib} file,
+% it can be interesting to develop those abbreviations, in order to get a
+% clean, self-contained \ext{bib} file. Also, it may be useful to develop
+% cross-references in a \ext{bib} file, independently of any document.
+%
+% \medskip
+% \script{bibexport} can either extract entries that are cited in a document,
+% or all the entries of one or several \ext{bib} files. It will always develop
+% cross-references and abreviations, except standard abbreviations for months or
+% some journals, that are defined in standard \BibTeX{} styles. This script
+% uses \BibTeX{}. This has both pros and cons:
+% \begin{itemize}
+%\item[$+$] it is very simple. Basicaly, the script simply calls \BibTeX{}, and the
+% \ext{bst} file just outputs the name and the content of each field.
+%\item[$+$] since it uses \BibTeX, we are sure that it will handle everything
+% "properly", \emph{i.e.} in the same way as they will be handled when cited in
+% a \LaTeX{} document;
+%\item[$=$] \BibTeX{} has some strict limitations (especially "no more than 78 consecutive
+% non-space characters") that we must be aware~of. On~the other hand, any such
+% problem occuring within the script would also occur when compiling a
+% document;
+%\item[$-$] abbreviations and cross-references will \emph{always} be
+% developped. It~could be argued that this is also a positive point, but
+% having the choice would be better.
+%\item[$-$] Many people seem to find \BibTeX's internal language clumsy, and thus
+% the script could be difficult to adapt to special needs. However, this is
+% not \emph{that} difficult, as will be explained later~on. In the present case,
+% adding more fields to be exported is quite easy.
+% \end{itemize}
+%
+% \subsection{Related scripts}
+%
+% Several other tools exist for achieving this task:
+% \begin{itemize}
+%\item \verb+aux2bib+, written by Ralf Treinen, relies on \verb+bib2bib+,
+% which is a \lang{CaML} program for selecting some entries in one or several \ext{bib}
+% files. It does not expand anything, but includes all the necessary
+% definitions and entries.
+%\item \verb+bibextract.sh+, by Nelson Beebe. This script uses \lang{awk} for
+% extracting some entries out of a \ext{bib} file. It~is said not to be
+% compliant with cross-references.
+%\item \bst{subset}, by David Kotz. \bst{export} develops the same ideas (but
+% I discovered that only later~on). \bst{subset} does not handle
+% \entry{preamble}, neither does it "protect" standard abbreviations.
+% \end{itemize}
+%
+% \subsection{Some examples}
+%
+% \begin{itemize}
+%\item extracting \verb+\cite+d references of a document, also including
+% cross-references:
+%\begin{center}
+% \ttfamily bibexport.sh -o {\itshape <result>}.bib {\itshape <file>}.aux
+%\end{center}
+%\item extracting \verb+\cite+d references of a document, without crossrefs,
+% and using a special \ext{bst} file:
+%\begin{center}
+% \ttfamily bibexport.sh -b {\itshape <style>}.bst -o {\itshape <result>}.bib {\itshape <file>}.aux
+%\end{center}
+%\item export all the entries of two \ext{bib} files (including crossrefed entries):
+%\begin{center}
+% \ttfamily bibexport.sh -a -o {\itshape <result>}.bib {\itshape <file1>}.bib {\itshape <file2>}.bib
+%\end{center}
+%\item export all the entries of two \ext{bib} files (without crossrefs):
+%\begin{center}
+% \ttfamily bibexport.sh -a -n -o {\itshape <result>}.bib {\itshape <file1>}.bib
+% {\itshape <file2>}.bib
+%\end{center}
+% In fact, the only difference between this and the previous one is that
+% \texttt{crossref} field will be filtered out at the end of the script.
+%\item export all the entries of two \ext{bib} files, using an extra file
+% containing cross-referenced entries (which should not be included):
+%\begin{center}
+% \ttfamily bibexport.sh -a -e {\itshape <crossref>}.bib -n -o {\itshape
+% <result>}.bib \textbackslash\par {\itshape <file1>}.bib {\itshape <file2>}.bib
+%\end{center}
+%\end{itemize}
+%
+% \subsection{Exporting extra fields}
+%
+% By~default, \script{bibexport} exports only "standard" fields
+% (those defined and used in \bst{plain}), as~well as a few
+% others. It~is very easy to modify it in order to export other fields:
+% it~suffices to modify \bst{export} as follows:
+% \begin{itemize}
+% \item in the \texttt{ENTRY} list, add the name of the field you would
+% like to export. Notice that \texttt{ENTRY} takes three space-separated
+% lists as arguments; you must add extra fields in the first argument
+% (actually, the last two are empty).
+% \item in the function \texttt{entry.export.extra}, add a line of the
+% form
+% \begin{center}
+% \ttfamily
+% "myfield" myfield field.export
+% \end{center}
+% where \texttt{myfield} is the name of the extra field you want to
+% export.
+% \end{itemize}
+%
+% \subsection*{Acknowledgements}
+% I thank \'Eric Colin de Verdi\`ere, Richard Mathar, Harald Hanche-Olsen,
+% Damien Pollet, and Caner Kazanci for suggesting several improvements
+% or corrections.
+%
+% \section{The code}
+% \subsection{The shell script}
+% \subsubsection{Initialization}
+%
+%\begin{macro}{checkversion}
+% We check that the \ext{bst} files have the correct version number:
+% \begin{macrocode}
+%<*script>
+function checkversion()
+{
+ kpsewhich expcites.bst > /dev/null ||
+ echo "-----------
+--Warning-- file expcites.bst not found.
+-----------"
+ grep -q $VDATE `kpsewhich expkeys.bst` ||
+ echo "-----------
+--Warning-- the version of the .bst files does not match with that of this script.
+-----------"
+}
+%</script>
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{usage}
+% We first define how the script should be used:
+% \begin{macrocode}
+%<*script>
+function usage()
+{
+echo "bibexport: a tool to extract BibTeX entries out of .bib files.
+usage: `basename $0` [-h|v|n|c|a|d|s|t] [-b|e|es|ec|o|r file] file...
+
+Basic options:
+--------------
+ -a, --all export the entire .bib files
+ -o bib, --output-file bib write output to file [default: bibexport.bib]
+ -ns, --nosave overwrite output file without keeping a copy
+ -p, --preamble write a preamble at beginning of output
+ -t, --terse operate silently
+ -h, --help print this message and exit
+ -v, --version print version number and exit
+
+Advanced options:
+-----------------
+ -b bst, --bst bst specifies the .bst style file [default: export.bst]
+ -c, --crossref preserve crossref field [default: no]
+ -n, --no-crossref remove crossref'd entries [default: no]
+ -e bib, --extra bib extra .bib file to be used (crossrefs and strings)
+ -es bib, --extras bib extra .bib file to be used (for strings)
+ -ec bib, --extrac bib extra .bib file to be used (for crossrefs)
+ -r bib, --replace bib replace .bib file(s) in the .aux file
+ -d, --debug create intermediate files but don't run BibTeX";
+exit 0;
+}
+%</script>
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{opttoolate}
+% We also have a function to warn if extra options are given after
+% the names of input files, which is not allowed.
+% \begin{macrocode}
+%<*script>
+function opttoolate()
+{
+if [ ! -z "${TOOLATE}" ]; then
+ echo "No options are allowed after the input files";
+ exit 0;
+fi
+}
+%</script>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{VERSION}
+%\begin{macro}{VDATE}
+%\begin{macro}{ALL}
+%\begin{macro}{CREF}
+%\begin{macro}{DEBUG}
+%\begin{macro}{FILE}
+%\begin{macro}{EXT}
+%\begin{macro}{EXTRA}
+%\begin{macro}{EXTRABIB}
+%\begin{macro}{REPLACEBIB}
+%\begin{macro}{NEWBIB}
+%\begin{macro}{SPACE}
+%\begin{macro}{BST}
+%\begin{macro}{TERSE}
+%\begin{macro}{BANNER}
+%\begin{macro}{NOSAVE}
+%\begin{macro}{ARGS}
+%\begin{macro}{TOOLATE}
+% We define the default value of some variables:
+% \begin{itemize}
+% \item \var{VERSION}: the version number;
+% \item \var{VDATE}: the release date;
+% \item \var{ALL}: a flag indicating that all entries of the given (\ext{bib})
+% file are to be exported;
+% \item \var{CREF}: the value of \verb+-min-crossrefs+;
+% \item \var{FILE}: the input file(s);
+% \item \var{EXT}: the extension (\ext{aux} or \ext{bib}) of input files;
+% \item \var{EXTRA}: list of possible extra \ext{bib} files without extension;
+% \item \var{EXTRABIB}: list of possible extra \ext{bib} files with extension;
+% \item \var{REPLACEBIB}: flag indicating that we will replace the \ext{bib}
+% file given in the \ext{aux} file with a new one;
+% \item \var{NEWBIB}: new \ext{bib} file to replace that fiven in the
+% \ext{aux} file;
+% \item \var{SPACE}: file name separator (can be \textvisiblespace, comma or empty);
+% \item \var{BST}: the \ext{bst} file to be used;
+% \item \var{TERSE}: run silently;
+% \item \var{BANNER}: don't print the initial comment;
+% \item \var{NOSAVE}: don't keep a copy if overwriting output file;
+% \item \var{ARGS}: the list of aruments passed to \texttt{bibexport.sh};
+% \item \var{TOOLATE}: options are not allowed once we have encountered the
+% first non-option argument.
+% \item \var{DEBUG}: create intermediate files but do not run BibTeX.
+% \end{itemize}
+% \begin{macrocode}
+%<*script>
+## Version number
+VERSION="3.03";
+## Release date
+VDATE="2019/03/30";
+
+# ALL is a flag set to 1 when '-a' is given
+ALL="";
+# FILE will be the main input file(s) (.aux or .bib, depending on '-a')
+FILE="";
+# EXT is the extension of the input file(s) (.aux, or .bib if '-a')
+EXT=".aux";
+# EXTRA and EXTRABIB are two copies of the extra files ('-e'), used to
+# include crossref'd entries and @string's
+EXTRA="";
+EXTRABIB="";
+# REPLACEBIB ('-r') is set to 1 when the \bibdata of the .aux input file
+# must be ignores (then '-e' must be used)
+REPLACEBIB="";
+# NEWBIB will contain the argument given to -r
+NEWBIB="";
+# BST is the .bst file to be used (default to export.bst)
+BST="export";
+# TERSE will be set to '-terse' if '-t' is given
+TERSE="";
+# NOSAVE if no need to save file before overwriting it
+NOSAVE=""
+# BANNER is used to turn on or off the preamble informations in the output
+BANNER="";
+# CREF is the number of citations of crossrefs from which the crossref'd entry
+# must be included.
+CREF="0";
+
+# SPACE will be either ' ' or ','
+SPACE="";
+# TOOLATE is used to prevent extra options after the main file
+TOOLATE="";
+# DEBUG is used to create files but not run BibTeX.
+DEBUG="";
+
+ARGS=$@;
+%</script>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+% \subsubsection{Handling arguments}
+%
+% If no argument have been supplied, we call \script{usage}. Otherwise, we
+% check version number.
+%
+% \begin{macrocode}
+%<*script>
+if [ $# -eq 0 ]; then
+ usage;
+fi
+checkversion;
+%</script>
+% \end{macrocode}
+%
+% Otherwise, we enter a \verb+while+-loop for handling the whole list of arguments:
+% \begin{macrocode}
+%<*script>
+while [ $# != 0 ]; do
+ case $1 in
+%</script>
+% \end{macrocode}
+%\begin{itemize}
+%\item \verb+-a+ or \verb+--all+: export all the bibliography. This
+% means that we input \ext{bib} files.
+% \begin{macrocode}
+%<*script>
+ -a|--all)
+ ## - export all entries in the input file(s)
+ ## - the input files are BibTeX files
+ opttoolate;
+ EXT=""; SPACE=""; ALL="a";
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-b+ or \verb+--bst+: specifies the style file. It seems
+% that \BibTeX{} does not like the \texttt{./\textit{style}.bst}
+% syntax, and we have to handle that case separately.
+% \begin{macrocode}
+%<*script>
+ -b|--bst)
+ ## - specifies the .bst file to use (default to 'export.bst')
+ opttoolate;
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bst`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bst`";
+ fi
+ BST="${DOLLARTWO}";
+ shift 2;;
+%</script>
+% \end{macrocode}
+%\item \verb+-d+ or \verb+--debug+: only creates (and preserves) the
+% intermediate files. This can help finding problems with the script or
+% \ext{bst} files.
+% \begin{macrocode}
+%<*script>
+ -d|--debug)
+ ## - debug mode: we create files but do not run bibtex
+ ## - instead, we print what we would have done...
+ opttoolate;
+ DEBUG="a";
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-e+ or \verb+--extra+: when we want to export all the
+% entries of a \ext{bib} file, we can specify an extra \ext{bib} file
+% that would contain entries that we don't want to export, but that
+% are needed, \emph{e.g.} for crossrefs.
+% \begin{macrocode}
+%<*script>
+ -e|--extra)
+ ## - extra input files (containing crossrefs or strings)
+ ## - they will be included twice: once before the main file(s)
+ ## (for @string's), once after (for crossrefs). We fool BibTeX
+ ## by naming the first one 'file.bib' and the second one
+ ## 'file.bib.bib', to avoid complaints.
+ opttoolate;
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bib`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bib`";
+ fi
+ EXTRA="${EXTRA}${DOLLARTWO},";
+ EXTRABIB="${EXTRABIB},${DOLLARTWO}.bib";
+ shift 2;;
+%</script>
+% \end{macrocode}
+%\item \verb+-es+ or \verb+--extras+: if, for some reason, including extra
+% files twice is not possible, this options provides a way of including extra
+% \ext{bib} files only before the main \ext{bib} file(s).
+% \begin{macrocode}
+%<*script>
+ -es|--extras)
+ ## - extra input files (containing strings)
+ ## - will be included *before* the main files (hence not suitable
+ ## for crossrefs)
+ opttoolate;
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bib`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bib`";
+ fi
+ EXTRA="${EXTRA}${DOLLARTWO},";
+ shift 2;;
+%</script>
+% \end{macrocode}
+%\item \verb+-ec+ or \verb+--extrac+: similar to te previous one, but for
+% file(s) included after the main \ext{bib} file(s).
+% \begin{macrocode}
+%<*script>
+ -ec|--extrac)
+ ## - extra input files (containing crossrefs)
+ ## - will be included only *after* the main files (hence not
+ ## suitable for @string's)
+ opttoolate;
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bib`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bib`";
+ fi
+ EXTRABIB="${EXTRABIB},${DOLLARTWO}.bib";
+ shift 2;;
+%</script>
+% \end{macrocode}
+%\item \verb+-o+ or \verb+--output+: the name of the output file.
+% \begin{macrocode}
+%<*script>
+ -o|--output-file)
+ ## - name of the output file
+ ## - we force it to end with '.bib'
+ opttoolate;
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bib`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bib`";
+ fi
+ OUTPUT="${DOLLARTWO}.bib";
+ shift 2 ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-c+ or \verb+--crossref+ (or others): this options means
+% that we want crossrefs to be included. Note that for any entry,
+% field inheritage will be performed.
+% \begin{macrocode}
+%<*script>
+ -c|--crossref|--crossrefs|--with-crossref|--with-crossrefs)
+ ## - whether or not to preserve 'crossref' keys.
+ ## - by default, they are removed, but crossref'd entries are
+ ## included.
+ ## - crossrefs are *always* expanded anyway.
+ opttoolate;
+ CREF="1" ;
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-n+ or \verb+--no-crossref+: don't include crossref'ed
+% entries.
+% \begin{macrocode}
+%<*script>
+ -n|--no-crossref|--without-crossref|--no-crossrefs|--without-crossrefs)
+ ## - to remove crossref'd entries (hence remove 'crossref' keys).
+ opttoolate;
+ CREF="20000" ;
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-r+ or \verb+--replace+: this provides a way of replacing the
+% \ext{bib} files given by \cmd{bibdata} in the \ext{aux} file with (a) new
+% one(s).
+% \begin{macrocode}
+%<*script>
+ -r|--replace)
+ ## - to replace the file(s) given in \bibdata in the .aux file with
+ ## (a) new one(s).
+ opttoolate;
+ REPLACEBIB="a";
+ if [ "`dirname $2`" = "." ]; then
+ DOLLARTWO="`basename $2 .bib`";
+ else
+ DOLLARTWO="`dirname $2`/`basename $2 .bib`";
+ fi
+ NEWBIB="${NEWBIB}${DOLLARTWO}.bib,";
+ shift 2;;
+%</script>
+% \end{macrocode}
+%\item \verb+-v+ or \verb+--version+ for version number:
+% \begin{macrocode}
+%<*script>
+ -v|--version)
+ echo "This is bibexport v${VERSION} (released ${VDATE})"; exit 0;;
+%</script>
+% \end{macrocode}
+%\item \verb+-ns+ or \verb+--nosave+ for not keeping a copy
+% of the output file if we overwrite it:
+% \begin{macrocode}
+%<*script>
+ -ns|--nosave|--no-save)
+ NOSAVE="a";
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-p+ or \verb+--preamble+ for inserting some informations
+% at the beginning of the output file:
+% \begin{macrocode}
+%<*script>
+ -p|--preamble|--with-preamble)
+ BANNER="a";
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item \verb+-t+ or \verb+--terse+ for asking \BibTeX{} to run silently:
+% \begin{macrocode}
+%<*script>
+ -t|--terse|--silent)
+ TERSE=" -terse ";
+ shift ;;
+%</script>
+% \end{macrocode}
+%\item other dash-options are erroneous (except \verb+-h+, but...):
+% \begin{macrocode}
+%<*script>
+ -*)
+ usage;;
+%</script>
+% \end{macrocode}
+%\item there should only remain file names: we add those names to the
+% list of files.
+% \begin{macrocode}
+%<*script>
+ *)
+ ## - list of input files
+ ## - we ensure that no extra option is given later...
+ TOOLATE="a";
+ if [ "`dirname $1`" = "." ]; then
+ DOLLARONE="`basename $1 ${EXT}`";
+ else
+ DOLLARONE="`dirname $1`/`basename $1 ${EXT}`";
+ fi
+ FILE="${FILE}${SPACE}${DOLLARONE}${EXT}";
+ if [ -z "${ALL}" ]; then
+ SPACE=" ";
+ else
+ SPACE=",";
+ fi;
+ shift;;
+%</script>
+% \end{macrocode}
+% \end{itemize}
+% That's all folks:
+% \begin{macrocode}
+%<*script>
+ esac
+done
+%</script>
+% \end{macrocode}
+%
+% \subsubsection{The core of the script}
+%
+% We first set the name of the result and intermediary files:
+% \begin{macrocode}
+%<*script>
+FINALFILE=${OUTPUT};
+if [ ! "${FINALFILE}" ]; then
+ FINALFILE="bibexport.bib";
+fi
+TMPFILE="bibexp.`date +%s`";
+%</script>
+% \end{macrocode}
+%
+% We then create the \ext{aux} file for the main run of \BibTeX. Note
+% that this could call \BibTeX, with the \bst{expkeys} file, in the
+% case where we want to export all entries of a \ext{bib} file but not
+% crossrefs. Note how, in that case, we trick \BibTeX for inputing
+% extra files twice: we include then with their short name first (with
+% no extension), and then with the full name. We \emph{need} to do that,
+% since \verb+string+ abbreviations must be defined first, while
+% crossrefs must occur after having been referenced.
+%
+% \begin{macrocode}
+%<*script>
+if [ -z "${EXT}" ]; then ## we export all entries
+ if [ -z "${EXTRA}" ]; then ## we have no extra files
+ cat > ${TMPFILE}.aux <<EOF
+\citation{*}
+\bibdata{${FILE}}
+\bibstyle{${BST}}
+EOF
+ else ## we have extra files (e.g. for crossrefs) but want all entries from ${FILE}
+ ## we first extract the keys to be used:
+ cat > ${TMPFILE}.aux <<EOF
+\citation{*}
+\bibdata{${FILE}}
+\bibstyle{expkeys}
+EOF
+ ## This run may generate errors. We redirect the output:
+ bibtex -min-crossrefs=${CREF} -terse ${TMPFILE} >/dev/null 2>&1;
+ mv -f ${TMPFILE}.bbl ${TMPFILE}.aux;
+ ## and then prepare the .aux file for exporting:
+ cat >> ${TMPFILE}.aux <<EOF
+\bibdata{${EXTRA}${FILE}${EXTRABIB}}
+\bibstyle{${BST}}
+EOF
+ fi
+else ## we only export entries listed in the given .aux file:
+ if [ -z "${REPLACEBIB}" ]; then
+ cat ${FILE} | sed -e "s/bibstyle{.*}/bibstyle{${BST}}/" > ${TMPFILE}.aux;
+ else
+ cat ${FILE} | sed -e "s/bibstyle{.*}/bibstyle{${BST}}/" \
+ -e "s|bibdata{.*}|bibdata{${EXTRA}${NEWBIB%,}${EXTRABIB}}|" > ${TMPFILE}.aux;
+ fi
+fi
+%</script>
+% \end{macrocode}
+%
+% This was the hard part. We now call \BibTeX, clean and rename the
+% output file, and remove intermediary files:
+%
+% \begin{macrocode}
+%<*script>
+if [ -z "$DEBUG" ]; then
+ bibtex -min-crossrefs=${CREF} ${TERSE} ${TMPFILE};
+ if [ -e ${FINALFILE} ] && [ -z "${NOSAVE}" ]; then
+ mv ${FINALFILE} ${FINALFILE}-save-`date "+%Y.%m.%d:%H.%M.%S"`
+ fi
+ echo "" > ${FINALFILE}
+else
+ echo "bibtex -min-crossrefs=${CREF} ${TERSE} ${TMPFILE};"
+ if [ -e ${FINALFILE} ] && [ -z "${NOSAVE}" ]; then
+ echo "mv ${FINALFILE} ${FINALFILE}-save-`date \"+%Y.%m.%d:%H.%M.%S\"`"
+ fi
+ echo "echo \"\" > ${FINALFILE}"
+fi
+if [ ! -z "${BANNER}" ]; then
+ ## list of cited entries
+ if [ -z "$DEBUG" ]; then
+ sed -i -e "s/\\\bibstyle{.*}/\\\bibstyle{expcites}/" ${TMPFILE}.aux
+ mv ${TMPFILE}.aux ${TMPFILE}-cites.aux
+ bibtex -terse -min-crossrefs=${CREF} ${TMPFILE}-cites
+ echo -ne "@comment{generated using bibexport:\n" >> ${FINALFILE};
+ echo -ne " creation date:\t`date +\"%c\"`\n" >> ${FINALFILE};
+ echo -ne " command:\t\t`basename $0` ${ARGS}\n" >> ${FINALFILE};
+ if [ -z "${EXT}" ]; then
+ echo -ne " source files:\t\t${FILETAB}\t\t\t${EXTRABIBTAB}\n" >> ${FINALFILE}; \
+ fi
+ cat ${TMPFILE}-cites.bbl >> ${FINALFILE};
+ #echo -ne " bibexport-version:\tv${VERSION} (${VDATE})\n" >> ${FINALFILE};
+ #echo -ne " bibexport-maintainer:\tNicolas Markey <bibexport(at)markey.fr>\n" >> ${FINALFILE};
+ sed -i -e "s/}/)/g" ${FINALFILE};
+ echo -n -e "}\n\n\n" >> ${FINALFILE};
+ rm -f ${TMPFILE}-cites.bbl ${TMPFILE}-cites.aux ${TMPFILE}-cites.blg
+ fi
+fi
+if [ ${CREF} -ne 1 ]; then
+ if [ -z "$DEBUG" ]; then
+ egrep -iv '^ *crossref *= *[^,]+,?$' \
+ ${TMPFILE}.bbl >> ${FINALFILE};
+ else
+ echo "egrep -iv '^ *crossref *= *[^,]+,?$' ${TMPFILE}.bbl >> ${FINALFILE};"
+ fi
+else
+ if [ -z "$DEBUG" ]; then
+ cat ${TMPFILE}.bbl >> ${FINALFILE};
+ else
+ echo "cat ${TMPFILE}.bbl >> ${FINALFILE};"
+ fi
+fi
+if [ -z "$DEBUG" ]; then
+ rm -f ${TMPFILE}.bbl ${TMPFILE}.aux ${TMPFILE}.blg;
+else
+ echo "rm -f ${TMPFILE}.bbl ${TMPFILE}.aux ${TMPFILE}.blg";
+fi
+%</script>
+% \end{macrocode}
+%
+%
+% \subsection{The \bst{expkeys} file}
+%
+% The only role of that file is to export the list of entries to be
+% exported. It is used when we export all the entries of \ext{bib}
+% files, except those of \emph{extra} \ext{bib} files.
+% Thus:
+% \begin{macrocode}
+%<*expkeys>
+ENTRY{}{}{}
+READ
+FUNCTION{export.key}
+{
+ "\citation{" cite$ "}" * * write$ newline$
+}
+ITERATE{export.key}
+%</expkeys>
+% \end{macrocode}
+%
+% \subsection{The \bst{expcites} file}
+%
+% This file is used for exporting and formating the list of \verb+\cite+d entries.
+% We begin with some parameters defining the margins
+% \subsubsection{Some configuration values}
+% \begin{macro}{left.width}
+% \begin{macro}{right.width}
+% \begin{macro}{url.right.width}
+% \begin{macro}{left.short.width}
+% \begin{macro}{right.short.width}
+% \begin{macro}{left.delim}
+% \begin{macro}{right.delim}
+% \begin{macrocode}
+%<*expcites>
+FUNCTION{left.width}{#23}
+FUNCTION{right.width}{#55}
+FUNCTION{url.right.width}{#61}
+FUNCTION{left.short.width}{#10} %% for @preamble
+FUNCTION{right.long.width}{#63}
+FUNCTION{left.delim}{quote$}
+FUNCTION{right.delim}{quote$}
+%</expcites>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Entries}
+% We only want to export \verb+\cite+d keys, so we won't use any field.
+% \begin{macro}{ENTRY}
+% \begin{macrocode}
+%<*expcites>
+ENTRY{dummy}{}{}
+%</expcites>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Basic functions}
+%
+%\begin{macro}{or}
+%\begin{macro}{and}
+%\begin{macro}{not}
+% \begin{macrocode}
+%<*expcites>
+FUNCTION{not}
+{
+ {#0}
+ {#1}
+ if$
+}
+FUNCTION{and}
+{
+ 'skip$
+ {pop$ #0}
+ if$
+}
+FUNCTION{or}
+{
+ {pop$ #1}
+ 'skip$
+ if$
+}
+%</expcites>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Splitting strings}
+%
+% We design functions for splitting strings, so that the final
+% \ext{bib} file will be cleanly indented.
+% \begin{macro}{space.complete}
+% \begin{macro}{split.string}
+% \begin{macrocode}
+%<*expcites>
+INTEGERS{left.length right.length}
+STRINGS{ s t }
+INTEGERS{bool cpt}
+FUNCTION{space.complete}
+{
+ 'left.length :=
+ duplicate$ text.length$ left.length swap$ -
+ {duplicate$ #0 >}
+ {
+ swap$ " " * swap$ #1 -
+ }
+ while$
+ pop$
+}
+FUNCTION{split.string}
+{
+ 'right.length :=
+ duplicate$ right.length #1 + #1 substring$ "" =
+ {""}
+ {
+ 's :=
+ right.length
+ {duplicate$ duplicate$ s swap$ #1 substring$ " " = not and}
+ {#1 -}
+ while$
+ duplicate$ #2 <
+ {
+ pop$ " " s * ""
+ }
+ {
+ duplicate$ s swap$ #1 swap$ substring$
+ swap$
+ s swap$ global.max$ substring$
+ }
+ if$
+ }
+ if$
+}
+%</expcites>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Exporting cited entries}
+%
+% Now we initialize, and export \verb+\cite+d entries.
+%\begin{macro}{init.cited.keys}
+%\begin{macro}{write.cited.keys}
+%\begin{macro}{write.cited.keys.last}
+%\begin{macro}{write.nbkeys}
+%\begin{macro}{cited.keys}
+%\begin{macro}{end.cited.keys}
+% \begin{macrocode}
+%<*expcites>
+FUNCTION{init.cited.keys}
+{
+ left.delim 's :=
+ #0 'bool :=
+ #0 'cpt :=
+}
+FUNCTION{write.cited.keys}
+{
+ bool
+ {"" left.width space.complete swap$}
+ {" list of keys: " left.width space.complete swap$
+ #1 'bool :=}
+ if$
+ {duplicate$ text.length$ right.width >}
+ {
+ right.width split.string 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ pop$ pop$ t
+}
+FUNCTION{write.cited.keys.last}
+{
+ bool
+ {"" left.width space.complete swap$}
+ {" list of keys: " left.width space.complete swap$
+ #1 'bool :=}
+ if$
+ {duplicate$ duplicate$ text.length$ #1 substring$ "," = not}
+ {duplicate$ text.length$ #1 - #1 swap$ substring$}
+ while$
+ duplicate$ text.length$ #1 - #1 swap$ substring$
+ right.delim * "," *
+ {duplicate$ "" = not}
+ {
+ right.width split.string 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ pop$ pop$
+}
+FUNCTION{write.nbkeys}
+{
+ " number of entries: " left.width space.complete
+ " " *
+ cpt int.to.str$ * "," * write$ newline$
+}
+FUNCTION{cited.keys}
+{
+ cpt #1 + 'cpt :=
+ s cite$ ", " * * 's :=
+ s text.length$ #4000 >
+ {s write.cited.keys 's :=}
+ 'skip$
+ if$
+}
+FUNCTION{end.cited.keys}
+{
+ s write.cited.keys.last
+ write.nbkeys
+}
+%</expcites>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Now, we export...}
+%
+% We now export everything...
+% \begin{macrocode}
+%<*expcites>
+FUNCTION{article}{cited.keys}
+FUNCTION{book}{cited.keys}
+FUNCTION{booklet}{cited.keys}
+FUNCTION{conference}{cited.keys}
+FUNCTION{habthesis}{cited.keys}
+FUNCTION{inbook}{cited.keys}
+FUNCTION{incollection}{cited.keys}
+FUNCTION{inproceedings}{cited.keys}
+FUNCTION{journals}{cited.keys}
+FUNCTION{manual}{cited.keys}
+FUNCTION{mastersthesis}{cited.keys}
+FUNCTION{misc}{cited.keys}
+FUNCTION{phdthesis}{cited.keys}
+FUNCTION{proceedings}{cited.keys}
+FUNCTION{techreport}{cited.keys}
+FUNCTION{unpublished}{cited.keys}
+READ
+EXECUTE{init.cited.keys}
+ITERATE{cited.keys}
+EXECUTE{end.cited.keys}
+%</expcites>
+% \end{macrocode}
+%
+% \subsection{The \bst{export} file}
+%
+% \subsubsection{Some configuration values}
+% \begin{macro}{left.width}
+% \begin{macro}{right.width}
+% \begin{macro}{url.right.width}
+% \begin{macro}{left.short.width}
+% \begin{macro}{right.short.width}
+% \begin{macro}{left.delim}
+% \begin{macro}{right.delim}
+% We define here the indentation values, and the field
+% delimiters. \emph{short} width are used for \entry{preamble}.
+% \begin{macrocode}
+%<*export>
+FUNCTION{left.width}{#18}
+FUNCTION{right.width}{#55}
+FUNCTION{url.right.width}{#61}
+FUNCTION{left.short.width}{#10} %% for @preamble
+FUNCTION{right.long.width}{#63}
+FUNCTION{left.delim}{"{"}
+FUNCTION{right.delim}{"}"}
+%FUNCTION{left.delim}{quote$}
+%FUNCTION{right.delim}{quote$}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \subsubsection{Entries}
+% We use standard entries here. Of course, more entries could be added
+% for special \ext{bib} files. Those extra entries will also have to
+% be added in the main exporting function.
+% \begin{macro}{ENTRY}
+% \begin{macrocode}
+%<*export>
+ENTRY{
+% Standard fields:
+ address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+% Special (but still somewhat standard) fields (natbib, germbib, DBLP, ...):
+ abstract
+ acronym
+ annote
+ biburl
+ bibsource
+ doi
+ eid
+ isbn
+ issn
+ language
+ timestamp
+ url
+ urn
+}{}{}
+%</export>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Basic functions}
+%
+% No comment.
+%\begin{macro}{or}
+%\begin{macro}{and}
+%\begin{macro}{not}
+% \begin{macrocode}
+%<*export>
+FUNCTION{not}
+{
+ {#0}
+ {#1}
+ if$
+}
+FUNCTION{and}
+{
+ 'skip$
+ {pop$ #0}
+ if$
+}
+FUNCTION{or}
+{
+ {pop$ #1}
+ 'skip$
+ if$
+}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \subsubsection{Splitting strings}
+%
+% We design functions for splitting strings, so that the final
+% \ext{bib} file will be cleanly indented. This is also crucial
+% to avoid long URLs.
+% \begin{macro}{space.complete}
+% \begin{macro}{split.string}
+% \begin{macro}{split.url}
+% \begin{macro}{split.name}
+% \begin{macrocode}
+%<*export>
+INTEGERS{left.length right.length}
+STRINGS{ s t }
+FUNCTION{space.complete}
+{
+ 'left.length :=
+ duplicate$ text.length$ left.length swap$ -
+ {duplicate$ #0 >}
+ {
+ swap$ " " * swap$ #1 -
+ }
+ while$
+ pop$
+}
+FUNCTION{split.string}
+{
+ 'right.length :=
+ duplicate$ right.length #1 + #1 substring$ "" =
+ {""}
+ {
+ 's :=
+ right.length
+ {duplicate$ duplicate$ s swap$ #1 substring$ " " = not and}
+ {#1 -}
+ while$
+ duplicate$ #2 <
+ {
+ pop$ " " s * ""
+ }
+ {
+ duplicate$ s swap$ #1 swap$ substring$
+ swap$
+ s swap$ global.max$ substring$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION{split.url}
+{
+ 'right.length :=
+ duplicate$ right.length #1 + #1 substring$ "" =
+ {""}
+ {
+ 's :=
+ right.length
+ {duplicate$ duplicate$ s swap$ #1 substring$
+ duplicate$ "/" = swap$
+ duplicate$ "&" = swap$
+ duplicate$ "?" = swap$
+ duplicate$ "-" = swap$
+ ":" = or or or or not and}
+ {#1 -}
+ while$
+ duplicate$ #2 <
+ {
+ pop$ " " s * ""
+ }
+ {
+ duplicate$ s swap$ #1 swap$ substring$
+ swap$ #1 +
+ s swap$ global.max$ substring$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION{split.name}
+{
+ 'right.length :=
+ duplicate$ right.length #1 + #1 substring$ "" =
+ {""}
+ {
+ 's :=
+ right.length
+ {duplicate$ duplicate$ s swap$ #5 substring$ " and " = not and}
+ {#1 -}
+ while$
+ duplicate$ #2 <
+ {
+ pop$ " " s * ""
+ }
+ {
+ #4 + duplicate$ s swap$ #1 swap$ substring$
+ swap$
+ s swap$ global.max$ substring$
+ }
+ if$
+ }
+ if$
+}
+%</export>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsubsection{Exporting fields}
+%
+% Here, we have four exporting functions, since we also have to deal
+% with abbreviations:
+%\begin{macro}{field.export}
+%\begin{macro}{abbrv.export}
+%\begin{macro}{name.export}
+%\begin{macro}{url.export}
+% \begin{macrocode}
+%<*export>
+FUNCTION{field.export}
+{
+ duplicate$ missing$
+ 'skip$
+ {
+ left.delim swap$ * right.delim *
+ swap$
+ " " swap$ * " = " * left.width space.complete
+ swap$ "," *
+ {duplicate$ "" = not}
+ {
+ right.width split.string 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ }
+ if$
+ pop$ pop$
+}
+FUNCTION{abbrv.export}
+{
+ duplicate$ missing$
+ 'skip$
+ {
+ swap$
+ " " swap$ * " = " * left.width space.complete
+ swap$ "," *
+ {duplicate$ "" = not}
+ {
+ right.width split.string 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ }
+ if$
+ pop$ pop$
+}
+FUNCTION{name.export}
+{
+ duplicate$ missing$
+ 'skip$
+ {
+ left.delim swap$ * right.delim *
+ swap$
+ " " swap$ * " = " * left.width space.complete
+ swap$ "," *
+ {duplicate$ "" = not}
+ {
+ right.width split.name 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ }
+ if$
+ pop$ pop$
+}
+FUNCTION{url.export}
+{
+ duplicate$ missing$
+ 'skip$
+ {
+ left.delim swap$ * right.delim *
+ swap$
+ " " swap$ * " = " * left.width space.complete
+ swap$ "," *
+ {duplicate$ "" = not}
+ {
+ url.right.width split.url 't :=
+ *
+ write$ newline$
+ "" left.width space.complete t
+ }
+ while$
+ }
+ if$
+ pop$ pop$
+}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \subsubsection{Handling abbreviations}
+%
+% Abbreviations are difficult to deal with if we wish to still use
+% them, since \BibTeX will expand them before we can do anything. All we
+% can do is to define them in a special way, in order to be able to get
+% back to the abbreviations later on. This is precisely what we do:
+%\begin{macro}{jan-dec}
+%\begin{macro}{acmcs-tcs}
+%\begin{macro}{remove.exports.from.months}
+%\begin{macro}{remove.export.from.journal}
+% \begin{macrocode}
+%<*export>
+MACRO{jan}{"export-jan"}
+MACRO{feb}{"export-feb"}
+MACRO{mar}{"export-mar"}
+MACRO{apr}{"export-apr"}
+MACRO{may}{"export-may"}
+MACRO{jun}{"export-jun"}
+MACRO{jul}{"export-jul"}
+MACRO{aug}{"export-aug"}
+MACRO{sep}{"export-sep"}
+MACRO{oct}{"export-oct"}
+MACRO{nov}{"export-nov"}
+MACRO{dec}{"export-dec"}
+MACRO{acmcs}{"export-acmcs"}
+MACRO{acta}{"export-acta"}
+MACRO{cacm}{"export-cacm"}
+MACRO{ibmjrd}{"export-ibmjrd"}
+MACRO{ibmsj}{"export-ibmsj"}
+MACRO{ieeese}{"export-ieeese"}
+MACRO{ieeetc}{"export-ieeetc"}
+MACRO{ieeetcad}{"export-ieeetcad"}
+MACRO{ipl}{"export-ipl"}
+MACRO{jacm}{"export-jacm"}
+MACRO{jcss}{"export-jcss"}
+MACRO{scp}{"export-scp"}
+MACRO{sicomp}{"export-sicomp"}
+MACRO{tocs}{"export-tocs"}
+MACRO{tods}{"export-tods"}
+MACRO{tog}{"export-tog"}
+MACRO{toms}{"export-toms"}
+MACRO{toois}{"export-poois"}
+MACRO{toplas}{"export-toplas"}
+MACRO{tcs}{"export-tcs"}
+INTEGERS{ intxt }
+FUNCTION{remove.exports.from.months}
+{
+ #0 'intxt :=
+ duplicate$ missing$
+ 'skip$
+ {'t :=
+ ""
+ {t #1 #1 substring$ "" = not}
+ {
+ t #1 #7 substring$ "export-" =
+ {intxt
+ {right.delim * #0 'intxt :=}
+ 'skip$
+ if$
+ duplicate$ "" =
+ 'skip$
+ {" # " *}
+ if$
+ t #8 #3 substring$ *
+ t #11 global.max$ substring$ 't :=}
+ {intxt
+ 'skip$
+ {duplicate$ "" =
+ {}
+ {" # " *}
+ if$
+ left.delim * #1 'intxt :=}
+ if$
+ t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=}
+ if$
+ }
+ while$
+ intxt
+ {right.delim *}
+ 'skip$
+ if$
+ }
+ if$
+}
+FUNCTION{remove.export.from.journals}
+{
+ duplicate$ missing$
+ 'skip$
+ {
+ duplicate$ #1 #7 substring$ "export-" =
+ {#8 global.max$ substring$}
+ {left.delim swap$
+ right.delim * *}
+ if$
+ }
+ if$
+}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+% \subsubsection{Now, we export...}
+%
+% We gather everything. This is were special fields must be added for
+% being exported:
+%\begin{macro}{entry.export.standard}
+%\begin{macro}{entry.export.extra}
+%\begin{macro}{entry.export}
+%\begin{macro}{export}
+% \begin{macrocode}
+%<*export>
+FUNCTION{entry.export.standard}
+{
+ "address" address field.export
+ "author" author name.export
+ "booktitle" booktitle field.export
+ "chapter" chapter field.export
+ "crossref" crossref field.export
+ "edition" edition field.export
+ "editor" editor name.export
+ "howpublished" howpublished field.export
+ "institution" institution field.export
+ "journal" journal remove.export.from.journals abbrv.export
+ "key" key field.export
+ "month" month remove.exports.from.months abbrv.export
+ "note" note field.export
+ "number" number field.export
+ "organization" organization field.export
+ "pages" pages field.export
+ "publisher" publisher field.export
+ "school" school field.export
+ "series" series field.export
+ "type" type field.export
+ "title" title field.export
+ "volume" volume field.export
+ "year" year field.export
+}
+FUNCTION{entry.export.extra}
+{
+ "abstract" abstract field.export
+ "acronym" acronym field.export
+ "annote" annote field.export
+ "biburl" biburl url.export
+ "bibsource" bibsource field.export
+ "doi" doi field.export
+ "eid" eid field.export
+ "isbn" isbn field.export
+ "issn" issn field.export
+ "language" language field.export
+ "timestamp" timestamp field.export
+ "url" url url.export
+ "urn" urn url.export
+}
+FUNCTION{entry.export}
+{
+ entry.export.standard
+ entry.export.extra
+}
+FUNCTION{export}
+{
+ "@" type$ * "{" * cite$ * "," * write$ newline$
+ entry.export
+ "}" write$ newline$ newline$
+}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+% \subsubsection{Miscellanea}
+% We also have to handle preamble, and to define functions for each
+% entry type (we won't use them but otherwise, \BibTeX would complain).
+%
+%\begin{macro}{preamble}
+%\begin{macro}{header}
+%\begin{macro}{entries.headers}
+%\begin{macro}{article-unpublished}
+% \begin{macrocode}
+%<*export>
+FUNCTION{preamble}
+{
+preamble$ duplicate$ "" =
+ 'pop$
+ {
+ ",-------------------." write$ newline$
+ "| PREAMBLE |" write$ newline$
+ "`-------------------'" write$ newline$ newline$
+ "@preamble{ " swap$
+ quote$ swap$ * quote$ *
+ {duplicate$ "" = not}
+ {
+ right.long.width split.string 't :=
+ *
+ write$ newline$
+ "" left.short.width space.complete t
+ }
+ while$
+ "}" write$ newline$ newline$
+ pop$ pop$
+ }
+if$
+}
+FUNCTION{header}
+{
+%"** This file has been automatically generated by bibexport **"
+%write$ newline$
+%"** See http://people.irisa.fr/Nicolas.Markey/latex.php **"
+%write$ newline$
+%"** for more informations about bibexport. **"
+%write$ newline$
+newline$
+}
+FUNCTION{entries.header}
+{
+preamble$ "" =
+ 'skip$
+ {
+ ",-------------------." write$ newline$
+ "| BIBTEX ENTRIES |" write$ newline$
+ "`-------------------'" write$ newline$ newline$
+ }
+if$
+}
+FUNCTION{article}{export}
+FUNCTION{book}{export}
+FUNCTION{booklet}{export}
+FUNCTION{conference}{export}
+FUNCTION{habthesis}{export}
+FUNCTION{inbook}{export}
+FUNCTION{incollection}{export}
+FUNCTION{inproceedings}{export}
+FUNCTION{journals}{export}
+FUNCTION{manual}{export}
+FUNCTION{mastersthesis}{export}
+FUNCTION{misc}{export}
+FUNCTION{phdthesis}{export}
+FUNCTION{proceedings}{export}
+FUNCTION{techreport}{export}
+FUNCTION{unpublished}{export}
+%</export>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \subsubsection{Main program}
+%
+% We now can execute and iterate those functions:
+%
+% \begin{macrocode}
+%<*export>
+READ
+EXECUTE{header}
+EXECUTE{preamble}
+EXECUTE{entries.header}
+ITERATE{export}
+%</export>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/biblio/bibtex/utils/bibexport/bibexport.ins b/biblio/bibtex/utils/bibexport/bibexport.ins
new file mode 100644
index 0000000000..507dd87c07
--- /dev/null
+++ b/biblio/bibtex/utils/bibexport/bibexport.ins
@@ -0,0 +1,76 @@
+%\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\input docstrip
+\def\filedate{2019/03/30}
+
+{\catcode`\#=12
+ \gdef\DoubleSharp{##}
+}
+
+\let\MetaPrefix\DoubleSharp
+\preamble
+
+(c) \filedate Nicolas Markey <bibexport at markey dot fr>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Nicolas Markey.
+
+\endpreamble
+\postamble
+\endpostamble
+{\catcode`\#=12\relax
+ \let\olddefaultpreamble\defaultpreamble
+ \xdef\defaultpreamble{%
+ #!/bin/bash^^J%
+ \olddefaultpreamble}
+}
+\generate{\file{bibexport.sh}{\from{bibexport.dtx}{script}}}
+
+%%
+%%
+%%
+
+\let\MetaPrefix\DoubleperCent
+\preamble
+
+(c) \filedate Nicolas Markey <bibexport at markey dot fr>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Nicolas Markey.
+
+\endpreamble
+\postamble
+\endpostamble
+\generate{\file{expkeys.bst}{\from{bibexport.dtx}{expkeys}}%
+ \file{expcites.bst}{\from{bibexport.dtx}{expcites}}%
+ \file{export.bst}{\from{bibexport.dtx}{export}}}
+
+%%
+%%
+%%
+
+\Msg{** To finish the installation, put all three .bst files in}
+\Msg{** a place where BibTeX can find them, put the shell script}
+\Msg{** where your shell can find it, and make it executable.}
+\Msg{** Run ``pdflatex bibexport.dtx'' to compile the documentation.}
+
+\end
diff --git a/biblio/bibtex/utils/bibexport/bibexport.pdf b/biblio/bibtex/utils/bibexport/bibexport.pdf
new file mode 100644
index 0000000000..5cfe66f7d6
--- /dev/null
+++ b/biblio/bibtex/utils/bibexport/bibexport.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibextract/COPYING b/biblio/bibtex/utils/bibextract/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/biblio/bibtex/utils/bibextract/Makefile.in b/biblio/bibtex/utils/bibextract/Makefile.in
new file mode 100644
index 0000000000..e34d71b98c
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/Makefile.in
@@ -0,0 +1,245 @@
+### ====================================================================
+### Makefile for files in ~beebe/tex/bibextract.
+###
+### Current target list:
+### all standard top-level target
+### bibextract.tar tar archive file for ftp distribution
+### bibextract.zip Info-zip archive file for ftp
+### distribution
+### bibextract.zoo zoo archive file for ftp distribution
+### clean clean up temporary files
+### clobber remove all files that can be remade by
+### make
+### doc make ps, txt and spell targets
+### install install programs in system directories
+### install-ftp install programs in anonymous ftp
+### directories
+### spell make *.ser files from *.man files
+### test-version
+### txt make *.txt files from *.man files
+### uninstall remove programs from system directories
+### uninstall-ftp remove programs from anonymous ftp
+### directories
+### verify-checksums verify checksums in all files that have
+### them
+###
+### [25-Aug-2001] -- update for autoconf support
+### [27-Aug-1994]
+### ====================================================================
+
+### Change these to match local conventions:
+
+prefix = @prefix@
+
+BINDIR = $(prefix)/bin
+FTPDIR = /usr/spool/ftp/pub/tex/bib
+FTPDIR = /u/ftp/pub/tex/bib
+LIBDIR = $(prefix)/lib/bibextract
+LIBDIR = $(prefix)/share/lib/bibextract
+MANDIR = $(prefix)/man/man1
+MANEXT = 1
+
+###=======================================================================
+
+AWK = @AWK@
+
+AWKFILES = bibextract.awk citefind.awk citetags.awk
+
+BASENAMES = $(AWKFILES:.awk=)
+
+BINFILES = $(AWKFILES:.awk=.sh)
+
+CAT = @CAT@
+
+CHECKSUM = @CHECKSUM@
+
+CHMOD = @CHMOD@
+
+COL = @COL@
+
+CP = @CP@
+
+DEROFF = @DEROFF@
+
+DIST-FILES = COPYING Makefile.in README configure configure.in \
+ $(BINFILES) $(AWKFILES) $(MANFILES) $(PSFILES) $(TXTFILES) \
+ $(AWKFILES:.awk=.sok)
+
+EXPAND = @EXPAND@
+
+GZIP = @GZIP@
+
+HDRFILES = $(BINFILES) $(AWKFILES) $(MANFILES)
+
+LN = @LN@
+
+LS = @LS@
+
+MANFILES = $(AWKFILES:.awk=.man)
+
+MKDIR = @MKDIR@
+
+NROFF = @NROFF@
+
+PSFILES = $(MANFILES:.man=.ps)
+
+RM = @RM@ -f
+
+SED = @SED@
+
+SEDCMD = $(SED) -e 's=@LIBDIR@=$(LIBDIR)=g' \
+ -e 's=@BINDIR@=$(BINDIR)=g' \
+ -e 's=/bin/sed=$(SED)=g'
+
+SHELL = @SHELL@
+
+SPELL = @SPELL@
+
+SERFILES = $(AWKFILES:.awk=.ser)
+
+TAR = @TAR@
+
+TXTFILES = $(AWKFILES:.awk=.txt)
+
+UNZIP = @UNZIP@
+
+VERSION = `$(AWK) '/^\#\#\#[ \t]*version *= *"[0-9.]+", *$$/ \
+ { gsub(/[^0-9.]/,"",$$4); print $$4 }' bibextract.awk`
+
+ZIP = @ZIP@
+
+ZOO = @ZOO@
+
+###=======================================================================
+
+.SUFFIXES: .txt .ser .ps .man
+
+.man.ps:
+ $(SEDCMD) $< | $(NROFF) -Tps -man - >$@
+
+.man.ser:
+ $(DEROFF) $< | $(SPELL) +$*.sok >$*.ser
+ @if [ -s $*.ser ] ; \
+ then \
+ echo "Spelling exceptions in $*.ser" ; \
+ $(CAT) $*.ser ; \
+ fi
+
+.man.txt:
+ $(SEDCMD) $< | $(NROFF) -man - | $(COL) -b | $(EXPAND) >$@
+
+###=======================================================================
+
+all:
+ @echo 'There is nothing to make for this package: try "make check install"'
+
+bibextract.tar: $(DIST-FILES)
+ -$(RM) bibextract.tar bibextract.tar-lst
+ $(TAR) chf bibextract.tar $(DIST-FILES)
+ -mkdir bibextract-$(VERSION)
+ cd bibextract-$(VERSION); tar xf ../bibextract.tar
+ $(TAR) cf bibextract-$(VERSION).tar bibextract-$(VERSION)
+ -$(RM) -r bibextract-$(VERSION)
+ -$(RM) bibextract.tar
+ $(LN) bibextract-$(VERSION).tar bibextract.tar
+
+bibextract.zip: $(DIST-FILES)
+ -$(RM) bibextract*.zip
+ -$(RM) bibextract*.zip-lst
+ $(ZIP) bibextract-$(VERSION).zip $(DIST-FILES)
+ $(UNZIP) -v bibextract-$(VERSION).zip >bibextract-$(VERSION).zip-lst
+ $(LN) bibextract-$(VERSION).zip bibextract.zip
+
+bibextract.zoo: $(DIST-FILES)
+ -$(RM) bibextract*.zoo
+ -$(RM) bibextract*.zoo-lst
+ $(ZOO) a bibextract-$(VERSION).zoo $(DIST-FILES)
+ $(ZOO) v bibextract-$(VERSION).zoo >bibextract-$(VERSION).zoo-lst
+ $(LN) bibextract-$(VERSION).zoo bibextract.zoo
+
+check:
+ @echo This package does not yet have a validation suite.
+
+clean:
+ -$(RM) *.ps
+ -$(RM) *.ser
+ -$(RM) *.tar
+ -$(RM) *.tar-lst
+ -$(RM) *.txt
+ -$(RM) *.zip
+ -$(RM) *.zip-lst
+ -$(RM) *.zoo
+ -$(RM) *.zoo-lst
+ -$(RM) *~
+ -$(RM) \#*
+ -$(RM) a.out core
+
+clobber: distclean
+
+dist: bibextract.tar bibextract.zip bibextract.zoo
+
+distclean: mostlyclean
+ -$(RM) config.cache config.log config.status Makefile
+
+doc: spell txt ps
+
+install: uninstall $(AWKFILES) $(BINFILES) $(MANFILES)
+ -if [ ! -d $(LIBDIR) ] ; then mkdir $(LIBDIR) ; fi
+ for f in $(BASENAMES) ; \
+ do \
+ $(SEDCMD) $$f.sh | $(CHECKSUM) > $(BINDIR)/$$f ; \
+ $(SEDCMD) $$f.awk | $(CHECKSUM) > $(LIBDIR)/$$f.awk ; \
+ $(SEDCMD) $$f.man | $(CHECKSUM) > $(MANDIR)/$$f.$(MANEXT) ; \
+ $(CHMOD) 775 $(BINDIR)/$$f ; \
+ $(CHMOD) 664 $(LIBDIR)/$$f.awk ; \
+ $(CHMOD) 664 $(MANDIR)/$$f.$(MANEXT) ; \
+ done
+
+install-ftp: uninstall-ftp dist
+ $(TAR) tvf bibextract-$(VERSION).tar >$(FTPDIR)/bibextract-$(VERSION).tar-lst
+ $(GZIP) <bibextract-$(VERSION).tar \
+ >$(FTPDIR)/bibextract-$(VERSION).tar.gz
+ $(CP) bibextract-$(VERSION).zip $(FTPDIR)
+ $(CP) bibextract-$(VERSION).zip-lst $(FTPDIR)
+ $(CP) bibextract-$(VERSION).zoo $(FTPDIR)
+ $(CP) bibextract-$(VERSION).zoo-lst $(FTPDIR)
+ ls -l $(FTPDIR)/bibextract*
+
+maintainer-clean:
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ -$(RM) configure
+
+mostlyclean: clean
+
+ps: $(PSFILES)
+
+spell: $(SERFILES)
+
+test-version:
+ @echo "Version number is ""'"$(VERSION)"'"
+
+txt: $(TXTFILES)
+
+uninstall:
+ -for f in $(BINFILES) ; \
+ do \
+ $(RM) $(BINDIR)/$$f $(LIBDIR)/$$f $(MANDIR)/$$f.$(MANEXT) ; \
+ done
+
+uninstall-ftp:
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).tar.z
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).tar-lst
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).zip
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).zip-lst
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).zoo
+ -$(RM) $(FTPDIR)/bibextract-$(VERSION).zoo-lst
+
+verify-checksums:
+ for f in $(HDRFILES) ; \
+ do \
+ echo $$f ; \
+ $(CHECKSUM) -v $$f ; \
+ done
+
+### ====================================================================
diff --git a/biblio/bibtex/utils/bibextract/README b/biblio/bibtex/utils/bibextract/README
new file mode 100644
index 0000000000..d1e7493ab2
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/README
@@ -0,0 +1,46 @@
+%% /u/sy/beebe/tex/bibextract/bibextract-1.09/README, Sat Aug 25 18:23:39 2001
+%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
+%% Update for version 1.09.
+%% /u/sy/beebe/tex/bibextract/README, Sat May 16 09:10:30 1998
+%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
+%% Update my address
+%% /u/sy/beebe/tex/bibextract/README, Wed Oct 21 10:31:39 1992
+%% Edit by Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+
+************************************************************************
+************************************************************************
+** This code is copyright under the GNU Public License; see the file **
+** COPYING for details. **
+************************************************************************
+************************************************************************
+
+This directory, bibextract, contains UNIX shell and awk programs for
+extracting citation tags from LaTeX source and .aux files, and for
+using those tags to extract bibliography entries from a list of BibTeX
+.bib files.
+
+On many UNIX and POSIX systems, installation is a one-line command:
+
+ ./configure && make all check install
+
+"make uninstall" will remove the programs and their documentation from
+the system directories.
+
+Comments, questions, and bug reports should be addressed to the author
+at the address below.
+
+See the Makefile leading comments for other make targets.
+
+Author:
+ Nelson H. F. Beebe
+ Center for Scientific Computing
+ University of Utah
+ Department of Mathematics, 322 INSCC
+ 155 S 1400 E RM 233
+ Salt Lake City, UT 84112-0090
+ USA
+ Email: beebe@math.utah.edu, beebe@acm.org,
+ beebe@computer.org, beebe@ieee.org (Internet)
+ WWW URL: http://www.math.utah.edu/~beebe
+ Telephone: +1 801 581 5254
+ FAX: +1 801 585 1640, +1 801 581 4148
diff --git a/biblio/bibtex/utils/bibextract/bibextract.awk b/biblio/bibtex/utils/bibextract/bibextract.awk
new file mode 100644
index 0000000000..3f65d0bfc3
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.awk
@@ -0,0 +1,261 @@
+### ====================================================================
+### @Awk-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.09",
+### date = "25 August 2001",
+### time = "17:44:41 MDT",
+### filename = "bibextract.awk",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "23217 261 1158 9297",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@computer.org, beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography",
+### supported = "yes",
+### abstract = "This file is a template for bibextract.sh
+### to produce a temporary awk program for
+### extracting bibliography entries selected
+### by particular keywords.",
+### docstring = "*********************************************
+### This code is hereby placed in the PUBLIC
+### DOMAIN and may be redistributed without any
+### restrictions.
+### *********************************************
+###
+### NB: This file is not used directly by awk,
+### but rather is a template for bibextract.sh
+### to produce a temporary file with an awk
+### program to do the work. This subterfuge is
+### necessary because there is no convenient
+### way to provide a pattern for an awk program
+### at run time. The strings replaced by
+### bibextract.sh are upper-case versions of
+### 'keyword' and 'pattern'.
+###
+### Matching entries are found in each of the
+### file arguments as BibTeX bib files and
+### output to stdout. @preamble{} and
+### @string{} entries are automatically output
+### as well.
+###
+### Usage:
+### nawk -f bibextract.awk bibfile(s) >newbibfile
+###
+### To be recognized, bib entries must look like
+###
+### @keyword{tag,
+### ...
+### }
+###
+### where the start @ appears in column 1, and
+### the complete entry has balanced braces.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [25-Aug-2001] 1.09 Update file header data, and output
+### GNU Emacs editing mode comment.
+### [19-Feb-1999] 1.08 Update file header data.
+### [16-May-1998] 1.07 Update file header data.
+### [24-Aug-1994] 1.06 Parenthesize substituted keyword and
+### pattern so that they can include
+### alternates, e.g. "author|editor".
+### Add match_keyword() to handle case of
+### `key = abbrev' as well as the old `key
+### = "value"'. Add output of `bibsource =
+### "URL"' lines when input is not from
+### stdin.
+### [23-Aug-1994] 1.05 Correct name of script in comment.
+### [22-Jul-1994] 1.04 Eliminate printbraceditem() in favor of
+### using collectbraceditem(), which now
+### checks for balanced braces to avoid
+### possibility of an infinite loop.
+### [17-Jul-1994] 1.03 Revise to output only those @String{...}
+### entries that are actually used by the
+### matched entries.
+### [30-Oct-1992] 1.02 Fix typographical error in bibextract.sh
+### [21-Oct-1992] 1.01 Update for public distribution
+### [08-May-1989] 1.00 original version
+
+BEGIN { "hostname" | getline hostname
+ "pwd" | getline cwd
+ URL_prefix = (hostname != "") ? ("file://" hostname) : ""
+ print "%%% -*-BibTeX-*-"
+ }
+
+# @string and @preamble -- collect up to paired closing brace
+
+/^@[Pp][Rr][Ee][Aa][Mm][Bb][Ll][Ee]{/ { # brace balance -> }
+ print collectbraceditem()
+ print ""
+}
+
+/^@[sS][tT][rR][iI][nN][gG]{/ { savestring() }
+
+# "@keyword{tag," -- collect up to line starting with right brace
+/^@[a-zA-Z0-9]*{/ {
+ item = collectbraceditem()
+ if ("KEYWORD" == "") # line is changed by bibextract.sh
+ {
+ if (lowercase(item) ~ /(PATTERN)/) # line is changed by bibextract.sh
+ save_entry(item)
+ }
+ else # match against text of selected field(s)
+ {
+ lcitem = lowercase(item)
+ match_keyword(lcitem)
+ while (RLENGTH > 0)
+ { # loop over all keyword-pattern matches
+ field = substr(lcitem,RSTART,RLENGTH)
+# if (RLENGTH > 0)
+# printf ("%%DEBUG%% %s\n",field)
+ if (field ~ /(PATTERN)/) # line is changed by bibextract.sh
+ {
+ save_entry(item)
+ break # exit loop after printing
+ }
+ lcitem = substr(lcitem,RSTART+RLENGTH)
+ match_keyword(lcitem)
+ }
+ }
+ }
+
+END {
+
+ for (m = 0; m < num_string; ++m)
+ { # print just those @String{...} entries used
+# print "DEBUG: [" abbrev[m] "]"
+ for (k = 0; k < num_entry; ++k)
+ {
+ if (index(entry[k],abbrev[m]) > 0)
+ {
+# print "DEBUG: <" entry[k] ">[" k "]"
+ print string[m],"\n"
+ break
+ }
+ }
+ }
+ for (k = 0; k < num_entry; ++k) # print the matched entries
+ print entry[k],"\n"
+}
+
+
+
+function bracecount(s, k,n)
+{
+ n = 0
+ for (k = 1; k <= length(s); ++k)
+ {
+ if (substr(s,k,1) == "{")
+ n++
+ else if (substr(s,k,1) == "}")
+ n--
+ }
+ return (n)
+}
+
+# Starting with the current contents of $0, collect lines until we
+# reach a zero brace count, and return the complete entry as a string
+# value. In order to prevent infinite loops in the event of unbalance
+# braces, we abort with an error message if a line is found beginning
+# with an @ character
+
+function collectbraceditem( count,item)
+{
+ count = bracecount($0)
+ item = $0
+ while (count != 0)
+ {
+ if (getline <= 0)
+ break
+ if ($0 ~ /^[ \t]*@/)
+ {
+ print "ERROR: Unbalanced brace detected at line", FNR, \
+ " in entry before [" $0 "]" > "/dev/tty"
+ exit(1)
+ }
+ item = item "\n" $0
+ count += bracecount($0)
+ }
+ return (item)
+}
+
+
+# Return a lower-cased copy of the argument string.
+
+function lowercase(s, t,k,letter)
+{
+ t = s
+ for (k = 1; k <= length(s); ++k)
+ {
+ letter = substr(t,k,1)
+ if (("A" <= letter) && (letter <= "Z"))
+ {
+ letter = substr("abcdefghijklmnopqrstuvwxyz",
+ index("ABCDEFGHIJKLMNOPQRSTUVWXYZ",letter),1)
+ t = substr(t,1,k-1) letter substr(t,k+1)
+ }
+ }
+# printf ("%%DEBUG%% %s\n",t)
+ return (t)
+}
+
+function match_keyword(lcitem)
+{
+ if (match(lcitem,/(KEYWORD)[ \t]*=/)) # quick check for `key ='
+ { # expect key = "value" or key = abbrev
+ match(lcitem,/(KEYWORD)[ \t]*=[ \t]*"[^"]*"/) || \
+ match(lcitem,/(KEYWORD)[ \t]*=[ \t]*[^,]*,/)
+ }
+}
+
+function save_entry(item)
+{
+ sub(/[ \t]*$/,"",item) # strip trailing space
+ if ((FILENAME != "-") && (substr(item,length(item),1) == "}"))
+ { # add a record of where we extracted this from
+ bibsource = " bibsource = \"" \
+ URL_prefix \
+ ((substr(FILENAME,1,1) == "/") ? "" : cwd "/") \
+ FILENAME "\","
+ if (substr(item,length(item)-2,2) == ",\n")
+ item = substr(item,1,length(item)-1) bibsource "\n}"
+ else if (substr(item,length(item)-1,1) == "\n")
+ item = substr(item,1,length(item)-2) ",\n" bibsource "\n}"
+ }
+ entry[num_entry++] = item # save item, preserving input order
+}
+
+# Starting with the current contents of $0, collect lines until we
+# reach a zero brace count, and then save the string value along
+# with a reference count for the abbreviation.
+
+function savestring( s,t)
+{
+ s = collectbraceditem()
+ t = s # collect the abbreviation name in t
+ gsub(/^[^{]*{/,"",t) # brace balance -> } }
+ gsub(/ *=.*$/,"",t)
+ abbrev[num_string] = t # and save the entire @String{...}
+ string[num_string] = s # and its abbreviation name preserving
+ # the input order
+# print "DEBUG: abbrev[" num_string "] = <" t "> length = " length(t)
+ num_string++
+}
+
+### ====================================================================
diff --git a/biblio/bibtex/utils/bibextract/bibextract.man b/biblio/bibtex/utils/bibextract/bibextract.man
new file mode 100644
index 0000000000..6dc51162ff
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.man
@@ -0,0 +1,214 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "1.09",
+.\" date = "25 August 2001",
+.\" time = "17:45:16 MDT",
+.\" filename = "bibextract.man",
+.\" address = "Center for Scientific Computing
+.\" University of Utah
+.\" Department of Mathematics, 322 INSCC
+.\" 155 S 1400 E RM 233
+.\" Salt Lake City, UT 84112-0090
+.\" USA
+.\" telephone = "+1 801 581 5254",
+.\" FAX = "+1 801 585 1640, +1 801 581 4148",
+.\" checksum = "19236 214 948 7544",
+.\" email = "beebe@math.utah.edu, beebe@acm.org,
+.\" beebe@computer.org, beebe@ieee.org (Internet)",
+.\" URL = "http://www.math.utah.edu/~beebe",
+.\" checksum = "48699 195 869 6955",
+.\" email = "beebe@math.utah.edu, beebe@acm.org,
+.\" beebe@ieee.org (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, BibTeX, citation label,
+.\" citation tag",
+.\" supported = "yes",
+.\" docstring = "This file contains the UNIX manual pages
+.\" for the bibextract command, a shell script
+.\" that invokes an awk program to extract from
+.\" a list of BibTeX .bib files bibliography
+.\" entries that match a specified regular
+.\" expression.
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.TH BIBEXTRACT 1 "25 August 2001" "Version 1.09"
+.\"======================================================================
+.SH NAME
+bibextract \- extract BibTeX entries from a list of .bib files
+.\"======================================================================
+.SH SYNOPSIS
+.BI bibextract " keyword-regexp value-regexp bibfile(s)"
+.\"======================================================================
+.SH DESCRIPTION
+.B bibextract
+extracts from a list of \*(Bi\&
+.I .bib
+files those bibliography entries that match a pair of specified
+regular expressions, sending them to
+.IR stdout ,
+together with all \*(Bi\& ``@Preamble{.\|.\|.}''
+commands, and just those ``@String{.\|.\|.}'' commands
+that are actually used by the matched entries.
+.PP
+If no bibliography files are specified on the
+command line, then
+.I stdin
+is read instead, so that
+.B bibextract
+can be used in a UNIX pipeline.
+.PP
+The order of entries, and spacing
+within ``@Name{.\|.\|.}'' text, is preserved
+exactly. Successive entries are separated by a
+single blank line.
+.PP
+The first regular-expression pattern,
+.IR keyword-regexp ,
+is used to select which \fI``keyword =
+"value"''\fP pairs to examine further; it matches
+against the keyword part only. It may include
+alternate keywords separated by vertical bar, such
+as "author|editor". If it is an empty
+string, then the entire bibliographic entry text,
+including the entry type name, is examined.
+.PP
+The second regular-expression pattern,
+.IR value-regexp ,
+is used to further select from the value strings
+of \fI``keyword = "value"''\fP pairs the
+bibliography entries to be output. It too may
+contain alternates separated by vertical bar, such
+as "brown|smith". The selection algorithm
+therefore consists of the logical AND of match
+successes against the keyword and value strings.
+.PP
+Letter case is ignored in regular-expression
+matches, so that "Brown|Smith", "BROWN|smith", and
+"brown|smith" are equivalent. The original letter
+case of the output entries is always preserved.
+.PP
+If the input \*(Bi\& data comes from files named on
+the command line, each output entry will contain a
+final key/value pair of the form:
+.nf
+ bibsource = "file://hostname/FILENAME",
+.fi
+The value string is a World-Wide Web Uniform
+Resource Locator, where FILENAME is the full path
+name of the source file in which the entry was
+found. Such lines are silently ignored by
+standard \*(Bi\& styles, so they are harmless, but
+they help to track the origin of bibliography
+entries.
+.PP
+If you don't want the
+.I bibsource
+lines to be added, simply supply the \*(Bi\& file
+from
+.IR stdin .
+.PP
+.B bibextract
+can be used to extract from a large \*(Bi\&
+bibliography data base just those bibliography
+entries that match a particular pair of regular
+expressions.
+.PP
+.B bibextract
+expects the bibliography file(s) to be
+consistently formatted in the style produced by
+.BR bibclean (1),
+which allows use of simple pattern matching to
+recognize the required entries.
+.\"======================================================================
+.SH EXAMPLES
+Here are some examples:
+.PP
+Extract all entries mentioning chaos in any field:
+.IP
+.B bibextract
+\&\fI"" "chaos" bibfile(s) >new-bibtex-file"\fP
+.PP
+Extract entries with names Brown or Smith
+occurring in either of the author or editor
+fields:
+.IP
+.B bibextract
+\&\fI"author|editor" "brown|smith" bibfile(s) >new-bibtex-file\fP
+.PP
+Extract entries for titles containing the
+letter `z' anywhere after a vowel; note that
+single quotes are necessary to provide the
+necessary protection from shell expansion:
+.IP
+.B bibextract
+\&\fI"title" '[aeiou].*z' bibfile(s) >new-bibtex-file\fP
+.PP
+Extract all conference proceedings entries:
+.IP
+.B bibextract
+\&\fI"" '@proceedings' bibfile(s) >new-bibtex-file\fP
+.\"======================================================================
+.SH BUGS
+.B bibextract
+is not smart enough to incorporate \*(Bi\& cross
+references unless they are themselves matched by
+the specified regular expression.
+.PP
+That feature should be added.
+.\"======================================================================
+.SH "SEE ALSO"
+.BR bibcheck (1),
+.BR bibclean (1),
+.BR bibdup (1),
+.BR bibjoin (1),
+.BR biblabel (1),
+.BR biblex (1),
+.BR biborder (1),
+.BR bibparse (1),
+.BR bibsort (1),
+.BR bibtex (1),
+.BR bibunlex (1),
+.BR citesub (1),
+.BR citetags (1),
+.BR latex (1),
+.BR gawk (1),
+.BR nawk (1),
+.BR tex (1).
+.\"======================================================================
+.SH FILES
+.\" NB: LIBDIR and BINDIR are substituted for real directory names
+.\" by a sed script invoked by "make install".
+.TP \w'@LIBDIR@/bibextract.awk'u+2n
+@LIBDIR@/bibextract.awk
+.BR nawk (1)
+program for tag extraction.
+.TP
+@BINDIR@/bibextract
+user-callable shell script to invoke
+.BR nawk (1).
+.\"======================================================================
+.SH AUTHOR
+.nf
+Nelson H. F. Beebe
+Center for Scientific Computing
+University of Utah
+Department of Mathematics, 322 INSCC
+155 S 1400 E RM 233
+Salt Lake City, UT 84112-0090
+USA
+Tel: +1 801 581 5254
+FAX: +1 801 585 1640, +1 801 581 4148
+Email: beebe@math.utah.edu, beebe@acm.org, beebe@ieee.org (Internet)
+WWW: http://www.math.utah.edu/~beebe
+.fi
+.\"==============================[The End]==============================
diff --git a/biblio/bibtex/utils/bibextract/bibextract.pdf b/biblio/bibtex/utils/bibextract/bibextract.pdf
new file mode 100644
index 0000000000..3231e27a6f
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibextract/bibextract.sh b/biblio/bibtex/utils/bibextract/bibextract.sh
new file mode 100644
index 0000000000..c895fbc286
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+### ====================================================================
+### @UNIX-shell-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.09",
+### date = "25 August 2001",
+### time = "17:46:02 MDT",
+### filename = "bibextract.sh",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "20889 126 556 5060",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography, citation label,
+### citation tag",
+### supported = "yes",
+### docstring = "Extract a subset of one or more bibtex
+### files according to a regular expression
+### pattern given on the command line, writing
+### them on stdout.
+###
+### The pattern should avoid upper-case
+### letters; the matching will be against a
+### lower-cased copy of the BibTeX entry, to
+### make letter case insignificant.
+###
+### Usage:
+### bibextract 'keyword-pat' 'regexp-pat' \
+### bibtex-file(s) >new-bibtex-file
+###
+### If the keyword-pat pattern is empty,
+### matching occurs against the entire
+### bibliographic entry.
+###
+### Here are some examples:
+###
+### Extract all entries mentioning chaos in any field:
+###
+### bibextract "" "chaos" file(s) >new-bibtex-file
+###
+### Extract entries with names Brown or Smith
+### occurring in either of the author or editor
+### fields:
+###
+### bibextract "author|editor" "brown|smith" \
+### file(s) >new-bibtex-file
+###
+### Extract entries for titles containing the
+### letter z anywhere after a vowel; note that
+### single quotes are necessary to provide the
+### necessary protection from shell expansion:
+###
+### bibextract "title" '[aeiou].*z' file(s) \
+### >new-bibtex-file
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [25-Aug-2001] 1.09 Update file header data.
+###
+### [19-Feb-1999] 1.08 Update file header data.
+###
+### [16-May-1998] 1.07 Update file header data.
+###
+### [24-Aug-1994] 1.06 Update bibextract.awk to handle matches
+### with alternate patterns and @string
+### abbreviations, and update the manual
+### page file, bibextract.man, with new
+### examples.
+###
+### [23-Aug-1994] 1.05 Correct name of temporary file.
+###
+### [22-Jul-1994] 1.04 Eliminate printbraceditem() in favor of
+### using collectbraceditem(), which now
+### checks for balanced braces to avoid
+### possibility of an infinite loop.
+###
+###
+### [17-Jul-1994] 1.03 Revise to output only those @String{...}
+### entries that are actually used by the
+### matched entries.
+###
+### [30-Oct-1992] 1.02 Fix typographical error.
+###
+### [21-Oct-1992] 1.01 Update for public distribution.
+###
+### [08-May-1989] 1.00 Original version.
+
+TMPFILE=/tmp/bibextract.$$
+LIBDIR=@LIBDIR@
+
+trap '/bin/rm -f ${TMPFILE}' 2 1
+
+# Force the keyword and pattern to lowercase.
+keyword=`echo $1 | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+pattern=`echo $2 | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+
+# Make a new awk program with the patterns built in.
+/bin/sed -e "sKEYWORD$keyword"\
+ -e "sPATTERN$pattern"\
+ <@LIBDIR@/bibextract.awk >${TMPFILE}
+
+# Discard first 2 arguments (keyword-pat and regexp-pat)
+shift
+shift
+
+# Extract the bibliography subset
+nawk -f ${TMPFILE} $*
+
+# discard our temporary file
+/bin/rm -f ${TMPFILE}
diff --git a/biblio/bibtex/utils/bibextract/bibextract.sok b/biblio/bibtex/utils/bibextract/bibextract.sok
new file mode 100644
index 0000000000..5afcdba0eb
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.sok
@@ -0,0 +1,52 @@
+BIBEXTRACT
+BIBT
+BINDIR
+Bi
+BibTeX
+E
+Email
+F
+FAX
+H
+INSCC
+LIBDIR
+LaTeX
+S
+Te
+TeX
+WWW
+acm.org
+aeiou
+beebe
+bibcheck
+bibclean
+bibdup
+bibextract
+bibextract.awk
+bibfile
+bibindex
+bibjoin
+biblabel
+biblex
+biblook
+biborder
+bibparse
+bibsort
+bibsource
+bibtex
+bibunlex
+citefind
+citesub
+citetags
+hostname
+http
+ieee.org
+math.utah.edu
+nawk
+regexp
+s
+tex
+v'0.15v'T
+v'0.20v'E
+www.math.utah.edu
+z
diff --git a/biblio/bibtex/utils/bibextract/bibextract.txt b/biblio/bibtex/utils/bibextract/bibextract.txt
new file mode 100644
index 0000000000..74ccb26360
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/bibextract.txt
@@ -0,0 +1,345 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.16.1
+%%CreationDate: Sat Aug 25 18:47:50 2001
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.16 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.16 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(BIBEXTRA)72 48 Q 317.42(CT\(1\) BIBEXTRA)-.4 F
+(CT\(1\))-.4 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0
+(bibe)108 96 Q(xtract \255 e)-.15 E(xtract BibT)-.15 E
+(eX entries from a list of .bib \214les)-.7 E F1(SYNOPSIS)72 112.8 Q/F2
+10/Times-Bold@0 SF(bibextract)108 124.8 Q/F3 10/Times-Italic@0 SF -.1
+(ke)2.5 G(ywor)-.2 E(d-r)-.37 E -1.8 -.4(eg e)-.37 H(xp value-r).2 E
+-1.8 -.4(eg e)-.37 H(xp bib\214le\(s\)).2 E F1(DESCRIPTION)72 141.6 Q F2
+(bibextract)108 153.6 Q F0 -.15(ex)2.791 G .291(tracts from a list of B)
+.15 F/F4 8/Times-Roman@0 SF(IB)A F0(T)A(E)-1.667 2.4 M(X)-1.25 -2.4 M F3
+(.bib)2.791 E F0 .291(\214les those bibliograph)2.791 F 2.791(ye)-.05 G
+.291(ntries that match a pair of speci\214ed)-2.791 F(re)108 165.6 Q
+.586(gular e)-.15 F .586(xpressions, sending them to)-.15 F F3(stdout)
+3.086 E F0 3.086(,t).68 G .586(ogether with all B)-3.086 F F4(IB)A F0(T)
+A(E)-1.667 2.4 M 3.087(X`)-1.25 -2.4 O -.834(`@Preamble{. . .}')-3.827 F
+3.087('c)-.74 G .587(ommands, and)-3.087 F(just those `)108 177.6 Q
+-.834(`@String{. . .}')-.74 F 2.5('c)-.74 G
+(ommands that are actually used by the matched entries.)-2.5 E .148
+(If no bibliograph)108 194.4 R 2.648<798c>-.05 G .148
+(les are speci\214ed on the command line, then)-2.648 F F3(stdin)2.648 E
+F0 .148(is read instead, so that)2.648 F F2(bibextract)2.647 E F0(can)
+2.647 E(be used in a UNIX pipeline.)108 206.4 Q .627
+(The order of entries, and spacing within `)108 223.2 R -.834
+(`@Name{. . .}')-.74 F 3.127('t)-.74 G -.15(ex)-3.127 G .627
+(t, is preserv).15 F .627(ed e)-.15 F(xactly)-.15 E 5.627(.S)-.65 G
+(uccessi)-5.627 E .927 -.15(ve e)-.25 H .627(ntries are).15 F
+(separated by a single blank line.)108 235.2 Q .586(The \214rst re)108
+252 R(gular)-.15 E(-e)-.2 E .586(xpression pattern,)-.15 F F3 -.1(ke)
+3.086 G(ywor)-.2 E(d-r)-.37 E -1.8 -.4(eg e)-.37 H(xp).2 E F0 3.086(,i)
+.19 G 3.086(su)-3.086 G .586(sed to select which)-3.086 F F3 -1.11(``)
+3.086 G -.1(ke)1.11 G(ywor)-.2 E 3.085(d=")-.37 G(value"')-3.085 E(')
+-1.11 E F0 .585(pairs to)3.085 F -.15(ex)108 264 S .409
+(amine further; it matches ag).15 F .409(ainst the k)-.05 F -.15(ey)-.1
+G -.1(wo).15 G .409(rd part only).1 F 5.409(.I)-.65 G 2.909(tm)-5.409 G
+.41(ay include alternate k)-2.909 F -.15(ey)-.1 G -.1(wo).15 G .41
+(rds separated by).1 F -.15(ve)108 276 S .219(rtical bar).15 F 2.719(,s)
+-.4 G .219(uch as "author|editor".)-2.719 F .218
+(If it is an empty string, then the entire bibliographic entry te)5.218
+F .218(xt, includ-)-.15 F(ing the entry type name, is e)108 288 Q
+(xamined.)-.15 E 1.774(The second re)108 304.8 R(gular)-.15 E(-e)-.2 E
+1.774(xpression pattern,)-.15 F F3(value-r)4.274 E -1.8 -.4(eg e)-.37 H
+(xp).2 E F0 4.274(,i).19 G 4.274(su)-4.274 G 1.774
+(sed to further select from the v)-4.274 F 1.775(alue strings of)-.25 F
+F3 -1.11(``)108 316.8 S -.1(ke)1.11 G(ywor)-.2 E 2.637(d=")-.37 G
+(value"')-2.637 E(')-1.11 E F0 .137(pairs the bibliograph)2.637 F 2.637
+(ye)-.05 G .137(ntries to be output.)-2.637 F .137
+(It too may contain alternates separated by)5.137 F -.15(ve)108 328.8 S
+.032(rtical bar).15 F 2.532(,s)-.4 G .032(uch as "bro)-2.532 F 2.532
+(wn|smith". The)-.25 F .033
+(selection algorithm therefore consists of the logical AND of match)
+2.533 F(successes ag)108 340.8 Q(ainst the k)-.05 E -.15(ey)-.1 G -.1
+(wo).15 G(rd and v).1 E(alue strings.)-.25 E 3.273
+(Letter case is ignored in re)108 357.6 R(gular)-.15 E(-e)-.2 E 3.273
+(xpression matches, so that "Bro)-.15 F 3.272(wn|Smith", "BR)-.25 F -.35
+(OW)-.4 G 3.272(N|smith", and).35 F("bro)108 369.6 Q(wn|smith" are equi)
+-.25 E -.25(va)-.25 G 2.5(lent. The).25 F
+(original letter case of the output entries is al)2.5 E -.1(wa)-.1 G
+(ys preserv).1 E(ed.)-.15 E 1.019(If the input B)108 386.4 R F4(IB)A F0
+(T)A(E)-1.667 2.4 M 3.52(Xd)-1.25 -2.4 O 1.02(ata comes from \214les na\
+med on the command line, each output entry will contain a)-3.52 F
+(\214nal k)108 398.4 Q -.15(ey)-.1 G(/v).15 E(alue pair of the form:)
+-.25 E(bibsource =)113 410.4 Q("\214le://hostname/FILEN)10 E(AME",)-.35
+E .162(The v)108 422.4 R .162(alue string is a W)-.25 F(orld-W)-.8 E
+.162(ide W)-.4 F .162(eb Uniform Resource Locator)-.8 F 2.662(,w)-.4 G
+.162(here FILEN)-2.662 F .162(AME is the full path name)-.35 F .408
+(of the source \214le in which the entry w)108 434.4 R .408(as found.)
+-.1 F .408(Such lines are silently ignored by standard B)5.408 F F4(IB)A
+F0(T)A(E)-1.667 2.4 M 2.909(Xs)-1.25 -2.4 O(tyles,)-2.909 E(so the)108
+446.4 Q 2.5(ya)-.15 G(re harmless, b)-2.5 E(ut the)-.2 E 2.5(yh)-.15 G
+(elp to track the origin of bibliograph)-2.5 E 2.5(ye)-.05 G(ntries.)
+-2.5 E(If you don')108 463.2 Q 2.5(tw)-.18 G(ant the)-2.6 E F3(bibsour)
+2.5 E(ce)-.37 E F0(lines to be added, simply supply the B)2.5 E F4(IB)A
+F0(T)A(E)-1.667 2.4 M 2.5<588c>-1.25 -2.4 O(le from)-2.5 E F3(stdin)2.5
+E F0(.).24 E F2(bibextract)108 480 Q F0 1.809(can be used to e)4.31 F
+1.809(xtract from a lar)-.15 F 1.809(ge B)-.18 F F4(IB)A F0(T)A(E)-1.667
+2.4 M 4.309(Xb)-1.25 -2.4 O(ibliograph)-4.309 E 4.309(yd)-.05 G 1.809
+(ata base just those bibliograph)-4.309 F(y)-.05 E
+(entries that match a particular pair of re)108 492 Q(gular e)-.15 E
+(xpressions.)-.15 E F2(bibextract)108 508.8 Q F0 -.15(ex)4.604 G 2.104
+(pects the bibliograph).15 F 4.604<798c>-.05 G 2.104
+(le\(s\) to be consistently formatted in the style produced by)-4.604 F
+F2(bib-)4.605 E(clean)108 520.8 Q F0(\(1\), which allo)A
+(ws use of simple pattern matching to recognize the required entries.)
+-.25 E F1(EXAMPLES)72 537.6 Q F0(Here are some e)108 549.6 Q(xamples:)
+-.15 E(Extract all entries mentioning chaos in an)108 566.4 Q 2.5<798c>
+-.15 G(eld:)-2.5 E F2(bibextract)144 583.2 Q F3("" "c)2.5 E
+(haos" bib\214le\(s\) >ne)-.15 E(w-bibte)-.15 E(x-\214le")-.2 E F0
+(Extract entries with names Bro)108 600 Q
+(wn or Smith occurring in either of the author or editor \214elds:)-.25
+E F2(bibextract)144 616.8 Q F3("author|editor" "br)2.5 E
+(own|smith" bib\214le\(s\) >ne)-.45 E(w-bibte)-.15 E(x-\214le)-.2 E F0
+.503(Extract entries for titles containing the letter `z' an)108 633.6 R
+.502(ywhere after a v)-.15 F -.25(ow)-.2 G .502
+(el; note that single quotes are neces-).25 F(sary to pro)108 645.6 Q
+(vide the necessary protection from shell e)-.15 E(xpansion:)-.15 E F2
+(bibextract)144 662.4 Q F3("title" '[aeiou].*z' bib\214le\(s\) >ne)2.5 E
+(w-bibte)-.15 E(x-\214le)-.2 E F0
+(Extract all conference proceedings entries:)108 679.2 Q F2(bibextract)
+144 696 Q F3("" '@pr)2.5 E(oceedings' bib\214le\(s\) >ne)-.45 E(w-bibte)
+-.15 E(x-\214le)-.2 E F0 -1.11(Ve)72 768 S(rsion 1.09)1.11 E
+(25 August 2001)151.505 E(1)197.055 E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(BIBEXTRA)72 48 Q 317.42(CT\(1\) BIBEXTRA)-.4 F
+(CT\(1\))-.4 E/F1 10.95/Times-Bold@0 SF -.11(BU)72 84 S(GS).11 E/F2 10
+/Times-Bold@0 SF(bibextract)108 96 Q F0 .244
+(is not smart enough to incorporate B)2.744 F/F3 8/Times-Roman@0 SF(IB)A
+F0(T)A(E)-1.667 2.4 M 2.744(Xc)-1.25 -2.4 O .244
+(ross references unless the)-2.744 F 2.744(ya)-.15 G .244(re themselv)
+-2.744 F .245(es matched)-.15 F(by the speci\214ed re)108 108 Q(gular e)
+-.15 E(xpression.)-.15 E(That feature should be added.)108 124.8 Q F1
+(SEE ALSO)72 141.6 Q F2(bibcheck)108 153.6 Q F0(\(1\),)A F2(bibclean)
+3.787 E F0(\(1\),)A F2(bibdup)3.787 E F0(\(1\),)A F2(bibjoin)3.786 E F0
+(\(1\),)A F2(biblabel)3.786 E F0(\(1\),)A F2(biblex)3.786 E F0(\(1\),)A
+F2(biborder)3.786 E F0(\(1\),)A F2(bibparse)3.786 E F0(\(1\),)A F2(bib-)
+3.786 E(sort)108 165.6 Q F0(\(1\),)A F2(bibtex)2.5 E F0(\(1\),)A F2(bib)
+2.5 E(unlex)-.2 E F0(\(1\),)A F2(citesub)2.5 E F0(\(1\),)A F2(citetags)
+2.5 E F0(\(1\),)A F2(latex)2.5 E F0(\(1\),)A F2(gawk)2.5 E F0(\(1\),)A
+F2(nawk)2.5 E F0(\(1\),)A F2(tex)2.5 E F0(\(1\).)A F1(FILES)72 182.4 Q
+F0(/usr/local/share/lib/bibe)108 194.4 Q(xtract/bibe)-.15 E(xtract.a)
+-.15 E(wk)-.15 E F2(nawk)10 E F0(\(1\) program for tag e)A(xtraction.)
+-.15 E(/usr/local/bin/bibe)108 211.2 Q 90.79(xtract user)-.15 F
+(-callable shell script to in)-.2 E -.2(vo)-.4 G -.1(ke).2 G F2(nawk)2.6
+E F0(\(1\).)A F1 -.548(AU)72 228 S(THOR).548 E F0(Nelson H. F)108 240 Q
+2.5(.B)-.8 G(eebe)-2.5 E(Center for Scienti\214c Computing)108 252 Q
+(Uni)108 264 Q -.15(ve)-.25 G(rsity of Utah).15 E
+(Department of Mathematics, 322 INSCC)108 276 Q(155 S 1400 E RM 233)108
+288 Q(Salt Lak)108 300 Q 2.5(eC)-.1 G(ity)-2.5 E 2.5(,U)-.65 G 2.5(T8)
+-2.5 G(4112-0090)-2.5 E(USA)108 312 Q -.7(Te)108 324 S
+(l: +1 801 581 5254).7 E -.74(FA)108 336 S
+(X: +1 801 585 1640, +1 801 581 4148).74 E
+(Email: beebe@math.utah.edu, beebe@acm.or)108 348 Q(g, beebe@ieee.or)
+-.18 E 2.5(g\()-.18 G(Internet\))-2.5 E(WWW)108 360 Q 2.5(:h)-.37 G
+(ttp://www)-2.5 E(.math.utah.edu/~beebe)-.65 E -1.11(Ve)72 768 S
+(rsion 1.09)1.11 E(25 August 2001)151.505 E(2)197.055 E EP
+%%Trailer
+end
+%%EOF
diff --git a/biblio/bibtex/utils/bibextract/citefind.awk b/biblio/bibtex/utils/bibextract/citefind.awk
new file mode 100644
index 0000000000..d508d1ffd4
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.awk
@@ -0,0 +1,163 @@
+### ====================================================================
+### @Awk-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.03",
+### date = "19 February 1999",
+### time = "12:22:50 MST",
+### filename = "citefind.awk",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "35241 163 650 5598",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography, citation label,
+### citation tag",
+### supported = "yes",
+### abstract = "This program extracts bibliography entries
+### from one or more bibliography files for
+### specified citation tags ",
+### docstring = "*********************************************
+### This code is hereby placed in the PUBLIC
+### DOMAIN and may be redistributed without any
+### restrictions.
+### *********************************************
+###
+### Read a list of cite tags from the file
+### given by the first argument, then process
+### each of the remaining file arguments as
+### BibTeX bib files, looking up the
+### bibentries, and output them to stdout.
+### @preamble{} and @string{} entries are
+### automatically output as well.
+###
+### Usage:
+### nawk -f citefind.awk foo.tags bibfile(s) \
+### >newbibfile
+###
+### To be recognized, bib entries must look like
+###
+### @keyword{tag,
+### ...
+### }
+###
+### where the start @ appears in column 1, and
+### the complete entry has balanced braces.
+###
+### This program should normally be run via
+### the separate citefind shell script.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [19-Feb-1999] 1.03 Change BEGIN loop code to work properly.
+###
+### Add END{} block with code to check for
+### missing and duplicate entries.
+###
+### Add warning() function and three calls
+### to it.
+###
+### Remove unneeded statement-terminating
+### semicolons.
+###
+### Capitalize global variables.
+###
+### [30-Oct-1992] 1.02 Update header for new release.
+###
+### [21-Oct-1992] 1.01 Update for public distribution.
+###
+### [12-Apr-1989] 1.00 Original version.
+
+BEGIN {
+ while ((getline < ARGV[1]) > 0) # process first file only to get tags
+ Tagnames[$0] = $0
+ ARGV[1] = "" # the main loop below must ignore this file
+}
+
+# @string and @preamble -- collect up to paired closing brace
+
+/^@([Pp][Rr][Ee][Aa][Mm][Bb][Ll][Ee]|[sS][tT][rR][iI][nN][gG]){/ {
+ printbraceditem()
+ print ""
+}
+
+# "@keyword{tag," -- collect up to line starting with right brace
+/^@[a-zA-Z0-9]*{/ {
+ tag = substr($0,index($0,"{")+1)
+ tag = substr(tag,1,index(tag,",")-1)
+ if (tag in Tagnames)
+ {
+ Count[tag]++
+ printbraceditem(tag)
+ print ""
+ }
+ }
+
+END {
+ # Do a final consistency check that each item was found, and found only once
+ for (tag in Tagnames)
+ {
+ if (!(tag in Count))
+ warning("bibliography entry [" tag "] was not found")
+ else if (Count[tag] > 1)
+ warning("bibliography entry [" tag "] was found " Count[tag] " times")
+ }
+ exit (Error_Count)
+}
+
+#=======================================================================
+
+function bracecount(s, k,n)
+{
+ n = 0
+ for (k = 1; k <= length(s); ++k)
+ {
+ if (substr(s,k,1) == "{")
+ n++
+ else if (substr(s,k,1) == "}")
+ n--
+ }
+ return (n)
+}
+
+function printbraceditem(tag, count,last_filename)
+{
+ # Starting with the current contents of $0, print lines until we
+ # reach a zero brace count.
+ count = bracecount($0)
+ print $0
+ last_filename = FILENAME
+ while (count != 0)
+ {
+ if ((last_filename != FILENAME) || (getline <= 0))
+ break
+ print $0
+ count += bracecount($0)
+ }
+ if (count != 0)
+ warning("unexpected end-of-file in bibliography entry [" tag \
+ "] from file [" last_filename "]")
+}
+
+function warning(message)
+{
+ print FILENAME ":" FNR ":%%" message >"/dev/stderr"
+ Error_Count++
+}
+
+########################################################################
diff --git a/biblio/bibtex/utils/bibextract/citefind.man b/biblio/bibtex/utils/bibextract/citefind.man
new file mode 100644
index 0000000000..8abddeb57b
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.man
@@ -0,0 +1,169 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "1.03",
+.\" date = "19 February 1999",
+.\" time = "12:31:28 MST",
+.\" filename = "citefind.man",
+.\" address = "Center for Scientific Computing
+.\" University of Utah
+.\" Department of Mathematics, 322 INSCC
+.\" 155 S 1400 E RM 233
+.\" Salt Lake City, UT 84112-0090
+.\" USA
+.\" telephone = "+1 801 581 5254",
+.\" FAX = "+1 801 585 1640, +1 801 581 4148",
+.\" URL = "http://www.math.utah.edu/~beebe",
+.\" checksum = "34902 169 737 5857",
+.\" email = "beebe@math.utah.edu, beebe@acm.org,
+.\" beebe@ieee.org (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, BibTeX, citation label,
+.\" citation tag",
+.\" supported = "yes",
+.\" docstring = "This file contains the UNIX manual pages
+.\" for the citefind command, a shell script
+.\" that invokes an awk program to extract from
+.\" a list of BibTeX .bib files bibliography
+.\" entries that match a specified list of
+.\" citation tags, possibly produced by
+.\" citetags(1).
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH CITEFIND 1 "19 February 1999" "Version 1.03"
+.\"======================================================================
+.SH NAME
+citefind \- extract matching bibliography entries from BibTeX .bib files
+.\"======================================================================
+.SH SYNOPSIS
+.nf
+.BI citefind " tags-file bibfile(s) >newbibfile"
+.fi
+or
+.nf
+.BI citefind " \- bibfile(s) >newbibfile"
+.fi
+.\"======================================================================
+.SH DESCRIPTION
+.B citefind
+extracts from a list of \*(Bi\&
+.I .bib
+files those bibliography entries that match a
+specified list of citation tags, possibly produced
+by
+.BR citetags (1),
+sending the entries to
+.IR stdout ,
+together with all \*(Bi\& ``@Preamble{.\|.\|.}''
+and ``@String{.\|.\|.}'' commands.
+.PP
+If the first argument,
+.IR tags-file ,
+is ``\-'', the tag list is read from
+.IR stdin ,
+allowing it to be piped from
+.BR citetags (1).
+.PP
+Bibliography entries are output in the order found
+in the
+.I .bib
+files. In the absence of cross references, you
+may be able to use
+.BR bibsort (1)
+to sort them by citation key. While such sorting
+is unnecessary for \*(Bi\& itself, it is
+convenient for a human reader of the
+.I .bib
+file.
+.PP
+When documents are prepared using a large
+bibliography data base collection, it is sometimes
+convenient to extract a subset \*(Bi\&
+bibliography file incorporating only those entries
+that are cited in the document. A good example is
+a document to be submitted to a publisher, or
+otherwise distributed in electronic form.
+.PP
+.B citefind
+expects the bibliography file(s) to be consistently
+formatted in the style produced by
+.BR bibclean (1),
+which allows use of simple pattern matching to recognize the required
+entries.
+.PP
+To guard against match failures, from version 1.03,
+.B citefind
+will complain if requested entries are not found at all, or are found
+(and output) more than once. It will also complain if end-of-file is
+reached during collection of any bibliography entry.
+.\"======================================================================
+.SH "BUGS"
+.B citefind
+is not smart enough to incorporate \*(Bi\&
+cross references unless their citation tags are
+included in the input list.
+.PP
+No attempt is made to reduce the output
+``@String{.\|.\|.}'' commands to just those that
+are actually referenced.
+.PP
+Those features should be added.
+.\"======================================================================
+.SH "SEE ALSO"
+.BR bibcheck (1),
+.BR bibclean (1),
+.BR bibdup (1),
+.BR bibextract (1),
+.BR bibjoin (1),
+.BR biblabel (1),
+.BR biblex (1),
+.BR biborder (1),
+.BR bibparse (1),
+.BR bibsort (1),
+.BR bibtex (1),
+.BR bibunlex (1),
+.BR citesub (1),
+.BR citetags (1),
+.BR gawk (1),
+.BR latex (1),
+.BR nawk (1),
+.BR tex (1).
+.\"======================================================================
+.SH FILES
+.\" NB: LIBDIR and BINDIR are substituted for real directory names
+.\" by a sed script invoked by "make install".
+.TP \w'@LIBDIR@/citefind.awk'u+2n
+@LIBDIR@/citefind.awk
+.BR nawk (1)
+program for tag extraction.
+.TP
+@BINDIR@/citefind
+user-callable shell script to invoke
+.BR nawk (1).
+.\"======================================================================
+.SH AUTHOR
+.nf
+Nelson H. F. Beebe
+Center for Scientific Computing
+University of Utah
+Department of Mathematics, 322 INSCC
+155 S 1400 E RM 233
+Salt Lake City, UT 84112-0090
+USA
+Tel: +1 801 581 5254
+FAX: +1 801 585 1640, +1 801 581 4148
+Email: beebe@math.utah.edu, beebe@acm.org, beebe@ieee.org (Internet)
+WWW: http://www.math.utah.edu/~beebe
+.fi
+.\"==============================[The End]==============================
diff --git a/biblio/bibtex/utils/bibextract/citefind.pdf b/biblio/bibtex/utils/bibextract/citefind.pdf
new file mode 100644
index 0000000000..620ef4b243
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibextract/citefind.sh b/biblio/bibtex/utils/bibextract/citefind.sh
new file mode 100644
index 0000000000..c116de2348
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+### ====================================================================
+### @UNIX-shell-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.09",
+### date = "25 August 2001",
+### time = "17:46:31 MDT",
+### filename = "citefind.sh",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "54212 106 481 4376",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@computer.org, beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography",
+### supported = "yes",
+### docstring = "*********************************************
+### This code is hereby placed in the PUBLIC
+### DOMAIN and may be redistributed without any
+### restrictions.
+### *********************************************
+###
+### Read a list of cite tags from the file
+### given by the first argument, then process
+### each of the remaining file arguments as
+### BibTeX bib files, looking up the
+### bibentries, and output them to stdout.
+### @preamble{} and @string{} entries are
+### automatically output as well.
+###
+### Usage:
+### citefind foo.tags bibfile(s) >newbibfile
+### or
+### citefind - bibfile(s) >newbibfile
+###
+### To be recognized, bib entries must look like
+###
+### @keyword{tag,
+### ...
+### }
+###
+### where the start @ appears in column 1, and
+### the complete entry has balanced braces.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [25-Aug-2001] 1.09 Update file header data.
+###
+### [19-Feb-1999] 1.08 Update for new release (most changes are
+### in the accompanying cite*.{man,awk}
+### files).
+###
+### [16-May-1998] 1.07 Fix error in handling of stdin;
+### thanks to Markus Mohnen
+### <mohnen@Informatik.RWTH-Aachen.DE>
+### for the fix!
+###
+### [24-Aug-1994] 1.06 Several extensions in bibextract.awk.
+###
+### [23-Aug-1994] 1.05 Correct name of temporary file and name
+### of awk script in two other files.
+###
+### [22-Jul-1994] 1.04 Eliminate printbraceditem() in favor of
+### using collectbraceditem(), which now
+### checks for balanced braces to avoid
+### possibility of an infinite loop.
+###
+### [17-Jul-1994] 1.03 Revise to output only those @String{...}
+### entries that are actually used by the
+### matched entries.
+###
+### [30-Oct-1992] 1.02 Fix typographical error in bibextract.sh
+###
+### [21-Oct-1992] 1.01 Update for public distribution
+###
+### [21-Oct-1992] 1.00 Original version.
+
+LIBDIR=@LIBDIR@
+
+if [ "xx$1" = "xx-" ] # make a temporary copy of stdin
+then
+ INPUTFILE=/tmp/citefind.$$
+ trap '/bin/rm -f ${INPUTFILE}' 2 1
+ cat >${INPUTFILE}
+ shift
+ nawk -f ${LIBDIR}/citefind.awk ${INPUTFILE} $*
+ /bin/rm -f ${INPUTFILE}
+else
+ nawk -f ${LIBDIR}/citefind.awk $*
+fi
+### ====================================================================
diff --git a/biblio/bibtex/utils/bibextract/citefind.sok b/biblio/bibtex/utils/bibextract/citefind.sok
new file mode 100644
index 0000000000..e2e9f24fe6
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.sok
@@ -0,0 +1,45 @@
+BIBT
+BINDIR
+Bi
+BibTeX
+CITEFIND
+E
+Email
+F
+FAX
+H
+INSCC
+LIBDIR
+S
+Te
+TeX
+WWW
+acm.org
+beebe
+bibcheck
+bibclean
+bibdup
+bibextract
+bibfile
+bibindex
+bibjoin
+biblabel
+biblex
+biblook
+biborder
+bibparse
+bibsort
+bibtex
+bibunlex
+citefind
+citefind.awk
+citesub
+citetags
+http
+ieee.org
+math.utah.edu
+nawk
+newbibfile
+s
+tex
+www.math.utah.edu
diff --git a/biblio/bibtex/utils/bibextract/citefind.txt b/biblio/bibtex/utils/bibextract/citefind.txt
new file mode 100644
index 0000000000..d4b3aa1e29
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citefind.txt
@@ -0,0 +1,294 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.16.1
+%%CreationDate: Sat Aug 25 18:47:50 2001
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.16 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.16 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 351.08(CITEFIND\(1\) CITEFIND\(1\))72 48 R/F1
+10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(cite\214nd \255 e)
+108 96 Q(xtract matching bibliograph)-.15 E 2.5(ye)-.05 G
+(ntries from BibT)-2.5 E(eX .bib \214les)-.7 E F1(SYNOPSIS)72 112.8 Q/F2
+10/Times-Bold@0 SF(cite\214nd)108 124.8 Q/F3 10/Times-Italic@0 SF(ta)2.5
+E(gs-\214le bib\214le\(s\) >ne)-.1 E(wbib\214le)-.15 E F0(or)108 136.8 Q
+F2(cite\214nd)108 148.8 Q F3 2.5<ad62>2.5 G(ib\214le\(s\) >ne)-2.5 E
+(wbib\214le)-.15 E F1(DESCRIPTION)72 165.6 Q F2(cite\214nd)108 177.6 Q
+F0 -.15(ex)2.512 G .012(tracts from a list of B).15 F/F4 8/Times-Roman@0
+SF(IB)A F0(T)A(E)-1.667 2.4 M(X)-1.25 -2.4 M F3(.bib)2.512 E F0 .012
+(\214les those bibliograph)2.512 F 2.511(ye)-.05 G .011
+(ntries that match a speci\214ed list of cita-)-2.511 F 2.769
+(tion tags, possibly produced by)108 189.6 R F2(citetags)5.269 E F0
+2.769(\(1\), sending the entries to)B F3(stdout)5.269 E F0 5.269(,t).68
+G 2.769(ogether with all B)-5.269 F F4(IB)A F0(T)A(E)-1.667 2.4 M(X)
+-1.25 -2.4 M -.74(``)108 201.6 S -.834(@Preamble{. . .}').74 F 2.5('a)
+-.74 G(nd `)-2.5 E -.834(`@String{. . .}')-.74 F 2.5('c)-.74 G(ommands.)
+-2.5 E 1.317(If the \214rst ar)108 218.4 R(gument,)-.18 E F3(ta)3.817 E
+(gs-\214le)-.1 E F0 3.817(,i).18 G 3.817(s`)-3.817 G(`\255')-4.557 E
+1.317(', the tag list is read from)-.74 F F3(stdin)3.816 E F0 3.816(,a)
+.24 G(llo)-3.816 E 1.316(wing it to be piped from)-.25 F F2(cite-)3.816
+E(tags)108 230.4 Q F0(\(1\).)A(Bibliograph)108 247.2 Q 2.988(ye)-.05 G
+.489(ntries are output in the order found in the)-2.988 F F3(.bib)2.989
+E F0 2.989(\214les. In)2.989 F .489
+(the absence of cross references, you)2.989 F .561(may be able to use)
+108 259.2 R F2(bibsort)3.061 E F0 .56(\(1\) to sort them by citation k)B
+-.15(ey)-.1 G 5.56(.W)-.5 G .56(hile such sorting is unnecessary for B)
+-5.56 F F4(IB)A F0(T)A(E)-1.667 2.4 M(X)-1.25 -2.4 M(itself, it is con)
+108 271.2 Q -.15(ve)-.4 G(nient for a human reader of the).15 E F3(.bib)
+2.5 E F0(\214le.)2.5 E .042(When documents are prepared using a lar)108
+288 R .042(ge bibliograph)-.18 F 2.542(yd)-.05 G .042
+(ata base collection, it is sometimes con)-2.542 F -.15(ve)-.4 G .042
+(nient to).15 F -.15(ex)108 300 S .171(tract a subset B).15 F F4(IB)A F0
+(T)A(E)-1.667 2.4 M 2.671(Xb)-1.25 -2.4 O(ibliograph)-2.671 E 2.671
+<798c>-.05 G .17
+(le incorporating only those entries that are cited in the document.)
+-2.671 F(A)5.17 E(good e)108 312 Q
+(xample is a document to be submitted to a publisher)-.15 E 2.5(,o)-.4 G
+2.5(ro)-2.5 G(therwise distrib)-2.5 E(uted in electronic form.)-.2 E F2
+(cite\214nd)108 328.8 Q F0 -.15(ex)3.115 G .615(pects the bibliograph)
+.15 F 3.115<798c>-.05 G .616
+(le\(s\) to be consistently formatted in the style produced by)-3.115 F
+F2(bibclean)3.116 E F0(\(1\),)A(which allo)108 340.8 Q
+(ws use of simple pattern matching to recognize the required entries.)
+-.25 E 1.677 -.8(To g)108 357.6 T .077(uard ag).8 F .077(ainst match f)
+-.05 F .076(ailures, from v)-.1 F .076(ersion 1.03,)-.15 F F2
+(cite\214nd)2.576 E F0 .076
+(will complain if requested entries are not found)2.576 F .519
+(at all, or are found \(and output\) more than once.)108 369.6 R .519
+(It will also complain if end-of-\214le is reached during col-)5.519 F
+(lection of an)108 381.6 Q 2.5(yb)-.15 G(ibliograph)-2.5 E 2.5(ye)-.05 G
+(ntry)-2.5 E(.)-.65 E F1 -.11(BU)72 398.4 S(GS).11 E F2(cite\214nd)108
+410.4 Q F0 .633(is not smart enough to incorporate B)3.133 F F4(IB)A F0
+(T)A(E)-1.667 2.4 M 3.132(Xc)-1.25 -2.4 O .632
+(ross references unless their citation tags are included)-3.132 F
+(in the input list.)108 422.4 Q .985
+(No attempt is made to reduce the output `)108 439.2 R -.834
+(`@String{. . .}')-.74 F 3.486('c)-.74 G .986
+(ommands to just those that are actually refer)-3.486 F(-)-.2 E(enced.)
+108 451.2 Q(Those features should be added.)108 468 Q F1(SEE ALSO)72
+484.8 Q F2(bibcheck)108 496.8 Q F0(\(1\),)A F2(bibclean)2.955 E F0
+(\(1\),)A F2(bibdup)2.955 E F0(\(1\),)A F2(bibextract)2.955 E F0(\(1\),)
+A F2(bibjoin)2.955 E F0(\(1\),)A F2(biblabel)2.955 E F0(\(1\),)A F2
+(biblex)2.955 E F0(\(1\),)A F2(biborder)2.955 E F0(\(1\),)A F2(bib-)
+2.955 E(parse)108 508.8 Q F0(\(1\),)A F2(bibsort)2.5 E F0(\(1\),)A F2
+(bibtex)2.5 E F0(\(1\),)A F2(bib)2.5 E(unlex)-.2 E F0(\(1\),)A F2
+(citesub)2.5 E F0(\(1\),)A F2(citetags)2.5 E F0(\(1\),)A F2(gawk)2.5 E
+F0(\(1\),)A F2(latex)2.5 E F0(\(1\),)A F2(nawk)2.5 E F0(\(1\),)A F2(tex)
+2.5 E F0(\(1\).)A F1(FILES)72 525.6 Q F0(/usr/local/share/lib/bibe)108
+537.6 Q(xtract/cite\214nd.a)-.15 E(wk)-.15 E F2(nawk)10 E F0
+(\(1\) program for tag e)A(xtraction.)-.15 E 90.79
+(/usr/local/bin/cite\214nd user)108 554.4 R
+(-callable shell script to in)-.2 E -.2(vo)-.4 G -.1(ke).2 G F2(nawk)2.6
+E F0(\(1\).)A F1 -.548(AU)72 571.2 S(THOR).548 E F0(Nelson H. F)108
+583.2 Q 2.5(.B)-.8 G(eebe)-2.5 E(Center for Scienti\214c Computing)108
+595.2 Q(Uni)108 607.2 Q -.15(ve)-.25 G(rsity of Utah).15 E
+(Department of Mathematics, 322 INSCC)108 619.2 Q(155 S 1400 E RM 233)
+108 631.2 Q(Salt Lak)108 643.2 Q 2.5(eC)-.1 G(ity)-2.5 E 2.5(,U)-.65 G
+2.5(T8)-2.5 G(4112-0090)-2.5 E(USA)108 655.2 Q -.7(Te)108 667.2 S
+(l: +1 801 581 5254).7 E -.74(FA)108 679.2 S
+(X: +1 801 585 1640, +1 801 581 4148).74 E
+(Email: beebe@math.utah.edu, beebe@acm.or)108 691.2 Q(g, beebe@ieee.or)
+-.18 E 2.5(g\()-.18 G(Internet\))-2.5 E(WWW)108 703.2 Q 2.5(:h)-.37 G
+(ttp://www)-2.5 E(.math.utah.edu/~beebe)-.65 E -1.11(Ve)72 768 S
+(rsion 1.03)1.11 E(19 February 1999)147.9 E(1)193.45 E EP
+%%Trailer
+end
+%%EOF
diff --git a/biblio/bibtex/utils/bibextract/citetags.awk b/biblio/bibtex/utils/bibextract/citetags.awk
new file mode 100644
index 0000000000..2bb62b2af1
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.awk
@@ -0,0 +1,107 @@
+### ====================================================================
+### @Awk-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.03",
+### date = "19 February 1999",
+### time = "12:36:04 MST",
+### filename = "citetags.awk",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "31982 107 465 4936",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography",
+### supported = "yes",
+### docstring = "*********************************************
+### This code is hereby placed in the PUBLIC
+### DOMAIN and may be redistributed without any
+### restrictions.
+### *********************************************
+###
+### Read a LaTeX file, or an .aux file, and
+### extract the citation tags, outputting them
+### one per line on stdout.
+###
+### The companion program, citefind.awk, can be
+### used to extract the complete BibTeX entries
+### for those tags from a bibliography file.
+### This is useful when a small bibtex file
+### must be prepared from large citation
+### databases.
+###
+### Usage:
+### nawk -f citetags.awk foo.ltx | sort > temp.tags
+### nawk -f citefind.awk temp.tags bibfile(s) \
+### >newbibfile
+### rm temp.tags
+###
+### The sort step is optional; citetags will
+### not output duplicate tags, but they will be
+### in random order.
+###
+### This program should normally be run via
+### the separate citetags shell script.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [19-Feb-1999] 1.03 Capitalize global variables.
+###
+### [30-Oct-1992] 1.02 Update header for new release.
+###
+### [21-Oct-1992] 1.01 Update for public distribution.
+###
+### [12-Apr-1989] 1.00 Original version.
+
+/(\\cit(e|ation)|\\bibcite)/ {
+ for (;;) # loop over possible multiple \cite{} commands
+ {
+ $0 = substr($0,index($0,"\\cit"));
+ comment_start = index($0,"%");
+ if (comment_start > 0)
+ $0 = substr($0,1,comment_start-1);
+ line = substr($0,index($0,"{")+1);
+ for (;;)
+ {
+ k = index(line,"}");
+ if (k > 0)
+ break;
+ getline;
+ comment_start = index($0,"%");
+ if (comment_start > 0)
+ $0 = substr($0,1,comment_start-1);
+ line = line $0;
+ }
+ gsub(/[ \t]/,"",line); # remove white space
+ templine = line;
+ line = substr(templine,1,k-1);
+ # We now have a comma-separated tag word list
+ split(line,taglist,",");
+ for (n in taglist)
+ Tagtable[m++] = taglist[n];
+ $0 = substr(templine,k);
+ if ($0 !~ /\\cite/)
+ break; # no more \cite{} commands
+ }
+ }
+
+# Now print the (unsorted) list of unique tags.
+END {
+ for (n in Tagtable)
+ print Tagtable[n];
+ }
diff --git a/biblio/bibtex/utils/bibextract/citetags.man b/biblio/bibtex/utils/bibextract/citetags.man
new file mode 100644
index 0000000000..17413ce7bf
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.man
@@ -0,0 +1,126 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "1.03",
+.\" date = "19 February 1999",
+.\" time = "12:34:05 MST",
+.\" filename = "citetags.man",
+.\" address = "Center for Scientific Computing
+.\" University of Utah
+.\" Department of Mathematics, 322 INSCC
+.\" 155 S 1400 E RM 233
+.\" Salt Lake City, UT 84112-0090
+.\" USA
+.\" telephone = "+1 801 581 5254",
+.\" FAX = "+1 801 585 1640, +1 801 581 4148",
+.\" checksum = "41666 126 547 4764",
+.\" email = "beebe@math.utah.edu, beebe@acm.org,
+.\" beebe@ieee.org (Internet)",
+.\" URL = "http://www.math.utah.edu/~beebe",
+.\" checksum = "48699 195 869 6955",
+.\" email = "beebe@math.utah.edu, beebe@acm.org,
+.\" beebe@ieee.org (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, BibTeX, citation label,
+.\" citation tag",
+.\" supported = "yes",
+.\" docstring = "This file contains the UNIX manual pages
+.\" for the citetags command, a shell script
+.\" that invokes an awk program to extract
+.\" citation tags from a LaTeX source file or
+.\" .aux file for later use with citefind(1).
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.if n .ds La LaTeX
+.if t .ds La L\\h'-0.24m'\\v'-0.15v'\\s-2A\\s+2\\h'-0.15m'\\v'0.15v'T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH CITETAGS 1 "19 February 1999" "Version 1.03"
+.\"======================================================================
+.SH NAME
+citetags \- extract BibTeX citation tags from a LaTeX source or .aux file
+.\"======================================================================
+.SH SYNOPSIS
+.BI citetags " LaTeX source or .aux file >tagsfile"
+.\"======================================================================
+.SH DESCRIPTION
+.B citetags
+extracts \*(Bi\& citation tags from a \*(La\& source file or
+.I .aux
+file and sends them to
+.IR stdout ,
+possibly for later input to
+.BR citefind (1).
+.PP
+.B citetags
+and
+.BR citefind (1)
+can be used to extract from a large \*(Bi\&
+bibliography data base just those bibliography
+entries that are actually used in a particular
+document, perhaps for submission to a publisher,
+or distribution in electronic form.
+.\"======================================================================
+.SH BUGS
+.B citetags
+is not smart enough to incorporate \*(Bi\& cross
+references unless they are themselves cited.
+.PP
+That feature should be added.
+.\"======================================================================
+.SH "SEE ALSO"
+.BR bibcheck (1),
+.BR bibclean (1),
+.BR bibdup (1),
+.BR bibextract (1),
+.BR bibjoin (1),
+.BR biblabel (1),
+.BR biblex (1),
+.BR biborder (1),
+.BR bibparse (1),
+.BR bibsort (1),
+.BR bibtex (1),
+.BR bibunlex (1),
+.BR citefind (1),
+.BR citesub (1),
+.BR gawk (1),
+.BR latex (1),
+.BR nawk (1),
+.BR tex (1).
+.\"======================================================================
+.SH FILES
+.\" NB: LIBDIR and BINDIR are substituted for real directory names
+.\" by a sed script invoked by "make install".
+.TP \w'@LIBDIR@/citetags.awk'u+2n
+@LIBDIR@/citetags.awk
+.BR nawk (1)
+program for tag extraction.
+.TP
+@BINDIR@/citetags
+user-callable shell script to invoke
+.BR nawk (1).
+.\"======================================================================
+.SH AUTHOR
+.nf
+Nelson H. F. Beebe
+Center for Scientific Computing
+University of Utah
+Department of Mathematics, 322 INSCC
+155 S 1400 E RM 233
+Salt Lake City, UT 84112-0090
+USA
+Tel: +1 801 581 5254
+FAX: +1 801 585 1640, +1 801 581 4148
+Email: beebe@math.utah.edu, beebe@acm.org, beebe@ieee.org (Internet)
+WWW: http://www.math.utah.edu/~beebe
+.fi
+.\"==============================[The End]==============================
diff --git a/biblio/bibtex/utils/bibextract/citetags.pdf b/biblio/bibtex/utils/bibextract/citetags.pdf
new file mode 100644
index 0000000000..fad7aa1a9f
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibextract/citetags.sh b/biblio/bibtex/utils/bibextract/citetags.sh
new file mode 100644
index 0000000000..c3ef82ec83
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.sh
@@ -0,0 +1,68 @@
+#!/bin/sh
+### ====================================================================
+### @UNIX-shell-file{
+### author = "Nelson H. F. Beebe",
+### version = "1.02",
+### date = "19 February 1999",
+### time = "12:43:24 MST",
+### filename = "citetags.sh",
+### address = "Center for Scientific Computing
+### University of Utah
+### Department of Mathematics, 322 INSCC
+### 155 S 1400 E RM 233
+### Salt Lake City, UT 84112-0090
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 585 1640, +1 801 581 4148",
+### URL = "http://www.math.utah.edu/~beebe",
+### checksum = "27722 68 325 3094",
+### email = "beebe@math.utah.edu, beebe@acm.org,
+### beebe@ieee.org (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "BibTeX, bibliography",
+### supported = "yes",
+### docstring = "*********************************************
+### This code is hereby placed in the PUBLIC
+### DOMAIN and may be redistributed without any
+### restrictions.
+### *********************************************
+###
+### Read a LaTeX file, or an .aux file, and
+### extract the citation tags, outputting them
+### one per line on stdout, in sorted order.
+###
+### The companion program, citefind, can be
+### used to extract the complete BibTeX entries
+### for those tags from a bibliography file.
+### This is useful when a small bibtex file
+### must be prepared from large citation
+### databases.
+###
+### Usage:
+### citetags latex-file--or--aux-file >newbibfile
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+### ====================================================================
+
+### Edit history (reverse chronological order):
+### [19-Feb-1999] 1.03 Update file header.
+###
+### [30-Oct-1992] 1.02 Update file header.
+###
+### [21-Oct-1992] 1.01 Update for public distribution
+###
+### [21-Apr-1990] 1.00 Original version
+
+LIBDIR=@LIBDIR@
+
+# The sort step is optional; citetags will not output duplicate tags,
+# but they will be in random order.
+
+nawk -f ${LIBDIR}/citetags.awk $* | sort
+### ====================================================================
diff --git a/biblio/bibtex/utils/bibextract/citetags.sok b/biblio/bibtex/utils/bibextract/citetags.sok
new file mode 100644
index 0000000000..e87b1cd1ce
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.sok
@@ -0,0 +1,47 @@
+BIBT
+BINDIR
+Bi
+BibTeX
+CITETAGS
+E
+Email
+F
+FAX
+H
+INSCC
+LIBDIR
+LaTeX
+S
+Te
+TeX
+WWW
+acm.org
+aux
+beebe
+bibcheck
+bibclean
+bibdup
+bibextract
+bibindex
+bibjoin
+biblabel
+biblex
+biblook
+biborder
+bibparse
+bibsort
+bibtex
+bibunlex
+citefind
+citesub
+citetags
+citetags.awk
+http
+ieee.org
+math.utah.edu
+nawk
+tagsfile
+tex
+v'0.15v'T
+v'0.20v'E
+www.math.utah.edu
diff --git a/biblio/bibtex/utils/bibextract/citetags.txt b/biblio/bibtex/utils/bibextract/citetags.txt
new file mode 100644
index 0000000000..2278da4791
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/citetags.txt
@@ -0,0 +1,258 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.16.1
+%%CreationDate: Sat Aug 25 18:47:51 2001
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.16 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.16 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(CITET)72 48 Q -.4(AG)-.93 G 348.18(S\(1\) CITET)
+.4 F -.4(AG)-.93 G(S\(1\)).4 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S
+(ME).219 E F0(citetags \255 e)108 96 Q(xtract BibT)-.15 E
+(eX citation tags from a LaT)-.7 E(eX source or .aux \214le)-.7 E F1
+(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF(citetags)108 124.8 Q/F3 10
+/Times-Italic@0 SF(LaT)2.5 E(eX sour)-.92 E(ce or .aux \214le >ta)-.37 E
+(gs\214le)-.1 E F1(DESCRIPTION)72 141.6 Q F2(citetags)108 153.6 Q F0
+-.15(ex)2.793 G .293(tracts B).15 F/F4 8/Times-Roman@0 SF(IB)A F0(T)A(E)
+-1.667 2.4 M 2.792(Xc)-1.25 -2.4 O .292(itation tags from a L)-2.792 F
+F4(A)-2.4 -1.8 M F0(T)-1.5 1.8 M(E)-1.667 2.4 M 2.792(Xs)-1.25 -2.4 O
+.292(ource \214le or)-2.792 F F3(.aux)2.792 E F0 .292
+(\214le and sends them to)2.792 F F3(stdout)2.792 E F0 2.792(,p).68 G
+(ossi-)-2.792 E(bly for later input to)108 165.6 Q F2(cite\214nd)2.5 E
+F0(\(1\).)A F2(citetags)108 182.4 Q F0(and)2.819 E F2(cite\214nd)2.819 E
+F0 .319(\(1\) can be used to e)B .319(xtract from a lar)-.15 F .319
+(ge B)-.18 F F4(IB)A F0(T)A(E)-1.667 2.4 M 2.819(Xb)-1.25 -2.4 O
+(ibliograph)-2.819 E 2.819(yd)-.05 G .32(ata base just those bibli-)
+-2.819 F(ograph)108 194.4 Q 3.457(ye)-.05 G .956(ntries that are actual\
+ly used in a particular document, perhaps for submission to a publisher)
+-3.457 F 3.456(,o)-.4 G(r)-3.456 E(distrib)108 206.4 Q
+(ution in electronic form.)-.2 E F1 -.11(BU)72 223.2 S(GS).11 E F2
+(citetags)108 235.2 Q F0(is not smart enough to incorporate B)2.5 E F4
+(IB)A F0(T)A(E)-1.667 2.4 M 2.5(Xc)-1.25 -2.4 O
+(ross references unless the)-2.5 E 2.5(ya)-.15 G(re themselv)-2.5 E
+(es cited.)-.15 E(That feature should be added.)108 252 Q F1(SEE ALSO)72
+268.8 Q F2(bibcheck)108 280.8 Q F0(\(1\),)A F2(bibclean)2.955 E F0
+(\(1\),)A F2(bibdup)2.955 E F0(\(1\),)A F2(bibextract)2.955 E F0(\(1\),)
+A F2(bibjoin)2.955 E F0(\(1\),)A F2(biblabel)2.955 E F0(\(1\),)A F2
+(biblex)2.955 E F0(\(1\),)A F2(biborder)2.955 E F0(\(1\),)A F2(bib-)
+2.955 E(parse)108 292.8 Q F0(\(1\),)A F2(bibsort)2.5 E F0(\(1\),)A F2
+(bibtex)2.5 E F0(\(1\),)A F2(bib)2.5 E(unlex)-.2 E F0(\(1\),)A F2
+(cite\214nd)2.5 E F0(\(1\),)A F2(citesub)2.5 E F0(\(1\),)A F2(gawk)2.5 E
+F0(\(1\),)A F2(latex)2.5 E F0(\(1\),)A F2(nawk)2.5 E F0(\(1\),)A F2(tex)
+2.5 E F0(\(1\).)A F1(FILES)72 309.6 Q F0(/usr/local/share/lib/bibe)108
+321.6 Q(xtract/citetags.a)-.15 E(wk)-.15 E F2(nawk)10 E F0
+(\(1\) program for tag e)A(xtraction.)-.15 E 90.79
+(/usr/local/bin/citetags user)108 338.4 R(-callable shell script to in)
+-.2 E -.2(vo)-.4 G -.1(ke).2 G F2(nawk)2.6 E F0(\(1\).)A F1 -.548(AU)72
+355.2 S(THOR).548 E F0(Nelson H. F)108 367.2 Q 2.5(.B)-.8 G(eebe)-2.5 E
+(Center for Scienti\214c Computing)108 379.2 Q(Uni)108 391.2 Q -.15(ve)
+-.25 G(rsity of Utah).15 E(Department of Mathematics, 322 INSCC)108
+403.2 Q(155 S 1400 E RM 233)108 415.2 Q(Salt Lak)108 427.2 Q 2.5(eC)-.1
+G(ity)-2.5 E 2.5(,U)-.65 G 2.5(T8)-2.5 G(4112-0090)-2.5 E(USA)108 439.2
+Q -.7(Te)108 451.2 S(l: +1 801 581 5254).7 E -.74(FA)108 463.2 S
+(X: +1 801 585 1640, +1 801 581 4148).74 E
+(Email: beebe@math.utah.edu, beebe@acm.or)108 475.2 Q(g, beebe@ieee.or)
+-.18 E 2.5(g\()-.18 G(Internet\))-2.5 E(WWW)108 487.2 Q 2.5(:h)-.37 G
+(ttp://www)-2.5 E(.math.utah.edu/~beebe)-.65 E -1.11(Ve)72 768 S
+(rsion 1.03)1.11 E(19 February 1999)147.9 E(1)193.45 E EP
+%%Trailer
+end
+%%EOF
diff --git a/biblio/bibtex/utils/bibextract/configure b/biblio/bibtex/utils/bibextract/configure
new file mode 100644
index 0000000000..aac37b3d4c
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/configure
@@ -0,0 +1,2301 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.52 for bibextract 1.09.
+#
+# Report bugs to <beebe@math.utah.edu>.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+cross_compiling=no
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Identity of this package.
+PACKAGE_NAME='bibextract'
+PACKAGE_TARNAME='bibextract'
+PACKAGE_VERSION='1.09'
+PACKAGE_STRING='bibextract 1.09'
+PACKAGE_BUGREPORT='beebe@math.utah.edu'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<EOF
+\`configure' configures bibextract 1.09 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+EOF
+
+ cat <<EOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+EOF
+
+ cat <<\EOF
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of bibextract 1.09:";;
+ esac
+ cat <<\EOF
+
+Report bugs to <beebe@math.utah.edu>.
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+ cd $ac_subdir
+ # A "../" for each directory in /$ac_subdir.
+ ac_dots=`echo $ac_subdir |
+ sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+ case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_subdir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_sub_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_sub_srcdir/configure; then
+ echo
+ $SHELL $ac_sub_srcdir/configure --help=recursive
+ elif test -f $ac_sub_srcdir/configure.ac ||
+ test -f $ac_sub_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\EOF
+bibextract configure 1.09
+generated by GNU Autoconf 2.52
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by bibextract $as_me 1.09, which was
+generated by GNU Autoconf 2.52. Invocation command line was
+
+ $ $0 $@
+
+EOF
+{
+cat <<_ASUNAME
+## ---------- ##
+## Platform. ##
+## ---------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests. ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+ case $ac_arg in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ ac_sep=" " ;;
+ *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+ ac_sep=" " ;;
+ esac
+ # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ echo >&5
+ echo "## ----------------- ##" >&5
+ echo "## Cache variables. ##" >&5
+ echo "## ----------------- ##" >&5
+ echo >&5
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} >&5
+ sed "/^$/d" confdefs.h >conftest.log
+ if test -s conftest.log; then
+ echo >&5
+ echo "## ------------ ##" >&5
+ echo "## confdefs.h. ##" >&5
+ echo "## ------------ ##" >&5
+ echo >&5
+ cat conftest.log >&5
+ fi
+ (echo; echo) >&5
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal" >&5
+ echo "$as_me: exit $exit_status" >&5
+ rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:792: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ cat "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:803: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:811: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:827: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:831: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:837: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:839: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:841: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status. It doesn't matter if
+ # we pass some twice (in addition to the command line arguments).
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
+ ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:860: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:862: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+echo "#! $SHELL" >conftest.sh
+echo "exit 0" >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:882: PATH=\".;.\"; conftest.sh") >&5
+ (PATH=".;."; conftest.sh) 2>&5
+ ac_status=$?
+ echo "$as_me:885: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ ac_path_separator=';'
+else
+ ac_path_separator=:
+fi
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
+
+for ac_prog in mawk nawk gawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:898: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_AWK="$ac_prog"
+echo "$as_me:913: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:921: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:924: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+for ac_prog in cat
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:935: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CAT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CAT"; then
+ ac_cv_prog_CAT="$CAT" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CAT="$ac_prog"
+echo "$as_me:950: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CAT=$ac_cv_prog_CAT
+if test -n "$CAT"; then
+ echo "$as_me:958: result: $CAT" >&5
+echo "${ECHO_T}$CAT" >&6
+else
+ echo "$as_me:961: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CAT" && break
+done
+
+for ac_prog in checksum
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:972: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CHECKSUM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CHECKSUM"; then
+ ac_cv_prog_CHECKSUM="$CHECKSUM" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CHECKSUM="$ac_prog"
+echo "$as_me:987: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CHECKSUM=$ac_cv_prog_CHECKSUM
+if test -n "$CHECKSUM"; then
+ echo "$as_me:995: result: $CHECKSUM" >&5
+echo "${ECHO_T}$CHECKSUM" >&6
+else
+ echo "$as_me:998: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CHECKSUM" && break
+done
+
+for ac_prog in chmod
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1009: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CHMOD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CHMOD"; then
+ ac_cv_prog_CHMOD="$CHMOD" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CHMOD="$ac_prog"
+echo "$as_me:1024: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CHMOD=$ac_cv_prog_CHMOD
+if test -n "$CHMOD"; then
+ echo "$as_me:1032: result: $CHMOD" >&5
+echo "${ECHO_T}$CHMOD" >&6
+else
+ echo "$as_me:1035: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CHMOD" && break
+done
+
+for ac_prog in col
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1046: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_COL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$COL"; then
+ ac_cv_prog_COL="$COL" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_COL="$ac_prog"
+echo "$as_me:1061: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+COL=$ac_cv_prog_COL
+if test -n "$COL"; then
+ echo "$as_me:1069: result: $COL" >&5
+echo "${ECHO_T}$COL" >&6
+else
+ echo "$as_me:1072: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$COL" && break
+done
+
+for ac_prog in deroff cat
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1083: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_DEROFF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$DEROFF"; then
+ ac_cv_prog_DEROFF="$DEROFF" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_DEROFF="$ac_prog"
+echo "$as_me:1098: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+DEROFF=$ac_cv_prog_DEROFF
+if test -n "$DEROFF"; then
+ echo "$as_me:1106: result: $DEROFF" >&5
+echo "${ECHO_T}$DEROFF" >&6
+else
+ echo "$as_me:1109: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DEROFF" && break
+done
+
+for ac_prog in expand
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1120: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_EXPAND+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$EXPAND"; then
+ ac_cv_prog_EXPAND="$EXPAND" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_EXPAND="$ac_prog"
+echo "$as_me:1135: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+EXPAND=$ac_cv_prog_EXPAND
+if test -n "$EXPAND"; then
+ echo "$as_me:1143: result: $EXPAND" >&5
+echo "${ECHO_T}$EXPAND" >&6
+else
+ echo "$as_me:1146: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$EXPAND" && break
+done
+
+for ac_prog in gzip
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1157: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GZIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$GZIP"; then
+ ac_cv_prog_GZIP="$GZIP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_GZIP="$ac_prog"
+echo "$as_me:1172: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+GZIP=$ac_cv_prog_GZIP
+if test -n "$GZIP"; then
+ echo "$as_me:1180: result: $GZIP" >&5
+echo "${ECHO_T}$GZIP" >&6
+else
+ echo "$as_me:1183: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$GZIP" && break
+done
+
+for ac_prog in ls
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1194: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LS"; then
+ ac_cv_prog_LS="$LS" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_LS="$ac_prog"
+echo "$as_me:1209: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+LS=$ac_cv_prog_LS
+if test -n "$LS"; then
+ echo "$as_me:1217: result: $LS" >&5
+echo "${ECHO_T}$LS" >&6
+else
+ echo "$as_me:1220: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LS" && break
+done
+
+for ac_prog in mkdir
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1231: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_MKDIR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$MKDIR"; then
+ ac_cv_prog_MKDIR="$MKDIR" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_MKDIR="$ac_prog"
+echo "$as_me:1246: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+MKDIR=$ac_cv_prog_MKDIR
+if test -n "$MKDIR"; then
+ echo "$as_me:1254: result: $MKDIR" >&5
+echo "${ECHO_T}$MKDIR" >&6
+else
+ echo "$as_me:1257: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$MKDIR" && break
+done
+
+for ac_prog in groff nroff ditroff
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1268: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_NROFF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NROFF"; then
+ ac_cv_prog_NROFF="$NROFF" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_NROFF="$ac_prog"
+echo "$as_me:1283: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+NROFF=$ac_cv_prog_NROFF
+if test -n "$NROFF"; then
+ echo "$as_me:1291: result: $NROFF" >&5
+echo "${ECHO_T}$NROFF" >&6
+else
+ echo "$as_me:1294: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$NROFF" && break
+done
+
+for ac_prog in spell
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1305: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_SPELL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$SPELL"; then
+ ac_cv_prog_SPELL="$SPELL" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_SPELL="$ac_prog"
+echo "$as_me:1320: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+SPELL=$ac_cv_prog_SPELL
+if test -n "$SPELL"; then
+ echo "$as_me:1328: result: $SPELL" >&5
+echo "${ECHO_T}$SPELL" >&6
+else
+ echo "$as_me:1331: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$SPELL" && break
+done
+
+for ac_prog in tar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1342: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_TAR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$TAR"; then
+ ac_cv_prog_TAR="$TAR" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_TAR="$ac_prog"
+echo "$as_me:1357: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+TAR=$ac_cv_prog_TAR
+if test -n "$TAR"; then
+ echo "$as_me:1365: result: $TAR" >&5
+echo "${ECHO_T}$TAR" >&6
+else
+ echo "$as_me:1368: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$TAR" && break
+done
+
+for ac_prog in unzip
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1379: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_UNZIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$UNZIP"; then
+ ac_cv_prog_UNZIP="$UNZIP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_UNZIP="$ac_prog"
+echo "$as_me:1394: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+UNZIP=$ac_cv_prog_UNZIP
+if test -n "$UNZIP"; then
+ echo "$as_me:1402: result: $UNZIP" >&5
+echo "${ECHO_T}$UNZIP" >&6
+else
+ echo "$as_me:1405: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$UNZIP" && break
+done
+
+for ac_prog in zip
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1416: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ZIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ZIP"; then
+ ac_cv_prog_ZIP="$ZIP" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ZIP="$ac_prog"
+echo "$as_me:1431: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ZIP=$ac_cv_prog_ZIP
+if test -n "$ZIP"; then
+ echo "$as_me:1439: result: $ZIP" >&5
+echo "${ECHO_T}$ZIP" >&6
+else
+ echo "$as_me:1442: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ZIP" && break
+done
+
+for ac_prog in zoo
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1453: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ZOO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ZOO"; then
+ ac_cv_prog_ZOO="$ZOO" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ZOO="$ac_prog"
+echo "$as_me:1468: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ZOO=$ac_cv_prog_ZOO
+if test -n "$ZOO"; then
+ echo "$as_me:1476: result: $ZOO" >&5
+echo "${ECHO_T}$ZOO" >&6
+else
+ echo "$as_me:1479: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ZOO" && break
+done
+
+# Extract the first word of "cp", so it can be a program name with args.
+set dummy cp; ac_word=$2
+echo "$as_me:1488: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_CP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $CP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CP="$CP" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_CP="$ac_dir/$ac_word"
+ echo "$as_me:1505: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+CP=$ac_cv_path_CP
+
+if test -n "$CP"; then
+ echo "$as_me:1516: result: $CP" >&5
+echo "${ECHO_T}$CP" >&6
+else
+ echo "$as_me:1519: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "ln", so it can be a program name with args.
+set dummy ln; ac_word=$2
+echo "$as_me:1525: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $LN in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LN="$LN" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_LN="$ac_dir/$ac_word"
+ echo "$as_me:1542: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+LN=$ac_cv_path_LN
+
+if test -n "$LN"; then
+ echo "$as_me:1553: result: $LN" >&5
+echo "${ECHO_T}$LN" >&6
+else
+ echo "$as_me:1556: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+echo "$as_me:1562: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_RM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $RM in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RM="$RM" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_RM="$ac_dir/$ac_word"
+ echo "$as_me:1579: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+RM=$ac_cv_path_RM
+
+if test -n "$RM"; then
+ echo "$as_me:1590: result: $RM" >&5
+echo "${ECHO_T}$RM" >&6
+else
+ echo "$as_me:1593: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "sed", so it can be a program name with args.
+set dummy sed; ac_word=$2
+echo "$as_me:1599: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SED in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SED="$SED" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_SED="$ac_dir/$ac_word"
+ echo "$as_me:1616: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+SED=$ac_cv_path_SED
+
+if test -n "$SED"; then
+ echo "$as_me:1627: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+else
+ echo "$as_me:1630: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "sh", so it can be a program name with args.
+set dummy sh; ac_word=$2
+echo "$as_me:1636: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_SHELL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $SHELL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SHELL="$SHELL" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ if $as_executable_p "$ac_dir/$ac_word"; then
+ ac_cv_path_SHELL="$ac_dir/$ac_word"
+ echo "$as_me:1653: found $ac_dir/$ac_word" >&5
+ break
+fi
+done
+
+ ;;
+esac
+fi
+SHELL=$ac_cv_path_SHELL
+
+if test -n "$SHELL"; then
+ echo "$as_me:1664: result: $SHELL" >&5
+echo "${ECHO_T}$SHELL" >&6
+else
+ echo "$as_me:1667: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test "$CC" = "lcc"
+then
+ CFLAGS="`echo $CFLAGS | sed -e 's/-g //g' -e 's/ -g$//g' -e 's/^-g$//'`"
+fi
+
+ac_config_files="$ac_config_files Makefile"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\EOF
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
+t quote
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+EOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output. A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:1786: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\EOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+bibextract config.status 1.09
+configured by $0, generated by GNU Autoconf 2.52,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ shift
+ set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+ shift
+ ;;
+ -*);;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_need_defaults=false;;
+ esac
+
+ case $1 in
+ # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+ exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:1953: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ shift
+ CONFIG_FILES="$CONFIG_FILES $1"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ ac_need_defaults=false;;
+
+ # This is an error.
+ -*) { { echo "$as_me:1972: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status. ##
+## ----------------------- ##
+
+This file was extended by $as_me (bibextract 1.09) 2.52, executed with
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ *) { { echo "$as_me:2008: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=$TMPDIR/cs$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+ { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;t t
+s,@LIBS@,$LIBS,;t t
+s,@AWK@,$AWK,;t t
+s,@CAT@,$CAT,;t t
+s,@CHECKSUM@,$CHECKSUM,;t t
+s,@CHMOD@,$CHMOD,;t t
+s,@COL@,$COL,;t t
+s,@DEROFF@,$DEROFF,;t t
+s,@EXPAND@,$EXPAND,;t t
+s,@GZIP@,$GZIP,;t t
+s,@LS@,$LS,;t t
+s,@MKDIR@,$MKDIR,;t t
+s,@NROFF@,$NROFF,;t t
+s,@SPELL@,$SPELL,;t t
+s,@TAR@,$TAR,;t t
+s,@UNZIP@,$UNZIP,;t t
+s,@ZIP@,$ZIP,;t t
+s,@ZOO@,$ZOO,;t t
+s,@CP@,$CP,;t t
+s,@LN@,$LN,;t t
+s,@RM@,$RM,;t t
+s,@SED@,$SED,;t t
+CEOF
+
+EOF
+
+ cat >>$CONFIG_STATUS <<\EOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+ ;;
+ esac
+done; }
+
+ ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case $srcdir in
+ .) ac_srcdir=.
+ if test -z "$ac_dots"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* )
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_dots$srcdir ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:2217: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated automatically by config.status. */
+ configure_input="Generated automatically from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:2235: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:2248: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+ sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
+EOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/biblio/bibtex/utils/bibextract/configure.in b/biblio/bibtex/utils/bibextract/configure.in
new file mode 100644
index 0000000000..7edc3b1372
--- /dev/null
+++ b/biblio/bibtex/utils/bibextract/configure.in
@@ -0,0 +1,50 @@
+dnl Process this file with autoconf (2.50 or later) to produce a configure script.
+AC_INIT(bibextract, 1.09, beebe@math.utah.edu)
+
+dnl Checks for support programs
+
+AC_CHECK_PROGS(AWK, [mawk nawk gawk awk])
+AC_CHECK_PROGS(CAT, cat)
+AC_CHECK_PROGS(CHECKSUM, checksum)
+AC_CHECK_PROGS(CHMOD, chmod)
+AC_CHECK_PROGS(COL, col)
+AC_CHECK_PROGS(DEROFF, [deroff cat])
+AC_CHECK_PROGS(EXPAND, expand)
+AC_CHECK_PROGS(GZIP, gzip)
+AC_CHECK_PROGS(LS, ls)
+AC_CHECK_PROGS(MKDIR, mkdir)
+AC_CHECK_PROGS(NROFF, [groff nroff ditroff])
+AC_CHECK_PROGS(SPELL, spell)
+AC_CHECK_PROGS(TAR, tar)
+AC_CHECK_PROGS(UNZIP, unzip)
+AC_CHECK_PROGS(ZIP, zip)
+AC_CHECK_PROGS(ZOO, zoo)
+
+AC_PATH_PROG(CP, cp)
+AC_PATH_PROG(LN, ln)
+AC_PATH_PROG(RM, rm)
+dnl SED must be an absolute path, since it is recorded in intalled
+dnl scripts!
+AC_PATH_PROG(SED, sed)
+AC_PATH_PROG(SHELL, sh)
+
+dnl Checks for compiler
+
+dnl Checks for programs.
+
+dnl Checks for libraries.
+
+dnl Checks for header files.
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+
+dnl Checks for library functions.
+
+dnl Remove -g from CFLAGS if we are compiling with lcc because it
+dnl produces bad debug symbol tables on Sun Solaris 2.x.
+if test "$CC" = "lcc"
+then
+ CFLAGS="`echo $CFLAGS | sed -e 's/-g //g' -e 's/ -g$//g' -e 's/^-g$//'`"
+fi
+
+AC_OUTPUT(Makefile)
diff --git a/biblio/bibtex/utils/bibfile-reformat-pages/README b/biblio/bibtex/utils/bibfile-reformat-pages/README
new file mode 100644
index 0000000000..4fddab7e0c
--- /dev/null
+++ b/biblio/bibtex/utils/bibfile-reformat-pages/README
@@ -0,0 +1,5 @@
+This is a Small gawk script to put all the pages= page ranges in a .bib file
+into a uniform format, either 1234-1256 or upon request 1234-56; 12-12 always
+scrunched to just 1234; squeezes out spaces around separator; can make
+all separators one-dash or two-dashes upon request. Very very
+conservative: probably impossible for it to actually mess up a file.
diff --git a/biblio/bibtex/utils/bibfile-reformat-pages/bibfile-reformat-pages b/biblio/bibtex/utils/bibfile-reformat-pages/bibfile-reformat-pages
new file mode 100644
index 0000000000..6f8bc5ea67
--- /dev/null
+++ b/biblio/bibtex/utils/bibfile-reformat-pages/bibfile-reformat-pages
@@ -0,0 +1,147 @@
+#! /usr/bin/gawk -f
+
+# CVS version control block - do not edit manually
+# $RCSfile: bibfile-reformat-pages,v $
+# $Revision: 1.4 $
+# $Date: 2004/09/27 13:54:47 $
+# $Source: /home/cvs/papers/sty/bibfile-reformat-pages,v $
+
+# bibfile-reformat-pages - put file.bib page ranges into uniform style
+# Copyright (C) 2004 Barak A. Pearlmutter <barak@cs.may.ie>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version. You can find a copy of this license
+# at http://www.fsf.org/copyleft/gpl.html, or in the file COPYING, or
+# on Debian systems in /usr/share/common-licenses/GPL, or by writing
+# to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+function usage()
+{
+ print "Usage: bibfile-reformat-pages [abbrev=1] [separator=X] [files.bib or stdin]";
+ print;
+ print "Summary: reformat the \"pages=\" bits of a .bib file.";
+ print;
+ print "Version: '$RCSfile: bibfile-reformat-pages,v $ $Revision: 1.4 $";
+ print;
+ print "Description:";
+ print;
+ print " Passes through input file or stdin, which is assumed to be a bibtex";
+ print " .bib file, changing page ranges to a uniform format. The converted";
+ print " file is sent to standard output. Vacuous ranges are always compressed,";
+ print " so 1234-1234 becomes just 1234. Blanks around in the range separator";
+ print " are always squeezed out, so \"12 - 34 \" becomes \"12-34\". Ranges are";
+ print " by default put into expanded style, so 1234-56 becomes 1234-1256, but";
+ print " if the abbrev=1 option is given the conversion is reversed and 1234-1256";
+ print " is instead abbreviated to 1234-56. The range separator \"-\" or \"--\"";
+ print " is preserved, unless a separator=- or separator=-- option is given in";
+ print" which case they are homogenised.";
+ print;
+ print " Efforts, albeit not exhaustive ones, are taken to only modify \"pages=\"";
+ print " lines and to err on the side of caution (first, do no harm).";
+ print;
+ print "Options:";
+ print;
+ print " -h Print this help message and exit";
+ print " abbrev=1 Abbreviate page ranges instead of unabbreviating them";
+ print " separator=X Replaces page range separators with X, which must be - or --.";
+ print;
+ print "Examples:";
+ print;
+ print " bibfile-reformat-pages abbrev=0 separator=-- foo.bib > foo-new.bib";
+ print " diff foo.bib foo-new.bib";
+ print " mv foo-new.bib foo.bib";
+ print;
+ print " bibfile-reformat-pages foo.bib > foo-new.bib";
+ print;
+ print " bibfile-reformat-pages < foo.bib > foo-new.bib";
+ print;
+ print " bibfile-reformat-pages abbrev=1 separator=- foo.bib > foo-new.bib";
+ print;
+ print "Useful commands for testing:";
+ print;
+ print " bibfile-reformat-pages foo.bib | diff foo.bib - | more"
+ print " for f in *.bib; do echo $f; bibfile-reformat-pages <$f | diff $f -; done";
+ print " find . -name '*.bib' | xargs bibfile-reformat-pages | egrep pages | more";
+}
+
+BEGIN {
+ if ( ARGV[1] == "-h" || ARGV[1] ~ /^--?help$/ ) {
+ usage();
+ exit;
+ }
+ IGNORECASE=1;
+ abbrev=0; # avoid uninitialised variable warning
+ separator=0; # avoid uninitialised variable warning
+}
+
+## Would code as "if" in BEGIN, but var=x opts processed after BEGIN.
+(separator && !(separator ~ /^--?$/)) {
+ print "error: illegal option separator=" separator > "/dev/stderr";
+ print " valid values: \"-\" or \"--\"." > "/dev/stderr";
+ close("/dev/stderr");
+ exit 1;
+}
+
+function high_page_unabbrev(lo, hi)
+{
+ llo = length(lo);
+ lhi = length(hi);
+ if (llo > lhi)
+ hi = substr(lo, 1, llo-lhi) hi;
+ return hi;
+}
+
+function numsame(x, y)
+{
+ i = 1;
+ while (1)
+ {
+ xc = substr(x, i, 1);
+ yc = substr(y, i, 1);
+ if (!xc || !yc || xc != yc)
+ return i-1;
+ i += 1;
+ }
+}
+
+function high_page_abbrev(lo, hi)
+{
+ hi = high_page_unabbrev(lo, hi);
+ llo = length(lo);
+ lhi = length(hi);
+ if (llo == lhi) {
+ k = numsame(lo, hi);
+ if ( k > 0 )
+ hi = substr(hi, 1+k);
+ }
+ return hi;
+}
+
+match($0,
+ /^([[:blank:]]*pages[[:blank:]]*=[^[:digit:]]*)([[:digit:]]+)[[:blank:]]*(--?)[[:blank:]]*([[:digit:]]+)([^[:digit:]]*)$/,
+ a) {
+ low = a[2];
+ sep = a[3];
+ high = a[4];
+ high = high_page_unabbrev(low, high); # put into canonical (unabbrev) form
+ if (low == high) {
+ print a[1] low a[5]; # 123-123 becomes just 123
+ } else {
+ if (abbrev) high = high_page_abbrev(low, high);
+ if (separator) sep=separator;
+ print a[1] low sep high a[5];
+ }
+ next;
+}
+
+{
+ print;
+}
diff --git a/biblio/bibtex/utils/bibgene/bibgene122.hqx b/biblio/bibtex/utils/bibgene/bibgene122.hqx
new file mode 100644
index 0000000000..7a76b07962
--- /dev/null
+++ b/biblio/bibtex/utils/bibgene/bibgene122.hqx
@@ -0,0 +1,6657 @@
+(This file must be converted with BinHex 4.0)
+:$8*TBNGPEQ8Ja#jcDA3!8dP8090*9#%!N!-%fc-!N!4-T90dG@CQ5A3J+'-T-6N
+j0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bjKE'&NC'P
+ZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!%fc-!N!0b!!%!N!0bk@B0TD95CA0PFRC
+PC+@P!+@3"!%!!$S!3,(8RlZf$q)8!*!0#SDZ!*!$d!!181J!"0TM!!*#D@*(C@j
+P)-D5!!$J!3(Q!9B#@`)Z!q!!J!'3!`Mrr2rX`d!!!)!!N!8BPk@3"!%!!$d!!,2
++ahDef'[@!*!$FJ!!&BB!N!0b!!hhQ3!!29%!!"+'!*!%$`""BQpeG#"#D@*(C@j
+P!!'"1h4dFQpdG(Kd!3#3"!%!N!U!!*!*"hJ!!!("!*!%$`"#`G6fJ$abcKhKVjc
+6[JSlK10&A%kcPbq[I+%YCYbVfQNha9!Zh8X&)BS,$3AB$*`-Umm%-RpdPD+BX$b
+6V4SHXbY[SAS6,P32V0J%D!@mip@Sf4-Q@F"Z3@RZX+F!USbPCcGMk(XEk1RFQc4
+c+1mpM)TlA&H'qTl%83mMKRNL0mE2(BQ8SmlU8@j`$fG!Dk19,0J%fNjhH9jEj,3
+)d"IQcc@ZGH[T85Y2L*f*pXQje#F)ZALFd)JR"h5P'apb(Ye)PRm6`H2Jk0j&RKl
+(Ul9A$`C#Ba9+6QMeD@NjF9"KiS&A'L[8mIb4lDN(KSB!TPhqpe@,rm8I`TB$ZrT
+,YPL,ZRKlcEd0U1,P)[b-hSVQJMqb`+jcMQ-CJeHdh8h[i5kfF"X0*h1Ped,1&FY
+C`M*,BJc!e92eP!rV*JQHD%!Mfc#"+EEh50V,8MT'1a6b4#XqiHNDN!#-#H@M+rK
+&rMEdmLdkq(GA[S[GHI`NK+bH@@UKl)UI%V@`c`XcHVlL(p!1U"k6k*DlqdCTAK2
+pR&52[ERH29(,m%dlh39`P,AZ(lE3&BQC-FVC@KQBfkjiaLDY-il!K)Z58FLUb`q
+KT)9Qd!"#`G6!3lPCC'0T@3+6jS2'fP+3!!Fcc)rJbjkk$kXJ&qrq%6XH6$j!X-Z
+aTY"F"",E2I,0mME$m`")00A&aiZ5FHANXV9jGcha'UDkYD'9TI)A30#(@VdZ[E'
+K([EMb4`5&23D#1X(C5BM&df9TdhdHZTD$ma,rpV-AT+"q*YHPPr@&e1+d6TVGmq
+QASb(`$dLkGXZrZ1+S38(KJQ0c+@aLVSE9c5#6!9NcJ+S['r5[0iJPRl1(@6B%-E
+P3&A-L[*d4K'D(4h!h&"mHbIc+[kZl&A'3e%fUM!FBeUQK1@U!pr,eTQNF'6Fe@Y
+BdT)6lj3eSjUE,%lXLM"8ESmXfq9K@5H#)c$*KG5&dPdAEL'MIJTqZ%(F#!F3RcZ
+6FMUY1h&jTC!!dSJ3!+(el"HbU6[JZmr"Mj!!$F+)cTGU),,TaQ!I,c#JA[kbM2&
+PLI%,XY1L3&jGeGlcfJ%`KE5lPi8MH`GVF2BQ5)eqN!#+@H+hHT+0Vjk-!qQPl`T
+&*ECdl)G-*NKS9[X9+KB3C@`&RelblX!DG#Xd2'!hq2"TL[Q3!(I@&6#42JpZj+[
+cC)Dm1Jl,`0,83'+aGH@hBZ(Hd,BaGeIiPR!U1Brp98d&4AiH$BXQj65C3ClMhpQ
+iYjXp1+6+[ZiD4A$iG*N'*[(['jZNTF!VPUT2p&I)280aTpmS1B)4UJV$d))383A
+%-`@bq%SrdAf4[KDE%&H%aLF1VYDAS#FX2'AZGh[3VIB#l3eDj%KLE-P1,qJhlGQ
+*Z''JYk(AYpB-l8hMdqHkY&ULSJNG*QIE3[i!"Lcr9hQ$N!!KlRN[FV4LG[mKIiE
+#i-hLB+5,5`kIr*[AF[[`S5ST3f+2'lcHPqcXljCaf&%,`[fLdaJaYCNGca6jeVJ
+A2@LBdE)8,q-9Gq9d#P#jCDYa918DQh0DlP+1*d(4CY$UQUZYfPl(#UXAIXpfT+*
+1VDD5M%XILa5YBc,eM%",IN4eaY5+4qL3!!1N!ej,*Peil3I&d21+8J)1$EJ-KD2
+M!KM1)#S2MR0,V5L!`CEU2Vi@A2R@L#jrMQRkm%N,IaHlA`lL`k[m*5+lE2EQ18+
+TDfFeip5T60G&5'-6K4apRej4Y@Cq[3jJPE%m515+56)c"JM%4!l*D5TD4'NH2@i
+[(*Pd*p!6T&ldSi%Sq08,El"Mjf(h"e3UC#cYaq[qE4)hKlKZP2UTa+Q4!9cVLSM
+8J[BEPVTakZHK$dXmf1dH$NV@%B&`#*AaCi#P2mhpX5GIiRGIQ8HE9[VVd9J)mjK
+fQlpe42T`MTK2A)2$4f&)mpM*a-$(El`(QV1YS8Yk$&X#(G-&hXJL6!eaL$32Npj
+,KhdH!"&([F#8p)G!X%!0Lc0LA-[1hIVXc$Qfm*KVQXq'Q&Xe*3B+RIeUUDCA,!h
+DlSjXr$09#EDljYXclQN3PNi4TaceTGk0T6,KSe8re%9L&8Z28TecHY0mcYSbDb"
+5b0C%9cMM1JP@%j8@Qhl0[QLalCi%PD#Jb8ek1S0baCp[[5$l!hbGMr+0SaAE*@R
+N!JT$Qq-m5UXV@Z4[&aE6U+hYf+LB&J)GVPd)QHIJ8Sq#9!ErT33Nq*-()*A)Cep
+pTrlq%AS9mBR6D5b'VaiBFm8$!#EAejK'DRma&ZpSCr5i,b`2(D[-iN6Y'IYjl9h
+3h9pl)@Dk-C0h@A+c,E@M$PB*qE%d[bh*`TYMJJi2[aR(hK[+`qJ%qBU5(%q%fj*
+&lR(S66d)IX&*G*L56PJK'lD&@JPDR-[,VF#2MTpfhQYXRH`Je,Ed-jB!XC!!R@#
+Q!3r6f2NC(#fdH&dYAKfUee'Qi2*mkF"rGKH)8C-S6K`qddC,'"5Z6dDk%2LLE1)
+Hr6LIS2dFf1&%1HU$bT+-01&5V*Q9BHeff$dCiMBl!HA4QBHN$Dmk1Kj!66GJI4D
+iNBHXP2qF%PbJjRi`hq8Cq%1a3S3)+ar[Tk5M@,25"3efNT*K)`jSdQ%bcJ&6NF$
+kZ%HLba*QN!!flEN3&1943m8YhYCNX9N),#!ZEbVeQJQCS92cTN)!m0LF`$++&LB
+"kbjQTLGfC5IMcLa3FC6b"le*(G4IAiV)Zk$ED81MNQj9#8dKID&H9aBp2Mi%L9S
+RP(80A`h9je(Rb0a5QNclXq03E5p5p25)D[L'PGK$,(6lLE*lPC`bCj`q$iDi(R#
+!R6jPCX,[+R0XNIKD5d+h@#r6jCB`K&+b8ijUXNc'"Bl(i[fai2p(QUH8M#$-$aE
+fU"-8p(PKJPmK29fDrfCZl@9[emRQ4R3Nk&K*-h'3!15R2,5NT2iP*4&*-L!*q([
+R5D4@$1Tf%bGR5KMEH$Z-D3D2$kFVj,ZKL%9*NF,(Z'Y9F8b5H,6pb"6k8'6d8fL
+pbLBRafqUZlAEI+ebN!$!YTEm1[00Q#edkXd-k#3r0rfcQB9C0c"UjDra3S[Z&Qa
+Yc"Dd%!R%'ZJ`"%a!cjV68PSS!JT11XE4$hrXKCLNQi($NFeB"6#8G11mm!MU$(5
+FL$,,XD"iBl[h"E4RLBib#-l1@%*F-+rZ8JhBH+lm@eC#N!"pr2!R&FTKV))6pr)
+6$BlRLV"-DD'Bj1F%6lA2*43hR[MCLDPP"CVB-QA"jPI$ZiKj2@r")"XPaQXkFS6
+9)EE"BS@6)4RS[DRN(Dj!*ml[k5-AS'Kl@fEkm611!c#V0RY[Jk'5ZdJcVQA)Ijk
+&d%I5*2G$2EqmDYS6*934ccpZYiMYMHpZJqb4DCp(cL1i`P5a-jQ[&aS#b29@rab
+`iJU)e[)0ZG*mmZ5TK,!((bB!Bm09lk&'P)8!lj'rj(q`8GR2IPbc2F3*Vj2HhPp
+fd6dRqm#NRF$PZ#f`V0%BFF2cahGPUe6mG++qkB8rbSMQZ35R32aMpbFFS,qET!`
+q@5d4VTRAI3%fcEr-RD"U`YPMqjfT(%G0j6&G0(DXQbeT1f3+@3K[c9P84$iHF),
+&D22Gq6*BLJUA0,5)l$FJm0Qk'[#JcZFH0+VGqCe&qcrX40#fr"61C-i,)`i@L5M
+Fmjc@+l#cNYPbfeiN[0e5hN1L1G8Z1V8,N[*ja&I0eddX4$m%d*Eccice&&DA9kc
+d5C[2qK,6$R2+AB0A'Sr&PJ4GM(KP!)XC,5*TQJ,Re4mVEBmJSYDT52qYp+Fh998
+8Gd2Dl$#,@ba6-M*f0RFEBJM(PJ(i-ZF*Y#1,V"C3VFlj265N3J20m6acmNG2U0&
+J!d9lcdq4Y`SBb"h`e8Rb`#YaEifaXm6h06AdrUG#ZBJkbGqHp2q+kDU'k%`"6HC
+B20QXjQ9CTVl,PYaY(r*2Tr6L'A$UppKT#`"hK+R5G$eC%#k849[*!d-r)UIF)Hb
+C)+51`"iPPT`'C[&--(@EZZ0&JREm6k+K,4*KRD5E6l3K,T[DdJ6aj6iqJl1SAcS
+lkBbQ(X98CCGH*C`rSJGDVEFp19e"rUIfS4L$q%k0*5"BAh`e10ZXNZ05ZT'BLjm
+6bYr,!eMpQhG-8Nd)FC)1l(DA1-mf@l,)r!*3c`%QUjjEKb,T@YU9-VEA#A69HTT
+JPaN$C9K9h3-QH(fhckSJHSeXH4lD)q"FI$68&ED8r9YfXKC2A[maC%ZUefjeeA`
+TXh`D,r0X"`,8(Hmm[k9[0LrI5j4#cBjc)##jrJ"42f3i(8I+48a0`L+&q&LY[fl
+*S3rU(+fDG'0[26JM&Z9YU2f)"eaRK$,3%-RI(Y05)$C`Ed&1(2-d3e0k'G242DE
+4&+(kqaH`JR--0M9C#`AHYN8h&!5''+&m@CXjFb1h"rVl3XaP+5&$4%T)IC@2i%6
+@JNh,IbYd(KL`BXJ8`5HN6,$SqIPml[pEPJHbBa2Qmi8clEKpdaaii,ef&'DY+VJ
+R[h##Yk2d`6K6Gi*f!0eG$aMm#1+@I3QUN!#0SGJ8(bdp0piclQN'qk3Y*`##LNT
+2bV'N1k$Ja3*PP#bXYD6K*`IhNM+dFT!!Zj(hJ,b+q#e($!9QeikMKEl-hcT&FkN
+&TR5`2edKHp1a!GRdbRS[I2K*a)JS@fVEqC9)@EJa1Uh`-NUdk6pjpPXiB+JB*(l
+1dUaQmEUE"6NcZYBPFM0`Yf*E,L!iP,d[U2KIAJMKU4Q9!ee*eqkk5akDkQ$(bAA
+cGM@@)G8G%D'Zm!@hF(pV[6-8`R'MfT'f(YI$X+T-9d9lf-F@H#m"T#2P09r[45T
+M9-S00Q6-90#SYeVMEE[e8eJ[AkQ,@Q&b!XT5(H1GX[Jl#A9q6JN'HMK$H(VGE&D
+@h#T@HiePKbh3BRhdhh%SU0M$NlVVC5#[@TG2B!i1MIQLVN)$ZkVPa2dYjq5``8Y
+Z6[0e%@`fH`pdb%ki4,A),A2lZ@J!4p6aDIR0@2hAYES#9jrL@*%SeSjUDk-eUC&
+8D#U6Y35'I&Ec)pUeFqBF4kkED"21RV,32mBUGi3T%-+05[[CaF!If41qbYcM39N
+J%",J5Z(X)[i(1DY(+HA8j#Xl@iXrJi6"F,r4VA-BM-3hLY+&Jal5VKERZ)$bp6e
+`,dm99EN2'AffXhC&90&)`Bl'%&bPDh'd*KkLU9q'BHqR,6rDVS@qq81mNmRV6P[
+X8RKliDV'!!kX8C0)"#M9bE5FB'(kk0dDk53,`lH[RG9jL*@pSBS54R)jS14cjVm
+)5USJ&Z"qmDcBM8TbfPUb,6[#Z#4c6-[ae!QjhB2D+%1amqmF`A#$pViT8Kpdcj`
+DDhV[cpR@)Gc9e9j-%&61!0E4XTM5HCQAXYZGJ0FcmmhM9NlIM@qm[$6i"qqifE[
++B(ZpQQq5$Fh'jPX#V+)BIejY$ajfP+&jYKUCcD&rJAb1+"eXTcSV)2VHqrkc(cC
+'NedQ[Pk0J2J+NHYApeS`le3H1[AlV9!dGDJkmaDrY1BFCdUd0UUcQNrkTVUV5jE
+&LPY)qXb$EYkqb[)QaTa4&@d%6pZY$$NKhYm[NY[hGSS!*8G+&%1)Gk'IJ6!P0q5
+9rGrYm1G"qid6Q6DSedH(m%e3*H"Z[VT$)q6$@cH8dB6jB4ad)ZQ``AH[iSN!X#[
++S9HQ9h0k,VC'PiSCarlVaKqPCPDj$`P0c5Q&'P@Ib$24#4pCpb#fA[jlClQj#1V
+eYmJTeQEeKk'D@HSD1"%8-iAII%%N6EjilBh3@)BJY[VD'YGD4#2!PA+UfflT1%-
+FR`'%+PCT65#S@%M%9hXcPK*!*[K9DI--Df@$Cb`V#4@1+4Z[Cj!!Sp4[JMIFbbr
+#creN2@m!kCYr*0Fl`[kikeR!c1PT$T(qr32JJq2"Aa,9A3QdC569I+Tq"q%"G6+
+lA6**(jbq*`NXrNS4XPGZChHVMP`RH'0r-+p'e-Y2Njim8BC'i#ljZLa[JKK[H8H
+mK!Q3!0%mVl,0f8NVJ#XK-`6AXL"DMGCm`fPHlhU(X8LITKFcBFr,rH5N4TpT%Q[
+Urc"DRpq!I+H(YUT%l"Qm(R3Lkf-EYBT[+Q[pYh!(+5c@24*$3Xh5DZ6-5P*GeQ9
+$GJlY+3`$KbZ04&Vc5iKeqR9bTX'#+jEj-qYE(JDD$2-31r@BK`Y2XN,i`5c(XcB
+T24rBpfmpKAX2IbIYUM["D"8Ueif9GEm5LQ%bcZ%kUkIb64fk9a4FibA6eXA$M(e
+rE2R[AGc2[Ub+%+$aT&QN`$`B,kNR,`!UE3!#V,4BJ95Fc$h2J!#BaqINhEj[&XN
+3(KMCU,ldSp2P8XeIB3%e"H*[l(Kq(Cp8TEBfm,1PNRD8&BqaA%XpUY#r""TF%H-
++-l2NrlE1mDB6(5a1l@C8JrhiK$5"m9Z0bcT)-bKN3#@9`Er)ldlEmaeBMHL8`1(
+%E"G5Kp)0VR*h'AIe($)FVe'C3KGp2eV)ch!A[@SBpj4iR#9pER0`8`MY1VZL(p`
+G*m@BZCV%bJlh2#9"H''kIV9Gk&$0rML,XR9iLbBRT*3F&0BM8!GC&NP-c20(G,F
+X4ELdpd&fiV@Ea'ZA0@E0@YJY[3IBHF3YR,lCi42IcIT!b1"YJC1S@cRF"H@%TD!
+hG[l4flBG-Gj9C[-K)C!!5T2hh6jq-aSAB&k1%*iCrY9928#0*Rh+31U-6BGPR)1
+Q1IZK0cXA*LUhqf"hj1cQ192-U1ESIL"dGUNT8ZS9jG&rUYjaNmZ,J2ha"5(&l0e
+@)I[SeNTd9RjRMl[q[m3N#!,TI!*@cQjXBMFD'2bYICRF'3CU!"[HClM2`"DPBlQ
+LVAdDVj)DjK@QV)Bf,8VlVB*PJj2acFT$[EIDb3RS5ULC%CpfceXl9fXCG9JI9Ne
+6"!LYD0ekLM8CeHcRY-IYf5@D9rV'#SIQHJpP$""&j9#"[P2fMMlcXVXdaJ$3-@C
+k4KfP+Rq8G830T1b2k0KVGG)'NN"$e6)fBB+$,Lm8VTRVKHh,&6SV8%[9'FFJ-V5
+Gb4@T"R6![8b!m[A!TC!%!3!!23!!YJrKTEB2iDB!N!23!!6E!`#3!h)!$9[Z!!c
++&`!%6kB!N!32!%*TBNGPEQ8J-5ib,M)!!@"j39"36%"(463K!*!%J3#3#S!!N!8
+BE3!"3JJ!!(9S!*!%$`"#`G6RibQU4&E3*AL'K#Q8QEqCkp[JAZe$iI(aRXC(ZLe
+cVqlaY'f'3eQR)VId,1iCd*V`JVLYiipd'@[l@lRB&BjibR[[mC+f9r31BNPf!%#
+Rl*q$'48pqd0+-dXL9d9q6PR5B4ee6h,'#T!!cQ3&,ZN)29G!PiT)0GBLA,UQDL)
+UPM,'J!0&K+9`,N8I49BBZSicPd#mNbR8V%!V9K*B&pXB&hNp2TadD@MAJ(9#B5&
+c+2A%*BVU2R6IEpS1llB[ReZ+CNXC&Ne)[Z+SKIZFALkhV&X#3iKmHPT4Lpf!&f[
+f"4TSM6&58&qp03hhV'M6TIYA#H(K`lQ)+dp@#3SSJU(-+T!!&JJiA+m9H60Fm2N
+@5lh#6*@P&B'KH+j'T5TBFr#X6CHpI),)NjY5F2m5ZP,%+LbBZ6*H#+H,D&#T3)H
+)`+!Z-51,-Q@'TFa6cNJUfF$!B+qI#`b!GV[@1I5k$HqH-I5)!KS90IH"Iaj*X0V
+5(A9V8!@5DbA+`iQjS%d9Pkh**e5S*mISD&bY9p8+r,1N%qrR0B#BZdB&KjIVY3d
+)HZ'P*`4[Mj("*q'Cd(q48U1EQ@k#NX),'jTXdIM(R8B3,B**e9*J%la9ZU[BB#Z
+KpY$Sl"q`N51"DaLr!A8Md0j`%EKGChV'Qf'PiraMLB*&cU0-pPL(+S5aCmirDa#
+GKp-C$N,+),hKE2GQE#BjHU),bRNU56VMa-G`&LE4lAkR(KZhaM[)-+Z1c9VERKe
+KKEN[Kh`Ykba@QT49-mJ'XBM-)%UMcIS2Vr+RcNZVl'paUJ%#E(,,&YGI$d4`UN*
+1#$qKp!ITEf!&`[UVbH0-)Y!0@4)JdRp&(N9'IF'"bZN,NF!jiN@2bK62-'+cV[+
+PPhqPM#YM#c"JXE3X4#qHS5)H5@DTT,R*h6QXa$cmTj'#T)P84[9ZUHZ-T$@Pp++
+%dV%6N!#+9INbkZ!Q$l),'jX4,d`rq'J9i5NEk*)CC*aMG&U3!%Bc-QaNpbfF)Ki
+'1+i%)4p[HkM-HHZ&1GLh@3@SjIa`hfmaX(JIEr$Prr$C0akY-(i"RQTq91TNL)d
+QD0A-j5D"1SS23QEDI$K,iR5jK#,dCSJjY!c*VQlV)rZB5Tm[PSRfFlr9XBNVpGS
+,*#PQQ)5-1KN2c"3q,%URH6Vd'mPfDK,YrKR(Ldk59P&@E6d@823*4p&cbE`r)a@
+*Mjcm,Ca%hcGD6fP5Qhm10S0)3IQi*T4XfJpA%EA1EQU6rd4BY*e`*@Q(Y(HTN!!
+%VhEmPEM,jCkd6GMKe31Drb,KdlbQ"&VZ9E!1#T9$mZ80m9'G*DkQ"qcU#GqKrdN
+dfGlU3CV')'YXjU606KSl4'F[51XQir-Q'@T,i8"4$p3eZ(l950VF4jSmENmqD"c
+Ir#Qb-G+4m'0S5UF!PMdXF-AhjZm!IR0*`#3%,iTVbQhHHXdABkQdCr91Jf(bQB$
+6XBYd++mj8)l1*6TR#EbSq-IIIJqACP@P'SGBDRqJFY(S"kY-e50QZp89268VE*j
+i4r8pDbk8pSi#!A6D%b'9c*Ck!aF@)`A@i'D'HH+mf!19dPX5iRR9!Gl"rVa4q'9
+QD,@TYd`MZ6&&D+N[@!T3K04@cZJ&Yr+djQX`4M*L48CkmSfED*9Gi6Bi5NT`Y#l
+#5Cc+[8Z"F`%'p&!)F&GL6$pCfD55plqdG29F8fAN`#Zc`M9NjA1(3$#[38YSDYr
+cUd33repGrIEA$(GpAmqiR+1"A`k1`M)KEb)6D$P1a2B!,I+pFdJ&&"3'2(aPDlZ
+blRKNarrkZ-jqEm#aZ9PcZ)1J(`b[3`,EEla$V+jkS[j,X#MjAE!BfaSIh%p#(ic
+FfI&DZfLj4C+`HF3M+,1RUH3Ne4#pLR'`aXKQH$PiiNFf&A29*aITDGUr`kC[%+`
++-rALpHkDq*!!#eZC3*(dNLaL&eFJlk60H@m#G63i-6i5X%*P[Ajc2!Jr4MFF&pe
+&#0m8e,9PMGL8j*IC4QkkChDAAd!%Qj&DP$9jqaApm!M3VG+JM,k*))i0GU2$c6X
+m!cV6G+e0+&4kHSTq26Q#Yqi$T`F5&iT%l!4!jXl`4H`DIhpdiRHM1KKHH@"H-ql
+#rLk59r[j&'K8PP4rjED("-UEBejM1XCaDHAiKfY0[AEjhG@CPPk5Gj!!@Q,UYD(
+fjqAS)93Z*rKHIFQ$paC'p1d[')T!#2aQ8Nq1'X9aCkYfi2k,'NkCYBir384[V4Q
+@Fkj$!XJH+Id56@Y96JR$')SPZU3Tm&V)0a``VSpbM%ff#a5qS5mZ-@kR!UD62)V
+BGmlbNG6QC")32Y0b)"b3!#FL1E+m-qk-IfVf2d-A!U9KH!PV4F16)AQ29H*5UR9
+8Hq8dSrV)F59ire5,!c9"rU01!XAAb-!XaD+c,jUAPA0lra8fRG(8&Cqp+SHpC!"
+DQT+0qdKipX4ci4k)R1XZMaV[0AFXT)#+H0mc'qQpA+X+pYRa@0d5A'2B#KCYTTZ
+``LbG(d6i0@!d`cVV!@AD!jk@)be)Na%)9J*mk4Y!MG3%VrJ`H-Jb,9Q#cQ@R&$P
+AIN(HmQ&cADK9"K*(iP1Fp1#ae``$dLXTeN23(c%hL'ajf9[2aYN4#k22Ep-q$FF
+QPHpFQRM)3ACL[%@-CZm9K+`C6GIelpmI5MH-b)Tclj1Cb!ea3UCq6@Ieq(l$3QA
+@fl0U%M4I"r3[IjI2#`qT6r8T@fhF0QZccApMH`dD#S+rVl!+P)Lh%-pbdK`i"X,
+[Zj`R-)SBV)D@$6dak*8UC461Ife!kefe)MjF6qQk%#VjG%XYl8,&H5Q1c#FSYc)
+G&'b#pIQkePVISd4eFHka(BKG-p@RVabYGqk&N3L(4df0lSCkbj@C6-PIS0F3Hfh
+Q4XGd`fmGT(Klm4qm$T+9(I!0#S*iXdFD"jp,mN'm4(F!"A9*R4F+FB&Q'dZKp%`
+6jDK*DDGM$2hc`XdMSYFkB'QXlmbF6*bIA%hRBRV&Eq+m5@pT6bhPKi*ljeeTf%Q
+Tl2T1fqUJelh#)GDBllbE64lXVY9q&8E!RhZ+Hh3U)m@GENc%-'H23SJaQXee+2*
+B00NBXG49pAfh&ef`*5@12&N5%F'D9+r5CHc&jPKJ$G5RFkEH%%9Se"i!C8d1pdX
+d@XpXfrd`dL&B-mk8SZ&d9N62C`'(5R5Fb@+RIlcZ(Pje5VPG($6D6U`Zci$`V"5
+kV9kQmiBm&T[ZNbAaa`i)k4ErmXclq#RkqRe0T(*aH0@C3qXYc[Np5B"G4PSd&+T
+@l49BYae2@GK-)J3Gdm8MdXZ*MM85bG!@+*FNH-LqN8H(-@%Dj'`-CP8E)c@%)HG
+KAK21XZ*)MSBdqXk%krYb9RV'RUQ1'4bF54m*Xkc38"#6Th@cGq5!@FTa+V`-!I2
+,#,5$$k4lHed'UU9&%Bj9ljAPEirZiJ1Z61`rVV0cHPkc[A!R*T6T3QAj1kNh&HJ
+ADpYLe[Fmr3K,J(@-+*AU&[V"bD*$k'e583,FIrCL[Kb3!2h"k)49e)6dK@MFl,`
+Ejh3XlGc8[JF$'-'XGcr`pFH26dm64+R)VTp#eEM8X$i,"AP,kVfV,RHr@l5Hbb$
+eSYUY-#rd,RpP$Tj!I@dV6'8Yl@2aREQ,T!EP1#Y,LB+@P0qr$if2ZpY)!l"Fk4'
+6@p(,!kCdXpJ*Y'A93+MbP&(!4%R'SS!0"8K+`MVE#fIDeaCV0P&-j[(R,"mhXGG
+ZKTAeD,q1a'XmbDA494(4DUVde6SDf&cY'f024D#fd'Ef69!3%(m4a%TX949B[C'
+Z5B!R!e%i)S8e)8)[IP4GUi@YSJi1B1%8J%dA0CKU-Nq"Aa6,4!"RGb$B#8&2G-)
+EI$1UfJ*9Mm2*'L9CjR2[rLR-[aRk*2%JPR-e``EfceSZ@CH'NrcbH-'ij[CdCRZ
+FYR6Amc2S#lL#"P-TAel!IEplkrNFBXjXR,@6J#r%&)`h%!#h4@d2Blaf"+EP2FM
+iC2IH"5@%U&$&CT'r2"G)I0*VaEVkBGm6IPY!`m(2bU&ScrKBJ8f0*2q[DE+,Ppa
+(*`Q"ap@EP-%,f5UC1E(el6"mB%2Jh3kK)dcZlQ1BUE,kErf`!`5EqaM$(-!0c#N
+l%`(Klma96#(jP9PYMAem*1JM!4&rVR,GLITJqZ[m@ZC3Tbm!2'$[4650def)BiC
+rq5"!qC18a@-k)P4BKpd9lcSjp%&IlrCZNcfH[Hjh$K-&5Mj2@@@TE[S30A#YF$G
+#)-`ZRbNQDCZ%#h8,qBc')Q8pajN4QTYLQM`I1mrB@cm'AU6a2HDq6jNi`NjjECL
+&$XD4q-qXUBP"V"MIP#@$1@!6kiE'#%cI4Gl[QiJ4@#A0K(XC8ahP(H#EcmpI0-$
+JYr28Y3j2P)`"'AKQZ9Eq5KB`He,fFmD*&*,,9`@@$4f(@fKN95Er,%m,"p1M80m
+pmkeGGN1'*3"mIKN8Q4[eXUZ'UN@I&3+QC$aKPr'&GS@+qUCMp$H8r9QAp+RH()c
+M6j5VM"F#!(hhK0DlMmi'AJkM2BYri#(%ShJI*VJI1m`R`bq+GfQ[DG%&U%pPe1$
+D-QkiNZRS'*!!cmA,NH&,,N4Zd3#(3!"R,HcPYd#`SBdLl3P@Gh#YYM&(C-+m"a0
+Q#TM&"kFHCJG6fVh)VLJ!(LQT#2YZQ35ZaA5djHT'jEG!bDhDmqr@K#c+Hc5AM*+
+CJ4RIL%FiAR@D"Pf04dAeM2`2YQPL8Q,!KrD10Ij%d"+lKQhbFYKQKde1eXkqZmA
+b(,$LQqMJT!3'G"LS[b"!AJeE3qCPp)lRPX'q`Sp)E0%YGD"j`M'qiM@m'&@@EdQ
+h&D&#hAqQPCJLAATrDheZ1[+CeNk!`cb&pU'H3#QHdhRPCP*KG!cPk1YP1i'eHm%
++[EC5TchDkf@KUhma1V([hV2IVeZV!45aFi#T1Chj+$jh&)m5[rf#J)E&+Zjp5h-
+$r-$6hG#km+eG83LU-%(BM"VLU8(N1KZ-J%+8QJ&e`ZIB56'Z&Y+jD[0Iq,6bbX)
+!PR&E(dRji4ECRfX"@(reG-#X+BJ!85Hb"2cN()!*j!9AFaQE2h-f&AI)N!#QTU"
+'+lNbSA`e8'!Sijki+-AY(A2lj3"(A3N&dA`4Y2(rLdH@raJih)3eIBmq%j[)hTB
+TCPMI#6f$bkdPpr)XX5i8!6-&kXREqHidcVS)R$ZLFJAd`FLX$k[5+Q2jS+fFTBJ
+%Hp8ciIR$19D8KLf44*rh(aI%rZ$+c+j'SSLJ'[T%H[Kmh8-riP()8rdIP'i94E"
+eaS'DG+T-H5"4QYqX3(T5Bpk[!9*8)TYpD'#jMdb%'E'%1j!!hq$KE#JIE[1"4Vr
+!%PdiZr5)KckaiS#*D6@SFLlB6NkA2)d6[,*fD)#BlFl$bbNZdZmCZID9SiVCQXX
+bCbGP2%Lp%&#LHfP@E%*m0EZYI@6T-DNZbU2`CXc3(EPL#!9GG`fb6c*0m4k*2+3
+k(+Yd(GFD)`[1[0b$9+eb"mV*SX4B*[9XeY`D4+CF2DrpM2',rZ)IHh$3a(BQ)cL
+k%65R5jC2F!&$`2UXR+h1C6VVF0[DCCTGqaQ&M#cQ2DBD3"hMNH2Fj+B)Aa6e64j
+a*Y15CVYiM0+2@#-TkclKe-k4$Q'[+Drr9&"jDYPHX330MAHdh@P!hre91b%#CNR
+f-d)*DR2ljMZ)*q#FPLBcZfT*b5XGYl0UN!$Qq$X,fC92N!"q0erd5Hh8*BFhp),
+)r8#`qK6i,XKlYBGL'N9ZPLFDZY[YQI*A#9&!Z-cacbmBe9`Z1dA#eKcS9VLPdf4
+Q5`H6YBrRZTJ$hNlkV8J"N!$SM[qKBTa#JDh-Fl9cZ$'QYY3PBfD&Ek1Gj*Sf'MJ
+U1L,abU8V4P+CIe+rQekYc*fEE0[&5P*jTp$JZm5a$1ef,PJq5&IbZ6qm$HQ3!-S
++LA#LPUHl,X!-"1*dr891D9UpF4$'r44Y51$S2jYD0-cfhcb,mA`2V6BrP5#a+fZ
+pmEak,k2(K"`c)H)rACf9"KCVAL6Rfj48MDGEe"SRTfrE!0SVp2!aEY'M"0mr%D$
+QFeM4%#Ymmle4-B0ZD!Mk'jSk$KEKI+DJGI[2AD#8b$Lf(,6SCLl92#@CNp@@NVK
+P+h"3%)k6aS64PaMQj!aBk#%@#JfT[*Cc@ec@P,ej5cAHIIZQ)rk"r#m*eT!!qre
+(ENGX@@HqX"265qB,D4JYqTN6Hh[N"`DdiiqkeE[S+qP81TPHL+eMPhhSA!F%NBI
+DkQ0LacQ2q8kFMVC"@UPi+Vf19H6TUBFARIA2Uk-(ALKklDA,ll+PDHZACM-UAM"
+i9i$TNIe'kMNR&1[PD%`NAEDreSAPYhAR&-L#Z9p[8VA#I$Ur86+!44fYm+CEGSU
+5r%ELLeVi%IdqLpBKPXXFP5rbDXje[0)Z4BY5RqIfQ@'"FZI14dA@j8,dj2$Zd@i
+KGlkQ)[dZllcBY#QqYaBkKa@fM3P$-p!L!VKmG`Lc[H%rQS#8G&NHjEZS56Erp`c
+YJ1r6SXZ&[Sa)53dMlQ1MXRbXdRCrdQ0IVlUV`[2V6Pc+Q$Dc54#aX%rL[hIDHDB
++CC+HSFXi#U@h%X93jXIZmNBNYKHKepL+mTmCXLabm35@H*mKSKfF)9C'Y3C+pMV
+1RT`C*m@!M0*&)df(i52pH1ce'hNNFp`GV`&Z0NGfESGf)p1F)TTLXMCFQEfAlPM
+U*A0Z6D4K0EdDP"m(iVb--*0&f*(e$G(+ZiNVbb@JqTfc$XRh@JGKkQFSJ`k9`6a
+L0[ZG*PMcr,!jCk0*l$[UZ%@C%10I*r4NMkl*5i[**X"Y%8PP)5hp#3"0m#``%)V
+[Ub[ZMq!h@kT4XflkDRbpf9SKBKlr0S39hPKi9PRe#EA5NEQ)RQCfdm''EC4lNmS
+S8('l[Qd5#j,dS)f#pHml(rCX!KppHDCJdq#!G&86pd[3FG-2('jAHK@NTDQ+H$A
+[12Ubh#Ri#HYeT#'3!,#pkq5@,TiA))SHVhACcIr*T#V9*a@FKdMl@5MMT0b!iJ)
+2!M4[5B9(%,X)V+2h6F5qA,L"*riFU4a0RVc%42+@3cliTG4A0hiNkm*l,-5VPdE
+j'N+&BbFDT6Kb,X3prKqi9Me,-ddYL"j@YabP2[+,)rZhD+23AjG,R1hb4DYbp1e
+HpA`X6H,F5,"B&2@0#E`,qq+pAIeeURQSNrY3QQRZVBM0RK)0Ff9aaMiEULp&N!$
+Rpqq@JrUM%8l'3JiC0)l!)QVr'6QBVB[@bZ(bR&miZL[Uk(CBLkNa8q1B"&[jj"$
+K2YUjNe1$q9RDGQ$Xh1HF`lqlhmHUG3TZ%#`ChiVcJ1mH+02++IafPjjq#D8VB0#
+$FqI'fq`GULj#YXBMqCdfViBK4i4eJ,XAXFi$U&dH!B&85KjNm@BJ)qLl8d01MVT
+lT6$Y)CHA1+Y"m[MJjm0mSSK%mldX"+HhNeN85-QcNA[mQc6CKflDDh,HqI&11CZ
+`0mAUZe,&Tbf#)pEaG*8GK)5*mV+U$I8,-ZKSr#L"qCT@NR5pm0ZKi(q"JELF5AL
+VXreRb2UZdpSUJDN5$BVhYH`6`-Tb)l(Fek@U"[aKFbqZ"ESLc1i%!)-$'0"-e6H
+IDm8Gjj16SmEpV@D6Id,D+A[h[JqMH,b%@UVr9&$'q+fU0hq"5`beE)IC6`Y,F'#
+9f&"S-MqK6jrS!)#CLTD0QI[)iVYK&HEed32Xk1L,p5+pkf)'fDB@Fld[aC!!))3
+0F@i*l@T-9@ci8R35X$4i+TPKh5Ckjih%%MI6EXhZ4*0RVf6bi"QL1!hCN!$`04f
+U(6(0`SH2GdZaK#S65k!kN!"h-[Hd%@p'h*fdl*GF1kFDYXSq'kY&&(Zh!AhKK'!
+[NaGZRbNbkm%QMCfXJKBfNKPa"X-Kd,%ZPdCi5(km-D%IReJh+2IZFdQLkZYa#BD
+i9A5hX,%"&LII+AGCRjfQ%VB6a2jaK3Y[JIb9S"NADMSb2#lhC+YGT2J9(US4q+'
+5*S&e#TZcr-)1+,GVYk81RlYaM#Ye6ELBJcr++F6d,S*KMaK%IAVBcXi#mCU%32b
+"6-KaeUa5[H!LN!!D*F&Ge$b'4#50M1p!X+Y#C0Z6QR2B[qArNDT[+b-ZNkjiM#U
+Lk4bp4J(r5mVP42kP!VDjapN2+@4j9-A,FqCe8,c44#2Q*!babC%S1fb*M@J*("9
+6%VD1-em0icN%*Y8lYpNL+4jKAV0DV['Nk90YrUlkN3FZIVqqNT)9ec$)XIq+Q5`
+NL,G0ZpClpc@e'hTXK&Q2p6mq1LBQ-I`&bE!mY#(+kI#mR6Mq6PqNF#"(%""i[!6
+qje+(*%4`CE@J-MFhddfL1C,NRi,Je`'22XiE',&a$0MU3ZX01!iJF2e2C&p,Mrr
+&K8&2IB0lN!#ZqRrYD1Q+$mYFY`mjEX2##2!$Q963!NDI'3jj`AHQcLf'E%fSd$(
+2Jm1V"%pq3"AVKA'ZRR(f3X48`3rBPS(lRkT`IVq06SP,-@,VmYd&iQKqZ92Z0Cf
+JLHBARqRl#QN+LF,G`[%IMiflmPYI@JTeQ[q-`dC@))9Z9Qqqh2-,D30Npp0lcZ5
+1$P)1LP5Z!Sr!$dDK+Ckjbal!&C')Ed[B`rB'r+XR#PL,F4edBhhEf)YMLA10INB
+e[kLF`6Ll',0aN!"2M9-l52BU6JEYX2N"KmP)1J4a`Y4'mK$ihHpqY&`5KG+l`,)
+4AQTkMN-3+fkep%e*lPEV[aEQI8Eiqkh,QIL52qP)S!lBX$--EDQ3!+jZV,E9Mch
+(*[8B8m[F0cK[3&5PSL2Ijapc8U!cF)3RbU)-lkbkVQi)EII6G$3P!#@i9Ac!4#B
+l5R9qJ`"+MR8Gh%J@rLN'e*!!mG4dIlQpDq`SRKkQaIjmHeB,"dY'4a@Q(H8p&,D
+460mf00+PjdDHMe#IR(P8kN2B[j8)c-%RTN$hS0[,de!2q-QK'pQ$-TjESqET-66
+I%cEGbL10U(*5C9HShme0d2@'[XB2bF`Ae9!Jl(IpQSj6XkbrKNM0'$)Y"b#-Q[q
+P"C1aVlM9pX&q5$Q!B`D!&AeHQH[cajq#*K3%qpj1UTBdZUa*"S09i@hDd5f8[`J
+-QcU3!*!!$6qk+E$FH#Q2e-!!cTJk`K)CQPi2$SA1HG()jB6p6,!dc[pA,)AYSMC
+qm*GV8$Y4Ml9CAk[amM42*"(c51Fa6[mF-q8DB"ec63k%C-L8ccbcIG-ZUGMT`5l
+'`$$(m!5T4!Vl#RaXI22Ge6hC%#+F,$&RHB*iCDSTb#ThGLDRceCeKdY'%-8C$9T
+0VPPZPT(22CCRS'[G)JNqMM#BGpA+9JqZ%kQ51,L9SEhcQI@I-QFNijN+c2$b8Np
+"Q[*0q903J+ddYhH,m,KcHXL5#"beZCh09TB@EXXjJpQ6h&&c!VMH"$f#P'rM$P9
+%#f+pZDV#Pp56jNXK@l@`0mTCeF&,kGT"S#1*0+"+hEp(dH`6D'&5p'$%)kS4S9B
+&1j(TfPiJaR2DKiJ[DYY`jCK!DjSFJqL#I%R&J1I`Q+&!TX!U++BC"eqkl+JB%mD
+X4P$ERiKYXKT"P'!B@,Imk'Ffb8!XJZkI*8616K`4(3!'8FT,2(E1FC!!ZD$ajY+
+Jqlh1qp5Z(bNc6Jj,1HQbfk$eMNX2Eh2j03dmAJ0qS$r@`-!c[#HpE3R2dLNpN!#
+apeiRYkq8$-RpKLIi3r(C)PBbq13d1*rj,R(R!H5!eDXKmX2)c#DIM"DFNY3F*ql
+C%QTLi**0)i2'Upb9QEZq&'$0djA0jr9,6,ChZaq6h26i4eIUThZXXTSq,H1$hPY
+Hm"&ZB-*ZDVX6`EGiXTB%hAVA@G0V-Z4i[+1Lh5mjTA%AGqk8&4M+LNS+KK`5pUX
+Q!3()A`)QYhP6CY)YQI8L%cMlZAb03)kQQBF!AU(HMK3Phd6XVFA4RE4r9hDd95D
+++ZZmm#`NdF),ACAh-k*l1#*,Tr$(qjVEd`ZmXJGFGq%2(Jp*ij9[r*Q4DX-A4YT
+l*@*ee8$CTrSai"(cU`NJHiaR$lXk0i`Z+5$"E@%+FpA5D"9kV,`![FH3!1iHcVp
+IqXK5"-flkY8+'p[R'EMrH4rY,Q1YdlH&Ubd!aDA-$E!l200UJd30lY3TXelhIj8
+DJh2jT6dYFlVaR@B!rP+1!CZq"pE*[@KZKI'C*DN%cLR%+bc)PMk[rjp0(M8H3QA
+[,Ic%f#SY(hBQYJ+`)9H*)Ri24ahY-0+L$l4Q81-1B0LI@V2!6V30S80Pl5*Ei0N
+@ECVDH8aFNB0qrF1!Qcq&rP9UXSN4(bj-kI-K0GNX6*iBmB6Ar4$CB%)[Q6K"(rV
+(r'J@2a1!)4T`3,QqArJ#mDk,4RfTip4KRL9&"'`2H!BAPETVJ)mEG9bNbKQh5ef
+q$L$B#MeF`J09R9*&aVfj&+A`41l2P3F$%Vaj4FAHfRCBr,fC3iD51jPU$bUa,eK
+*eBSb$1rfh1+Q,6hQSZ4Ge@rj[dL%R[e*af8HME*H`ASUdKT0[)B!cj6IQX$*-kk
+EJ0NeQqC(BLbL2VqmICrEZmSUFp!PD`"6*,j`,FB9KrHpjZ!2Y3XSC33aNE-j@X9
+dMdBXMSSVE"d&c@Dm&8CrS2abFl"!PE5#@CM3[RAQD'IMPLl5%kP#LG2QZS39lD"
+9iM@rUDMRQ+EbYjQI2RkMU'(*2mq#39ITYre6-LJ%XLaXj,Q18D((*901`92BMGh
+VeU3!ISiIY"H[p9b1(hd`'-ei$QAVaP"V24fp)3r4)(L$c"Ar'#%!HLIlQ),S%1L
+K)#ZShp`@-*T(66#ZaBN%fAfU'!fZa3KX9H6ER`RP426C%pS#jFA#GP*-[f%LrpU
+&1H6JFb'+YY)B2mD*1#+CP0lXfk3R'aFI5`pjlKrR3PcmN[ASU*@"Pp5XbdicHAq
+k`(0M*$&NB@NKaCRbl,&)e2I@&d*cj`+FRk1XG93qQ*+Ek(2rK6#V6AZ$*$(TV+M
+DiL)#TIiZcUY''VQ@&B,93fe4*'"q(G$[)pm`SL$PBp@E`Jm"bCMdp$Dc"'QfT-+
+@+c*R!reh$-6KDf#[ppiT`,fqpZ(+EI-K[i*Gm!RacR2d1jXiY)"jIl'QIrb)FMR
+rH*M1jjr[hDD5qiQGFK[NAH060FPI[YKkYSHM2GZV@RFd*RXVm!%UkqSM&[EF`A*
+3KZq3!,C@!`ZeP2hZLq4X"4J)K1)BQK3dflbJkNrl1@UjrAdN[blN(q,m'i$H%Z$
+#[N!&k6YH932KpVlJKA4SVU9q@`rb6QPAX$+dc)hU@-rTL@+mjS8cQQRL"dZrVT*
+pj+V`E8TD'Cb#l*Y#q6YbrQ)m!`9+04H0%2a652SVRMJUP3cc6h#V42R5p2F*,j`
+(F-3XNMMUQ1k8qNIYK2ZmN8FTSX$0+6)e@4"JBS!!%kqY+%Q@TdbK5IbaSJEhc,b
+S&cQ6[p+BDcekH(Rm-2HM)02F,CD0rNQZKR#,jRpha4#ULF"bbAGT!`b'mHL8'h1
+'9$T-XpVX90VI['MGrE&c&EKhVN[cL[LYFbLL[N)r0-,HYqY)f@23+0G*!9eK#G(
+li80TA4K+2*!!@qKY9IpJp)'@LhRphCpmD'iLpSQkeZYiLC4"VScF[lKXP+SZ"Yl
++cY0aS+YTHf()I!KAP[KeM5[j9329VGX'9Z8"A#pN5dA&1cZcmI#)(qIX%e!Cf3T
+34%fVjbaNASA[30`[YIlSG0Hh1"h%XDBaBlqGrG2CpNC)-AjQpq'[D&PD-I*G#bj
+ED4jRjP'B""&l2+b-1AG6*lX2h,cXaFS)Yp@`UCPJ,mljH6qhi8FI'aN#K@GY9#F
+!,'+LLYI%%#Pc6#0C@q'@&R)DqCKbdlKB(*@Fi65-NcTaNYh%6Hr"[Gp6@1)59Qe
+&XI&5-MIEKU&DleID!6(c''Q,,HV)mq%e4(pkR+@aFQR,4TCi%dLk#6NN2Yjf16S
+#lF)'bVhH['X5F)b%pE,!GhGrC&pfQ$3+5QY$2(YddIjpRJcNCQ88`V2b#08(lhC
+J'!e86pF&)&6prTLE@*!!-F1TQ)dD*ea+p5VU5k*-dKH[,l'i`[UrUc52i%8TZ"V
+aPNNj,L,k$C,,!`TC!iJp9ME,[1CC6+'dIGNMEVQfM6(,f)k6$dlET1m2V9N$KLJ
+4r9+MQ4G(Ui3C3adM,hR1,3#UB[aXDjE0dNV[(GEXc)GQZP,'Q&9QD@-#D9&TU5f
+VH8bjN!$9H94R9"$JAP@c'`SBB-,DprJB0DBdURcP"*Gi5($`rGcMECXQG8%eQ[P
+(d)PTiIQE-De@RVYQ8ZXqmXr"KbR`N!#G%MApH9[%JN1ALkp1$UBEY1pdD"mpF"N
+5bUq!Ab@XBTJDSCLpd9"p-8Rei-VPc9cPaVG3bGjApm%B!)[j'*SAfbPH4!EBR(J
+b%R-aGlM"41l&,qZchVJ"E,e$!1IcVT0mc8@,XNGh#X((XpI0!4D88G3)LrmkR4)
+i&jD+DbKmrk*alLJaQIkdq$jJ*QD6#Bp+B,KKb!CMZNL0EDT`,qZb85UUYc,Dp4"
+`1fcjD+F4cZ)B@*@!l3NSC2V*,5a(-4Q8EDXal(%4lFY2-AfZZeU"'X(`hQ4AU)A
+`lG&Z*9@T"X5kNGbG`%kUei'-X5p5aEfek0LDKq&mdE38'jKqUBKJ#MjpN!$bHHG
+8cfH5LA2RV*eGjJG`N66VH%)Ib`,'2IXkLe@'ak@L%!MQ!DrijjbN0"mD06rF[9c
+Vr5l8jh(i#J&*,he3Q@Nec`c)$HBbI5Mm!I&-Qjb[B6K(qaRVd5+11TRDmPIElZA
++PKPSb+TImj9H1bQaG9hYJk23BdViNY,ZLVIN&20R`K"a"Q[ZQlYYD4k#4P*h+6X
+XdZUBd2AFSi'rLke[dI(PabG*B8-'Yk&2p"`%2,80f"PU(j!!#IaD+Z%4qG,S,3+
+,bSM"EZfcEidhPim+-JC`%VKdmRXA4f$'")c4m1B,2eSm&P"Xj"f%c3cq1dAHpl,
+!9(6H'UXVM((mXllPD'(pf1lL0XmVReK,&JI-j3e4[`+C"JZ*S+qGeCaEr83$pdQ
+"9C!!er#`!2,RlpX39VbN,j*2C%c8P!ACJ9BbZp'lhPZ[B3kT,A30SSTrjd8#(V-
+f--cGRcQ!F"SFdTVRPZ3'Llm`MRqS88GEXJjG9,9Fp-YrVi"LhEb$,Np[+)`',fG
+0#i1(IcA5fDQ&USYC#)d,[+ZVK(15e@1DGG9(GBP[B0BX6fZjG%[ee#)UL!c,$hP
+k3f6IQBDV1XP@p,p-k6mrqZ3PfGa%eX(kJRQ'F6J!-dKF@q3X'T`R,G1A#9G*,i9
+RZqhaIaG+[$[`L+9@EDBKK2r(lVjq"TSjACjLT1)@!%METdM5**mhP(`bRFdi#`p
+pX6qb`Q,EEf+$DIB(0P35EZ2BP[mSUVeAM'ir%C[[faT(f2K1++cTm%[BjmEe,pH
+RpVT0GP"E`9-q`S14I49'Lep2L2+jpV#pY6jM2-Tmj6IY#[H#Lr3P2V"-ZFDMLU)
+*`"E&Zk#lM"Zk#+SDK#ZC)298p6%DN!![lmY@KBF+VKejY#9SQ1fcPS8eE3DpeeL
+R(!NL+(,8qaq`M9VXeDD[a36NX@)8ph+3!&N)rK*eE2QXT$dfqaaNG1dkJ"Mbp4D
+9G$')#9l)IF+*HeSedJPI"5[PH(,6q)NSi@IUc$)R$$!5aq'03T+CrI-)m&kB'Zm
+6Z9(XQYKL+,3AK!0VJ(cJ+V463G+Um43[I+T839r'@ANYEKbE!B1('G2e1Xr5SbV
+ETHQ$Xp*84Sl(0SM4bPBHkTVrYaCh$k8&dL%aCfREP2l'$R'p3C125l'YH6&hp-[
+'"*G1NeiPc3S1FM"Irq%f%pp@QIAV[lQ5RXaP`EH6l@*)d3JAM6`&lA@%@B+Cj-K
+%RYh@I,G9[p5T*T9Bq2D`!q1Xc""'!5d*KNlVU9LQBA"F#`-)6#j3&@2fV5eM5@p
+CFjbTPBfTbRj+k-U"Ejc[cM2TmZKG@(T#@ccUAb%cDS(1XPAQYfjN%Vr$aK'`dE!
+cMH5lfJK#Uic%-cE[X'XPJa@1H@&Sd6(BXf"@A,0[eCRhC!aDYGcM4e1!pa%@&HV
+Eq8qSbE4@Y@9$YqY*S&@elN5%`DCLcZjUf10-LGS#")9Ei`NUq,p%c'6(aklAP68
+@eb80U-KYY*e!+Uh$BJr0F-K1GY6M#583[S2%CUX#6FT,N!#fH(X6U0CB,55!e%R
+5A9NU!#TX(1++ABZ@l"+e`rA'HcaBp(N6rT*2j3'1"rP9(6IaM2F$LA&0)%)8`d(
+#Hj1VJqKkNcmUfGqSP%4aQ+e5*@-C`E!2afM)9GURUAlGm(HD3YSrE!9F9FNVD+q
+ERFkfbXAa%@Q[#fhLSU&MUI*rMEZk$RR8Q3SQ4FAi-V1Z`@QR5#56%F+MifYBT*h
+2%+qK%ZJC1@k#"LlZmrIX@b1j+qb6A)DVU)C4dQT+j1,Xbr@jDrGT!5epk3aMdFI
+LQ034)iRf!hZHpb[-GXj+UEJBi5NbH*QE3rSFkEfK#TpY9QcfX#Zb`X8)[GR@Bf+
+[Seqf8K%9ClKI9S6pk+ppU[P6-Ye2&AJJjceYE#EYS`-fj6eLJd6Pl*+`F,MQF!,
+6YM"fRq,$J(H'e[#9m8P(DqQR+XKZ9Hli8)ble9lC3!TH1GRKmF9@P9CU2m9@&jq
++b9h"dk82Yjl*Rh4Um!0bRHkDZkkLchkI6G`YiI3$%P+[@pJ[#F9Vj4!pmDVIUd#
+PJBLTX1I,@L06U5QEh3FhC[j8TEGQTK*Q@DXTlrI@F`4C42,f!Er)-'kF`iTjTIf
+pUPFpTJfUCI0-EIXNJ&6l(Cp&A!F'-GAbiaPR&+5UETUcDDaij$J[H`4K),N@M2,
+Y[!Dp$mipAJf5lCEqF&HXYNPUiSKBMkp+%hkZ1I!'Pa%VGBT"GSk66@UrKTD00[j
+YFHA#$IbPrkSq)R!eZ+Ch[3e#+2&r@a(B5dRE11qrc@YGaMC$TS8kqShFLZE("5K
+iUlZ!,Ki!aCUdZP3Yde")&T[1KLmCVMFpDT+1NAc)A#DSI9YKE429G'l0m*fq,Vi
+IVJ@YD4qB6%!&U,U+VQ%fM'N)EhNJ$C[fK&-V[qlM@+UqebSX69H)kG0bEB"aN!#
+&YMj$6+9TlYrrZGhZ5US`C%[GkGYD$*!!pBE009)'e'`I0h-[%Zq8ITC'N!#Llc%
+SZBA1Z&*XqYYNT@%*PL2D8H#AS2a+lEFPT1'HNA2,N!"4X*mAY#)MAE-Vp-YIBQ5
+r)QVlZ[RS*a-d[lqXqKSC9XD#lf#@`ZIi2#fQ&UE+)Yj3f0pAN!$*S1KR@TPe$82
+2'BQI[LF[35K-)(Thc25Jrjqc,XC0U#ikdD@fl!J!6J-mCi[[l'1d"jRDT!FHJlN
+fKDpkX58ZFl0QrJYqUqMeck,q2H&HE,FEbIbZLK)ZhVbfdUX3'IiI2&KE)M8-5TG
+(Y'!b9pN4J`K20e-8imeK-UHTl#9VHLah(T%dhV+C@f''(!&6e`Y3*mi$a3FBh,h
+V2-0HM(4DIfpMNlRPG4'AY6'&fd,QFEE1UUiYP*F&lC+AaA'R5h0HUKk891#[H#)
+p!20qeX6kXH1KkPJ"fc"JhY*()VqN`,3#R$S6TCV"-3[Z05"j50"*cL"fMfCbU+Y
+0kG2Sm&A(I(PYT4Yqq"ISMG#+qeRelP#q)FX[V)+66(+bE6pZK"&Z3UL*R4`)6DR
+&H"rpeLDL%Dp#B9YP9c#Qj+!JJFk4I#5QVci9T(9$$L)h)"S0X4#Y8dL4Hr+k*cm
+`!fMrXP)X`'Na&&$1HTUJ#bfkGUVP(f)-EKbbBH38T+8f2U*@hKm*Il!A3YbT)X$
+rh4D9rHpD&khR,j,lUjJ3[a*-f'T(%Xi2dS!T0(A4*!(#93Fhk51KZZI@H`m$!EA
+`HF-[fc2(rcjlRc#Q02Y[FkV*NG'$LGiKYiUA%Lj,jPQH"LiNX2FEaIa)9'"qjq+
+"8mf@,r@&DGYPh209V5pV26GefD6l5lVGFF6`l#60!ep$RHXC%B0DD8,r2V&BCjN
+eX@q`YfJY"*TFD9SKC'F&ldIH)SY!d@*k$e*'Pkja#DV58U8C,Pf[ch83%`r0Jl9
+VCq$a#6NXQb$d5lXM@%KR0cU6ELPBY5HAVRrmEJ0d-&Z$*LjmCR'#qNh,Y9I9Eb&
++9c[@V+USGR2SrRqTrH[93im8A9-Ef58FbNK+`pTR12l3h3Q'I1)P*N@(ELK+XGN
+6Y&-SSK!eJVb5R[clP6'V()GVCr,(bc4MU')SRHheU,"4'bLp)mYJXr+8`DC6pq#
+&4Q[-)Xc3a(j49BTX)C20CJAA%C8DVALL4bCdYm&-!JBjG@V3`Y98SEDr0iGem[h
+-@iZ5#kc``2d"C$h'IX%JKF*$J$P!IlHETjfED1YRQ-F"B-pc"6-K59dreQf5h9K
+$#QH,`K&MRKYr4'DRHf#6TGN,cY)#564X(U!fT99m,k*Mipd+i$T-YHl"8V)$4Pf
+K[r[460Xi(#-RMHlkThi"&S+fI$$54KJP'U),aDd,#Li5Z!0"R$l-8A4qH@U`Qc9
+[8&e1eSY$Q`Ska4Nmc@#Pj!kVLAY'fZ1MS2j-@j*4Vh!83JPNlF6M6d4,-%J"MGK
+F29DK1Z&`$S9"a%NXQdd`)*!!4QS%aAS8+f#4p6AQBJ#0dh8j3P)9FHJef+d235A
+A2%S#jM*+10k&+b0*bBhFB%,"k2JIkR@c[2lPf2aU8KT95$d$A8"[DG@61cm$*PZ
+h`CRC$5CCdR!jQ)A&XrMmeXb-+2rqPl(R[RSI*ACAcNkEARp!ha-E(+4me-mVSRC
+Hp*Hca['PrXP#UXr56)Vk(",2jNaQH8q`d#$dA*Bl'*kB([UcX$UjbC(J-ALB5rF
+Ude3Uc5FpBNcalSi8YHUAhNdNeE%*E`9PI0'Xhc+C39-m$Z#"L4H+80'U,J+GZe9
+Te06[pKdha88aMRL4k3C$[CfKSQ`p`'+emfLLZ'Q'UH2kUm$(R$iC`U-&I#`5hG#
+3!&1bcph`L"NcYB',k)[q1-,Y63GiHPTFXRVqcc&Gk-BrkcJfP%%2,SmA)NLpdDe
+b4j6mCj!!S$d!EUjrMF+pP8@Ji(2Q0Fq`&Gb9Hp'%-R800PIqfkH#'AUZ52j5dj6
+$Mh"ZF*8kX@UQMdH3!"1CYINJUS(pZh8k2f9%aDmaGF(b"aFN!JRkM%ZQJB,CpD[
+m!hfkVibRAj`ih0$Dj,pU0b*Tb4qARIh'&H`JPRQmZiG$6DL`Yh-M#6I[M1Klp8k
+"AjIIE#h-3QJ009(qE5+qX'mpHY&kd(*2UQQX,82iBS)$&Y6AX++40G5Mjh3XERI
+1i'GCTPZ&9Dde4&-Z+AEK#*lT#p@HYC6K#S-I*dL#M&P4%"Pl[QX+j%VJDLZEKc!
+d`'e"[pe+K+mLhc9ImIAYaM,&V1`TQ1m$N[)3m5@K(h),+Hq642C0LE@4,`m1SLj
+%dERZZJqbMmd9AZMIST65625iX5B22K890(PUM,ITYbqfc9If&c1I$lB[+NPhcN%
+[0Sp*0LhSBMNm1Q,*@lH`VVcT$c`d'DJr[V(eFBcM%3p`JaI6LkFP0(*jQI9lLaV
+S"6X&Y,M!ZT%Ib0c5#CiUH1k[FcV-(a$-DE02EKq9m0#TPf98r3"[MT@2GV`BZ@#
+a%GD-%j2P(H!L!NF4%md"l!l[`jB4SeR3Z0HCZN*bNSI*L6$PhIh)&P6!`c3%Cjm
+iiUq(1[d@)a'E,3XE3"l-p,,&pqJ&fUYmeiacQ`ePk!ZJX6mL1Z4%[meMmUMiq,(
+8hNk1#'iK+b9MqXL%N8a2kX2'RNI[llQ'"bCp8@h%BG"LfDK*+@@DfYGjBcZ+-2A
+(fm[PmPIhrS@[($T*rP3l&)$8Vl2DC$2RT-LI!'EU6SU)8HDfCV(MQlP!QmR4T(e
+b#SI8!Vq*8&Rq@hUj+j4hImB#apYGl1XJ@8Q#lbN9m3@JjNr`Bkc6Fr[6b'l4%UA
++bpBL0*%GDkc$L8,9e91VCf&`009LH%)GU[mdQlKGC1%jCIFM[,3cEA`@*$)M%(!
+V6Lpi49Gk2*!!UqeCT%ciTI$*@BeAMB&E&3,DMHJ8pN[XP@2NjK*ZfR3UFFeD5DX
+1qm6Z)kEq#)rT[UZ@5"RJ0)l@,H1L(C&6&U9qNdkm'cr"9r@QIkD@#FD"X+bFV6J
+TIkK$SJLN(L#cdeD5VH9VGHemdhYrS',*pIIGJjE$cIZ(VkPHqqA8NMM[If1#FdQ
+08m@9RhYH462hEJ#r!SAiA)`RJADN"!8Ap!Y@-9Z-ZBMr"0dZ@iPUPPq'0'Te9N2
+MG8J'!2!UK@`'e2$r09NQCfkkJhIGI)E4'9bZ8e*2JL24&kIAJa-eUiPjG`&UCdp
+dq,Lk*M6Zd*RDk[3ZbBdr!Y2i%YiZBD`TZQ!LIqp,E+f8"@Q&A1c+)HJ-J!3QEk&
+bmA0IhiT6Lh0"9&Dr"'fb+$3C+)[`%GY&1NT[,QZ8j!SU#j8Y1hRDLLKcNM2L4lE
+@hY(2+0K)NG6I6+qZ`Yq%DrarMaE4VM$PZQ),ehK#E#+aFE*0I9-1HFhc[UXaph&
+ZNVFQN!!@H(rYUca"'JNaqp&6R0J#CV`41aahQk2JQ@"c"T!!XqP)acQ#!E,3f+L
+3!'65P#iV(Z*Ge2qSJCaAqfeLaf(DQN1SMMI,+J%j&04!Ga'E4r5R#l6(J,[%4RX
+N9YL@,e2Lp-8&TK1Sej&pR0fp3,f`M[6&fTUXIcG1CJkJ8c+9pr4)BZp#'N,V@fc
+d-Z98Nb1q`856)JDmUH*+LEPj54QjhUc0AISRHD[Se4al2CS5+-da[ScNVZ#RPMS
+!hh6VRTVCh@mPk$Gf"e-A*AjdBiR9BT&P8l%EF+jGF2MjQd)F&0J4S30#'!m48pK
+[&40d,4Q(HHXTiVQKc**k`NPU"UQ"YT'D`fc)V6SkM4696Lj"9Rr'"NQ$[!!d&ce
+M64UI-,(jah4NXp[+BV-AZ&0$qFji-H4k)XDA0+HTS!2l!rA$&hDM`(9f-NfAj,e
+Y[9'lG39XN!"e5,#2cSPGG&NeITjhhC`@pZ$hjBZZm-&2RK5'a4Q-D)MY5FEEcpV
+4UAXRBN-hc-3[9aqMchqIAjb*LZ+E#k*%b%p980TXfQ-P4"k98$(&LTYHElS0-EN
+!CMSCh9I5)8P9[#6$A28ld$)35ijZ%d38JUP5A-T-Cq0dD41HaRShmf2$%PYc&he
+T%!I,BF)0VNr1flVpFR'j9RcbbF!1rU5"`"&imZN(mk1bc(R2rV4iJ(q[TdP4r&G
+'DfldAFR9!ILV(5"S#l(D"IZQL9eC,4IP+P*EIP*Pq+!j6&qC,D*EBMib1I%pK[D
+j(fGjAGMbGEp90l!-J"(fT##qN@fpSCejrFSPj0@5&Na)@h8f[fD5#,j)D)Q!@``
+NB5Dp[RlM`*Rm(61d1C)aK9@'J3lb$'6&Be'(XJ0R5biEc"'@$mk)+RY2XiGa3p+
+6M!VV(qVrmJUFRbr@3A!&9hS*(SF`KM4*Ri`hJAJL"6h`2"fG&APSV,,%#6h0fq-
+jYKK&S[L$p6%iKVi@p`b!I6AU3UAb$"TD+Xqi5j6f4mENAV8TeSjQmf)QGV"*L1D
+#2L$K&Nk4d#A-K*N4dBdhKr)c9JFK@,h1q8[HRYl!ri-'HM1a2km@FhCTbhI-!E!
+Lj#Y[rD`DmI,GC+cTFElpmDP`NlYJem5bceJEYZ*'mkBj'*Hefp0aq-hN95HMCmU
+lB1RA(,cL`@99iha[Uc)-YfVZf)q#T8lc%Zr`044j`hIAYAJG6rEB9MRP4&%JmHT
+ELBl`+6Q-mGX'*IcU%JlH")ekcB-VmKlLlkeI&lG"ZDAmThShfk@bb'biie0!2D@
+U(V"NDVRrJQC2T*KT)hb,PBaQ,YqXJi1'bQ5VMaUA1dPa)dTSHb%*5PNGD+Bjm,[
+bq9P9"CY89&244L"Gqkd!d0jk4,NRj2@YC&k$&,"pTDq+Cef&+eJThfiNLT(f"RB
+C!EAJKIlESPZk`3MiSR2X%DZ0'BD-2eRphCMpCU#HZ#ammFVFX`H4hR2@Rjd6DN2
+lUk3+@1I2Y1[EPFQl'AGE*5[&GkrkB6U(K2V"-0Gm'6"pReU#5i"T1,X[V$iNa09
+KC632NACP9kc)ZTkBTlZ!3213!)[-YGC-82YlPfQ[aaVp'XGP,5r4f&I&qU2DM#5
+URC!!#5$K"4F4dVe15+,'P%INch4)DVU3!0a,#6KjMe+*fQ6M#Cf)c-F6F4TH`hA
+(BmM)X-4,![QqI55&C11krNreY6Kp'[1&bNfF*&+FV*P&Y$XEBkPaE+e10bRcT9C
+$J-'%"mb$%SH6X8fY9$4#,`,`M`9L4J0Lk4rCpb%mhjTZ2Cm4bQ1N,LCh)9QY2mI
+j'XCHG%NCiCZ+cmdVrd+6BR'R2EXq!TMRMVE4'NK%R-+#apT!FDMYbB#82N!&A)J
+GZK)@d,P)KdGaR5$iq'fd1"UMEjF#qj!!B1#I*rG@bmX,@8&T36jUNd9eJEIbI[S
+EVc()-2&pQHmZl81J%-)5IbERG&pGY3,+!"Jj)"cV'MY9!V@KNM@NID2`IBBpK-E
+(9953!-H@Zjm)MUADbj8X6X*f-X$04r(1Ja'!kPDimmJ8"aMb2cKG2(M2mamerIR
+KXLXp+1*q'1J(0$Q"m@(343FXbBrL[Ti%fVdT)8F8Vl'%b1[$RN8RT8IkBY%!P'D
+-DfhLR`bGc*T"D!jQXiE8FkBj682!@d!5k`CZ&*AC2`@*&E'!HN%PI,F4Q2Q+YSZ
+h5M&Urf32elIa(Q45d&5,pI3a2-2C2fS6hCD8[F3UKkMm6%!c6%+rK0GXd3KV2S`
+HS3jk4k%("fJ!GpR#HD"c!1Ye)fbl-XaeVR!SI'JELQ9QF#X4QM0@XE'eq6QC$,8
+&V94@[ZL&H8ZCKQIm(TXPqj2k+G,l!j0jUMYN"SV1C9q1jZmCc&6NRSM!TLb,*X!
+@#'m%9&$2kH(fl68-R``AS$k1DB6aRfdmZ",P8lK1Jp`S6A6IRd3J6qM82&F,jpe
+[a@K2,Yh1)N*H,QdSAIRL5`8Bja"R[4#UVkjNJ,qbGX+Zpf%-E3l9KeQ*k[K0$3#
+j9k*5f2q2+CcC06P2`*@LQ(YLc"DSD@0X%-',G`-p![AMG%$I-ISr(c$3afJYQiR
+',8jDbP1U+UHp8rN#d'KQj4k*"%[#U9JTI*HY'-pb&fLDH0epeL2HfNpTmIbfAPI
+E%$P(CmKa8"6,rY"!F##JUC%K!XNFaG-N%PD&'Bk#[f$ReIa(!+US4eQ-cdQBfkH
+6ph`XB#P`8DNMD(icmYPhVRX))l"T3A`bNKKM'-2-8f&V$VUedr9++i,ie`'QGh"
+j$cBF@%"khfY868f-!RkUBC4)0!ebrNQM(@CMb(,"-5`"b-E)[h2aTXJlf8#@THC
+$d4)19k`#UAU+E,`YAGj[+U#@E[bY2TVkL"SZ!-iUqj4jmXZ65LfEefYD*DE%jB$
+@@1)Hp`ea2,-`r*2"lMY`L#@ibrmf520`k8@4p[-6&-Y29GR@KT6VfS,'&SVh%$Y
+-4PXBJH4jVlfUDfdXKfiN!-k1ekS[,Zi&LSA'E6EG%a)jXm-2Qd+3!)VA'(KPSZE
+Rp,d2(ZAZ++(4`KEBJBTN'C[Nh+Id#F6BH%l,#NhbQ)CV`&%i)abIj!mpE$BqcGa
+4*Q+fR6k!UY*IX@MX$IT3lI'mdR"Q2Ih&fQ2(b'X(ep0qABA*r5,1PapSc$9bI"A
+cS3AcS'+kcQC&GG1qUL23F9G9QQK1'F-"S2*8R$GQM&XE99F[GYUi!PRX90+HTl%
+S8V)Y-b*lNAcDpq2r81,$3*B0fBh+Qa1f0b&r(dNIpq5h(6Be%)9dehUp1hP#X@Z
+ZB)H+l(qpRAC$#b1B'[HF+3L9ZNp-hP`*2FV$MTelU3,KHQ1SZaGT,dVAdNRXSbM
+[qD!rS13T!!X,C8D'm`V%cF`dA#k#0B["A"6Xrr6F&KQ*%$Q,bcN0Ta0&2q8ML%B
+h3KMRQl-8j-HL#*cY!2!fQ6pIXkK"hTG#H"LVmSC88YjbhiU3!++*"A1)ICp8lfd
+4X$2)UBeXC3cLS1aSQ0+emYD2GICm'1G63*8Tip,ERP)6bq)TVFN6lkKF"Qh[5I6
+-[Gb)@$`A"8@PJ2J,c(VZr,3`hqIPje*dP%"qXkU04M$H"B0je!+JZlijKII,FHZ
+-F6'VXkjQaQ42r0#iSZ+q'EB)ji)-`jK4%i6ikq4d8rK"*%UB2TJkh6,2f1fC[Bq
+9V(pUj&a,#9%HHe$)q90K3bjKh1L@+'4#5P8@I0jNk8+C*lh68RXPKV,`0+YMDbj
+&@XA&(Pkepq@4MF"!TK25Yf0(@XZVad['K@aY$KZ1J$#mVKKMmKKb4BjA%+%4cHl
+iVjma0U&"FL&-khUmC'qQ+M$N4D-e2(FT$)a%jHB@qLX,eY[alCESM-preb1!HSZ
+aDY8$9p+(Ii4*6*MqJ&*)*0Q()Edm5cX93p(h)3qHDZpp3KFlifM'8'%`CmMrXBK
+KPdL"kqk,D+`RHiE[A@"[4*iLRZYlbI4'YG!S3+a1K$!&J&AfN!"kIV(@r`Y-%IB
+$DZUa1`U5)8@@mf(l(r6LCGV1#Rc1f2ED3f#Ddh53!!I)N!$-dic9)[,UdKp*PIc
+Mrd1c9p506L,XYdA2UlaKVU!@iYrS!amLhI!pGeDI%i3T+BA%Ik`2LDrC&PIHm6i
+pmY'k#%I&A'NEb+m*EILBZHJB8fEcaDpkZ!9XHE+QQ-aj1l8fQk0-**KC`N9E*8+
+lF9,2ql2B5eG@"$@-9M$-$kIIf(f-Z68+L+Aj[pV)E1q-$L&HH[fqhj@VaJr3Y!%
+XE`kZQXXVU(YQ0l&@ZBcFZ)FY!Q3b4PriZPUX1VX8r8-,Ka$'&"89M6DBrJ,d3(-
+5LH%MT!9T3&eT&&S*VdG6b3UF!L*%Pk(9klpY+cLX"GF(mG9cAdY(K`Y!)44!f+1
+Fb')Q'Y`L3pY*#-XGaI'YT5ZI1[5@(l60Y25D1aAIA[cTR`UF*)X!IC58K(TDdrV
+6)MUMRM`[Cj,VYp)VKjMXVh4*,5m!0Ed9#p5qY*'G"MY5bV!GZZeJX,R$c`'Hhr1
+e+(!@cQk[e9G)SLPlMBY(JK$UHDY9c%i$&(cIp0NBC$K+e28C10c4@$[jR"fqU!8
+eJ0`B5)P'm(&JfSU98C&89SS)E[fd38)FG#birmXRI1(9BeP,"eUb%C@Z6K%!3M[
+0c(K*kXKMGh!*(TeI[*`!PZGldql+'J%V6V#aXqZZl4*EBDU`"VBE$Sh@X,&hZ(%
+N&YpFI,L"BH)Xh,#0G1H&UV'8),3E+m%E-qk-h1[Q-4cfGaH8FBG,0NqIk'6X*+[
+BjR8&b"0E"3$MVB0C0l'2LGJZ"DT['mieM@l$KLUUfr(D*LjiaN(R[1r[A3VN1Fm
+F(3V"`$AQj1[9MFq`'T(B3rZ#1Vqh%d45AiI!I1494d@VLm4-Ja(%Xq8EPZF4YU-
+ML&'e8&Lhh%`m2V9lQra'clMbr8'E(iNHeK503[eULQerHBCcEZmJeLhiQdhX0D3
+X-pSQHR+$"bS-6DL88K)l94@CUXjBLMp%E1"E`N(GlC0Y`rGBbX%Yr$#4AVp!%bI
+1fMMXiC*"3l,G*jLRjH[0DZjGc*e`ri'q#+lHMFRZ[iEENA[E@Qa-FM6)M#iTUX-
+9TS,l`GeqXe3-LVT%2k#k$+#-5HY)!r1U`-eQAQhj-SHrhiB5b'V1r"c,((d5f3+
+l,8BI`Q'pU6)%fC`b$%ik9M8V3+E3'i,qGEYj&K'8fICacNp"Nc2eq(KiN`T@RDe
+La"`HI,j(V2#3!,(pl[RbkXKIbe81TJCT'c+,23K'rjV1%[0X5Qb&eh2EF)N@1&T
+kBI@U&T3225h2I6j(2&-Ne#bRi%T&bR)PP4CIj`)#SAaNm+0U3Plpr6N%'kbFNrI
+QCP*TN!!Tqmeb4mNTEHPp,04K#+8FbZBFUEk6bk0XI+%YV#-)9HEhZ-h0Qb)4CrM
+0fYc)$(SHC$aPj$"IXSFfGYm+P1dS!F4Q6aPLYU))jVaGZXcS#bPL6k#JG5JC`HB
+$P!rK!50brpU15%rXF!PrC3lZ)`A(h(!2QlMGZ0j#qJB'@d('U-h,H2lr)hjpEfT
+kq*eC44ddlhBHkBqR69XFYe3q[La"VL89@"DcE+XrqYSIURaT3FTlJrBF3fHSlUe
+K03B52Ec+bjG5*dkXLB2AZ*J#"kHU3liES$I-+bl@(m!dT#f@ld6f1$P!HV2PiQU
+ZrpM%5Q*TD3afAk6`G5T@H6aS%MF"'qN-1M!hk[&1TeQMb@Bqar8qTD$[JiX[P*,
+UB*TfXe9[aDEh-+qV+20b%dkUAmh&&r4kD&2#(`NkZ3ZlE*Gm6&Al+k(*[K!VR9"
+J'q,Pb`#VhbT(fL(E"(P%JS0N)pNFK&FPaXQ1NZfYPK9+j-0jHT!!-JM1aQXZVJ8
+il4$H-4!BJmmjY6!G*HacDNY`e3QRQGBr+1HdI)G+jHfXc-cD%I0kj[$Z8I2L!A(
+-rb6N#Tj0R*&YQ4,B*)#NYrh"N6ZDejC+Vhl`Q)bNhS%Gb2V2M5rlGHMAX2,eXT,
+pl6jY[["-3h#`XBJ$8@m1,Q&A+N%"r(lG2Jpp5GAj%hSp"G48k%6R-(4[N!"2H(k
+#6bk`d,Rk8r%R,4fYI[4eYj30MHp%cU4GiKV#V8((J69$k-%QXjNrNjfr3G!r!bG
+NAJe[C[X3&4e1lhEXerXRS@@9e0ILb[qPB3PbRlb2)k!R4[D-8lXfm@E(5m@#8iP
+(p60Q@&S!CS(G8Hq9BF9,3i3#BcYR4)$'LEdcXQ8lH9@F@3"fdb[9'MSf&U*4+Jj
+qrX)`N@iIkZXU248LmXS"6@LiA,9djm%6'&ZGeHGpd'XiKS-ZP!P5(U5fp)TVRmq
+`NZpi)Ih[%kMB#D*Ke""1c4G`@R-J@RhibQpkR-GZR#ISEmqjj&`#cYVVKphZ*!&
+MCdfer&"$K9`8j6If[Idc0ZljiQ#l2G"L-1Ep)F2T18$TRRi&Rk#eE1aT+i`VE&b
+2LRIRl1fcaldr$kPiN!!amPC@031!%jKld(Gj&NCqZlE!X(pEl(J'CUG&[p'j+ki
+a62Eb8IQj%Ner'S[L'A3GNhhSZ2NC(F6k*@!kkH9[k+R&G0HC8IBASDGYb4c5+c*
+1F9X+rkAN"fUGBkBDK(-0aIlF+p`EV+p)H$e-"dLXm#0B8VEV"C(2$86#ajSl@Z,
+6A51%IU($p%Qjl6T'X%$!b$hmaVHXe03FLMZ8Q[0!F&,"jAmS"lddJ[(Mkip'a*S
+I01B#5BG2jMr,11$r+0dI*!V0FZUqM&Yl+TDHmlS8,QfUiV`G[IeA-&MNTZE8eE)
+0([DVeLaarjiT@ZH'I(2F``)Dm@`hCk@)YmDXM4`#kC5fMLH6AB,i&'K$h-eE'NQ
++@kj&UTkEJAC2emUkIQ*hC2SiYm,++'P9f`FV5`pqSF[H8TfSU5RK&0(+dHN[lfk
+PLE"JF&&&`YfXl%01%I4q1SGbcaX`[6k$-NR!LTF#N!#ZG(rJr)*8UM1`miFHRI8
+PP*!!#EN82VYVFF,l18&6+Kf9dEPF99rieaM1-dlr'i@lmG5ldM#Na&1NZUd5UH+
+MBpe@Q)&Yhb"lIBcT,ir!I1h[QYe&eBb(rqX1e-&hcQ,V1dFm6EA6e+rdYPpk4q&
+D`dG#K*8&Z9SYX!q#i"`(@@mEX(&m)89H3LddhH6TdEEkk*MT`X21"EQbR)C&$ZK
+`@l(cVKS#KMC`GEXSpBYIL)c0#eca,5cD2SfTp8a*[$24HH-lTBXKjGbZD''a@QV
+pPaJFUhh(jl1)iZ-c[h+c*KehA9+Id+3rU'@ZD68jDf&6XS'rBeqZ@(9)E4N23pa
+q$$6QrlC8KYGJ0Lh`rFcUVB"APhPi)jYJVFU3!#S6*PrB&D+r*rX0EA2,4`NDUk-
+e[he$Ufrp,9pY"ClIe9V5kT6CXZCr)k[ef-TSr-(aXDCYkQajrFB-`p$Y2f)TYBQ
+rp)VHVaem0,4bRKC$PFp!qMm&UQ&(-QdP+S0eZBjQclHT1'qRp`2k($dX9!Ul18'
+8iPH2%p-b-12-T009'@hI#KXZ6U6Fd"$dN`-a2qFj)jQ@AF6ab4@9bl`@(B5Q&$F
+e+0ACYU3,qRj2"L8r[I$$1,!P@XFCr*XYNa)8PXj2E%`l-MeQYPXlE%i+pPh1*dT
+%L)I%jJTFNQ"K03G5E`GqZlbJQBfk19$+(Dpme+!EC#,GTKRbkEA!'Y@9kjPi&0@
+rl6HLEp'91%K!qX"RiJ'*fCQ*"("*$DL&,lGj)5*Cl%mZ'6,CDiA!P(5kbCpS4i8
+'Q9cK8A*d58UlD+@Zi[&%aSMA,RJE,,iPZ9$YbK$Epq#`!PGf)$60+QJEX0k$dT&
+3RC,PrrDSDe-Vmh5+(d1'Ej&jk6DbT`Gj$J%JL6N$&'%(SHaYbYAkkBbqfH*Q835
+QRN-YiJp!D@+XkVARk)%kPlLc2jUF'$"LIQk4R#"&Ne#$kN!2Q4eA28I98*UTbR`
+TN@&XpGpKCA$p@jeL!2'5kX*FmRL6XLl2&S9ZT4GIMfAk*3JNC-NShM'!'iR14C(
+0kc`[F!B!eJVZi@1)0#8beQ-42iQ8APi0""R%Z,NCNla'-ej!,`P2X(TDVdjq3V)
+D9mj2U1DNQX3`XpG5Gd4LFchX+c61G*!!h#heTUE*KS#R!j5Pi%pe0RZ@[D!FKH$
+'P%Q[*@*f(6!frjBV&VlUC&`PU9h5f0l0hfic+dKH8iTI&*6aBpXbU",",SaE49i
+X5ZZbKYh0Z%&efU4Te"ir#jiTae"K&j3)lddHBKpXmP#1S'l!mP4j6Da)$'1m8Zr
+YCV')lB2'2rPRY3Z+4[i9j80Z@f&&GZReIZX1LdHFE6YSGKCbE"6R3Sq,6p+cMmG
++c""kG%8Db!NMTFV`4ZHqD*)9VA&cGTV(ik''(p%%VB4c"1e%fQKK2PH[XJd%'!i
+J&mBak$Mk9KHh8BB%!Zkb96jeNHEh%X6+X44l5[`pkTjbDh!N(qbqaYlR1`G8Dd2
+K(F'Hh$U6eP)fT[i"F+YfJe''r&,2b&qGe@6h5kkd682q,U'2baQk&)AqcbE,0-N
+p,f+KSrEdrU)h8qA%)DqHh%`2CPf$2)iMFCAV4pRZT,Q&9&jEcJhYr,Ar86$e@C8
+FX)&pkJbF*jS&Rd*Z8`h+F+N0r16CR-C4J#iLF0D5TNm@3#TD5lFlBTjJITLTl+D
+j"cG##`#$S1)2GY[0S44dfX3*drh'fd8,ZLi8FAT(5BJaB3Ejrh`(P0qJC[LL1@p
++Q*JS",CjNV*LV1r0i"leGL'TBTU8@XHAd+CE5#r83PjQd61KGNRQUl!PS[kbZBI
+DTS24FT!!%15GL&rqNm%i@aFIkiJ84X@dD8Q-0U4MZbr+2+,*e)e$BH0@2e4d-'i
+GP&"aimECVa5'@TCRcZNIT,Q[B6[-S538m[-L*,NGCRd'*MS+I3eYIpJ1hECh0!3
+(q2,XGNZ`a21hQCjLLlK'J`KBfF00)($e,e5JU'$S$FcDeiN%VYS-Z`A!pC9K9,'
+bckjQS#F6REkEV%6Ib(U6([rMTKLIjM%aRc1U$VmD,0"mk5Zr)$Sepm+0-`YdTl@
+BhMA(+N++PM8RJ%LDf&$q&EP$*XQ8S&Ufh(kC(kIcpdV$GCT[Nk2UM`k)fZFIYEV
+p14pG26De(V`!LIbql3h62Gb`DQ1f-kD)er5qJiVcir-$QXV4j9YLlNVM"T)$DVL
+kbdCdVcqZ,81c3%(Shd,$HXL`S)XC2*QBRSaHc%3BChT-'PUJ,+L##G)1SS(0Y1c
+4Jm'cqaC98qB%9LV*IM38f9cPCBI#KB59FX&1'(%`5qJCLeGL@)!Zi'P%YKH9XGe
+5[*BI1HN&QATRifV,PXCh6'aXMdZ[FYb6SQ8T6eUD#lLX#pe*Y`YjiL9!'[Pf9PR
+6%5V&N!"YiN3d-9%L*&lRE6fS39%A23cP`C&p8HiSq1VG-GARFAqpTY52@N[+'5B
+lalkB"cU4cR*)'"5-#@C"JEmSUK2dA%B#c#R9BZ'&jLk92(HNU9R,'ki1i+DX&$[
+"q8Lf0M2Y5fjVM1(-b(RmGUQQl'*E(Za+pdQFjmmI("6mLLpbY`!G`4RmbQSPCLl
+Z-ZCiSm15lhXe28SieAlh$m0JiPF48mAS'PV$%jdK-GVfR1ccZ"h'Ue%LR2[m!'j
+BCqSF@'3NfK1)m-aQ+UAkaRjd9Dd-cRK,N@R-c45UJM9`q)#bbF),KUjSDN0R@AK
+DAQ!kMCL5a#iC$UE30m[%#cB'8j!!JKVqadBlkS+Lm9$eb$GVa(3Q!)#6NR6dd&e
+[41FeFfXA4@hbc&'*CTDc0iI8dQPUL!@Cb`p$QBP4l!GP''r'9m2j!c)E)-e9&i"
+5GC0&ClA['K"2V1FRC5Vqc[l&GmSIK5VF631b#bGLK@#MMGCIk)'r"c1D@3p+%Z5
+E-1+pl1beTLfBM&JJEf,6`i6ZhkGjlKLSL!V81DBaU%[)XIdVGILK`m$@ETT2Bh#
+p`CXcT%JIdMlS1DUk`$Ej*6!iSM)YC$Pj3Hp&L-6hG8,Jh[h-J0A(*kUh#SD3!&A
+AIKX%&iB&J"a*3lZabfLV&0X6c02q#"*#CkHcJ-DBrJSrT98!SDEm#E*31E3P#6T
+Q-),hi8pSISH48ZBMSX@QG)%0)Bd*DX'6PhP(9FF#qM$38E!JZ%A*C!,#ZDBjF*m
+&"`QFD8T+p,R*@ScHV##Y2A+VF#(KTDY+UYDe)Ei"MF%26,a2m[E1X*c95*``NNY
+RCT6jH'iG6BpJ9T5dH$%"M`52m9XqTX8D%+PZ@VI4S"`T-dXf'aJD33Q1#"(Khif
+Em&512hk5RZ$hQBpH!q%['%hVMHKT%bPl1B0c,p+TQillYSTQhMF)j*pc,%Z6aaC
+id,'9h[GL+9KY3d`qmSGrZkPNYbU'hJ*&QaDRUBT$VVV$qLkL8d2`)D`5NiQc*P@
+EGSVAS"@U(f'd,PR`qh@AhFa'e5@Cb!HQJ+JAdfMK&rIHL!5##p#`c6jBAa2&S8I
+c11M)aeDU8$Z&CqBXINcKQ5bp$*8J)K')DMMPU3UPd@qj6A*HUm1ePDdRM6l`"a2
+%%+1bVlTII5`Ya!Cq4*X2LSAf4qhm!j!!H)49%5'f$eTQ&C!!G)GYC(D"PMfXRH6
+GpQ)%+I$2Gc#QYq0-Le)A[3Y6JIEcShk![1&m+bX%4bH-4QX@'aYe3VF`j1HD$rS
+4KG!$dNIk6e-08*61dPHDdB5U$P#EAemqX6%DjPLFKU4X@Dhh#Te$P1E"AJ)9l@U
+Z2frMZ!Hr4EdL8DaH49lF6+@arG@+1a(CrCl'(hT-e*!!h%bD"l3Np['IIY`Gf%B
+S9840E5XK`'4VD'qZDeD1$b5j"fl8*+BGNF`-2lKm3DJr*r5*&lEce'U1kqhm$!I
+B*AmPUqePkTj3hc**qb&(MNkNF&B13aa)q#@$DN43,T1Mq*k4dE-f"6lM&k@cCCA
+[DGfqF(q*I0VKZ$3A23URH9rMp#Fm64Ej(IV&IMqTM%XL1UX"pGcJF,D"XeY0iMm
+YU8B3B0!V06iKilYQ3&)RL&))@$(5I%U'P8AFpCmkKKBFV'b2-Bm8rrGbd)eFE3$
+`*XcDIrTK)-'8,8U"6&R+#H3',h5ehLa'cGFFGR8XT"%rC5@pq(`IcDiV5IZ#U0-
+CJ&Xr3`C4Bj!!p&8$NP0YKF*$3Z5bYbUblCIB4'QLjXdL`@EY(rGJTfF@[(%`CCA
+X2YNq*GMMNjGJqRN*2N1C*Y)N!iZpa#6LPjSH@6@fq3UbPV%f4LeFeqL$9rZq)D@
+j,6MqeUQ40mhD[M&([(+UZC%E"VU0`e1fGHN8d9VYCId&U4lbjj!!A*3ka+L#bH4
+*(KCE6%kEZLFIC",+!AA*fKA4Qc1,ar#P&Rl9NL5P6Ar@p8m&Uq4!2-jLV06pUSN
+"[BG59[N4AV(iSJ'S9Bp3MQH46l3J)*@d'KY2daT2TPN4L6'KRkr-f`*KNddbD"[
+#4#R('p+APqhpjFdq,!%J`59h)4QNBP"!LBJdRUVH[cM4AFIcTESZDfRr3R3f3Kj
+rhAC-b@9#`0VcE*-qFhed@YS$f,Sc0jKC#X&[Mbl,[+pD&Pe"URDKCGRcEFF`&NF
+45642eiaNePmcP1@DiAeekUkGlqrqRqZj'TGZ)ZVDiIX[CceqJllj1rY9!QjV#dh
+Q0-892QrVkmC[(mI,`HlAAB('lJZH2HDDh#D%QS5p1+Xc[E2D,+CV35NEB253!0r
+F#06apSLRaU4RJ5c-!@*9A[pmDAb#82j$KchJ'hlA`6%#BSKce!9R'bq0!NT5Di2
+NrS+Ar2V@!0(IJ@9b)$mEC1Qk)pBPjR#--JZEb4JkFl-"L2E4``TT"3bXXccM1mT
+&QTEPmQN6C!@C*XDed61[14jGHAd1&*2'q8)hN!"@jPBfQ#FK@mcXS%aG0eF&jdX
+m"B)S0)aL@-j+VdF15"jS40)*4bQ"mi1PrS&rE30J+'baUa9E$(#`1A%FfdkZ2E(
+(13*mEb"qQP8q-[NiJK(e2MAp`AIkA)h'LL"$b@abR%bD+a[IYhM30X5rb58I5'S
+,#Jq"I3akI*3(,qp$R!E%[``Me+GB-#@8jB&-CE(5c,9SaRfE9$L!'("!3"CJ"bG
+lfMQ(H!VNP36&@!ZSXQ@FaFFKUi6Q3@j,0$4!VXeP1[P*XHGrPNZG$4*D6hYdC@P
+qV,+P#aP'jKkTQbXm5ipL(3QNApd#EKSla5iap,TjNI)C)"LHdT-le@EM!F0,8qZ
+l45JLlUJK[G''+5B49qU#XJQ1Q&dTfYb6rk#k[Cph(IK5RmB$3r8jR6A(ITTiHmm
+Z6C!!+Q+FG9#iV`+QH#NIAa%A,(HrF[$%[%5!5HT5%#%D(-Ke*[`!drp'5Rm2&1#
+l21Q06GbX%1`S0,McG14,@)crapI48PDbfbeXp1G%Xk!mVZ0FGT6jjUJ[P`5-U[+
+$9f333`",eX-$pfI)G!bX4Zb#%V#5&f,1R3E`aVdq#(bXk$)UQSD9l63IC&QT6,,
+SK4[eNMh+qffr&Gf)`l`'aNM)l*FV)qGqS1b'hh[QPR#k'0hmqHMebG8#$i@6[T9
+aJ5`m[(fIAqNejFKAIN8M+K%1MUCSQr)DV&5$Srf$rRCMTNrcm#-4&1-Lr6F0!el
+RUhj0b5S`B&NP@[j`pr1LlK*AkPGq5PIMfe3@E(2Jp+6A3"C9NdIMDkpEYaf[pV9
+&I0014-@VDJq+$[CRFkVMP6r%@kQ4mKeH38+kkK1m`m%XFMFk#'HQ&p9MCY3,BPM
+q#UHLC&#4J5X2)15jbP%3PA`@Ilq#hr9EE,HRYT0V'9fp"5Gmjpm4!2YCel2hB9i
+"h)0-'#CFP'LIP,*$q)$m$N#%`0p`Gc&1r(EJJDJPr3#KTcc8$Ej1ZP8FG$Tbbj-
+bpLh+jlVbm5!-8P4fI5[aNj)5CLFLDka!d0Q'Y86%NlPSE@*kIb-JaQRYXkHm"4d
+dXHbKC#R5,!9c9C'aE"iVC+dHN!!,pB4i2f2DKX9B"P+M6"ECAj`'M+Hhd$,SMQk
+$,ikM(q21*1NR`$cXUi)R@rGpYm"$R!!@VY6fK*3ZbM"bXl#'qUMpi@m6%d)-[5a
+&*)bIR3I`)HUX`pJFacKbhEJp2jYr2DXB@dZ0%0Xd6LhC%+mJ&d[fBSP"%#a1H)$
+eE!aKGa*hal+3!1DiJ44hZNH108jf9Df86XD$([Fl&,&0+l9d6TCmMHp#+QRfIV5
+VUR#6cKf5Sd5CS0M(VTHXUIM8J3ZC2lI9Ee('D)N+"e8UfZMlY14@TplJ-RXjh3@
+[%@83b1+'3NFi%m$PPlci5!"eEGH3!(hpJ35F0J+Cp[q#cRcXrrM+1VFG1Q0hll6
+QT4c3QfPCUD)'A),pkD#NQLTA1`-K)QkVX*V0h6`pJG`JTca+)RC-qMES+'UNfT-
+m)cA!k6p[ePG9qBR-I%[G$2kK&)J'@,6fZ&1MIcjBB*2"`-56hbbFlhBPNV[,3ii
+#9)*[9V1'!k0F$j[AHUEeQEQYij)'6B2[-I@Z12PK+[e`DhdZj@JX*0,VY58C)@$
+'h%l1@1VRUJM("[$Pr2J5Zk)P*klQCVhl13G('GF'K-c[dI)rXUGcSF`)9PRPBJV
++c,Yd$Bj2c'9V$V*kcGY!S#DVd"lXRjTN0X"TAQNdreS'mLU1PQAaXr1iq5[1aPd
+HXjmi[!E@4IYEF,+8&c#3!-3QDSS&e[N'CMhb'F6"#(ljLRS-8')iZipP3'@M,'h
+5"3Hk9*kcp$!9iHbDV+AL3hc`H8QEfhB+[AFdmJfdMK`0rr5@Xf5YNQdVLMe,Rk@
+K)+kJ%6#A51`E,4P0MRa*FhS6cdUm(0#lLapMD)6D(UIN!,V(G$$"@k3B`9a'd![
+fSkH@AaLG2@T,Y'2)9jSd(XK![*08+fdfYiRXr6dYCFLS8ddJ'0GVc[A&!#q`YVK
+%!JZPL2cr*8Lqp['#IBH+EpYK@UDh-kTqNQ4ETR04eE[922E``a9pJ#9+1'%693h
+ek$amdJ1ki"FJUlNe0MaGd0YL!$VbC5+$HCh#pi4V,lTTYm$jlP@aLC!!h%YU!qm
+%4Jkkf"TkV@MjU"bX6&YB34*2@&N$hRLia6YGmaHSbAdr2["dqSp-aeCAm1iKXYi
+Q,fcbM`Qk5aKM"iBqCE4A5qr[SYeJj64-)6E#F"4+6q1jmG'Kq,VGKhD[)h'2'CK
+N,qFUGJ"G,rSedb+N'HcdSmXT(U9V%8T9@[Pi"i0kQFVE@cTp-&mqR)m`!Z4HUhN
+J99XPaa$F'5(YUVPQ8ldZPMUa+XFr'EAIK6KfRe+rp"`b)R&$i#TCM@TbHK1NS2+
+emQeckiD"ZST!ejd$+Hm0`d4d$6N"j8F$Xk95E6mkJD9&SiqZKe8ap#@@SJMGR[p
+V46qjjSiqCaDlR@N0pGahbZDec$a5-l"F(S3[B1q0*U5AR'YLD5d-*E,4[f!cV+[
+LpjYNb!m3mEkT-ZQlj`E--h`pK#"ZJE)*[31*TRmSbIP%q1`KX+0(Rfm5A$h[P)8
+%a$3eFX8$Y6mSPPF0d8K4m3K62Y%UX1TG$q#)l0jdEfHPZPqmKGqQ'3S+9DeUIl2
+dRkkVj((h@$C2J"5[AIPdG8drCT*8H-9+QVHM3481'G3l,-)XrBFBm2ekM)Q6)ZV
+lj2J'TD[F!*E%di+C)SeEhEi958R5JEUj0@T,[PqCPQ9&bkKb!DjeTN-LRCFircE
+q3#Nl-H,3hdIc3XpiY356E*jT*PBVHL,!4dSXje'Xmi0U3TU))(mpT'qm+c$X0Tj
+k0Jl,HV$ZNVKjFEmikCIT[BUpUcl`VS&(qq$C3@1%,A($CB5TUNBPAa!EI*daQU3
+*U$Ld1(MCM-rr9%B"'PJ*cCrFYfUC8+Q$DQBXDFmN$%c)h"jiEi1e(rSU5UqJ&[2
+aV[8DIY3*NR$*8h6Vr6lp+iF*[jaCVTrNSLFiF9MC9kfb*91@)Mmd1riA$mJ2!)e
+XY3a`Yc6erb(NN!",HX"HmfF()@5V&&!33RqT'EDa!-E-F`!'1N1h!652lemA1(C
+BNiCPJL[*I`IDl8#f3B!Y&dmhKA!cZpI3#6`BH3bVL,Bf4'(e(lF,KQ+$fJ)iI,J
+MF4,S)8LrV8keb2IB"H,f)(8IjTP285m@Z&(lr'-'9kNbRRQ3!$#kk!Zmdc4Dlrm
+R-DA6jNeE[`MpC%cCbKYKK`[8BicQ`'2NPFRC(KqME@+fi!S23!ZcBecC%jfPMfc
+qHQ)K(MQ%2mpY''),%8(l-X4#39p2F%ZHjI%`V@NbZRV"N5HXd-63(9eid1cBm+F
+FrGRYY82HE1%9mj6rrQbLAZblT"cE%e2hZZ@rlLLiqcDdE2qF3I6@Sf%H6dT83Na
+,pHU$@(fX$Kh2)p!Sm!c%jJAjZi[+J#IP`T1Y'Ta"JK!VGpm$8m'RM'I+"hU*D+P
+Z4N%fBQiHc+8mT(I8ZkA#eaK8iBhj+AHMJVd&UI++N!"ej#@f[DCiq+#iiLNLb$!
+3hIPjm889p4LT`*p,Fc+1'Xf&JL6BBhdCTcH&rf-(#!B%UAH$'a+%PE4far,#3ID
+THZj$VNLb-pYFmLpcL@,f1$2@e000%c$9c6K2L,S`T%ZY0&2i9XK8Ph3jCI!Ya&(
+EbbSQL0&SHV"RUp`IHCd`X920Zmj**`S6mDc"hEQR+2*FKq`CB5+6#-P5UV!`SI1
+&@Ed@M$8G(8k`0rB`1BJbBZM#%kq%1SV**)ER2aV#@LGChGT*'")qac&)H9ai-Sm
+*b$VG4mSkTRMpP9,hL[!SLRKfc(%`Xlr`LGF!2a2!(eH3!'p$9##6(Y&Y'94GC+L
+I&TAf)SQG"(rBAErkRrmFGJ)00kTMmJAF6Bq`mTr,rHJ2!'dd2%,311IV2JJYrj(
+ficEFPI`D#HmlTCQl62[,JM%0J`Dd(k&fHY(c6%p1UbCX4m05qBpTj-VZ0QF,FLj
+95DHd6d!4De,&8!d!BTShrA)5Zma4`'qippHX'GLB2dd!aj@0%m,`$F,iD2QUBP3
+"RT6),kE[8VbElcJ$)flkmLf9DaqT`8q*B[Da@r%mq(`[m!5b``-J&`KTpGLh@-!
+Kc9h!ipm(H+6(BKJ"&5h+`laG*(HQ5T!!9(HfZDpIqK+-UBc$8`5CFG*3eiR[mP[
+i2LTX@4qI#fhp*VNq6fYR13-(L,lXQ`ibM60YH`9XDVl4P*P2@,EZm9E`VT8VhlI
+H'*CQ%IJ1'PQ($IFD4@p'V+51A5bj-[P%0%JM*!rhmFYBpFr(h6A#bDkA%"F`@mA
+9'p&`AUZ6p[aGLZi0!341mi1FjVGE"$HmRl5FUlaQqD'h0VRe-TUFGF-hqkaC'+c
+0cDHD4Q0021dNB(9,Nqer-U4EIP-$@MPLY5$H`USG1,28R4IldD6(aMYHA2ia(@p
+884h(c&VFaJNqLb(XZRD(1`hh'L&9`@e-G#qrcYDib%fKd(,kd4aXJK,J%-`G@&k
+R+kALKHMLINrETq)DFR"*-dT3LNcqR@,@TYaYaeBKNd8G&2dfH8ER3VE#8*CpZfN
+[Ajd8bCXeM&!'GS&R'8lHM28+%brIm$*L`YRdp$A@iI&#S5SfihpjCq(`)XX'%k8
+H$*HA#,!2Tj6l2YRCBFir4pVT8*!!H(`pcR*Z'r-(AEhJXZJ(P)*4S38h!Kc&EF)
++,peHK1QhaVB6M&4p0+Fmd,qq69j6bPcA('(IAcc(DMQ[F4[p$[4JS,4d,l1c9ql
+kk[MZ0CXLbUf11%$+UmEV%Qf669d$!Z$H+%hBbJN"R,k+j-5XE%q+"kb561`IVq5
+l8SLLmAPSUh6SiHX%H0PJHE'PMIXl!V'hT'pRG!)b%ErP%$AN[,'JCJ0UIII6)`*
+f-*-dkH,+"!28HN#8j5CFm['pfdr$Em'DZ*ZSN!$hajhJQ+D+[*03CL0U1#q",3[
+C"i''jSU9Aq4qKAfF@G9)R@`UkS!8QV2kh5PK8ATVPVKj+V!mh$XRS,!dEXqm[mQ
+jkp(T5!PIdXXFcKf$Jr28kP)B-aT2G#4(,XUhp8r6IC9d#[1&Ae@XDpAJqa!QeTX
+,0@Lp0'0%MdlRke1&N!#m5k'Pa8@S![$hfLR&CHXE[p"a2`[&pV$C2&r3lakfi($
+SINdCK#)@m2[lr4*MVCc19BUN%&`bE[Q%0Der)ZM-HS)!I'mkHm9jDUE%r%DhdR%
+Xd!pB@!!2EYhH(,&ZKZIXdAdAp+9d@kYcPQUqSdkDXfB5T%Sd-qYid3-aEqaU33!
+pZIKjl%X!URm%3-KDe#NqfIch0[kPq&`SiRGUPNTTPm85d-XI9K0qrSl%CCU1i2R
+fJGmA%fJQYXV%G%-kqd35UJiFrYYq9eZd%3V4IY'pam)DKij9l4K`bRFfD!HIdda
+`)Dd&0BD!8D!85r*1B*Yfr,$pq)%1200F#aBLLZq%dfVDepYr"[+ASlSc$HLkiCk
+&haFNSYJrmIcj"p,NRA"P5ABC,TZm-rJ3A,F2IYM,imL0PS2J8V*h5ekjMh1`QF$
+AF*k-Y%fM*QI@`&9)lU,jJ`"$%Ye`BVHffcSr$*-DP+L'k$qm0em*9!eQ+PH4'1U
+J-!4GVV,@8'e24(b+ZNGcSjMd$G"*`YQSSr"qh[8$$Q3l69*B@84Z%)*,b&l9H#C
+p`5G`ekMN%B0KXia64)(f'JQ'@YNXT90c``%NE#IDaCLM!b#FNAYl'HQ`J1*pT,K
+'S5[@p6c3rI80ReQ"m2M0bX[U+D9&AXj+hUdPpGa(E!A*@hC*Pr6$#`UHrlL!flc
+(l#X#Vm`R%h2RLIEB,iTL'R)SL%4+QfeCk28jZUDVIK1J4U!b)ap+KQ[*1M+18+C
+hEjp,r%4$L`U*6dVfpV0TN!"8c3f$$!bP'[hq-2%-3GE6+rE(L"E'GJ'f'Vhcf1U
+hDLY0"%&bcBYIDAcM3A3QFNrhHelaC)pCR-fRfNZQ-bKI"+ehNk))X(FeXE!2&R2
+N5(i$i!BL+i2YmXUbCL(,"fUHS,4eeeYrm3eMF*S*k'r#6TaCN!$qpTI#$0*M)E'
+`A&CTbaE'la0[h4RHY0`VN!$dN!!1[[R%4&G*Y(Yjc'dd@@@NbQ@Grp3ITHHF2Ec
+dlKb)*N#Qd8,&#T+Rb80j&8ac`V2`,6M`)a+c),25rlFm@XC(FhhU5'FF'HA%QY@
+J"reD5M0hBG83Ze#GRKc"AlfE&&d(KdT-MVfBdSP`q4"+SlB5c8'2P2Be$32IllY
+a)*dK&!&JCbNLfFHV'jKP)QC"&bA9m8-LHfkj"Pk"F("F@XV+X#Gr@6!daXC`UVU
+kAlZ04UbPhZUrZ02a&F%HDJ@#m5SPbHph2#UDZaL8+Mp2(eVZVEQRB1bAV3+Dp%D
+3!,'k,VC(Bd-hP!UkpSE[h4`#Cf5U-'b9fc[VKC8L1[JQS#*NUbXXi-SU3SrC`G"
+)'TFNIEURZFGcB$li24(XN`&4h-NmLhrim3('!VXX+4mHF-LjIP%"hb,YTQMkp`M
+U1Q,dck9R%H9UF"2FE2RUkk`*iNJ`f(dfh1R%rb$X2q%QdJ1`%'ZC8b#LN[8cKNf
+'+-C$PG(8G-,SdeBk'lPdr$)fiR!qa1BELR3bfABcrXJ3,Bd5MMB@Lj'fbTk0hRU
+9I*q'(K[!+'*CVRT6k4"i!rQ9JKBE*&Z,E,(BX%fVpiKUb'%d0i+3!&6m@)Q#EZa
+4T$[CPD'LTRh4d'XA*@q0!*0"b-4mk#V1$'%ac,,L)DNc4XQ54mQD6`H4%U6aJVI
+bGdkHmS%NIheK-ZE`q#ffaGV'$mZm'[K#!!c5,Xd1-$[l&a`&"eA$B62V)"eFH5F
+2kjINRFUGFB88L1F90VI&EX3GkHAU9[EUYd'14PK2D-G'dD%HVSCeAS#UR-qA%fj
+XN!#R&qFXk*dNX$B,k+GS14Ml8VD6bfNI[1+epM1hkQlC0p@3!(N,SYMK&p1L3&Y
+%fYc,5l16(hb*MKi`I$+rX[p',Gq`'HC'096SmLm!U6YQS`UhQ889E(p+r)-'-eQ
+h`AJ!"E2+bPF3(3&10kCh3eeaX2VQdeY$5dpbSF6*[D(P+JLGcPhLIblCj,BS(33
+5YeAJePKBNXI+%pD'4fU,@C(rfIeeE9IlFc"faZqH-R@**!hB1H+%jGF*5+)6[64
+c1GEZI#abBr*c*P[idiq,H96#$F'dRXE"VaB*kD(*J`hZl++aB)ffle6p+j3l%Y@
+C4LjS5MChK@*l4Ca"Ll`J!eNr`q@$,e&X)F1!F'6PMZl1N!#+1ZCHH9TkI'+1[X*
+pceBKFi--&f&TN!!eCSZ[6%KL*`dp+M%R+`)45[F(kZVmpdp&pI(JFH!mJ3kK`rJ
+b**%IE[K0cqrSqcKR)J&Zf+S'c0`,kC%5f5#3!%+I'ZZh,"[)-Y6i-Re[)V&$jL2
+,6Y$KU@#f&#''UYKp)4Z5k!EQjaP8rPflb6"P@,bX#J`eQbBT"f$L`1MA,(N`JmU
+TFB5qdZ-$c5CEAMeq$baRL!l$0-1EBIk3!*R&9H"2LYVYNHGipk0kEI+Xd+PVq9h
+dE4k(i6cV[`Z[$beR&[D)`XXk&9@E(Vd5G)qZBVrUA'Pmb'SHe,fN"3C+r)jVjV4
+8L@+S5HeFbHIMd`IBJYc(aBMacpaXBiMmHjVX&A[CJlV#c'dkM'DH!DF#,2J34))
+@fKiXK-6G4Z+0[!eIL&#(lK%)2SDi'qFGj&P*0[M"rqL+8A[(&S6#h%IcYH'D2fD
+qU$fYm8$)CMLI(D1,PM9Ij(!De'2J2J3`$d[(LIQRGUjBb(@-C,FiLU`5S[dTB+i
+pRGNE@ChqM!l+Z0D1qplcpIR[VClA9#FIG!Eb"E8S&ZA#fa*f'4P0P5(cV%$fa9Y
+RPZ5r!X)23ZHY"ZDA8cJr5mUC&)&L)K9TLNdi4+Pa2mfBY+h'MdU!K#0bfcC#qN9
++C3rf(9-VE@jiYfPP"J"%VhT-J,!KB&!N9R'[['6fGeTKT3f*9'eS3k%)pacm#ZV
+-)[QjDiLf*E@*"@0l'I[ipjj*YZ85(XNZ2[QL8IfX+$He%@G,9"rqmLEBI0DHk2p
+#F1&5!XD!i8MH`G!RPRfE`4#+#F"+2!'-fl+KRpAPj2I[SlbUUe03MH10d4TKDe(
+ja32hheHc$)0Ur6EmSVa!9lI[SHLS+QdjiC!!RYDi3i!JQ-#j[F38VZE(jE+'(h3
+@TADBKGMPG6YL2KCAkY[SESJj*BT0(`B0$qe6Kh`DJr)kL2*iAEjE3YfI2hGm2Id
+*VK2T5H%YpS5)JjQLPq1pji&8R$Ge'3STmCXSZYG%Kl[,$[p)Xq[r@-eh6A8XVRA
+$6N$BA9cTAkPN)Shd6hUP,9pJ@(ZQAIYYXre5PK9CFaq`ic0Q6lG%ArJdkPB%4Cp
+(m9qbfqjR4k4D"A"2`U)J`QC4qeZRGb"9pKc!YVE@bj3,aQm&M5RL*!%N8e@BBJr
++l)4%)4DlT1FPR8`r@dSIl#,RcbkUiN&-q295V4@mXE(qj22'&aA6)EZ6kaLZ#C[
+Lr1B))%l4UrK1Sq9a*YGZN!!3DK81*bP#DiekjaFN%aGD"`fb%Q8E(p!p@",*D-Y
+%T9GU%5E5N!#9+j*h1U4HfUer@'"L6U#L5K55mqh$J8pZ5R8`34PK'KG%32%M-iS
+jDlD&C5JITk[(PHcC,-pjceD,h[6$R#f,B$18ldaH8rRCV!R'HZpI4P0M$CJGjC&
+aA6R@bXrb8!MjapiB0N$qrd`'Hmq@@Rf+jkdJG-3L$)0Ibha(`1LGUC`#0-UE'VY
+4CfIFCp5d(2-N!S01Z,CJQFmp#1USRlc-h*hb`mQ)'P+lI((VlCdD!`hEr6S)mah
+"4Y,UN[draClU)#-X4[S+U4CK8"#E+%k!6!8Z@'KAG+j*YL0A[(([qjYD)Q'k$Ar
+%+"`p(2X2d-RpITKijb#Zl`VX5IBIRQRAU6jF'M"+E%bUepKQ'XUAp'*"kldJ%YN
+I)f'Irmm8h4*52f$dK3D)"d0mGMkQ$f)$[a2k`X@!I[)k8-md#0*Y4N(qQfaKU4Y
+6ST')GpM@@YK4$U`l@$@lPREj'1m&&43RU8CD2QU)cbEZ3I)fIQ(ek0mRF[X1631
+@0$#k6`hN9PJJeq3'1!$%fA8eLP0mi*iZRI06mCdiK&Q0(ak,BmHUmGeZqm5J,bQ
+[&pAG)$4NcmFcNjS@08)B[!Dr'qdF#eYl1`lZ+eL`"BVhdL#q(Ym3dB-bl'AY`*'
+a@IcX1+2d6Vamr6qi-%i+)a8+)8,Aa$YVq6"ZU8rlUReM'[jTcHf29!e*rXFIBXc
+F5UJ1(`RZ)")&1Iq#l5UhpkP,FG*cK`DT!'RDaCA!YX6q%p9lDZ3I2Q-[N!$1(k-
+p!&kep*pc*(Y46[qpC6%P*A"ZVHaIJS))JpVEj8[)m*SEMkMiT)Lch@HCUCl-J$D
+-FKEeDHM+'mVF6b9ePFeVM,+UV`Yc*PqaF'Sm$EI[M%jiH6`)r`Yi"9D1NSX)J,%
+#N!$YrUiH$AbDa,k`FG@)keVLE9d*'2$0f2*j+$f'hhhQrJ'5#E"$B,NZYXDLHMM
+p!2UG8j'1HR5VV-58i)i@!KAalf-k8+`mCqL"mQrkjLK$QN#Z(9H9PI[X'X[F4fd
++lBheYCCBAQpJ2V-e$`ihaVB1U6mRZ+$MB#P6$[FeT9HT(f,DIBe4XmR5l@9`,64
+aIbq![XEHQmP0[lfHM(rABjCRjf+iJ`-"!b'TiYG2X"r&N!#fL9A4cN9#2Z2N-50
+f+T6+iKrNi"a2C`NZ"#[("p!k)(X@T1@A5r38+fF,TG*5)'mA312KENkljj%*C0B
+$KUm`@L!-Ead!2"eD%pE9RQ2%i6$pZ"R8,Drk86kYV#Sp383$e3+[e+ae0l@SD5I
+F,MQb%"(5+4PZrebl"XJ$&qJ!@&eP#mq3!0kHFN@"lmHhffr)N!##&24mmB(FFLG
+iEX9Q2@-D3$IM)jY6H)L)!rb@aiTeDPC(fCm#-a2N,YQ#N!#,%r+-Z-3GB9fHVe(
+$9K"$$Kmii39+*l$H8AaBkMCAF*c#8$c+j$HF&[$[0dCVN!#RT!AA&4Alj2iT(YR
+HlDmD9qd)Q(&bY[2X4Y#"I"DYm61qG(cL8F5+JR2ih@Y$"INDHU1Rd3F%YUQBrFM
+Zc1-5-$9#AA8&)pp686fGJm(A&a8)br1Y$L-rNV,5p(4rfSQY%b5NaCa2(HVBR,K
+8J%,"e3S*l4TR2Z'J)U3N'lX*E$rR+Y1i"-2$K41*PSc+@8qYeNN-frCQNJ5QDT%
+B"UFH&dMBC+rmkr!kf-CH0-brYJ)%c66U96-X*m(4F8!L,Q!R(YR#G1#CmmIh639
+Nd`q(r!%&lD4cN!!q,(jR'`HEZ-@`PT+-bCiJE%ZSpXqV&Hl)Pl[)1IZPC&@,%'+
+UF5+Ed#phC-hSJ*-b-K8CH`mU1be)$3QFYjAeR43l!h&`Uk238YP3`RMh4F3GqJ+
+AMBi3Te+(K,Tk5m$c+fbjkddjk5r9'mhVrY[rIVD++mBJL[ddrG,5"*498cFQ"Ri
+r@!MKK*!!rXNeQf4pqjZdf[IDQ,M10q')Z[$XLZBM#%I'IjC#8dD[d3q9b-FTQ$1
+2DHYe8*m6-&1D`*iQ2e1K83[f!q!Xh!)DG6-IP(dr!b*r9!rqi6MlaFYKmpbhB@q
+PkJqVTj)JCY-[QQUf("DPK1lIbk[pq$prZ0IbXa,`Z2(ki@Z+"L*QAX&V$"lT2,d
+Q2-Vj1mcb6kXd!FNp5Gb3!#qQb"aD+eP4#c0p40G$Ik'&LDbQ30HVUk(DFNTeS4,
+1QhDP#)f("aHNRLYlBqi%)la0ETEma+Ge$cI!Zp3[2j9[!Hlp3fDQK2CSaC,aQ2Z
+f%Ah$d9er1'pT`L9[&b-,NLM)KLci$k(Cm[b3!1PBa#Ml#FR,ahRd""1K&)KT[3l
+&K$MNN!"&0EYKBi"Bh`5,9kRc@&8fAdZ'ZFU@h3kIMVXD$#0*,`[kmbbPI)f*V4V
+r-J0E4f'l%#$95``116"Z81hTk3KQcN$#Z4kheLjl)U+-[!kBGT-"(,BSm9Eh1+E
+9[mQQQDXd+*@j$e@DTPH63H-'&Acm6Xb@#rTT#liM+JpYmEe4JrqZ06M10(rRU'P
+2p[Sa,6RFMSMB6E43N!"JS*`D1p5@SX1Dhf-*Lq8SkYT+j98pb`2LjM2*alX300L
+84qB#*h8Jji'LKdr!Uhl,RF[",rKKJq2MKT!!PP&BIqN%Y%VNeX%DJ4$r`NS*M&V
+*VF[HSLSjk)R$V'[6kA$aaUrjG)QPl)A'"S!aNI9Cl@N2p-A"iClC5@"eKmK!KJ@
+L4cD-Kjr"Q60T&#icm-06MH!*NNFcj'eSAKJkV,6hFehQEp*j(jDYD2UF94J+Sc4
+aM+AiKQj-R@MCLaE%"0FAN8S-if-lALeZ6fjXc1Y$YlTSLe5FdXE8l"H*mE[BlmC
+!XElNIV08D*Tb6(,k$[m3j)S4YGrd@Vb)dCAq*q9(BV6(2c0RIcCpMYe&"jrGiY)
+8AdEqr`&GkT55rIA'FP@'+aU69Y5T&1"FC9MJDfG09BZb))DY3BapmfBA[#EXA8J
+r589R%aG&0@6fcXTZ6[PLNhESl`AVSM-cR0rhb[kNKhbDF0a1CL8Bi1BiVRKlcj3
+b$,m$`d6[!qf4D$N6jhCCY2T'(a#ESKVf6D"@HHa#',*)*hk1JVAjrd5KZd3ZC8"
+dE(+e!*900dehGI"IKNBjX!pc+#hYZ9'HqAcLHqLd+SPDUqca3'a4L31"mLm`FY"
+cpj6D,BRh-30DF"R@Rc6lGPrVhQCZ6AlE%M9&k`i`4+(Zei2F[J&bQSMhKDm-BHe
+P3@(1lQb$B[JH+`@iY5,l1H%VTiZAE,&dGJ&h+LVVNlGc9N,afjI1[fGm@[5bq!+
+*LfGBNpaiY)H3!)*&T['hQ0Ej2T3UT%EJI%SYQ)AN$be'ahG2,6Z6iKqJFTEiimR
+"(,"H)AB1BV5DVc3A2KSV0DC4qSSR3FHmS1VKdErmIc9PK0(qLdhLB#@4@EJ5F%'
+)H$E6IPj9f4,YJCjJQ%(UfN@r4PB@F8Z02XCPaX@+D,kZ$E[HjBV+hl(ZT6Er90b
+#BGJ3X,de!G2&Z+XA9Mq%Gf#b1(i0bG+)T'2clq6)$iNdIMab4U,XV$laZc2%8+B
+QY4Yp6Q4i8X%C8rZ[I`2Hc0@K$,US2Z1R'jr4ZX-)bf[M!FPIGZ4`ZpMbSL,V,!h
+!0pKTR,c+bK`E8S1-lVEZfjQPUrNNL,DMC6pj$Tji%fHRY6lm"'Xe@0N)b18CZ!B
+ZGG!cDG-IThIK0&'[JL#NYB&S6LSbC0DMcQG3EY#c5Np@lIj)j2G8P9Q-Q0Z9lK3
+()8dS$TNT"rJDMa@Ym1HrapHbXE42p+PN'pb28G@3!25+8Dr!d@GD1CLk9!!+dPf
+5C#'TX+'ZhSU$1GEfBEA80Q9XL*0Mik'kVhfCma1qYmcb-("(c(pG3-4YiCfC#BG
+bUhkXEC[aPYqXaU!YHl1QI80FMXcB+,e0!f"$8i&%6HR$)i%llChd+dD@Qha8bb9
+lb[j`KmP[T6FN*l4Sp'LlZ208f#Apr1bLa``,K9"*+JE+q9ReH@j'p+XY$(rLBLq
+YEk*5eIPhLB(B`1V9$iM$+[2iFR#2bIeB1,&aYeME6G#a2q'a["'cGk2pZXir(SC
+%8&kTpAbqhCqSIIBSFL(4U+!ZN!!fLJZ6'`5J%D89KbS!IL39E[kbIA6K$%h*IIr
+FjaEFm"m1'&6c(fC"PlF+pEHlYdP8#&kM*-VDK)pXJa2pBEPCpT-T8V)YEP0PfBH
+e#69r`hc6fQB3VPhZ(2*M,CLiP)-LT3KhV2GIZ%P)&JG@+6"1S5CIK2-l((m$i[k
+@FkaB5ES6p9AcMCjk%4jdaPj'$m&E#Q&9LdQCqP63BAEPriBmeYC+IE8PC0'!IpS
+ESabGGB`QF+a(8Xl(kIe(hIVUkCDmSK*Efj@$qZPaH6m$`IfRN[@L#I2QYCmGXN"
+lXYC3lP`LVH@Y2r$-k'QU[mi@(@l30"BC)2!K"*1PmV[p'1X-8S6P'KlUiAcjYr(
+ZLd6CDC!!iYGD"d%rk4cic!S'L9j!#,VY3,YGNk945K6[Z9L2QqrMYBkM+PJFZ6c
+#b`M9GhlYG0pU+&'9-#(cFh+pRTLD'J-kebJ#6Vr+e(j#l`T@rT,Qip@0hH6"#UG
+r9ANr*V,-qG(*Yb)@i(j!Y`qe6mDbJ6NQ1TGhEV(2Skc+A8`&622IP5$@HqRRk)Q
+cqh*jVD2TkbQi`kk`kK(3UH@`B5F+0SMrerNIIQDpQ,cXGFPXBE)Nl(%m#0IhD)D
+k@TBmU34"KU3),cBF[[&UMKZ6prP)i"cPq`pppY"jH5Xm"GK-DF8BXhP,Gbd@hZY
+hD,R%!B+pi9dN)['kM0cPl8MY+L%FAlR+4p%0M$'(C4aH!Lc2hM%3'ddf3j`'Np6
+jqRSa3cXEG&d#e05M%YamdJCe`2+TBDEcAY)5!l2VFUeRK(R53F0&"I(pQf[lG#5
+Z%13TMlZqjBqK`#[6$2*rTA#8rRem8NKr0l"[GdR2L#kJ%64SSZ+B8(X9[cDbZ[-
+-QK9"I[jqML2"0bBka836+'4Y[I4R'jR55ZemD+""SXr5*iT*8XFS$m9*kVJZ-"k
+Pb&F3eV5M5D@DHBeTT!D(`&A5-rF3RdhbJ[%@Nhm6qfFE,3mMP!"j'+rCX1`SPi)
+THLJmjVTqRdpReDZXpm[CKIN,K%-4b5P`5Br)b-kS&8i2ea%pa+h"F%2BU5cjZ(Q
+6pJS4H)YpZY1rb,'5JNQ(bRNf3BPS[5m1%D'mMS[!F834ARTkaQFHheAPjEEbr"0
+Qh`3i0i$CFVSfEGFhj`Z&ikZ255V1)VRa`*[+*5DX(6jN+cbpIj!!2FQ"%+PL160
+HELpb6jHIFIRMf,S&pLb2'N68ekGb#aC"R')irKdH(A3i55FdJ1UG+E'c*'94hf@
+T!K`DJYTpir+`E'q[iC6+jZULAdQfHT[2+F08,F&jX)[RVGdSPe4`1q+bMF&kFQV
+a1V8kaU)MX-m65mbpUH&q(4ScYCJ%+r+p@L1IJ@apXPUX)P5L$mrr[6G9LI%+m'6
+ll%qCG@3GU$!PcUFIRdQN%2(R0Um%&6#,N!!T,b#9-9M3c"%J3$@EeK!0h%TS[,8
+Kfb)YRr`T@$)j1&il28-362Y(Q0IiCa2E#8r"qZ#4NM6%HRcI"*(L(FHemj0A6*J
+d,,EF+SdAQT(IGD0T*TV[Q)N,a$9MLQ(6Ib4A$%+4P!B)'r`S+-J&35GR1hA"!QH
+cP1Fc%(,)6'`LX2Ie0h`CIa*h8Zr%A2LZX*d#pi`eYijG[hk&$afhCZq*9[hQMH4
+dihG9LbI+NEbX8`9jppI62BU2,$[YScDDLU"mMJLkI9)IAbfqX'93ZLIALG34Bpr
++jaeDUG(UE`&#,,iKKbR58)r$(qC)%YbHC#F%+LEYZAdN6&@p0Q$DpC&RBQ8I)QB
+U35DU"2SS(M4QIhK)6#f[cp80im'qQ&)TBIGNNehAH[hif(b$NPl*fD#*C[+H3&,
+[ZJEkcHm$3C['mQ1*Aqal8TfZ1F-aiNpAUcVEZYJpKe$F+Fi8+95PKDlIUqbcQS6
+E$e*1-4,V[DP&[A8B@,NZe(+EjBZ#PDP$kVqVjXF82aL!%)r[Iflp2[qQpJlk+1S
+PR`Ncf8Y9XG$*J'eB51Y,'!LU"1Ka5N%Hrfa1N!!)TIH'!NUeG,0Yq'i`MJ2Ke,(
+T(N"@V!0$1T8G4EdS!3K(FE`pDJ#F$Bp["&!64cF4#BeeC@AhpIPhZpEX0Z+qdIX
+6'49T8R"V`bT8+LMh5BA2R6i!EGr-@`I5cM[G0@X!BRN2`lGQikd,pqV9dU(ErM+
++DJ*0GJ%QT!#[iV0@a*H#Pf,&""iP6""!0Pk%BX3,Dc3M62A6HJ,%Id(c#%Cr%qR
+kaTY%I+e*hGHHJ[K*d*)K`A!E4+8MQhIDG$"h#%j+KXm8-2GL6UIIRk[$EB##Mk$
+*mbE&6RblEQ2"G08F9h!*k"@d,3dadZ[!F'jDI1R,#I%1!!0E`lIbkTS8M@&M`jr
+Sql(F54H@TTZ*L!N5'!cl%QN@5Ah6-Pa)EA!RMeXHqU%#lUSNEQH[rKm@0!LM0FU
+[mhXkp1dT0iG(9[MkG&Uf"GpcrPhaFqY#I,A)#IN'9TAllXHd+e`YN8F"21rIiB4
+QH)+,*N1(RRbDcLcIPjpQB-dfJ2%X24'TK+2rljUIM$Zj+hR[$$EVhrKemB"-*"A
+FcTe1c8#HKcYq`*'SA,2B)[5m"K8Jle5GJQ14V$Rp,eDf6p&kr80dV@B+"!fFZYB
+SN!#UZf@CVlBqXaK`,B2$i[!8lHm-X!2`N[NTYqdI8-'a5L`"Dc"b"[5qF6@4S(4
+816G#&['XUNq(%4)NX`[cFhcESpG#NK@`kelSLE$"Ti`PM*ek+N#iFMKX&+VYqrk
+Z'l9&3Pc+YpQac6DZGd!*bSipRhi-IlLe9RLlmG*509$8IQ%GHTVH3U%"ZHFCM#1
+9A*IKmVdGCrl`qY`2VBQ2$ePAP"L"c'TCFF9&4(LMf*!!S6mArT``+ECLq#d1NdG
+PDF[fZ[UaelmJ95H2Rd"aRk@9[[LU1e)h)E(alirX!d)li2Z(T869,"lRq&EVS&H
+Y@QPA)PI@l-#%*%kbe52jI&#fJZmF5r0'@#Z(+eI(0XbhN!"-%p#Vcp)pkXh+'FY
+U'JhNafmQ*0l65'0pQFNbJMA14k[9LcmhqURBckFNPDa"kK3!rK-'FYHq+e,&240
+aV+JL,F*fLMEF%[FECQ3A)+qj*ep+%4YbpHdmj0&369jD-Ym0RjGEhXUS)Lp,j`3
+`1iiXUR2ejDP'rU$LZ%K2Y5!)V`-!`SKQTAN@%G2X!T848$UDDqTrJY*C8VSQ%5b
+3!'Fk"fSEYFR$ma%T[a"fKTN"Yb)f$-aCT*)Z1dhUhfMaE!miNKPcBF`#P"PiANb
+4-SMkCDi$jb`USJD8[$3RK-"drp`l'a-&Y(B$Yq)[Y618%L8RZcIm,m22QN)ib"'
+CAD!Y(4q@&GbU&"Lj)k)c-$9i#9TLPF-ED&$[,k6)*XV#)P'`XR5[!T*[9"LNJ%U
+cE8)kpcPLTHIfL42HQU!fe%9p$@H3!#9Nf&9Q*6,d`Iec!4iqb1"e'el&E9fEKNa
+J,3`6S9E1'(RY*[lLZ03$GVYf[-L`GNajAJ#L3*fCVf`JSIbG!'FaM35(hJKNc0f
+im-QUA!l%IaJ[1dBjaDPf4-ZedK'G[-KFL@'I%5$!LRBP'8'M6r3aFM49@FAU5P5
+f`&[e9c)3VabiYYCHV!VmE#KLpIhK`M!q1cI0%!&&X12q)&99#$6C@-f$FVkNbpf
+rB2MJT8MJ6+LJjSX@-&5YHN)I91$6fY`Cc!a+A+XAXN!m&mZP3SFmC@hMD5Vm[88
+&Ee)&4b6-iCM95Kj`)TXP1qZ'[+E1JAm9aliBLQ3BT1&NprhX9c2VXH8e'0-MI'%
+D$$KN-Q"`hr6JM[3k[RB1Y[0H@+*LGj1DDKK)P4Uq[*([i6$Kl3aeM68Q8p-j"$a
+J0eCK%TS*``Ua0DpUlGhTEbB8@60G9U)%bC'@E0T(4"fSF+6l3aFEk`2LC![`[(S
+iUTXaSrS!6Ebm3`I@AS[N-80#3QJPN!$d$TRQme['apC1BrecD(3#U)2NL08dB(h
+$1rp*81E,4+L5Vf!F1aJ3%rI"16M#R&2U2,!rYkSc[a"qV5+bqFpUlG,IGQ+5c4X
+R5SLCPBr%!Z,4a'EjqfSXmM$T(,EYYDZb*#k&Z3,qD1`E#N85TFG4F)dXq"$B13S
+ep6)Hc,PZA1S%f@jHBbb'$NRqie0@af0JGjUkTQVVjYmm`M'-FZ5YH+Cq)[['q[d
+`R1AX$XY&9DETTQQQi3L8ZpTS0Xe8hV0#i9UTTVN9F'U#l&pQUr+,CpVCKPj'VY!
+0q`YRGI,$Nk*l4Jj2DfKc0p!YA$S,E4S&FC,H$XddKBIZRi*ql)RIIbL-CfdB$QT
+$ZDUcia#IpNbVX5K`V)'23LTP$Pma'mKG1(f2G9bMLpf$eVaKb+TA`E*ZP0kGP9"
+&[Ua'XcIBp&-pc,+J&0q3!!QaV)#1cYJ`)#CpY6P'SDeR*P3+!iDHAiVaJ4(m1GY
+C)S2iTm-X'+[ESrXY%QCiQ6I$@!cEd0c6Y`'F[mP0FKMjRXTR65(QClUIdU4FKHm
+!88UH@C690-82S2PQ16-VpQ*c&Hq4[Z%!a8eRZURQ,'T@m$dVDjAQ$X3qe'I-F+p
+Bc'-kbXhEIiL(Uae-&J&R2N*V!@%qE5hF@VT4C#@5'X!rdK5mN3Y@S!ZFE-0`8&2
+%TTZ%Q&+UBDZ+-EcaA6IXcBU)0MXZK6ZUS)5",E8[01-KI3,3lrL#+d%bMHiM$qr
+al"kY%d09J)3RcXjXCB)d*42lZP)kF-*dU0HI4A*eEMJE)D6@"e(`!'9eT@N-4(U
+6V98M`-d68k#0V$Aq*2p$PjBUNX(d-+p,j)G`D$!X&aC3'&c+2,4YGIjZ0b0m6DU
+eqPlA!q!*-I#lCErDFj%N,e[qE5D!*fCZSS-3p)QEimXPC2q@Ni3&DjUBAqGJl"V
+`BVkUNZ[C$h3PJ1GHNDf[Uk5fKfrE8UTTC6(dE%p`5cK5f1"J@pV+%djS1qJ4hN1
+'k&LT0AM@p(Jm-"P$rqk[Ff'041I9YSja[RK$0Mp*NZB!EmX1Ji(!0jeXV9P6&$f
+jNKCVAqcX`i[b'1JTV'EDj(phi#[Z'(VKfYD!%FU[p0i,%ZpQimDM@2,#k!fE,ri
+@(UBCrS3ACk9DlcU%PhUVr$H,KaelQbAim"1bdpN-+pjNM%j4GDPMGqV'%XKA%mi
+P0F2aj(`UmklEQkhBX6N29EeH282D%M6HkJ#h5ZeQ"@('G(h%$+hHmQc*V"8LJ,4
+iTL-,#+d9iaD1a0NU+-V(f8d)MASmF945#AQqH"X4EX$5,jkaI4*1FS@MG2[*mpB
+++FE4,p!KR[b+!5eP'D!JBdXXbMD0[VNppmmfC8%R81hFDm%(M!)UBj@k#fT01[b
+9!+5X3K,0EkDbe"Hh5Ed#&LiQRH8G10(29(Ji`[aCE6kl,Lk1)iIUR!P1686BQc`
+r0)Q*9SQYVHeYa%q81k#J&(GR8NYBd1M($h'-,36`CFI`@ZRG3K+N4BrqI&b,@J1
+-54[Phl&RP5-8(eRRl[(a$C1R+NRLSr3K3a'6e''IG9L**pB*IbmRVAHcZJN)Y2L
+15N*P*R"2%c+f3AX4Arj@B+kUkT!!qiV%+8Y`B8M0dFcfqL4UXqA*(XHfkIZTl4*
+RD5JUfYAUb[-%1S4J(hB2%['HjGPc9"T0X0Z&REklE1QP3qFP8)1R1mk80Kj)TJ,
+X*[GN*[lcdbqIJqc(SKc0NHBk3hPU(KLbLeP"@U&U&C)@LKAFDH1lK1`+4YBA9NH
+(TqqK@)RHBV8CZhdfq$$R*YG4I*!!ZmS%9@rK40BeqC'QZKfRml9b33AS('qeDKi
+Cf60GPj`8RHk)YTb[4(4T'Nh)j`5$894A!K3V(RfL(N'-XJbKH((DE64IDN1mB9r
+8M*Jf(V,fPZM)SbGB@b)cQYibR04qdQqd`Vb(+,hU2&r&jYL8fUZ[ADFlSe*%(5&
+PVY5k#5Y&+NHi3lF',AF'2fd9iQR2clXK+,EGa(*6BMTq2l88R,aNFk'fe%Gca&f
+rGSb'X0*N8k8'M[,XAC'CABh1QXma$FZ+"-4HHT!!--Kf1iRJMhX%99QL#`+i2T2
+kYUpq[a"m,DJZ"6RPhNrG%M`fHHSCV&c98QdUC91FLR#"$j,64Bj21MLSl6Z4aDV
+9dCh(SV4NU*HJAKL3!'G0lIpHPI#6$NDCN48QiKdM5e4G8RQ)6iIrVb99M0Q00eQ
+108Iq(-elK68ZE""TLkA0VmH%5ZKDBeU%F(XS%GK4pA$1HPe[6Y3d'T-1rcQHG8L
+!R,(VHHCbL5qK"H2m)1@aASZMJ@Li6S2XU3@lEik)2k9E&E%"")E'0c`miIHj&C(
+HlH+8UJlV-[B6%05-ISM-$hT!2L0k++fI"aN,f"C5+H)$r!BKI((VZkflBA`%NZI
+!LqMfF##4$+JSRCAl+-LqBSAjLD`$1jcN(F#aB*I9qI[Qdld0CKNjfA@mUc8k4h4
+,`DIE9,H3!!TNY1ET2mC'fJZf*`S$epbr`!ia$S1e4(RPAJ(6(*Z&22a)51+,'rM
+4(2@UA9,5`XKf&8Y6kb8L03Si@R"3Hc03MCG0*IJRq'bVfV3"rb+Jk-eR1qQPC()
+!21-,Rl$@rC3V'GMm)1P)df5jIRVA2$eJbfViLNk+1a,LZG`kSl(iKZ`5cc@C-3J
+q4qIJLdb&b%ETe5*h&mcA&Jf-ZlIXl8JbB$()[TC-6+-Df-qcSS"Cq`hE)&A-m'J
+'RLq2A5b0NpQcbKeGpepVkA`RPH8eZdKrlM[-$`J&q1+B8bFY86HbiBGIE0GFUmF
+dakTlRiIHec4ebPrPJ6#6G,rrirB+2rD4Li##FZ1B[f"44f-%eFfp5KCLqQ6f8q8
+K$-c!%iSHQ#ABf$Ma[Z#"50!qA,Z'AfhmI()e#-N,kEhahdTBTm$#AUY8qkIGfF4
+8#ibFef)0QhkE2Hmpfq(D%(@F+qLE$&dZ[ci,UkHe$kU)%Y"3-kQA&SrL%FTmm4q
+,a64)*$[keX3Y'l9b-A'p"ffEV#*@e+prA"!#mCD@DD#L%pX[kb%'X&C-PN%m5db
+e5%mZTPMf5MAYXRU@UQiVAR2KQViB[*Fh"Vd$L,CjK+!4CHl89qcdB6*DdbNmZ`L
+HH$ZqPhSL4IL[!ib3!)AQeLllQ8NFR,K)G[!K8SZDNRNXf$2HDAJ,Pi6lNSi9"YS
+Q6XIiF-DZRk2)fiZc'cQ5rFjU,hp3Nk"10UTcjR(#D0ZXh85E`Ih`B+Y$-KGFlf4
+F$`dr1raV#AKak%4!#'eapK'f0Hq(MjpE4d)BRqh4!%5IGab5rDZ(UFZpm@+"mp`
+BdK$[41I8ZMSGEdZ@kBMH,S1b"m$rG#S-19iRT%"ILr-YHckcpp,,!2[P$2AMiHQ
+-EVHeJ$M@r1d4LTJ+HB$3N!!pQYYL[&4rIej[5aa2f@V-[*dI2%(jeZC")+HP*Xa
+8FYJ5%,rPJ$!AaASkA%kbk'VSKSc(kmbMA"@5[ESlJaIaTP3Y$qZJAG5qZYl2iSb
+pJih*im66YqB`K,Na933$QmV!)b'eY2GNjk6(DLlJbL+GTf#eqGSGLK2"i4EGT@&
+pVahL"Nr8V3fPfPT6+(CS95!3T01&*fPHri"+!%l9FrKrBRS[-llPG99BDkk9C&"
+PT0TpmlV&&1,qaGJ[26)SL[4($dQcDm(&@d"0EA8l[PkR*p@3!00%`MpS3,BblPG
+rMU42qjqMldd%G8@HmqC-hME%,IJ,L2D6jL"B*!dB,#lLF5UHZ&U!N8p4NdDEdES
+"HaC0Lh+TkIHdpX##Qe*k9D&1a0AIRp!&)iG+E&%bYGFK5kHI$bE"f24#Sbc[),r
+6r&ASCH#8kUreHMl2$MLH""TH@Zd*R)$'Z4&)N`8m3GpLm5'3!%"j"fh9b6['GHA
+IBP@BP(%hbXZ88`@-pQbAXR(j[QN#k,06NIZerdLKHBM2,BR88#NY+1HT0bllAM+
+elQV5ZLk'q2%$P0dX6mT3UKS@HK1G9i[Qbpl@HSSXjA++$9l(V)e)efY'V3eC+&J
+XY2XPb1PKa&-Y',FT$Khek8Ap4ia)k)M4KCLIbpaSR50P,aR1+P8LmrJ$3m21q,e
+L)lS8A)bbd`#Ph9hH[U6R6S'S8fHNI$`Rj(N*CXK09$8`-S&TP0%m-m*J(GEB%q(
+C8Afp9alSpYf+4RaFl*+AA'$+kf(P*"jPHj2DG-PLj6i2U#pqj-IX0qYpqU%,-T5
+3!&)AKEj`(51#qj5PP*S2r%DV*cpq2pTV+%6'J1'Sb@9-GmR!2L+fSKKB$2##!(B
+D$TrL%UB*4GXYNqU#i'b*b20@6)m'fp3F#rJ+jRj6CG&P9Y)[h(,10@Hr43#ap&`
+%A$"+Taf2MD4qZQG9M!S#Ar84dR3,Q)M)$9U'f,[D8fRX$bQDLj6f45K@9ZEdH6*
+%HkiFa@(KD'0@-c6!qY*d126cXdRhqiKYM3q0EM!VPbEY`lBdjUR1$a9Q6-e38P8
+A2UkQ+e8HVhJ"b`0`Fcjf[JbpT&K%f3lk[AC!3PeLj*T$$Eh`q#ZQ"'FZ*#BkDcU
+"(a%aQe!p4RdJmLZdDEGAN!"fZ6DI&*'!AaH2"1LE2hNQSHeJS@8aHkb'Kh,A2Mb
+[pR-V2%1,D09[cfIpJ)iR%P@fdGKmEBC&-BjIRjaD`5)!6L2*F8T0lBp"2"-+P6L
+VS0cch8JF"b&DYTk!@3S1[Ih'lUPiE-khBekLmTd[q&bh2&8,mH2IRcldq@cHm24
+MJ$!ff-CL'mZcQ[A#9pE'01MV#'F2qa3BmC44`r`((Ql-TG)YXRqBYMq(BJqJa@k
+Tfq4Z&6LeF3I6"kI&D33(k8#r8efq'Fp[G5`k$-8mbA"[bU6fk6@8EDGSM[GfaD!
+EQqR2aN`T[*X11%GQk,T%pC)1"fd+(Ym8$Q5ZpATZ*Dik3RF5ZpkP#43@9@RqEV2
+iRFE!cYLAdY5UAJiKDb2Y!bZ99U%I3m+G&QGPP6!X0)X46+V5Smir-aCN9"9E%9a
+j%LPM)Fa3,X3Qe0YUA43AVHXD$Tf)Up(F40$%ZbM)C5bA4c`I8lpkH5HG+5p-'Ii
+BjaEZU@BbN!!fIF)(GPGC`#N!'"de4G$I6B8$@ChHBU**EML9$plM@##5YPbBI)$
+-e8L(SLM-l)J#9jHeZEMd!+#B!-q5&e(&+$Dl4"3,""Ppr`T[5)mm0i0a1DmfhYe
+9KM,B"(L0C01+H%mlR%*SQf(l,J`mY@6*"[)I8m9d+N4%aQeFZK6Eq42L,J3*",!
+TX2$LF2+e$VTpDPllG-HKNPPQllKhTAA1LHqhU6p!5[TGLq@h&D4993[LE@acb0P
+c6Khm0f)6G'`iT,[rr&,1*hAdcV0RJ33)GDacJYCeZc!`[k+A4@+aR81!Kb`aiNJ
+2(cQ%d@YfM*TZGkpPLBZ+XU5U9TUS#)JPTXU1h$c0U0#l#rZ'DpQ&!lN,HKH553E
+6rC!!ZSZ9L4STYbY)*58j&S&d`IJMbA6)V-T2RaFhfYR()H5m5pleJC%C"#Kl+q"
+@GP-AXE#4l"2J1mEQ%`E%Zr`$D`1i1V&I$r[QSXF!VIVHlPNlHYJSfKNIrS1(0L'
+!T6Q5pcRUSEHdJRfl!&F&G&3%IAG)G-hMbd#LQM9F)#BI`3YNjQ#mKb+()ampM5m
+I04&[SD(iJ$lf"#T`rjQ$dBf$q@EGM[F-X&e)K[P5XE0b1kH*k$H#*R(bhBrDY6M
+iCmE!q59j[-k*ej80[l%'(L)[EE4jk$JBAXS4T#mb[$Jfqq"XIjVCi[V5QKHCqkZ
+kZCHA05c',#P"DUS)R$jS1bq$TF#0N!!k6Ibe""``dhl0mJR8[2"@Xm2-GM!klZ2
+BEKqkmJk9rIVbm)Fa@m*EhI&Blfq,b%%KlkDYbb9G8apBL1$'HAAe&j51#3hDJL0
+SdLL)`P"))&aR)c`0R,-NPmEiCE#S3p!IJ)dE,@HHA5dP0LM)6XafN!$XKN(M0M9
+HPr-)keG#(ahLSb@HGCqDa[$blSqE@F2LFP[1)D4MJb(N*i!p[YC'9mr%r()TYp3
+cD+A[lPd0Aa,r&m8md'ZR4AZYA!S0#IA'AQFKeF0faP24Nc!0EVK#pDr&i*!!130
+8qe@a,YB*f(6#&HqA9DlA-8L5iD3JD1'4&4eaNeQ[M)'$1VpqM8a@*+&Qe'U2cZR
+3diHliJR%PfVqA$!Yj&p"K*GZrPl*R4dV32RaieIfSJIp5GM!G9c8!(KEbX[QjA%
+U`j8H35)qm#18fE&peQCL,YHe3KPL#$L$YBhII,$aYAh[HJrpKcecdj!!LKiR5LY
+mF+X+NUhB15aK,UqrGN#fIHUqR9Hk)*AJ#Q'8rQ'(Cr068$8[l"`1a[*B330m1"*
+4!q3iQU9&B+T[@qEAAb%324P#E,RKI2C!U#8Erj3HJY"bAH*6[INGk8"#$9U2%49
+MG`)DSpI2&idMk6mkhqZVVj4jFi9jLKJPdpadf$S*SP!PpQh5V(XpKKi%aZJ&9IT
+G'$c+SkH'b#lFk(L-XQdE#F(TR5'9Z*jJ6#$lL1VRed$em-!era'+,"QHLkG-%K9
+E(Q15%,b&j(*DCU!['Z[f,)XKJSK-Cp3Gi*&L(fqL-@UHB9Xak!!r+&K%)[Uhl84
+qP0pd,8CX%0mVYT0m)N[X@rC(LR`ejaIliS4-hB,i%B1F,I2GeAi+MhMGT-U%#+p
+6B8aG*8)$E'Z6%BM4#652@@ik`C2@8k0'SUDApjjLT4#[DQJBTqPj(EIGpC)ArLR
+@L)$JP4lX,&HCc*,55dJ(B%h##Sm(--fKDYe!)Vl`3B&f%i[MXafXp4ieH3K0H"a
+CT&*rkc"-H'BRFUfZd[V8mbI*D3fd*P2X,NipDm(5$YdCjEHMF)K+dA1&%Yf[8i"
+VlXd3rfPDDp*9qrpc8-Z3!0pikCeQqSQ(I8E4cX9Y*C4%Dbk'UV'Xa2ImH@f8'GR
+3qRBX+8TYXIZ@QQk!E@Y@[Kl)6ja-5M5XqrdlGaBkXLZ98SrjY('d4Ii1rD5@-Zi
+&jcd-V6pec[RA1LBVI5LlKEXRRZm&X,"Hdk@9"Ph$*4FMBI,k[@hVX@-qIJ+FFd1
+I$@S5-[[DS%9aq!'6Gj[Pc&N6bpQZ1*EJ$X!X#mdbSY-CqM%Y)JaGUSXahKc4JP%
+"YfC"U0f0kT&I%hJCPCFd)8p%'Gi+#*lKXclj,E3+VJHeXU@[A[@*T+cC(!M%@)U
+LJT&,bYjB'K0B8a(Lp"e(fi%ANq)NQEDcDkQQ&6EG,`Z(Pl#T%[@AU`$CfD`8ICD
+!b2dbN!!0KC9N6R3INlLAMp8"8Q3`K[,j6pH4m[VXj+91*l!a5dZ8JMe3@qQ0HbY
+lBf8BZ5BZmAP[e9GGLX#4Q8BqUL$j4ap"cCYP5fj@TKbjda0UFbAV2iDcR,,2e5k
+*'#Y+Hr2J"pGijJp60YQ((4&4DD+GLkrqH[FV(X!4J2NcjeA#9Zf3!*q!LRN%9@i
+9(k[c`R[5PH54GeDc0ip#jJ$JJ930RSRL%dhf0`E3V8"JM5-k55Hqa--#PIHmq6A
+9BK'fY1C6RC)"DIJ46dSaXTa,+kSN,iZ,SbS!"5IP!ZVdEEj`ir)9"H%RV!*@YU!
+-Ak#lVZ%4d9BBK$HNEY5l%QGf53f-6TqkYqIH9qK$3%rUh2mjb[JHSm,ZZ+5lF)B
+!"+'!*606(TkiR"I#)hD'rGf4b'eFEk[Vm9kcdTpT(1K6jb$p*Q5T"X%KZaRPk'0
++LBHFU[(qbPAHEQe@dki&q2c"Dr6LNkKqJY"(U*PT,(Er'&"ZCHddBKYYYY4iBXZ
+b&I,@`'GSj%H*M+@#0)PY[C'*58LYq5(-*L9+60b6!CC1FbfecTQNkKqk"-h6BCb
+'NbD0`I3b1jH2h,MBDlX5$ZX6L"1Km1+jL4IEFN4`1L%3q[dL46+GYjf,PRN!&hq
+,riNj%mAe!eq!Lk3r@)"3HB'rP043I0(C`pl3[qqeMR9CK*T&#K(8[QG-*,[f&cC
+aBFF!&1`#mK-mP-'R1&NeXKEMd)iX)jlP-%4VLcTKYVVJKVkVD0e6lU[06l6+!0J
+Xa"ZXSb8I8@j!a+kL6NVI&,qMj#&R8dFmkGc-,GHQi*`,1h(9)#IbIM%GZ(bla#&
+3-pI!GX5$F1MN+XB8R52lkZi[,fRZf,U#f`-Iam68'(8-e-USA3'k`UL[m[r!2jj
+R`,r96EXa3C0KIDII3le%&B#V2S"Dbj1()[JI!r!(IqEb3C,GCb&r4KaRm1ZT&Pq
+G9e3Q4r4[h%Y4433m(Fq$8PqifR1YDfD$"EJ%L-6&X8d+#e8e@VCkflD$j8b"5Sj
+'B99N'Q3fp*!!CJU*e@E4`Q,@ZRHVf9M(T&[3MCSQIJN"C#Hp-QX)HlLe[T0!b@&
+"iN`CJAf&b-0YQLBTp!%qV45P#8hXVZ&Sd@Vm%-cdKdS`VCHNLZhq*aXe!FQ#k82
+"m(CdJdpDS(6iSKZX6[cZMi84hX[lR5K(2MKaX5)Fhpm*Q5fPqhB+F"@MRZi6F39
+!p2EMA!5'`8%KhY'c'#DhfbEiGQ"r+[1qUilqJe`Urcm8)Z1KFAc'G)XZN[FHFAB
+dBaB0jNjL,9'-jY9PdXHGaH(bPMBclp0E*qiUXmk'aaf*-Nl!dFE6+1JSD0EG19U
+ZbN#l$pf@R8A-IjdJ$UCaQLJ$LqF2I8e0ZF9JA(ZqDUD01)GJ8Ka-9rMVY+!PrHP
+SlI3`!b3QY8(N%Z[dYH%PJ+2J93ie*%LmU"QJI*C@N!"MVXb-e`KR6NQB'Fp)"qq
+SbdhZ&SZ)Yr'KBf(&CTD"+Q%'YbX@jQQeJKQ08hQ&E-E'RkhBK,U*8MT!I[K#(&8
++MpC-Nap4%f9U3JLp'bReE6TCaB+SaZZVEH%pG,--%Hp1Dm!hIKM39af4j2M2H8d
+2Np@j2*bZ3T!![&(S8jjrfmlNG4!&LC*3[SmN3cU*YX0-RciS#DYm$-2JZ@RrdJ!
+5P,Q8*mPc@80!jV'j)j!!Smj9V"fV1Je&PKFhAXdJDmI0Q!!epq++[V4)hKeDQfp
+K0Q[PMC*VKKUcXAhS,i0TFlm,T&GS*JX-Eq1)3q&94#m*8IMP`NT*YDJ6q,XU49e
+QJlFMT,6[Ad`*B!FePEPQBDMr6FYJ9Ip'lSc4NT0$&DX5FhTFf+KL1HXGZNQqCN6
+fS6dKIE@rL,JRSTd26&J)aGeGN!!@'J8cH3#9(!5Gj"Y(-,B'-(HLPAh3p(q'EKZ
+%hr1R4p@3!2'8!N99Cmc4H-Xqr1*ljSGq+k0CPC8GE,5Fh6-pNGP3A$Ykb9`k)TE
+dE[DGBSmUp+CPa"ERKj,LZCH!"U5`dmC$LJq`&e1MPHBCkXP@@pV&*'LCkFB$kHZ
+aahapa4Xke$NZ[564!3i%VGX6BQKXric`Gd6h'NVaGIbH*X'%1pjBLHGTB-kANI'
+fSp&*i(qf2lE-2Li2IMblMH&2Rc9Z@kd)4X!0SJ)Ja3HGH())e'p-HHIc0,a1V`a
+TdmNBU[Ad%jK9FrTQ+((F(!0Ep%A4mGZZPpZ,[L$Q8hcND[Y(NJ)ear0L@@kc8Xj
+[U@6IY96KJaYM#,*V1f3pJjZeblSrDraJ,j*6jf@dF&CSRPp4G`eQ*2L-C44SYeR
+3d'&R)[#U@IfI[VBBI&mMLE%d4Ad6(Q38apB9ZET0JrTYBi#XQ[aBaN)'0r,RqbE
+91rdP3F([`K4([QjM*EQ,c",qE(MI@hbXRIZ@qSq%NGD%,9JG(l#h+r%'+59fGJ!
+fK6480$KK03Id3+"q-,@2lB(jTUl%df%DhCfhU8meZC(fqheTd1ed1Hd#cU`XJ9r
+R#VEbYAidNh1EAR1(S4P0l4,IXSjKCPQAB)8k8ip81Y`[dRhj1Y5pM6fZ8[JcSUl
+6r@T!%rL46INf+kYTFLZP0VlZSZVB&p(qH%rrKq@,2!AJl!Zb&%SVENS*4Ed@'PY
+XHdhQ2i4Gq9(MC'&F&U8)hPDNZk$S'A5#H-81i0[8a#NfAC3c%rJG+*rBaLS45YJ
+eE',1pNp,K**I!4DVp30Xr6X2UfH[I3A5!i'Z"MaXce%34T[fBl-SJZS-e,"(%(B
+`#&-GX@@5#9RU0Db!RbpdE#G210!pI2j"d!jAY'G$SrTX-2kBAB#,+drb'iQR!r2
+-J32!LI,em2"Xf2K%qfMZLbXM%CH%q"c*C84+5aebPHfGI-UNDc"!IH&-fbk,KY)
+rI82-HL)5$G,['05"T,pk[QPS9f924DH#-5PF$YQ13RF3KfEm2DjCeLLCr&eVH[C
+,#h4hReZKML3-&R')QiULKN#2kGjB*NSc,'1`&5+hqpD2C82V$Ur3!mS!CEal#%I
+IqZ*dA1Km@Mf"l5UK8'TkZCHTb2+cU5VcdqmBNk*aGX4*,Ya`'cNlcFG*QXa*Qam
+hZ+@KIKD)cA,0!p5a$9p,Rd$hfl9iVe"k8'#bAbd19CNT)[,"LaZMhL1$39cr3lf
+[FNCD69jBhFYM6'[%Vf6e`A[r0DFb#QK4+-2X+Q-H%A'm'Add6rD+f'8e9%a%EK@
+XlVp)QAB4BPIXNcQ$'IS&2X!m$2eU`Di1+lQHCd%1ePe%Z[JmRG+`M636+A$8Xk4
+5T+DX%CSFcTLjG@H4(fd8m6Bp,#mY#!q5+eL5LpQV9H*&`IeP5%NS%T!!(C9HjH[
+**4ch-[kk@8Hi%+[Q&i!rpf09(&j*19%TJK6UlF5qVJmh9DE`!pQ#GSBZD1AEm3B
+NhFf3!-!aDXJ9j**Rk8Se3&#M@&L4e2TJTj*C1C2BTjGFm0aTU"T*JGM(ULBm(fZ
+Q*#fF-`i[f9`jeJbLbD`cM8i"CZa*K1dcpK#N$5-VJ-(@f*MU-mTi%DKL%f6Z-CA
+RY9q&%2irJd#q%*R1$AXjYl%Y[,RBlAIc+5TqiDq2&S9$Jp11F+eQf+rZ&*A`,Pd
+GhhiN"(qX[U`5M!Yhce6(PNmDGiJAmJI@[D9)%Y@b[%b`DfRqU5,f@`ZBX69A&h!
+Y%K[iHDNjici[c"3'b!qU9VPJ%kQ8`613!$,6XjN,9"mbk8Y6VpeeHh3b)ilDppe
+f3UD8G!B,S(FIb[*5"l(XF'Q@`2QQR+NeA3kUq)!-*k%2ce"lkTACh9-S$lfZXJQ
+X$DjrVZjXZ[VVq2MdFiHi$X0`C-l(PNUr!L(h4MC[2Gj"FNjDI1+Mlq8G!S(-VCD
+ZGm5aZ"C44rh,'m'DY&*48Xi#$cijG%N!k9SEJP-i%3hmi9kY(RR9ABJaB!k6idl
+dN!"bZm@hhIbe,$SiG(qBLqJhlVK8)25ZEH)9cT)31N+JEZek%`rZ49r,DSEGYS-
+rG8i`q)#j&ZZ3!,qCIFAF@c@2QIIfi$$%6AF%9Ip8PZ"@Xf4U-(8"@*JmVpbVT(H
+66L!HPUpPKB'%*!K9-h,C8a-3QEM94$M9l3pXhLMm6S&V-Ekh!90!b6LZFYKqQkm
+Vmkc`U@caDc%TGcQ'ZhEJi8dhCU+!QMEb@-iGPNPXC-DiHr[J,S6X1iFV9I1YaIe
+b#Nlb0KIAFmD8KIeefkSbFTK*j2G6RD0dV1SGMmQe"!ArBr3ll1N,)eqN2c!jGSi
+1@Q'*6D'3!+Q!Si0,1%1DTf5I-9bpbbY"hHU3!)ldJLb0+9+`0TQq,86+I@'&IbL
+`CC0jRRS'9DH"Ia6'X`%F[fi*dVYhdHdd*d2Z6S(HLXad[5D-SRVhBP&,5BbESa*
+h2l*aUiJIQcNE%edAQT16pbHbjr02Ad(f!pQ3!%@J8XSSCi[ib"M&M@!k'5)1ja)
+RQ29D-8l#"2m0E9k+3phG8@e5lBrGfLXM[%NK@1B&I1%e6I0kmj!!15Z--$IfJXM
+I93)E)L1NF*NpCbRdB-'UX6RSbGRZb-Cr$-X6Mbq$hM0M[p-Fed&m+S@h"`U0Kep
+)KkS0R$MF1BpDU$dSP(BEdlLUcP3Q4H9,V3FDMBP5*I4BQCE&S-pHCdAV-mZjLY1
+Pdf$l`CEQScj[ThT(Ij-TJm(&I8d[qEIk(rlr!&Z!66F(-"l%54Bh0*P-UZmb'Td
+QZ2$!JdES-V1EEH&cDNeUCahTMV@8hbUJeaF*E3*fc,De6(b1qi#J`bC@%(+C1UR
+Z*Gj+P8S#+3f,MbipdLe`L$Kc'S6#hT("ZKBdcfqmrhK"kP5`G#GVPF#`4jYI614
+'YT*NdCj,*8c'D'AKSE90Bf9Ai!miPqick+JJa04hrSDRE-j)BZ2R+fS`K-rm,XN
+&iI[EFe6fTQ#qj+$Y%NTh-fL1D8JP+aeiMdHK[ATh`(42a1Y&*p@B`rKL)MdD!c[
+1rG`-N!!Vm2%QCQHa8a9hiS3d[QiGiVp*f9D6U+HEh#Cl#V(%!3SQCYlLGeA'YkC
+#(K52dZ[&B)1$Xb9F5fZU,rK6k$#@D-#4I1NA6&V!DXL,V'E1'!!&-8eAR35JJV*
+rNfJ)q`9D8,3&erDIj6bNC0)rF%LpNPDKMPhS3FbA`@!PE0)6A1LbIAT"hSReT29
+ldj)N2Q3ZMM0TEIK&dS,SC9de"qe+mKbc)&Q(rU1SK'T'4XGS-@9G&AT@plheG6e
+eVc4T[ZDMeYBLFC)Q%R5P"6Il1)`8LU*(r(HeJ%mkFDCBe+$F5mrZb6JpYB!%fT8
+A",9p!raQ`'PGLH!Q&d(#dRem)CRMZPj6UUk,`%VML)@mrCb`br(R5q(64eLN04Z
+P*JjIi8j'869%&I[Vhf,AaF"MAIf(PCQ)pHGE&6ZN8kSRSM)N`f*DjfQEb$)5DB(
+CSlp0a%B9SIUCrH*+R%BYl(GTD'I*TUIqQF`i%LiA`mSjC-m[@#T0"&"V%E&ZRVZ
+frG3IbdEEe1GY1`&k&#"U3Vd0(Z83A+'XDiHK0hRZ`5Eb["eTHGNb4SMajG9992K
+8J()KDC%'Yh5,Nk#%d6Uj1IA6qhD[Ef'idCF++"+lE&P$9cF)VldbGij-hC)KpC[
+f&d6%Ha@0l%e)i4(,,iplN3a"6X4qQk!*LXIlk4kJN!$UQDI!5U-`H'eKEKSH2FZ
+e"-)TJ644BiB8A-BAj1E`6f2KFQ9m'bb0ji+KDSG12ji"ZR[GlH'[-Rm(H3!I202
+qAkfm-M`kN!$NZ,af"*G484T0VXD49XJi'1E#+%ER8F'UeP+ZICr9bACPP'c`iTc
+!b%N-J-kK)pZP@`PLILj9I"h5j6dSC&ic0BQ3!,A8*,T[5$"A3KC,2ZjFibkG493
+R8[S64mpKa*cc*PB"PKU%MCK8YkEF&K+`ULRMk5$RQ!CEZK-XKXLk0UXD$ik@QM@
+"@I1"k,`J(VU$(+DlLEdEA`6B&K'2fXE,pTD%[A(T*fRdMIP[YNqZ*+PkH#+dElV
+I`qZ)aeri@LGX-5FRF'X*HMBdEm)F[#bBVE"S0l08+01LCei#ZcZ5q%6`R5k-mbj
+,)SVlGjLmCU2!&AKRk25e)bKqT"4$fm%hTbh$6(2Zh'-JXTHVGlN4#caZecJ#GlI
+TlF9kPbYp!6%1cIl4E-$69T(h08(9)[+mkY6LZQPV!4)*e3U!)NLb+DSS`+8PB+M
+#!#Q5Dd[h%I$#D"kH[&"8&'m(`Pj&1U(kp(b(F3dDL40f#iiAYIZD0)qre"UM*+"
+T+48@B&E%`&Y+33V+''IHDGGr2)Cm#`Bl#F+,,'9KZlS(#IZMJA48dT!!DHr,Jc@
+1b`"`"(2L[28cZB6EX3MJ4dK-TRBcXK#+1j58J-Tp6iQp%eqb8FkqJ`MT8A9ck2e
+$qUm-XVS9qU*#'3UrChQ3!$6'3AJ&C48)XN+$F[*C,6,a"P$dY5cmXC@a!pGGlSL
+Va#jI3*Vh-#HaU)ZeIRT#HMq)VZk4qrp5UC%lcH1hR5`p,`Pp!38B`b00Ta#hM%$
+b$fCCA3kheYNP*%Y20hVYJ9N)lHD&`1X'*94Yf`dGeX#i"U'hYXC1dGUm`8QSM'S
+C`cDZ&VIRRjMITdF&R@pD9'jR5E#M`@A-,HeddJUTI0AAQ-cG@3Jdq0IRj`!h-,R
+YepXeN4MA0-b0KEM8m#9(**4C#M-XD3[TEAkD&("MNa+f1cDl-RYj$l8H2L,[RG6
+4SfmZ+0aZ2#S0@!'+(Y!)``q0Z6q1dP2fkaM5)3HJLfkL#9*B`p[!LI5qjYdCPUi
+iqeULKIIY$2Y*q[1RqD)LKZ(A+`i9ID$635D3!,[Zi6G,@5pf)!YL$DmRZih2jBT
+)8,A[j8)&qM8JcSE`Aq$&qi6[4VKT'GU)&+PG*D06cHcQUi8K06UNh5&J0ZV"*&A
+0ZIPG(Ykk[R-G2BEd%1GmT%#E6)Q+lK`b2[K`'L&ShY$@VUa'NhaIYS!!qYCa#J!
+h%aX(i5A#X**ahfN'GT`kU(@JidkGYZk*9``@ZbXV!KqH,l[#"DBC6QjRP51C16p
+V2`KG&##*%G4$c4`XiE,@QY4bRCU3!0l6FP'2B0@-NP,l(`Nq@AcJ9pd2XbKaQ5`
+"l31#ZFfHAj+,kQr$MF,'QkYF,YijBS(AU%XDNl2l`(P2**49,D#0Q%a9-KN(J`!
+q5D9rpB+DQ8bKGb%d$F*l9Xp"0h+&!3q&``l1)mDp-QEeHb1bTdhI2iBbZ5!HVS`
+Yd4LmdSf3!(['P9c6*'9(*j2UH!rr0afh8AXVD8Q@AqPaiRC+5U1%pDR!`jAaTC4
+AKf(QFq`4Z5dGcPRGhJHmD0S@0LfCHc-k('[H)(0j5eqA*l&qeXMY`TD*rl[5R'I
+`e9ElR5(8Z[6%(Nj`*6#aTQcj1,!&"3MaecZMRYG*j(cacbM&M@'Q,mVM%*2EVbU
+qj'bMrqPiLfHYQ+aA3ilrJc'fDSICJ!leKrB$K,V(+KA+Qf9B8aMp61RD"(C$TAh
+[d[9D46A[MafI3pXZImZA59@jjb'IYI'YDMZYH*f`pX$IT%S!Lcl0&6!JrZ[r9`Q
+3!&G!+Q19QD9l)`I)5,MV+j%#&BbTXCT&bhL#q!K,(rV)8cclrqKVr5BN5ek$PUp
+r,F+,8i5LmFpR*0p#22X%cblL1Z%S(rJciV8#p'jFbURL3@3#ifCFZCZ!Pr4C*PG
+mMbSS*8Z+CXfdfa+!R8cKQKiHBRj'NT%5$%2!'I8meJ!i6UQ#ilC%#Nf"qb!1b,#
+B8ldGNDVh`9+MIIEX32HQAS@j@KR*1"R,U"NT"UhB&r-1IFj#'6I,a[pAjjG+-e4
+,jdl)%2(#Ma08Q(RQ0[ae!dMF%qH"B%5!)D9@l'dME3&Al!AI!LfkLq+(I@RYRLL
+VH,b*LDFQK1-p`4$V'e0AK@M[)TNP-*rYPVKKJU`r84LYHAac19iBFVHVmpG5B9-
+fYN$f4bL3!#HI"$GRm!!N4!8XXceN,YjRbQHAS8ri*F)kej!!JAf-PS9UTU*,B&L
+&FirTBEp-q'peREd%CpHlfGTF*`bpmj3'iT(kYQ"frpTMA8ch(jZL#!6U%RTrYEa
+$,hpZ2VHFl3XaUC[U!,8JSS0Z!c0+ClfZ#[!%Q!HUX'+U2QVR1e+AL!2hcSYF[(K
+0"X$[Lh1`,5IMF1D`I#pb[JQ`H1rMi&kAHKTX+5(N+)q-fU%m!8Mc39r8'AM'KM4
+aU'j(U-XPYeH5FAYkZD&2TQmdfP#"I"LQS+kGfFfXqSG@L$(*+lhQR*i98hF4Hld
+%Z&8YKA"TeUG%0DZ0DlJlQr2XmRb,2*Z"SECmAGaRJLlDLH[qkIP[NM)dUI`5[%f
+GA@2IedNIkD([U2q2%-pY[%[125Xa+N'@6X,NI,dmaNf0a5j+BLhQ[qUX2*C4%VR
+K94[Ndk#H+LhGUM"3i0SYI"FNYiKU(&b%Gd9HYH0[iZ2a64[c`lIS!,i5h9jjjLp
+K!GKkN3jq6(mXV@YJDrJRZQUdKCPG(e6"S*hcCV-X5C2imp%U`k05F%VIBpb6B-P
+q69VaG&-1JqKA2VX)YrI'YTRr!9SSiQGj*jbB0P%`M&S$&F48PP))HPj!,AMNZhC
+*hK3iNd`$3'SQiQcJS43F"+rM&0+Q8C!!r02p#2+p0S@mpjTJ,[9(a&U&!TLY!p1
+JP)E4"pV0*DL$["X83E`9aT*'P(rN)Z&+eqiXMT%AS5#cSeVejd%bNCK8ZEY-bc+
+!qrB+m4TIiJHYLcB6-4"CDfi3f!56eie)rkS'DTX`3f4hmpEX9$(,c39iB!VEQVI
+CQ1&5+C5RXA5A*0*l0Y4m(J5-XGBN8bbTpei5DaX2Rq26KNE[6p`-9HA6BCQIS'E
+G&[mrA[!lr#+B&Y8l#fj+hUAm&PhKH&Mf+ch9V8l,*&3hMFp4B-3p$qAe40)3qLa
+l)ll#'lD!(Z"L,2@XH@5H&IA1GNr%V9DJ!rFSp"fh,A,cr,YmV06`Kd3a+PkRP4e
+Hh$J2*p66)HjJd0#I+qC!G"3m40YK,NeH-eK)dAV"P1rj#2)$"'R29QdZ(LA6PV%
+P'556i*1I)h(*ka#JE'V'T%IZKRqbb#dKAPRGNhT@+m*pSR0q+-8i*3Bf0clHBEJ
+Z)!Geq%FBlXTpXf6`$(pQ`hMV!mJ4pSSU6J8CV`*Sjc6AS('DL3)Ijhh!Hb!k8T!
+!Nq0-NkLKiE`GiJ9396h2!"PGf)dMZJ,VTmT`2JqDU2ZfB$Yj2A5Jar6MPf"aiP#
+Bhpb,p*F2b2e*LMChd9kP9aFD6bfQ[YHl`-$2I0BF-6FD%I,bIr,E4G&qNDcFVd"
+KdP4*QN*rZ4%)b4BrZ'$$BmPp`&5#SYp#Kbp@Zr5Y%c9ajTK2JJPV1PR0GMBFd3l
+Cl%61+rkILXI%9pZ%1B%a-4$eia%`+j,+qT!!TPe*4r!D89h!DJ2Ue2kab)UkdbA
+5PRTiD[!har)65aPXApbhYDTMSCT`crqPNSFjZaI903fE@ELNpm)pJRSZ`hrdJFA
+1qTbJN!$)R$jr"Va6QK`5q6[d!30c*e)Nj*,6VhBfYcDcU4Z%+Tre(`9ia+64(%0
+1a"VQhe-$kXUGUB99,1m1jCmaAD`cp"lPB&FR)L5k*6P,L%mhrP5IQ9LLp(Q&S06
+j"C!!E&I'A%qQc'ZbGKp8qh[eMR(FRjHj(UYmPU[D"YPP)bPeYZ82A5SdeZ%1C4!
+q#`cmc*AkB*E025FBR8N@DD)-`K1mk'lDmK-9ieAldk'c)pqqq5922lrT8aAZi&#
+*a,(85(+S,NaC-[ZRYp&+"i2jM4I(i''cp$NHK[[E(I#$I*NkSJ2i*9J+@5meRJe
+C&IIi0rr&l[A2L&#A!VN6UZP0JR`drBdLI8f*8qAl#RGKl%eejl[q1&MBDE2qaU0
+P"1m4iQ9J*d0QA!QPhrj%`ZJfm3$3H-8&L`HBQTfP9r'%`-5-lN,,D6eI6ml)YQe
+NaN4G84m'"V2H#jZGI13+`4jHb,Rr+l[JTU,'lHMmb'09cMpPFAGK3alVQ+,NPQa
+fkQqL!Tr9mk+Z),V3P-H%0V'-GK-"1*!!#Z*'GcK(TYqL'dTNDNZMBijZHj'*$dV
+,4HR$9R#ZIKG8kYd+$J+Lc9LPmcPS"khNCYKlJ"TUEBmQVC-&UD$cCKfY6L53!%0
+rE50M`(T(iA(hl&(Y$,fa0j6TBrBIi+$Vhc0-lZp[X)rSCSf42AhRZfDd'&k'(m)
+Bb"TrE,hE&VaR)2Vl'+j@FA4BVT8S*"Eli(G2Q`Ym5E',4&8#IJ4%I*Fq@b0bC%L
+2H!9#eRiIHVV%Vl16rL@RdP8IAE5(&AI@9,%JURKRpmjjU[8A6L9hM,4Pd%*MB8R
+9"A3rqGHB@am8'G4ShK5"$[#(pbNXjkb*5(C[dbMQG`Qr8))1Q!'&hFBQDed-K9k
+IE'Af9CG+@Y'(bRH!fe4VZ(6jUVhDhL2S-D*RFSf16'Ci0)"B0Y2M%F@i`e"P`Y3
+V"1',!GLUi,P$+*C$4-@@)-[FeDZ&5,&V46NFh!TX8%%#fL)(Z8b$kLjQhkrfPSq
+1Z&Z,$%$hMFE4kY1L9kQl`l2Y0h"f9qY@%r`-k6J[Q@$2H8iV![0Ge'c(THSB!!*
+$R@*AajUM(8hffSJaNr!h25hH!#mAfY,[AqZkb9bR0A'mBVVq5`(+SeJL5E[BQYV
+d'2EA64TL$5NG0dp"GI44J-qXA1,Jc[2U1Rl9'H!Qi0"fQZ&-Ndaped4IC5IbdlD
+j$h+8JG!2*$%!GS'H-[`md$!9l4SNhYk,A4G60RM9`059HI5Kj611jMLm`Qk-MZ(
+j,2N'bDMS$qj6+UEeVV)iI#$86-"5kjcNTZ[BY+m969X9E$X[$@LhU+$N[qh`123
+[I1D[9K36`1plVeG2QI3$bI(eN!!pVl[)MBZ9!b$TY&ATT1+XeB0ZDBra(K1S5k$
+qLFi$bj)XEAVE()G+cP2C[SZC6RmP('4-mF*L$PG2dI-kdjf6T(i0M)!!!V5HfP@
+RafX64Nk6Lb,'+J[)c'cB-5V#CmY[6@ipX-@SLpa3TNF,"d2h84k"5&,ZNE"Xj!H
+il)$+f3rFa"PJ!''[bTkc"ire)`jKSk"eKFmLVM!F($RaUA*G8%Z`QkXSj9,"65d
+fACY)5c"FM2LXmTh"NFeJRYccdA1m)Vp3Vr"-BL`H!*c,iQKXS9kALK,#5eN2#N)
+@CBI,k'!iYl+QJ9K*PS2[9[-EG`5BaHXQ["YP*S#m,,![AQ%'jIIdcN'VL+%X$Ca
+jHq"S9+GCN!!#M8bUcKl9N!$XArc+#T(JV'jB5hcUm0@3!1k*GPI!,DMm"E5kV6&
+l5FaYDAJN`pcjZKqRhH5F$0SS5TN!`kT[H6#(694L+mSJqef&&EE"(IIjqMer`EN
+-fQi@e+b1l[R!Zlr1SfS*K2PhDHNBrS#8,X5UPDmE0NpffSVhkde$UX3VdT4m6+!
+FCC!!qT+P$A@I1R,L"+50M5e*9I8mc@X#q1Y"#55J)FjS1JHV9Jf5Gj[!fdSApIM
+c'YUT$S4&3YUf'm4Jm1!Tp9[N&TfCK`JQ)X$f`I&E-U16bBq,r@BVE+BLYr(lr,K
+!d(9d2c&3H'eNXF)9#RD`"M&%fVil"!E!YD1KfQb0$eJE@KLf@bB#+88jX[m*l68
+CX!YlfN)$JX&,m%a-DA1#hAhN,-3K,NCYJkF`G&@Ue0d-HIphIE&ck@f*&3ec*D9
+IlHc4jb#Ppbbmcm1GH2k4eE1@mAZ-5"5aIS*bbGd$[*A5i,U[CU0J0mr'A!UHi0@
+mIJE!0,b$qKecIVBjC&$0`-AGE1S(iSIQ%i6Y6abCEYZKG8Zcke2H$IA1c[YQKZP
+Ikf`FjkL$8@DZXJh8)`5`m8UhcepCC`A0c336d8crea`aQ525'[&SCP@YZEb*5PP
+RSYL3!2[r"R$238!MmcdV%4eU,GafRZh8EA1J[0XhppPDqTTLi*`iB&hC%d)`62I
++9Md+EFl`mI-Y1QM'f"eaPdjDr1K9`-"k)@qMeb+X#jHX1#-)Rqp,hcerRJk#%q0
+2V)43%,J0N4*3PU$C)9j(Tj%kJfPECF)Q0@6B[dHIRP)F+qTm8AX1U3YRFU9Ub!6
+Cmr0QpaeTj&P0G,c1-A'lNUYX[I2bcR0UX+RYfcRf!q(!+I1-m+eK5FrI9(5M#(X
+q'#Cdl,r99INHAq*URi*ch@eV1p@8(BpN@68Gf`0YPGD`l9L8*YeJZ3lie"$ei+J
+P5hKNY0#S`YaKURY8,q&R`TH%3,1@aC&RD9BJi-b!r+r1-Jha,`GZ-cINj(U$eV"
+!PTH-ha4kUDlXC-JF!p+PJ[Dll[i6Mrj6(YcBMMBRIIA0Zi'`VM1*!V+V6d6q8CI
+Jr(QTiGebR[!*'V+!d6%eYS5&%B#d"V`cq+$#HFTH`!TbVc%#N!#`akB2mCXS3'F
+`i+q1Sr0A)0(A")T*9&aqaA"DC`JBrF0YIrr#+V)YTd%YX@V6dKDZRBHblB*HGDT
+J$qD5cVqmjji8ZYqTMPi%`PV,XNB)H'IYG0dJJXT,hA'REMVYp3)pY8!m&TGGJ$q
+[6+N4`c*ml4SCT1mEjM@imHT#`BG`b["&#6!)'FlYYN6-'ZSp+%JH%p#Ec8r)rSq
+[BS90`"$PX&%93qXT(Arj2INLIZL[G(6Z"&-[[VreRZd3[pU11[Pi+8JP2q-4jQ+
+q!M)UR4@3!20fHH$TX,T2FJ@D!*M()+#5"J`,El[ml-1GPeY+(6jCrF,+038jQ+R
+F2U@-q1@5&2XaA2k+&2c1"V[D[jE8Bh5L$0YjRa#8'aC!1V!`c[68dUT[D,1BXpc
+HT,Z4c)JTYDiBq5LGabN2aMS!p9D6JkG5fm*fZ-0%Vb(3"ck*b8P3Tj!!6%+(i%j
+X[JZ*)Ak*,r&`9AER3F*`A,!IRKcCT[Dl@12-lYKfid[Y9j,!TP1@08ie1)H$NDA
+%pVDSXSY6%5$$,6MR1YS8qVMe(+N0-T4j5dIELh%cQ)'BfRiLJ'G8D%X5V[TB46l
+X5#ER'kJCk`$TlCc5Ci2[2JSk[F,k3h!2Q&E,h'%ak+*MRQ@#iTN*+SdkXZ#rCSa
+(9QBSLV@Ar!m#K+L81b60D[FXTX%fGMlklZ6UMi[h`b#%Dbm+q!SqTK#LLUmm%L#
+%ajDi)`$"YqleMM((`ceplKMrXX`2c#-[Abj(RXRT"+NEj-BR(AQ*YI4HBTY,SmJ
+MSLEV&L)IBZlQU62dCB!6pqke&aRkK-GiAP-*T4AP,e2ER*cfD6hIj42LjXRa0m*
+lm),'MJJMR%m6T5U%DrQCMm,HC4LQ2-a2Xi9-'mb@mQTQAaX4mT!!k$NDrfccjID
+JY2XL-P[4bF!R5alZUT)(fS`XDVkEr-EQ`M4dSGN9FKf3!(V!(V([&c$%4Y[H9Vj
+%)4leL[3E-MeC)HY,EQ8[HM(hrlI"ESBfq,!R+0-,9e'!ADa+""E`0%k#0'BTKNm
+QC@5Y`*!!--LaLf(MB"G#C!k)eG9,A6Bm'15GIYa-*-"MlhLi8Z5(1S#KY*I5le6
+P8P"8&D2IT6B&U-R*(*0ZFdb+fSS[cEhaGIQ+j-+BpXf(AaTI`Ipf#hS63&(j"fa
+1-*!!3RerTcD1M'#*Tj8$4e-`rX!S1T5*ea[Z*mYUrTpD&0'c9'L9093`Ek5bS-6
+rQaAQHP%[$-*&`S6$c0$91-H6XUdJmq@1YRK[IG8Ie+mq``&52#A8`i[U8YfJ#PM
+++Vha1MD`Y4f$!DeHZil%`B5jrJdc2Rq1eC!!Fhd,aFcSND`P%Xh2qQbPPdBF65%
+eAT1aHq"%PkB#LPUL)pL1&T%@8GJ&pXDbCmK8[cZ!"FBciG`pE2EYXh+%kp)51$5
+@DUR&9(`lr31CHjhrp-Kpra,Blr,d)E$PaDH4Pp1X0rk03E0lF)[iKUEUNX[#UTQ
+N@IBIIf$kTRr-*PBQJBl(#!e"ZF%$6'jJ*eUMrRTqCb)VYe9B(%S3NP2DjB*cNRE
+[6LYqm62UNZR58(La"J!(Pj+qSI[$cEfM%C2XBdmrpf#,jVc3kk'E4[fcQ,%A$!N
+!VUp%F'YYG(Z14X@#@Lk$c6JYhB8YIdG$GR%G29#8II51NJR`&H&U,P+EP!XB2D5
+4XM@IpkK40[@A9U!+GlN3K[l@(q(+2#a%3kc,Nr,V#6miADmHm#V0`[H%-6D&D8q
+M&b@TUADqhMJG1XDZI2HXL*8Yq22EVP[q!DcipRNc9PM548rBAZ*9MI)I&+E'b-T
+MDrVPEUM3c2&cDmr"@m"+,Tr5&HUP%qST*%V8RE$b5*(cULq%KI4NDFcb'bQq9-M
+Uld6)VC4+Mc05#(e@&T2!L%h`KA(%b$R$A(Z9*Q8UBe0#l%$Z15QrYb*K(`5l4AV
+'QkU[M#M56J!pSb5iV0)9dSRc,'1d4mT9EAJb-h"Z08`3S"ANkdeJV2hpGJTrSTC
+,pjkAAT,,9pF9(+1aBk39TrUXF"R(ReSh+0c-$YQ4ZZ&4E2XlU`U@qXNe+IN1e4L
+H3ZhP3J1'@e$9ZcU`@)!+!Mp52&FMc`j#IJ!T(N*KGT@EP9PS'J%D6Hrh&5*,h(`
+q3`ZF)9'9m'8r5-`&+BFc$)Fl`K*U#R9BH$lJGqGkBAY1Qlem#2rfe$hf`ff9+JF
+$[m)-%[F@++h(f1UYlU!c9*VQdD3MAG2))%dmDbq8VD+H[2qB@3$R0SGaG0f@m%T
+D-KFZHJ"2"#5Jdakjq8&TA3T[I&iClLA"BH+144hah2$)PJi3qE(EdUe,HG`mRC`
+'Cp6NfCL&NHZ&@4D+k1jZKlE[dRFf,`m%-c[%BFQdRM$Rm1ZPm*48KIN+B5NMe`L
+a,L&p)dm$[P'h36+[&R&+ZBX&36[D5qqiT6Mp33NL-Vm$"1U[eKiEUAK%'a'qD"#
+PD'Fj)LTR2XMM'S8cB1%d[*B`V*mI*pe8`h6kAplBe4A8L2+JmV*q*m2Vq54,b35
+QK4K,U3NkEkCQ8,c@V0*[cq"-JG6r`3!!r[Fc#R9PSCbrUN2@mpdGALeLF&m@)Z5
+Z#F4ZUUL($*F*IU!pHhrh(ULE'4XP8I35GaRDJ#S-&Mh,Bh(Lq&,DGrjNPqI2b)p
+KYFB)hFN&DbjlJI*6Hj0aViF-@X)qbmLUSaE%Z4#p),)#jcLb"$@"dEKBZj&6N8I
+C"#*THedcNVe0EbQRAp(3X%0M!fN$cU%$Tkr4(`P1FJ46e(ZGF1)hN!!C+4fHJqZ
+Y-KjFT8#-"5aL1L4Rq0+`ZPQ8F'mr$P3PC8Z!`GMjQaYVAMV,A!"fa'"5&MlimJX
+BX(1da30ErJ!!BiNbkU61qkAepIM6fKhh(5LALYTFVSDI8ij%)5GJ"PG*%FG)L`%
+D35HX[Y,@F)0bX0,kN8LV&S60&eD4$b2i)L*MPSTH,+NiQ&eh*%$C2QmlJ+,A&hr
+`$31qhAN,%Y$e$($AlK8k&4)`394qTLdb6aK+UV-"[9e2`kRTPV9-`FE3qX3jTC3
+qaRH-RLj3L&I5qLfG6dL2mf8@#@i*B,eR)-EmXC30YNMF)P)$3T'-pieLj8&@FEN
+XbCBcJ#eLe(2Z-e2N3Cp-Eh8FZNi9J3BN+JJdFUm$SBY0IB"G5cDmQ86#K6cS18U
+ippCjbfiTTCk!)Vf2L'A''UZdDhLB3i&)X(m%B9c`3lK6FLdcND3)2r&3hcapIh1
+eH`4MH`HA&M)LRVJelYi--X68P'@93i)'T3bXJqbaba#AqEZ05)'FqDZ[G5r%)6(
+r0p2UEmUZhakP%GNEm5DhLQ1F!kXh&f*`%&XVi3&Rc#'59VV0k,kiQ'"&E(C6V#(
+QF*E*5Q5@[8ab!QX$j9'pj[NNERDcB'%+eJYeXS'iHL+K8Q*[k"hFSFF$*C3k3H4
+-[R5[I-X-LS*'APE6hcXC$6ZVSjDV"VSI[iVH'SR(``U9@!#F%+ekVmK$D&jY5`f
+l&2-"0Ff,TDF5I-N)A3K(#%LEX9b3!+[SG,bSjJ!NU"'l-6l+DIrP3K&9@SA``&a
+4S[%f@NmMdF4XFEf1f$8DDHk!6d@4F(ZkAA#J'qPhEG38BS$Bh[3+Hpl[I""M"i`
+JSBE1Jbb9+mR,DM-BC#I3`qc"1f*[KKjmXS%qk3hJiB)6Df!fcC*Sj"ai$cQ0L5K
+X3q@6LcBA4TIqVjak35NGSFl!daA[$J3K#'q#+ZlPD`Y%+qRqIA,X[()mC`JrEp#
+&qHl@bDM'Pe)4TCc38C9*,DfBp88Q53(E*'&A%YJL*l!*R!3R+KTqN!!`EN0'%i$
+hATGXj`0V,2QQ3RaZ430j6NP6,Qch!#ll)`61%2klKX$KV-![%('$P9c+b@ra#$l
+P9a)i#aLj$UJaB'V[Sd,r4me[ihbdjJ6`fr+MdFVpU`e4i9G!$cTAY1pD!Ji6*YG
+5f5JfiRrU8!MN3GJRPR06jAJ*AFY)d'*F0XLML1Qpjfrar#(PNqCVAfq1*aCAVSJ
+K@CJ3'4#Pl(qP10aaJBS3dJ1"M(j%Z0+'-3(FeJ1FM8drHH!$VhYJ2H4RrQPFRmB
+P1+Ejp3qqT)h3M-K`ZJ(A"+%3DL4Lc4JMD989VV1,dr#lJ",NTHr8h2Rmi'SIeKh
+@lG8@+6PCqKhHD4$J["j-BD89q1iA3*Gf$AULCISa!fpAFm5rmVfd`C*93eDK8Gj
+)#X`EB'TpkPcZDIee"'&2Zi"LfC!![mf*[`%AiIdhj*GeDqmFLQ-lb8KR4ZPl(@U
+p,9NpDQIK5`9Uj"S'J!&VAE[p'I5,&i'Ka9JmiNH(jflr-Y3Qlm@)G00`U@&YJS-
+!ea![dEkkkApH'U9(!JJjr$06aPKV"Lme%HSN,B-UrKAi[[m!LANC`ZQQ%!+U`rV
+j%m'*(CE"RS53!2iD8HY+j849@GiT*Khf5h0GfMPe0B1S'!Y'EH&j9"faJjD!UdU
+qQFpPGd3NreXIJlLNSAYZBaRdQ&hZ%ISmVX@K0fG#ZUM6&%+F#rV%&Iei1jLVX4k
+E#GX5KYcD%@kff#!pIc[bNiKikGejZaB$FVhCGNq0-,qiEb9Eff[*m+i4d+*-eV(
+TkeFiPbX#b53Z9khIZckM&iGY2hQlG",bIZV*8D44k'fU4Hjd((b4XLIFdLNbJQe
+I"CIbRCj6"DM`jHrmk(8R-!,08KY5&+j2%r,bm2h('D9a[1cqp5l`%%!p!YKG8`Y
+Bcp'rFZEUX[-XlT!!1Z0P(9KMBGjj,K69Ne!-j0$YMLe1b'J6ALYM8[9#0mdm'e2
+#""Laa5'B2M,RkkSaXS''r"8DY'pi0JQ6"T!!GFR[YFHA2J-BC)B)4j5MEQS6FR&
+rKGPPI[N+RRmdM4b3!#llK'qIVm''EF+65*1Y#V)@GDIl!MLaLSR'Q9E[`ZM#kJH
+%EDcdf$dAp@BEM4#NAHeZPJI4E)KGh+5bTUP1J@'#--2d++B`JXB0E[UVjLUQ'c'
+m%DQ5!%J5D4TM-,+[f,e4Pd@6X$V6mrD0b10pBaN+d5VlF`C0"Af$D5RPVS&qlG&
+m-c-jIHlEi-,&Bik*KrrhEi5-012%&03TC0IEM'Gc(DXf![lR#KZ`cGab`6IjNJJ
+SYJdkpY`A3I!fcIkTpZ%'#jeJ99&)Bi'U9Xkj5QCh+QYY%NZpd3f14XB[%rf41p9
+VjqC'Q95iSmYbS[+["Ei$EVY`$6)R6qj@(L"4YIU3!""J&+(kNQ`T%e08INV`8b6
+Rf[Ac,%VVq5ST&-RC'CNf#UAp3)#fUV3$aKEL8-a(8ZQLH(,b&60,ZV`iZQBRAD9
+&D!2rabZ*)SUcA+jmfTf)94'MGjYilV2`)d"T`()"Kh&`j5`8%%pUIGGdLL650&S
+aNp5UfB$XMH31hVk-Kml`+Mkq-Na-fhk3!(pLY[9@dpMiQ6bpC(EV(ReUZNdqj"T
+4H%QpKSACGQai2"5`"RBFN@%"j4R`8`C#,0IpZH-F(@b&AdIASkpH@)"d1S,'604
+1TdNN&Sf,!6Y[j8R4PQjr)RL+Z)dUkHbB)8m!QGDcA$CY38kC)TI'9,(LE6Z*$hU
+K'+8R8JXp'J2)4ce&KhFjFFD')Z('p(eG",)"*1FlQL4m!03eZbI-*IT+[)Jac$L
+4MpkB"r!5G83-L5haU93jDRN("`JjQER%0hKUq9q"p(aZNcT%Spe%6mkQp4c%HjJ
+PC`X"+C['%b3jr4iJ*I*Y+*NjXr5YM5a"4I+MhKSbaN&1q)#DUcKLhbc"832$RVS
+j8ViV2`'#Tc0&+-V[d36e$BQ&P)ReAl65Kc&`PQ8Gf)qrDA6[2!al1fVDfEV#q8@
+$P$9eV[R)#qJTPEK+*'mCGh1c86b*kfSI+%,'2JD#JkVZP)#e3ehBBq1UH95Ad-F
+bNH'UQ*4!UV*M(@)J(8*dm%KA'p-1M5FD'pYmm@l[LrLdq*FVFAlld4,A3HUrNe1
+ZkDLqlGDRIc#PS-CZDR!fX1r(JPM`IK0NEpU-$pkpMb&-a(dGA8[`EhjJ`XBUcd-
+5+H09hc+NdDdXX%[!(`%FaLTpY)G+aX[K`Np!`YG+T&3Mh$cCr+#Q+A4aE%(QX0l
+Fa`lT9AA"G(f+lAT"LeTUA+LAf)Z"B-K3,ZEb%[[p#APTdh[hPS5HdY19Q*!!ZH%
+aJQ*MIiH9EMNFKQpYJT`V'RT$Ur(QI2c%+brN+9irQ!kZ9aZJaCXB'jq-E6`CIpI
+Kh$JSmr0V3D$'+25"k+9fC4I+CQ*cc,r@Mi5XT8PHmpqmVmAaPXZVi2R9H-M!EVL
+IL@48'S+a#+2T-m1Rq$[B#[khV#f&b,TJ%ibk4q'Y6,6i32QRMPRB,GqIB)-!`r6
+i[EfmZUJ,m)dDijLqe)YU&a!3'INaGf`HZYmfI,@"(#VXh00hPTYaf9UK18V`QY&
+I$R'[`pXl8'9V2Pr%`hB1NPr2&Ih#jccZ+,2MFlm@TDlecePcL"c(&M*XkTMh!Kp
+%FQ*FDk845BL-FVBKAc'#hQ6b"5H,KI-6c&"G3SqX8j*RL$@#SCr!hp`aPh5R-*5
+lAa9&-C4"+$IX3Y-(P+@Al2D3!%,M5[r2Nh'09mD$D@B@5QKF5,&,`HcZ[KkebSi
+0mFcj5r`Z#UC%aP+9(6)4llfXHfqjV-i90fH,TL+Q5)Y,GHpA8SV#A#UMp'lZK5F
+,HVFMV4@hMHX--MY9,*p@@`Qddl5K`NS*RejhBMlSQ6llI#h%b9)'6GjZS1pUG&S
+`2#r`)mBk#bB,Y[l2cc0(pdFjAFBh#(Z-0NT,!(YG35Yk"[,80bV1fK&`qQTGc90
+d[#3j@&DP0ZYqB#9hbLk[%%3C[#XXYXa"B@NJ),[VBk*2)Na+[-CFcX1DBFT#cVa
+-D*iYck,TlZZRiE2-ijIc)##X*1E@5"qBbpDrGEC*'4dQ%@eS0S329Q#`fY`IIr-
+N!)RTq35GAhFpI[kK3Nh9Al4VUQ$"&XDSe[e"Hlb9RPBX6EN+GSXkTYlK%a,5bba
+Rc[ZTircN1VMHDhHrZRfq26QEQPCED+h'P8,GGD'X5((35QkjeKP*Aa3Ti@ESYQ$
+m-AX5"CGRbN[e3%H"8N2P+"mbfm0)aL)26dURa%q8VeA06LESEhlkbDQ'!G`QSQ[
+V08CpTF)8Bd3%%iNX'(XG8j+iIL*%mQC3fe[0NddIDA8a2BSKmH44`Vqk696'RmD
+aG+DNGjBKSi25el,R,G1BPcI6jHi8@Tb(X9QAe)aYNQ0")d9*#hX8BmC(cXAD9`S
+@LJUiUd',h-dE`GBEffXkj`f`iS*iT%kYNLkcH@r`NEC2D2rF&HE@c*%2,jfl22&
+qiEJl"988%L8kB@8Jr6f6Pq058alpKr64J1TD$l8Z4r%I3)D6c%8*di0YYkcdr*8
+[@rb[$Yr,m2H-amZ2RJ0QUU2r)I2q#iZN-`dHcjc&-YhpHABAGhe4Ji*QUJX!hR2
+SUaf*`K@B'jj6J@RY8Rc6!3J2Z[V(%H50&V0Z!FN*l2&j@aND"Y2-2`kRAjUKHCB
+A&"[S1A!rTBZ9Xq`S4!,Gf#YAjMRA,EBNS4m`MNl+5-mYIcN&DrDS5@+8b1iZ8E,
+@k[8BPEalX-e09c'SFi*+Hep21k('L0A@pE5RUc(*m8K@lM53!"J(qrR-HZcf,JC
+(&"PA'#V1D@Mc9@"HU%k)9Ze1U2J9Rjb)l#Z4k99(9"!48"`VEDc!c9X"''&-j"0
+&X6X`#Y%Aqp(0$Z4S``aI`#Zl*hYT!mZqY3)lY8XLAC!!RjG+"3r`IkHX0IVI$q-
+[5bqJhP'ThD,,'!J1'Gf"bD!BQk3'Xmr,@)`jN4icJ!+1``+ARq-VDII[CH*,Chi
+`QXB3F*eBaBBU@XE3DXb!kXrP2-!U1)[TJm&X"f"kQ5-8R9'#&FA$B)"GX1f')&P
+SA8Qpq2$SMlbHecImVZ[B[DbSRkJ(b#"ZecCkc(FND`81qqXP-$kel-D'6NG9U2`
+9XKK"Mq+CmqUSahpNhFLMK*r4h9I,53N!RZNAPTDqah(FPd6XT&jLr$@fpja,I#f
+JrcTblIimi($!9"GhGI+K,X1AZMe%idGepAZ,0CeRl56BXQD*Me`ZN!$QLZBXX&U
+VcRqV3!m(&h))SkFd6)iQFp!f(c`5*`JmidH'U)6qEY`Ef"B3E4iNKeV[R+hdE3'
+`G02N9VNh$frVAH58EX5mVY*bpH$L1&jJHa-h5CLeDVTJra!lBVG,!EifmJ*Umkr
+VqcPP3Lp$hK!`(Q1d1Ki1'`1HP%hd`T86%q0Y2AcS0dA8(ZNIU#'-EE111HAP-N!
+*AV!J@Ym$5LRIjl``I4mG40'!8#%[`#1"`@9Qm%Vc4c9h@'dRer2Lbl4&MVhKYJN
+`)(%&PY#YVV96Y$#&KZX%VK$P,%UG6R&NX2Sf-C@2#ZkKJ9KQjG,c0SX6402aAXV
+hT0GI'J[Bjf3M@9qm3AkmlA(rFCL-(PE&q3DPU'0FXNEfHdG6G0UEPbX`aqbRCU5
+&Rpp58-K&X)(T3F%FPG!bmfCe5BkIPKQJbMKH&p[@@4b4E#)EdRe53P!3p@mEp4V
+Rk,8!0$A8DG-3F-MGrj!!a)m(T!mB0`mpGE-ld8BNrE9qe)%`iRKBGde,8p8T3cF
+1ZU9D36(Z@+qM(F`[AQS`2Q!+jd'VqXqD'"%SCAZ!rL%`R,T422L3!$4aiS1009'
+Uh$Y#[8-05XdjBXL6MG20ZUCiRi*@+9!X+QKD[@))K5*CY)[pc6Cf(KjG"BI*D&Q
+feE8cY1elYj8'[P@BArk+26Ni,BpB&V","8aZ[1lI*4CHmS3S1'b`VR3Ljlh-d1i
+2djVE#+b0("LIAmb58+I5!3h&Mha)fQa6Zp#AK1F0#b'(mTd'4H4qM6@aP)Gq``!
+F3i3,)pQh'bF+jbP!GS6GAbf+-k3kL!F6QZJ$fV5-d3jZ9q5GY+A`Fdb@aJ)bd`a
+Um8lCf%QC+p(0a0A@pZS5b0&aT#f&c(m53(6F%eV8HlK0(SZ61FL0DNE#BM3"1YY
+(KR5qAjCH*SDB"!Zj%-p#1m83P84i'15BLE#PmEXpVP-8e3aV19%5pIpEpZq,ZpF
+G!*Z-"J68ajD`Q*EcG[AddbKK&LQ$XG@&`#GIVV8qCY&ehrVKpj&DeM-RP`X+FEh
+FQeA8qYYp)V9`2dVm4S#ET`6A%I1I$DN2Di3VA0B``Tih*0A3K+2(5F(ZF!pmGqH
+KE9FY-j5)q@(Dfr&S-ApC"@rBpC%'XN)B6*qP)@G9PQBNA&d5VA@+,p3NRJEVI%6
+H[89q$CBUeZYi8qIC6BaUAC!!iS#j[06b1V!(Y`(*@E$U1I28)e%qqR,Q8S*rj`c
+Sf-,K0M44Z+[`RH[U%HDame[&"4h+5-r`#[2VYN+(9jl*-%V#EiT8a4J0@mdLL$4
+)CbDDYa0b3'9"0q#TGaHr!prrHA+[0bkUBTD-4&KeSD)S`4QfBV0S+iY%VUVemQ2
+4@k,48`NLQMmTGP1j%I`G022'EMhBLY%fM#j!F3qZY3JTr5)KlcDa3!hqGKpYkGR
+HiqXQMIdE8mD9I6Q00J,dX%qDk#)V20+raf6[Ec3DF@,qR*-PpeaDHT(%BfP!4Zf
+1BhEeEaV'%*GcX[Gh-dHP1@28VNc'qr$$h$ClE(UQVk[R#P2TDk&,RY(4@"5CPM$
+TUKMJ$+fb,Y#4QN&6IHXjr)KqbkbHr22TB$JV3KZjdAEN&06,H',DCM,eV5AkJfH
+*q0FlZSbhBcRSDI2C`8lF((jN)H+#I!UrPh&"`mHYQ!Yp5iD"-E9,A,p2rYb*LND
++54Z%DZF8BmH0CP!G83G*J'eF-1RMqRke#`4AeTcfr3%Ja)+%F"EhDV3eEIla[m@
+-p)aLKkN%B@RE*@KfpH6a&Sb59A'#ip"3&GeC5"qdNY21G9mihViJ*)D5hhYN-Kk
+GX6NP9E-2+r,MZq,@44)kHrYM4J&3H9aj-)'F(+Y$p6*q0h(RkX1ih(JZV8!Hk,S
+9H2N#k[$R6YBX`"('iqFY"Y-N(@mpE3@HQB`XA)-,qD4!hZEHDB#GZH,3"#'G'`M
+NF(6AGqBf)8#lD6LCA-@"Xk8V2BG9dG6X1[@SkD[NQ$Ff(kBhM#UKpdFGES$@4m@
+X')ZkLG@*Y+#$H(6Hkrp)IT8f`%d1&c@Shp!lj`%YbkeND2jYXaqliL5&[I%kY#S
+Sd&&pFeS&CeLH"Ba%1b$ZrB35fVfK(i51"2MITSp$HjZ@qN2Eh)Kk0VV6RQmD(!G
+F`E"qdN&'UK*SK*5rU`#!GEhH6G)EbeDq!i`!a%[a-S9XC)dpQ(h@C[h0*LT""BB
+[I%#f2bAi%4D(Bm&jm6,,Z29k0Rh3cam'TfX"6$)$BC-fZN%l"#iB$iUcI8MT(lJ
+r9C9B)J,Ha1*)UU`1KKQ8@pLM!P0,S`mB0TX#hZT!4La%d+*[(-Rf4@SiFh5jf8X
+kY--PKJEP6LI4`*I*GdC26QV`KU)(H'8VBGAQ0elVJNGerFE0USJQH'b24%U2"DA
+fL4P`()-fmDI`G5,65bL)DK$h5N'MH(8LrS56YHR5dqd2J$r4Fe9'M2fr0IVVXDq
+"M5T'8ji[A50YrFMBdRq!RB0B[56,X25,5`m#%CXP3Q'U@lFH0@!6K9C64aE9d*D
+$YaC0IZ8a#4hS(fjGllYAe1pe2#hkeT[%B5TR0BE)`I3cGY4eK33#eahHPMkI*,9
+G"kJPZF5DSG8qIYRZrIKKJ8kh`m"V@bip4HeZRFdrHX'Rb%2RFGTHkI`[phfAiqZ
+B(54cVJ48rXE%5JLp*i#k$3#Mr&E-XP#0BSffD[j*N!#bk6@1-(TG85Jl[PGBe%H
+ejEm83Fd,adeJ1`bY12F[QHY3H'I4+k!q[KHBTTEif`SE4*eRI4D'$1bN@1#jIP@
+bFS629&F+[$&BMD0YMXi`S4dIHX3@$32(JIV,Qe9UQZklJ+0VTSkNJSZ#C03HRE0
+jh`AKU*k$Nc4QUSd-eDRa5fErB9dpK6Z-`Q!CABZ(NRR(KRHc%F0%Z#kS6%aLVF5
+Il"Fr#l"A8ieR!+5E@ie396#kA+iLQ2H'U%DAeIV&VDTdNVFN#KKEd(#RRY`p[))
+fGS%aeplh0%DM!#i`@b*dmp'A,6FLS58%3(pbF[AY)jG'qb8GePPfjPV-d5#"MD3
+mkEQfQ(h52FQ1MD$%DpL6",1SU4(X'd$H&F)QqQDGLR4$f,694qHEmdhimGCAD)a
+r&!`QcSLG2h2Pf@ZK8b*K5!'D[ZELKHdFTj!!(VYf"`'Q89+RdM3'RJYF*3(3M$F
+58EQd9qp-AXU%KGR"qQ&dS&6lJLBEb'l52!pBJ!P+VkLZ%$pfYT+V5iPf(UpYTlS
+-a,RI"%j9!)GjFFdprXSUjT8I6`CTXcrlJV[p(F*"ACl9BCNS1fC@I9F&l3-lrIr
+ecCiS603Rj+T39U5cPQD!"BTiNLHGCqPFPrlSh8BlLT5V6lDJeV0X"F2,N8HSGqG
+f#V[am!iN@j`F*"iZPIeChXp6SBS4f26bXrh*2AD)P!*K,[,E2+8Z*aCH"(BcHa3
+A9"96)cM@8UDF$VqL+P8PRF#U*(3@J+jfDMirT8VrLc)dcCSAm2h)6LMF(3RppL+
+rEA6S%R-'9'e`[l2aX#9X([1TQY,MJ64qQY%)Zh0c(rJ`BN`D2"m5U,XV#*aT)qa
+dG'Si,[LhQPl(+cBmY6#ZLSMUDkSZ"Meh8D,KT$-!QZK[D$M4"'ieT81!h2BLL&+
+'4L+bA6$cM4Pd0*+VmYKLIk'f8%C+fAjEDI,p&VA6d$3!@2mF,pq&hT[$A[fGYVf
+[*L"mEhAH15Ej@CLI648-iGp&c5N3P[PiEG6Zm%le3[Th$RZ0$ZHmXJ-FcNNE0RB
+NZXEll6S&@h(ZHIP5&0A-TUA(ijaH&0HFA"bVGkH[(#Zp(Xd#k#2ANi3Z%JpkR66
+`Pbl[c$,1DiALMAT,lq[QXk"%IUMk+'T)M*E$&MdVPalmd-qkrkjf(P,i&iVFaaI
+Lb114Z,lLT*3XA6X66dl'k5CHJc$SNGe,qA'HBa3D-&XPM5Hjd,b+DiUrk+q`Sf2
+K4E8+&F8`Fe!PB2Z!B"jUiE[3m1BjhZ-%[c1"5[3CZdkV3AVp`5Qa1MPbFZ1J8V-
+aiq4q'l$aXjCHk1'*95jlZiNl4D8a$4*blaMT"!(fILGD2*iiTa,FR3reTk%`If%
+S-SN@+EpacA@!kNILJ1H"*"ecSlhK4&QlC--)q#)lT!k4LEeKb%,@qR"QI@8Zr13
+lXEmriR$(VXFidSJYrLPhmiEKlbEZ'J@#MhLbmVdGmjl)G,8Kd*H!P$8NH+CQmDT
+f3r*Vb4Zd84bk%mT9,dYCA"hq$rhdqT!!i5`H'0l6AQMm$+hH3TVD(,cc4i2jZ+c
+MC%SRd``#*pN*qaN#1m,(N!"PPNpc1aj3Y6LMkk#9r"IJ&LPhF@PB%h"PKkFR8XG
+M8QpKHfM0SFTA%E@Dl#3M(&DHJMHeja*Y+L4m8@3L`Cm9K-CKISdYimpS+$cN*f1
+CFjDJ'PZqL'&Hb6%C*@US'e5B88Z*9'9rq!hGJYIjm"SXXhL!Ji#%`I"VTP5+8!+
+Ld9a#Y2lJZd)B*#@pSKi!CDAPkJ#*QPXAmP%R+a`#,jIMBjGb8V)X$kL9hr2d2SE
+9*G1q38b,Gim6K*2c"`XF#%bd-Y1*!lL'G2iT&Jkd#fKFQd4R)ir`@88m$BCkYh4
+T'b85"p1P%XGj)[5!TmcPeS#*dil%krZ0I1P[JMR'al-A[TQL!HMa#mK0#e+*q$p
+ccc,0T2S!eZ@dcRf1$AR,aYT81mIRqA[#B[CkFYNB09@eacLmHeZ`6kCbPm+3!)5
+9@SIYM1"BG3F0mj)!@X+,[6HmjFq(PkiVI)jfJJQU6Zp3TTZf#6r!(,L)&Crk&`'
+-abC'bqAS6`aBQ(fhk38qTq@4Y5!0$&[&RN1dAb*1kNAj*-1BGPci(*2&Mj(-a61
+9hcLHm0LN,4hh0F5RNfdK!BV'Nh3#J``cjk5YPM#FTK$A)PLQ0p`,Cm8F'MAD+a#
+(319VAd4)'XLV,aZCa2%k2UN3YR"C6R%k"92[F%+9di)k8bLmE()H23L#%2Rf6T2
+T$3X`56-ZeDh@SLb@i#8%F-kHP0'VL!)FiHC-rZ,C0rb"l&Na$1F9PiPM'mdbfT%
+jMI5!Df@$IkB56V@8N@LFfX#DFVFe5%&8d8*Gmriq6&CY,[311MeFISpY(IcYL0m
+$C-*XSVF'0")dZA1b041"IBGSl"8'+B8VGTAU2%q,3THT"mfIUcGhMIV4,r6EVN+
+-4GC-8Y"JDUpFT#'FN!!r2Y94kFB)p8(&c(Y8[SZ&eA1X4Mm'`j@+0h&AcJqH#ST
+Hr'h24A#%@e$ppV,Vpe2djh8B`Zc4Sd'&J[TDK*V%DePi5DZVM5[8&T)1`bmp%cL
+A"!YNa&!8+E%p,GNX&iMACaE[KT(c'q61$TFYJpI[ZLXN68YEdpqJh$([Y1Vba9@
+!5@Z-B9""mfCfZN*3Blidm,BDdDQ%VE4[@ZMrXLB,,M+)8A)eiGdD,86FPCeil*6
+KBQFDq84S'mEEZkHk&9Me8+[q5S,+`hHdd6YqC36jMX!RI"mK1c"mde%5+-PkKj,
+(!*e!@$a,pa'8YiJA(,9*b-VNI%4$Qcfec`XQfe9R[T3QdN0iVlE9#5YFK-Q-I%)
++PJDkP92fI%-F(2I90Db"H$C"[c)M!a@DE$H3!,h%Ae,,PQ8#jHc@N6N4EVD5Dm&
+&*j&q@-0Z26*f"[SQ04LJ"ErL6*F'9`!*F9iVEC+2'4d8a'dh2$C)(0$hXRH%5L'
+Rq%bdFJ$lq(aNf3[f@aB,[+Er8ef9U'"IeF`J#lk3!+pGCQh-90R5-+j@#-Q-0[!
+M$TFN42#!d24R@XGpXIfej3B,+`6qI"*-C[M*P,@AdE,d5UQRcipf)bSamQP5#N$
+hfVf&*V%qCjSdK*fG[+@''jLj+IA)'dSVCK[[BHrAN!$-CD8BmM%XFBlr[aIcT8,
+U1mm[aT),4B#aDXSB$j)DQjR2mDP63Bd+$f[laeQYMbQKHH5XRhcI5p*9qSmQ-$C
+0CT,keYC31,'DU%m$mDmcUmb"V2TcDZ$C+SSXeL!eM1N"CrF'LP!,ZFJk(LC9,Ep
+52D9D8cr1E-B4)D3*BpNEI4GP42aCF*5pRTepP%r"M01Hq4i1H'TYq4-X(5NA9YQ
+X6hG-K(#T"[[6R`i,Z5D2GfF6qR)(4F4lJEM"Y+@-YEbI-f3S`SemP@#EefVHp)0
+@*UlJT3fmBG+raqeI'&#J"JcDr"`G"*fQDq2NN!$-Y0T8HY,$fS(D(dP[!rN!S"c
+l+!@TX%HlS9kA0#,T-&r,LA3)qaS+1rHl6R$Qc'J`X+E84ZBbeY8lS&B$U#5Y0([
+@#$dk(XS#$$r),'[#62mJQAdPeKKXpLk,BY["i!41j3D`V*EE'Y,+S@mcZd9GEZ1
+5E+0!$4#K+Ya5,D*`cc26,L'+bF[J5C3cm'5d[*F13d+YCkFZ9mNijbp[KB5(4h2
+G0CQ0f`JaKmJLh3-i(#U[B"MAXN"[elr,T9VMJm'$)AdLZfdlr6T-D#ilEYUEQ0p
+*'cV[c``PCV0qd2C2R(LN+Ze`kE&rMcK,%6#Y0S*NNa2Lrm,K%@L,)EjPp)A"e#U
+EbfIRM4cPT#dN%'Dc3#l%l3bS(I+U&6(m,qdmlS2A5ar)m1BEQM5%iaHraJ'Gl#e
+lcQF!kYf8PLNI)JAU96"'836rdae3+YVb@Sc4*FAV@CMH&)3ELR4Qj*FaPU,M#"f
+mFYSdZ*c%aTGe0%T%1*'FqfpG-XI'*e&a(pfKkMmhbd82BUjhVaVfp*U)8He*1@3
+lPm+JF&+f2p`+!fJa'PEIdUP#ZBc9m!Dl1k4*"+*j(&bj-0m)(M9"23Q&FK[K%Hi
+!JHHQ#40AA8GYSp!cG(#bNF--RE8Z9c-K['59DdI56p[Q'XjCI+MU,2qmi6r5f+d
+-5ikmDHCX&3HDkDA+ihUfLV30M)SCi*9''D#E"cTL$4a(!4R36%qmMpm$ZFXp"&X
+F8[C#0%[Gi'0rl`a`FhM&p8[JM9@ZEh`U,["i$e-61L`QXSTZNTkAiEk2ARm`MCe
+,)VdrJDaMT1cBp!'@1jkAZH,L0V)EmhUINLG$2Y$KTpSFS#+A!h5F!0KrG,"aqeK
+HKc!AGPR@N!"AbMG%bEeZNI'Jrp9XI0fl)VM%B,CK*6Gc(S"8Lib&Z-,UT)4(Gc&
++KQJXYmP#c@H5%85A,Y*-M@F((N&jZAikfKPBk+"fPhjEj$aUY,c-ad8(m`T5,fD
+cLLjQ&H'm!`'mD4"DI3A0!kXF3rrqH%jY`hMA)b4)I[6Ufhje6RBaEIBcbKK[S-M
+b+G$'L*)%8,)(pbL(Zd")%FLQ9CF`(lrBQj!!,0(RLf*KZd05b6!qRh@lmMjh4TE
+,NiBFXKAiU-ZKr9(P*X0caEH3!#l`9MJFC$-kGFMXBPJ06H2Xh+`Fc&m2Rr1Kq@4
++9J4[I)SqRU5fec1Q(X[YGDhB,mC2a1N0p'SMYR8F9pLpF0XVM&-)5+560Mm5"),
+BXJPB$`H#kSCSe"!0GN&Vlj@qG#9(TV+2e"*-XLTa&pTj%Y6rApXRX(a!Q(E*2*-
+U5A2epJQZlKrRdJb)Kr&*3A[a6B(Kf(&me4HXEI$[SJJrJ8[q96"UT1!!&'9"h5X
+&H-elF-9b*q-Dla`p[iYS,p+N&cR-RlI8*HCkRUV%PAqeMP!G$i4Yk+%"CaY!a'R
+(Y!*dbkii9jhUr6l!'!QX)mPa43f"IElejV"MCkGI%YMbBC@@&'3Vqmp4)X[l,#-
+B'5qjBMl8(cC@SDmqlD5,R[RJ68EZZ+"BjiAaa,p2G[8V8k41U,Ad,Jlmm%$E6dr
+4lI[*'Nf`B`SdI"'ZSj0KIXY93,rA'Q&,G@[3b&KaBYFL*+qe2EYXD[H65qMjMCi
+Q-#$Y*dVj`Vb&X&F[QI2T62e`m6&PHLaYJI6K,@1I`D-1aCB)CcRR*Z9TiX"Pkd"
+50iLFI@MFEK(U%[QL(P$AbM"I`k4hY!m+5Vl2(3f"Fd@j8p-20J%Y`NCm$BLj#N)
+(0qM[fb#cTTqZrX4+G[a$'(SYc$f#3VG[Pc1Lkc'K`*!!NJJMiVF*`[`XF)6)4B@
+l"bC(dNQ%MCT[3`aGE9``4fe1T)m0&Lj2AB-'P*jX8*L8PLIj2Am@M*XE5Q%Ap#-
+DkP9mYD"$blkdp9!*%`5Y`LciAf$fZJQ&c6'T,CU[,*BhZjjlcR$"BhU-0paEPI+
+L()C$4-3Ah&0LQbQb5I'i1KM%iDVH"ZG$96j'*[h$3m1JA+d-2GI!eQ9Q4cFj)Zd
+1lf[N2-P##A3%)QE2'k!NYLK#[0!!kiZG22p"HqHK,,Hk0XI'jVAhG0*V[@HBA,Q
+N,@P1Md[ck6(-H31Pb*FR6,V`!a*f5a$N(KP!*$j$f!#*,&BQk")JUE"+pF[k$`D
+3!&mV3[%meYG@###-Kcqaa--MXV3ELYN6G"',eDSLUakb2(pfpj*h(de3NcI!*&Z
+UYDQ!p&#ApH9Nd2Yc-MR+YQlbTbQP'F[9AdVI*K9MhXHEic3r,JZ5bQ9rJJhZK-H
+IL,HSM%[f%K,&N`**m#@cMNGM*S4E5G4`STAmRb,IB!Jb&U0Mr%dj"*h!IXJV)11
+D&(6hS)VF+,8m%ZANh8S6!P5VX(&0)NGSL`YrZ(N+M8rK&X""P1Mb2b8bm5%"0jc
+K3B[@2RBpMre(i'9HNh)6"Q,)L)QfYX(Hh4FS3626`&jarU`M!J5DQr34I$H#Tc9
+$a*Kr)YH'1`1p%JAVJf`D&0KPDp0-9bH9L%)qB)I-U0e&rJ#fD2i`L[D`VM(&YEi
+[X&d6ZjbihHBPj6Xi`@G4ibZYj+[KAAb4T"N3)"pQ$Jlfi,l%[k8k"Ph(0!)F1i[
+2PZJIfaapU)qMMTF5Q22IF$hpR,11%S8ZVmHKVVlZMdS069aF26)Pkmdfk"d8C[8
+i!-MXl))ST+qT4IXH&#@4[[bqrlY1rIP5qkpm)3C3`kBaV&--lLpK[QhFXS0$M,a
+9iC!!KSD9S&TJU#+AYbET'kkZ#4N4Ab5Q2ENM)dm#EE2(b#jE,C!!3C&BBJL"c5e
+H,)+f##8R8#+LNP["1YN4([69Ad!98*ACBSYFQUKlDY'%S6DHf"j-GFe+m4H@Qm*
+p5aDGDJGp62HPHc*B['MBcHB%46TE"[R05"4cdKFdYDP'fPk3!+pi1((E8G2L"j1
+jJr#9XqLJ[YE-Khp9$@"f!T!!5[URH)4Pe"(Har&'cPRKQ-5N#eh"SkMcbZYja@L
+E@B52FQJ"5I&8X+Nhl,S**JB`eNL@Lj'kq(aT-F&Sc99dV,P&lBjpZ0FrCDA(LRk
+AYc"fa+r(JBjbpeF9,qem@ADN!+AGpCQKBH[c4hd69kE)`AS!Y$hfQA&*"Q1SV!I
+M06r#8!MqTjhRdjKNDm2qmiTYl$2*'%D3!"ZT)J&pT58iEr,L[Vf@liY@K@p-Y6m
+FlP1++G,'i)pLEh(&Ki(IXU(QlH0*"NkaMRa%M*Aik0$9d`q8M""0kH)L![U"(Z+
+BMCA@rlpAE1C*V)11+k!qPBUBp2R'cjjS6DBbp9cN(4iSfcC&0qEUae,*biV&"RV
+-Vcr+[p'RpNX'(eE-j)BJTRFF3-38`TZZD%r@NR!V*bX$Mlfq4V@-pbpKGmbQi80
+'Nf,AGiH2!%&ibKDeFJ(2'EB-PA++qSidjRBeX'E#8TfRE1JVI5r,a8N3"ib00LU
+XSZ9QB3)rK2[Y0-Ie+bD&aCYEkFk481PNPDlS-A"UqCBZAHk@+fMLh9R1KP(m6Y8
+!q-l[8(YhN!$`HK"kk@RRDL1'K`I(M&HSbEYIV8h+0erdUpUlJ9kUJ5QMSdPM6`!
+aL3D3!+%4QrVlYV3!+Ua5G0&$CT(Y4X3HqN[MBM`kG6c%&VV!jA[X)fpRf*NQkhM
+MN!#mhC0+Q5hLpmV2&0@R%2+2,c@lqAfekjYj*(jFFH8c4X*TYTL',lKIQapBdAc
+I$i'I[-IPa&IP!&c4kSNrfZUe@1@+Ed-98b(U[RM`j`*%ZP4#$N-ab`#mG$,F&SV
+VidXaC#2pQ[,VK*F5*E46BLr[PqE&4PMBiH&R@B%+6c%!qlBaRqYaLm-DFh**ABp
+iMm-LRQrbFHe`9f'kQLDe`b5*e%ihJ,0+iDXX%CP'QTi"*`,J%+#SZbL`Sb"pk4V
+V[Fa'Y-HMZSaVb2MR-Zplq'EYeX6dk++M91jD4`plHDRGI5lBST%i6aqPJJq3!,S
+TF"Pc[4H#`"IilG+A"eUH#V'(8VTYb"c3h8ca-%kZS'UQ2A3XZ3RNM[ZT$C!!Hp'
+Bb#QjC&jIj0(Yi[IN`dJ0G)NM[D&-LE5)pmKSrc)F&KPS6D0LT3[U@cS0I6$PqYc
+V5Y@kh-TT,03&H2Vj)%0cUk$9+3X!RIrE%a['l+SJf23k!&LKV,EAmEM[FT'&%L#
+iJj+r9Xq&rQSQTqD`GZf-e0)*5I8YC!6DBbJHX3R@KN&EIRYk30FZ'a,0-e0r$m[
+RfAdMi0'F*Ub`Ja9PF2(!MKmN,*(QbBi$b(U"(D8bF)!08Ma5acPS*1a0&RmM5f9
+!*cCqmG[P9&hlZEkP$6j1%UMED#J$S&cc+a*Xb'2kq[h46rJJQ1K'6hY9%d%%*G0
+eUD4Si!'L#@0A9EJ-2DD58L&*ADRLaGjiTqDd2q,KGGElpYDM&N)UV#(Ve8L0%cN
+AB'i4Xf+AK*L!T)-C#Ckm-fA-#V8c(#'V3aF-K!Ef5[PUlScG1J33228"X)p,BiG
+&!S#YP"l8B4C*jD*-&,`b)BT+VS6j*m&Vm8JEq8Y1$Mf*`A!VHe-q,e81JPllLX1
+VdZeYYGp0,5K6d26AqXNp2N(E,acI6i[8hE5S-lqY0P%*c`'e&kDB2A8KTZ*kIrJ
+S-Ak'9q4#8+9r+NZJQa!@E+X(hrM)I6HA9),`r"'JR1J)H)J&Nhhh5!0j4[GUNJE
+hb"'Tkj(0J-)BmX[I$(Xh@PdU#K+01D[CTH-5fQ@4L2%3@aVI`UCI(KfV$Q&fSp2
+[G5VF8ijX*Gh"8bhfJpQa$T`9fKGVHHVqlL0@KL,*8Qj-PLC"B9Rdb1BAAl%2mH+
+im1iiD23q+L[QdQ!*Gri)E&miqCD"VUhJc52mDY+rheh"@ILR8eQbG[BVef$"%!'
+&rED8)E3J)D-Kr!MYX@XrLcV"X5MM3TFU&)&Qj[c5BNemE0R1SLfb0EI1MGIEFZH
+,Q-hE&AUi05$BFk5B4U3CR-6kAZH)jd)qGBG6p9K!kAZ,&p5TZNj4U6*pL`XID1I
+V,IVD*"fie*JEhe[kQmNFU((-h4NMRd'CBq@d4h4Mr`X-ka)J,a9b+i$Y"B6r@Z%
+Ie3!+hpDJ-'V[jFPpdN2[LiF2(ZL"86&+$5,9U)JjICQe(%4jC#AHiY[qFjA4AAl
+F!K'rrKiceHBD%80KJ#1,4!TE#D!D+DfX0PZ"3lTBr98#kCH6JMmFc*JLm(A[B`X
+FqR8CFPdIX+K0)8QqP,XeV+j$-he8qVdHerHX#M'6UpCl!GG2E*I6(h&)RCH1VeU
+Dp8E`!i0bbPa!!MrDUFjJHP6iI"`SF8#Ri(Gl[jP#pkU'`e%%AC()6U`&ciP'McM
+#CfdQ@Fl&-E,8[0p)cT+SJ-NG%h,3Hb4(KXhrMV&0%9i#&*4')@qr+I4'chEI1$4
+4G$ULUkC41I&E6LMRI1l8P6Vca4AIkk@'b!9[lm+M(QYG3!0)9[-4CpS"Se(2l,d
+Xl3kA[8e#BQaU5!k#aS[V@GF$aRjTN[LkbZ[L0K%l@!`"lYE$i10*NhrkLL9Y[@L
+1)jc$B!32p"HIL4c8l!XfV*AlC2&!qj2bc"a0))8f8m(5rP4A&F-"QRYNSqG@(j5
++CX4"pVPf8iCNe'LX92c!fLX5p1$U)1FY6eL8NV53!!K21JdQJA5%L"(%"6cqb3c
+'k0$TEKRafFh[RS6)N!!5dd*5F9c8E+$"-bH591@BUNM!ljKp%5hA50Rb1EBeV`)
+ePK!U!(Fk(XGQH,8(i4fV"-Ga4@rr2`1#cZeLL#X&3(3c1A(PhUa@h(mpYPPY*FE
+('kIN![#TaFQLX,4eTf[drG`*hTLl(L5MqM-3*[84Hf`r9lA&iEBpL-#XXKYa``2
+JGhIb&@1mp6Q*qXj8m6!+SP-dCRc*fqk(0[pYHM-c4qL#K[(8-2VCFki%3ah*PhA
+NB#C-UZ"VE5ZL6eQJaciML)8#5@hVHeLP(i(@BL,`#@"&J`Db#!'kcJRPFLU)lGY
+1m)i)`j3hHVHIN!$"61`GDA*-ZK,&Uj92%jb!llJ+Kbqp!-FDCkS&4Q1F3k[qe9$
+5'H+,fp[1@CVQ&mPDNT!!p!mcQ2bQqiM,fdD-Q5hN+-QQKeM9NJElGl,KGD'*I3(
+r@llb84[AhTXASLq!`d+Z*'9HZ(m2"9[[Zf"Mi9@!4`eb&"qpIbf*kIM&PdN2GBT
+MhBRl*lAB45QKEF!V(c&YEih9Fd,AIE1+lbZ[Pdep"dqN8Me%#PiKdh9a$d-"Ikf
+2LKD0p"D9S+RI0-'FR%HU096FlM)HCh!i-'MqH*(l6,XI!(bbL&BE'&H0RTFNepi
+UGMIm-m4K8iHY0jm8h`352hi)$'ZfXf#HDS-f4%c9SRP&*dN&&jFhmGR&XKd`Y@B
+1Y#4hbl!B)KjN'-C2$EFkcDiG,fki4@C4Zdj9ALbMPh2-'AJmp'F(EYAM)5@pX+8
+0dlq$Nf-'*I",Z`r"02SECGN%3,R["6i9l6bbJQ"2IMd5I)i`%mk9CTldk3YE3ae
+#0HcMc,K'fLpZh2-N`@9q2#DU4`'Rl13-jkB`F5LNp8)INj&bNRZLI9ZKdC49f32
+Kl43lb[AMbTC45CBfPGVkqJ!-cVKAZ0JLhMCA@VShDkXpVXE"dJ(1$T5lADL-6V5
+K*V@@m2(Bj&NL8KYRk`,K4$hrP24Nce86$@01K1NeP!FV0Ak`b!YaENkVaBV8l%Z
+rillKARBKC@2TE3CM0rD1Y),82da(De2N9)R9(N(%CTf68Lc6cIbITjQPYf'D,jf
+1")Aa(5XIDK9F9(BMR)c+Y"c$h0d(53c3pG)4@cH80B%+,[VdSei"AjpKKaKX8a4
+qAfZmKLaXc1C(GR)QAZq52K%pb[TA`h2CP1cJU@"dQ2Pm*+PZTX)2LC4HZ5SdYP$
+&hqhqHdh&pJAmeLb@4!K,L,6c,8e8Sb8+2jhS'dX8EM*YJUmZ1+#Ki9ZHE)+CL),
+DGb&8`98KCbZ#k4%[cfS9H066A*k#Uc"91E+14%!d,U#Xp@8kX-JiMNSd[eX+bL2
+idq$G#k[`f0NLZeiKI)&&+P&Nee@&FZUF%D&8*3IDVhbI+2mjVI6caqSE-DfA*9R
+UQT4q!aqRPR5TYkmYqK)kY4pCkFd)NSPeK#S$U&Af@P9hKECHN@&QV[pLJrp#T+P
+eE!qkb#bbJ*Cldi-cmQH%HQ[H-LEB-1Qhe`Y"@eG8D2h-1"dMFXVCHV8UJ8`&qNk
+*2CcYCe,a1-5m%6QT'[fm"IEVHT!!2H6MFh)%'@!2aH2jEJEK)9SNl#8i'S)"0BB
+)"T3rYX,!!PrHKFGR@B8M(ZAAD5+[LV0KFMEJd#F2em(6fp[iAeq3!"Gdp'MG(*N
+h!)X39PNSk8IB9k9d,QHU!L9le-G9"A*%U#h[MhAq,XFk(MA2+0MUl5U)%YGX4["
+hd(`ZC(m5`Y0""2ID('TBS!'dSBa)%2lLP#S-B'A"lA06YkY,03[CL&jN1IdH*f(
+Zq0F@MPQ8*e5AU52-%A'4R6e)P82@)b0Rd8Z*8UTPpq)6V"qiM"3l-VpDb%'RDRb
+-qFJd9#JC$jEa[-'@5EC"0&M&&2K8M+lq-39a3+Pj!1Gl[c*)1e5J#KfrfkF5k#[
+64!8mL9GEP0+ZX#8f1ApQh-J%,C1+pb[$3K$9),ZNJSa53%Fie)DkTN*K$#bLfAV
+,i0',S5+i$6"%&+JSQ"3TJ0N8`ZL1fJ#"'*M649C)P3SAeeRV-SC0A+Lpj'V((Mb
+GZ9+fZBk&''Yda("00emrVN%4*(UR"EBGla9CcUScS@pP((M"9+2LPhJdi,(I,FA
+,'[U#QI98cFrQK1EDCb65Ql#X&(ZfQS*rTPLK6L[CC'G8QN2ZNPf,'P@-SRG),MC
+fpfPLI8+kD-VePr[!B3`lY'NIXN@T2M5U6TpP9fM(*b(Id3mD6$F44IEhF2#GIAk
+HU-1(N!#CJjPq(QchDVShdHeN*XhTe`)"d8Jc('q)@[3qm&KcccXl'*KlNc,cT$k
+RlS+`GkrMDeR2j-55FZl,G1Nq8(i9`2,GLQ*rDckEDS4Rhr8Tei"E1(6qMmRaBIH
+DN!!'bUc$@qT)NVKrfcRLK4E[+"rNlb0M5PTFpP$!dHU[Yr`f!Y(jJ,Y05qT`Nc)
+QAL"$p5ekXLBY`5HJ`DGiF0!HPV$l*J"r"48#VfpbE'SJ'EV%XN4$(pU8frrf'VR
+k'$C!*iQ)heHUXb5B",$`lHXc'*S%YKU0qebBNRTT65k4p40hUc9PSZSG,8h+@TH
+HKeNcKjC$IPYV04%Y$XNf-Cee@Yj2SFqX9Y5pEScBQH$&bB#cU+-d@GARbbk&2$(
+`l#p',5BSRT+lN!"[QX'K#DHa4EAYH**aZ3ljrVBR'J,Dra+pUUAJi89J@RCr,bT
+C)XCdQ"lpfjK6SQP8@9A6mNTTpZIdcc2L"XC50YFmBGLlr&YpDl-LKQV#%+imB2h
+k0V81[(a'4IGk#(LX@YSLbR$lXH2K5D$VI5(M6XlHFi[arQ*DId9$qj4'TqM*IiX
+T@1%S`(jSI2$CC`m5Ym)b9[QRhE9"k%38'mkX+94A4Kk*ha!'PAFbpTaPZeR*YAD
+eRUh55X4IHX8Jf@IMl62qd-PLhCeK[r8H(GBPXIV39`9*c'F&E8dEj&`Za*Q#D32
+$"G+AcLC,#Q**mi#kYP*BUEHHUBY(51I4k8,[6LRal$TJ"P9m02c!C9SF@YNKIQH
+U)Kb1bA*pI&R0bkRHf&LYT+fMaRhHjI"qE!FfGIaZYqSTC"GSLi+$@S43+J1(LRA
+Rda+erXH[eLBYm4[jc1ID'd,!`kAQQ"EELh@$Y0(B(SdSa)kR%qM6aJj`SdQ$Bh5
+QTdQQSlb9X+"dHU$)h4Cj#TZMd(XZfjc2RXQql8PbckHl2Sf&J5m9f"VGBX2pIHI
+6q*EQ'q)4SHlK!r%dj8A*p[Di3@cRUYUZSG-EQNIBLef'81fBX5)k-GHi,E+r5'4
+)5!Ma'NCleU6qd40emTmqji9`ZYiDl[NafTiK2*iN8BTN)M0E%Uf+(ETp39pjcf[
+i6p"3a59%kid@jlQT8Fp!3l2F'k$GA6"elXJRXhj1#CBP0#b1MfD9XA)19Ca#CK'
+XrCCA10HdkCpXr8bmPCIj"IqICa"VTF85$)FjT)'Q8XFN"e$`4KBc0+T,mc*[P%4
+SJpC4Alri&QfHb[FX9HaL0qUj[90l,35MI)UKilL0BRLA-MVqeq3%f1$`UM')Qc@
+G6ZDQ`d"BjC!!i-B61`dI8)VJe,pS*eRc1B4*Jcfj1BhT#3ijhIDNjah3mIG,")D
+5a)b[$l+D5JX0A4@Y%YNahepJ&!*ZZe-#!h#@i&Dck%-&P$&UCP2`MVHJa"Be1%R
+IDE4KTTU0le"6VU8JV`qRpqp%0`l0XTFe(PMLVmSFbR09ed8UF-[BH1a09NCUE`p
+[S'rqdePPN`mcAcaaNc)B-eCXX$hjIN[`QYMY,MSIQ(2fRcd3AUdJZ!FiH6CJRTq
+64q2SZc*"fSNkYB*CdZJC2)UFT6!P4EicLb*8"X",4E$TlRGBN!!9iej9i0EqVG,
+9#TZQ1!Em*"j4KYS39p#kZ,pH`Xbl`b1ST(a+MApm36)Zdm5FE'YM-Ua&('I)jT%
+rQT*63b!md+GJkmX+h2e6IBekd)C`*&Qkm)0fm4rY+SS5qlHL2@dBUG%G&5LrMbh
+rGTV(mTpQc'3V-ZpVh03&d&kMK2Fl46cN&)T@Aq[aTMXD9IkYKJG['aY[LTe316&
+FD36UiR$8kX9S%DYYBCFAN!$RJ6fMF8`bi1A8kSZ*YFc1IFCieVIY9%d3!f`QQFT
+4NVQ@mZKpU96lS6PdR5`SZ`XY`iR6BJ+#94`2`9SkX,Ui4@lCp9I'A9rdqQ"dV3!
+Uj0ecX$R&hc!irQ8B'"%f+Caqif9#'6lAMpXN&Gi"P068l69eSI4TjQL8S+1cHBc
+K9qD8K`h,4XN0Ra%,H-ILk+Eer(`m09Bq-Ej9J9'klT'mfFfF6J40ai#PcSG1m4M
+L@k"M2L#%P[L80PQIf4X0JqS3+pMe[Y8CjMpAPrQe1bY6dq90BqI`R1DfNhC4&#4
+6e1h'*)G6DreC'AbDSR&&XCqKkRS#VIENX&afaLB&8"6dSm3+KI1Tff$FS*Ted"[
+ji)KTU)%2c+Q[q%VVkLAlM[UFSf1cjickM4G00%UmAh,U[4r$%6Q('C!!afNGiFp
+Yi8CjE$N1LTCiG,&DN!!`eSef)Ce619mHd&KrL4m[KQN1hGM[J3@Kb8S%"EN[c))
+$KN5I5C&(NepZBTl"$'M*0HUEXI$&b4jV+C!!fjC6"d"EGebFb)NdH9(FkL4rm&i
+INEpr'G@bJV0,$5+8Urj'TUL8YN*50ZU[@NL,IHVLSeQFT+P+&[Al!QR,P0fY00"
+b0*El)jJ*HVR&9Eb2m-#(#A$*lb`KQFYpZl+,Z9QX1-'f8k9D80r59$(2R1c31N(
+E%iV!S01T0),rc93V@dl0USdQSj%RESVYXA"j4+LAHN`383&4TY[0N!"-EFP,B[4
+A5!U`Rdq"`JE%ANJ@p`@0VrKPpiqVqYlQ"[6YG!Xkkk`S651mmSfLpfpa92%VTF%
+Xaa16SE6f2PdcfNST8'6rb0aJ,+4dmRR-IFqHH#T"kk`%0MTD84GqU'[)E%81PjB
+CYA`SrNma1VC$1))!bJSeI+,Qa10d*RV!jF60GLp`DaN-Z(+9(Nrr5I-94iGkAE8
+FfMCY1)&l6LL[HHl`!*flFaH#4QB@Je$KfZlppj2bhAIjRAL2YUiBSeaMA#rq0[6
+CYAqLf5,VNFd#X1""rZ6-Jd%G62h[AR,2HS%pUjCDDE)jJ-1fDq)LXd!#Di+e"*M
+#A,DCdZ!A(iI'C[*E-ClKkdkAb$j5H*`FEmC[Y(R"-%Y[6%#ZVmcF)*pfGUJ"G,a
+kI#k5'8Nk&iQD-i,P")mq(NS`S$ThAqEF[1F@(4mGqN!j9Bl)5`T2K6@MX!HGf%d
+P'q[Ca)e4FFTR4E(,cm+"DI,GlA`hKMcLH8Y)+X("0`6kk%Q*"hL1'8jMY6Yi)F(
+'[9VX[THIDS+1TKfDH!BfGp(C@*RTk0CEcUQ*MKraeib`UQf283S"b@D[0`[FZ,j
+"-j83X91i&TmM`S(4B)E"EPZJEm1,@Y!JK(F(U6ICi)fIArIrEdbPMM-f-EZ0Vei
+KiRrl5c)[,UESRia(H-mNPPe+6T+JfrCdjRT91'4*`if$H2*kTGE!JX4UbSmqS$6
+'$!$p#49[JJPEMK0PGX&Dp$,SYPVmkMb),d(2f%@T!K6"JMhMVq9)pY)%BdM+pXX
+b)LfiYSARMIZmVrl*K,+PM)ZBB-T2qJLHb`i3Cl"mbQ`LF@VB+-(V2ITpI(UkXMP
+ZPjUTM)#FmqG%0XeVCd-HN5rL)hVk'q&ZQ!%Naf(eRKreYP-2*afa48PT@f%'J*H
+19&94I1Z[N[qLdFNCB"ilQlR[(YYS!Hmj2)cQ3l,3+"LfZAKCS5#SH+HlhdAS+Da
+YF"ZN9V2F8Q#5A1Y&QM3`R4"F(L8-H1`D[V-KJ-*D%46kA+f4*pQZjTU)Zk!K5*`
+h,GiMc2IeUq0U4+"&980kL1*AmM5NM5Dd,pEYk6+RqP81ScXfjk3"+kqrUMT0%AS
+!YSUm)f5DRPYIpLJZ5Vf)"DrGb69fSRe6IfES(DQdcZ*$"f#K!&UhjlQa-IJi5UI
+S-25%UX#kPLD!(5-6`hBr4H,FKXNV+3HQ*+-38Y$9,92Q*"q'i2VX4(H-"'+TAH0
+Xhh,$"$[Se52$K*ammj1,#kHpBdl9LmTJEjVG-Z8c1LYlX[5$%LB1PE`p9e6cEqU
+BT&`$S6[9Km#pZ$mPNHh("4(jle4!mh[H2R4Q5Clm!J[DD%[@l*33ih#i'+kpf([
+1*ek"@X#+d9X!P,SGN!"N)ENX9'!#`RFQbe*idhkRG(j@AUJp0AE#4@Sk4HVbljS
+mQ'QcA&4er1D4N5U'"aL04qrA8A3dEM3BX(DBkrJ"q5)#4f&6ZH`T[QV0$+aJI'a
+GpQdfY(5RV@GdXZ44)9m2dT`-+!dX8P8Cj3MI3I`IrD9)i!"#1KA!'GN22Y'fRT!
+!&ic%Ual)%J[f*"S-+GmqU*!!Ql&'FEc0lcbEUMXSY&@SccYK$+pP,q&cY-@ADGP
+B$K%d!8iQS2m,j(CQhZQ'V1[le+#)1#Br2kGY2pXEp[-SZbQbEILQ0rF2Y[NeKI#
+-j+%,R"a@p$k"XHm(85EBEFFBZ6Bar6i@3qV5T[ZmI@V"%MYNLU@IcTIaR$`)ie,
+EX#$@Eha"@Z)6C2[Xb((R8f3`%VbTbmm-`'3bim)G#H'rjeLabr'a4MQXIjVYFrH
+MBRFENa`c9[6'G$eU,!!J1ArQf%i5P8*jYK4JjViT1Bc*Gd-YciP[)@9LD'cf(KK
+e&e[N4cH(SrT#'0kGdP92LRBSbX0Dl-H[DR#dbeXKU9R6XZ'B%paIqT6`3@3ipaf
+83(12S9@J(c'LZ`4dpMC6&c*3lYV9ISe6Sj(-!IEYjA`9!1"N21V4QE`YH6f3!"p
+NpXX"fA&"&U*$GicDUKa89PlS3GURlHSCJa@)j91mT`&YEZ`P3!-dl)X35Rp`RdR
+!E)()Fp%5a""Vcm9m9MVVaM"*!KrC'-h#XdaCBA"1C4-i$'d4GkMYUkj@kMrJP06
+5iBmj(G[%Y!H25jKp-I6UjJh6+)M3*kP3Q1([MQ%`BP$V,,5jdpie2r![c1%S@YH
+F&Db2m+hfCAJ!8-qYRm3L)&Rd!m2$lfeAPi'e"c[!0%Ri8Cf3!0bG'#hQ4"fZpia
+rhK&p4ZD%DVkkkT,eqR#-qPiHd@6BLq,i$b,mfC%QJfeGF`T9#4&pQ3$J,&Qa*2K
+bm2ERCcH[3%8IR)j#Hmmh1L[2Aim5dpbcPY@Xi983BIjfC)BFF-jp",!#db63LX&
+,r6R+J1i&QQmj"l1,F5U(G6Z1JeFLlijkFJclmcBRr)jAHc(P$EeBUiPL2Y)1`-4
+K8RK[0RZ!Bi$dmPUM!`"+Dl'ZATQH565LQJF+MPjDPR)q4Zi69i`XmaEr9qL)8Hl
+8[M92r50dIaT'qMS05L3MZIS*3bZ#"`,aMpdd63R&@q4b4qlpSMcp+%T5TZ9j8P3
+!F539MG)%h+Rc9I"2p8raLEVICkaGd$Gj5c9FU[340IYha(H2)IGZ9"3'cLI!m@L
+D5E#3!'ed3VTf2ZU(J'GD0pPBAc9j&Urai'r$KJ@'5a@G*jZ2fFfJ1`cBGqXbBj!
+!2Ll["!cDU[UCDGN@Zb[XEX,4NbLlahM9kR0r*1ZIkD'4CT%8b"4GPN5B1+fRbLk
+f52E0qTpG@J)Mdp`MC(id)#eq5Nc,R1bE,Z-`Ic9L'iL14p23cZM!Ae#BXVap&mB
+1Vj49U(4,CbJ5iNNeFfl`,c*ULHV!"K!1bIPfU+EiRhNe3e6'Q(*9-Meke)%8K2l
+*4KPc)(SqUV[p9l91,0N3+GQ)pfFQ-[`9MHRC2LB@E%,T4XLh4KF,QB(D,Jm-&E)
+$4P'P9EpbiF#f5QMq,rjYdAR6'G1l[)14-#KX04MfHq-r#,caSc6(cZleYiILfEC
+(8%'kD8E!)iCdp@AXi-!kK,eidX)e5*!!ZAm)a6-aaTc%kD,q!kE"$F4$)J0m,pa
++%h$arH"JC@aH0*JU4#1&K#VVj%bM*P4%$qYN,"2KJCE"2e(hd,@%R&jl49A8YQ&
+c`FJf[bd+i+"c1#&Mh#i'XD[63YhfDeibbVc0AYkfGZ6lrk,Q4mIqfPr3[eG&RK4
+6SGCdHkE!@2NpBM',mmdmm#%[RG+$ZP#eEG41R3PHEp!aX*!!a0FaG8jX`q2B4pM
+i,*aKV4&U4Cp+GRfp1S+h*V&SB"h&#8JGT'lPd)p56Ki@dk*jmd,HpaEel9&MH9e
+4Ic(*M8pBrA1D*p)lZCbIR!QVlJC%lCC#Q9FYXYRB@JSmB-$*G!bcSh9V%RhdGjV
+*!686q21DVCm++I&Zdk6(TY+$*T+(9Mc14#&kd8K@$#"KMD"9fKEXr5JaaeD"[lZ
+10MIDD#Va'KZUdM9D1R-2dU8@)pr&5j8aH"mdPK[5kdmGh[`$,mcB"X5KrI0Yj8T
+3&C5CTkA#M-1IVMP0%04R!TkJNL!UXq&BlQAT$b6i$[cIR$,T5a%%65rGR"k2,86
+hqJ'*cTZHL,#%"CBZlEDjF#2d"qY6,M&2hmcDTrac&Af[[p*Pa'pp,pe1qcC`%"A
+&#6jdJeHNX%%Ui'UU"9fE,31i!N*8hQF&R2!iLqk)c6k@IP,Fja4'$XJLUbE66%q
+KhAjGhE@26fGCB1958lbLccMRXZ[qD['%5A3e`*d8k4%Q2i(Q0@55'9Cdf'pXhA5
+aL'!HJGeShVX-CDf(pb2,jZ-6mHDYD0Z0kddNmBI!hRRa'Tk%IMcZIr)E!&#8e2)
+hR8mJ4,1$'p4XY#-M4!Ar!M)d1C'),j&aCafmaM)H&1pF!UaX0ZHkKC&GE[*0[h[
+ckXl$em@$a`Y+f0,k!f*A-JE`kUPiP`9-Q%`L9&3bF40-"4B-Tp6-RSQP[ZLJI'3
+3MV-Ja9#`fKJPiI`(9JYRNbj+KZZb#aEq%C!!c1i)%p,rmKGhTU0j'N*(1lIN*6(
+!PAS0EkhP2,Xl`2*l"%TdaNA9D4-0)IK[$AiFe'K$(Drfl#BQ9&CYKZM-9PUJ6aH
+pKfV,2HVCT4DUQAp""MqTXVNBElKrqB42mBr`'"qlTa''qP,PTTJLE&qc-BRTX9@
+Z@4r5G@N,m3#C'EiQ8&8GBG[0M9c%p%4irHY!9([qe#"QK&`iKV`GY"`0F9cD#&,
+@he"+)pm20MY&VX&j-ZbMM$T3TCBAI6d#B#BA&qmfr#DDC%#62&%Zc'"qQ#(lJU`
+FfIfD)ajmZmI%&CM#V9CiFCTIRXf5[1L&QQ[HFrNF(m5km%Ddl5hIeehR*VK1K!1
+ZRmS1%pb1T5%8jEQ$FL1efkee18KdMqQ8Xa"I(1T#k(1VrR2rmAIZ"I&NIBM"@-V
+j-)@pd6XCemS(UA,fj[0b'dD%kH-!MISlr0R(QXicMKUmP,i[EG8la95r%"0E*8G
+UkjAAU[amJjI*%&RAq(RH[14G2kBjFaMINHiLl2'HBhqL!A1+CiM66hNmSS'VU43
+U``8BdFi1XLCC0UN-("3Tf4QB[1jV,ND1rGClqNeP#-Im!8JM2pPM8QeEkH,pa@p
+3!cVhl3ed%KU!mXUhEqh1Zm!-G*A%(`K5V@iF-lFbm!md)I)9Nr"9lI93U@pIphb
++*+k-mSm,Q90SjbI[V[phFQ(`Y$&RR'ZPkU0-GH,b*F#hZZT66D#EdJN@qB8bVmP
+h3rqqNB8j8$0h-RIj$TLZRXSC5U'CH5J`,bLQS8LP[l($VK38Q(l$b3(ZI"!Y3D@
+P0+D'MqXleU1G!"qmf4)mF26m662!kMlpL6XR!D%&T@!Ar[IH!D%K@'XFqJTKaJC
+1TldpG`El!4`B@R(cj84B8l2Z2,EBBZKc3pdX#YV0CYLdRM[il8&r%D[j#R(SMq&
+)H%%m@JZ9dT68(+eV2JrZ)[1U+YPT"2)E`JA"CXR+80YRb2%4NLBT"fE2Jl@#aAV
++,`lrZ9$0P"hie(ZYK#daKH#VeeI#%kQ'fZrAj))imkS3SjNrm"iK4,FcaVE3TIS
+'!qkBQkc"V8+DU-NHL"BP39*D@+#4K9G*$!@M`M*JdN"Db)fX28%*+4@0YM#Ral3
+!p81DEY5V9CLh@#8e&$9`a@a,#hem2KBcFAe-VlemBa4[NYr9hrY3X529[Zf3!%b
+J1baJi@k[8!HK"RVb0kI5(l)%l2,Td`QG)[!lq95H(&rDHZZh0-E@aR69L&QrAG+
+ZU5lU1!MSji`Sjc2,c"U#ED996ep(LH+a2MQRF,phrX61Z0m*FK)PTP$hH(4&K*R
+peh#k-E)QZZ8HHU$f+('C)0iJX#&N3VV#b[8c`Q&'1HePK''4S*ReMH'"riAqb"M
+rVpH%&F6N6G2r*fL0eG6lK!A!8l@-GSVXY0[DX&Zr8%GSNaSHGIS$QD#00V-l%1`
+%,TBLVB[1'Lp1!a%4aq[V1+3$$[CaqD3,B(GUHSKmm-#Y`#XF95Vh8K%G,AH3!!)
+Z10[1#)$U*pH$RQ4(aSl84*!!rmaQa*Ae1)#e"N3XL$F%k$IP@#d*12fmXmEJi[1
+4EE9DKD&Z&b0%4U)qCi)2-(XA,6EEp-"fb0A,QqDcDrfX5%Q20PYldKA6U"#f"El
+DAMKSD+B1325b[rQ)4NH)9@Gi[LEeZLL"8!`Pp,jrK$%mpRcVH8R64YSEII,r!ML
+cbqUAUG!Y'V2Q,--J[fiSbPfLYCH*1$c!2-ZV"fm32N*f1FY#2PH(54aL9N8cDm%
+ccb,*+#,[l32QLf"A"H4CZ`[+j2G&H15)'FN6+'RfiZM,TE-Af@HkE%Nl$HBM#VQ
+(@'i8KjlBATkC%qJl0a&IeI9lYASd'FT2*)4ql8UZ@a4VkA'@D)jV,I3-UMAeMp0
+$NA)H,idI9(D3!19%#SSUCe+,ApraNhmTAAZ+AF5A@h2S9TI&R&L2h[e@!pAH$@c
+9'3EHhbU[*1!'1+%%!5ZIEJP&Bc2MaDK+NlYZDMkV1ei&&V9U3fk&YS8p"RGp$D4
+@$1+q')a#1!IS2CRhCP+#mK*JPiFblEGVad2lLG8!GAF)@654LqeZQP-6&@"PZh(
+Y0I9JYhh(JaTdIH8p+r3f(Sa%A#jl-!2-920$A4#B3VHLN!"dMq&q45CpAP8&*#I
+5e('Mp)HCE-Tq,HU%rP9Q$K6H*CS*!M!(Z#)Fq2P0N!$J"Xp*eNQ-2NZh9VBi8q4
+S21b3!,(T+AZT%DrCJch@B`beD6*A,@MNmpHD8UeNj4haSlY)CGlP&Pmm'Cer(kh
+`!#MI&ThGXd@$T$8(G*b1k(#T+ie%1%2Hk&8$DAi*APRk[e5EGVD'9h5)DqH9a0k
+%"Z2A'5d"[a$HbeJ,-8,i6&S(9kQ--6[LN89L6$P,q*E8PmV%ekfU4r6ArfLSX6H
+0("8C*YqGCbIDQ4"$UdlhaPdkrSq5+lM('U%M"6XTb8%$QFk@)pI1qQ'hM!XibQb
+X+F4*3D)RUp!U9J8(lf6@(Z*EG!RCic(`%)'(8eZd+XGP4ahrrG$NDm#NE-%fQN(
+lePAN6[k5-HM+Q#d&-$`be1T3eE8(iX*dPDi`#CZq&bp#4DPkKAjh3(S8+[C'+dq
+TEIUaY)mF2TJZdjE%1l1BB0[biSY[5BZX94`jmJ*&H@Z8UQe4KCZRKND&m+"E3ED
+$lqGN95LrRj*D,9m)Gci(#Y,RLj!!5D$'DK4T2b!k#Z[[,'#iphLHdTf0Q3,(,G,
+Ejk1Nfkhm!m3q0dkHi*lXfRATDI[q)2&m'6"(6CB,`X$mF!J'+qKjj2)%fHb-0!+
+K`Np[GIY@8AV$Bhq'e$*+9ETXZS56hCaEkrAA4,Y'1XF$FqIBHq1D$QJR$ICj5p3
+SS3TQ"9q"LGH+lq+TXEpI40KX0,PE@Y%)Pa6AXAU4HNrb!AZ3!%%E15ZPR`SemGA
+Tr*HdBj!!K8f2aSN"RJ#1`4lY3P35@FQjm$DafFkZQLiq#AAj5lXUpHZDl1EM[18
+h[QQF""UR'%2eb&VVl(l%V6"6p[k-5JMbkab1LcAYe-#,rVpU30'mETCHEmTe+4k
+@K6lF"YX"V8"QJU%0GHa9GSY*)2-$!)BKF4IdB*!!lHUQL2iecB!(HE5MCY#@V(K
+X!k+8,[B!N6URrN4p'!EkIDa5h+jDiqr+Lp5N,r%rAYem'9p``#Iem$%qV`5#C+&
+U@-2)eNcH2ja+)H%b6(j#0G`!R14m&GhfK88Z!dlf)2dK5*3091qX9ZX`GJU8Eh,
+b82b$SdTqDr(b*Td"1pE(EG)hAqiS3!jSLr&'kH35IFp*$kHF#TRjNhc6aFX"A-"
+jaZelUK+h-F80kJ2)I`CT$H[r%P`,S$,D**m%cfmL3bED#8@VRQNV&NIp31laZAX
+T#q43-*0X4aKE[IHf`!ZQ%RV41ALlBmqK#1"hr8%RI1Uf1Ar)'&R83Q+q`4Blmp6
+hI!dUK#V*`Kri6rqaei9`(YIMP&CV(D1l9F480Qp*Q*,3lIa6+"&8[3KF'BPRMXI
+KFHdUi2AZlljjTiZZGHNBFX["Z)m@%e&Kf[k2&LRb@l*Cm"aXNd4DD!)UTpfYHGa
+T@P[kd4kmZf,9!(K%HS'Ab1V5lbARUI'EePTMPFkfZM`%kJ03Ae"Vp$V"9*lVAeA
+aD(-0IlRKQ+MING$jCF4R!@4I@ZE'VH3j@@D0cLZ$*YaU!&@53(mf2a3IK#"KedN
+03YM&m+rA-P@X-X@rq$5G5RB&C4Ci95H6fGdLce$8,2e$!-AASmiCZQ%1I1PhZ%S
+ENqMF9%0)@2RckqNCV2(hEqAmD0'l`J0XK0F@5PCJ,RSSb@H'RYDlRAS-ElXjm'&
+b@l8SH#!dMmkrMSB0!R3X1eLNK$Nb3Mr0JH`%N!"$-mGf6%+E6kdUQ#ikCQlLi5a
+8Kc[`9bV@+Pr2)`Rj-GZ[#i&djX!JCpSGbi(X@`2*`4PYRNqEBLbP*H*@RM1'0)G
+BCA&j*Pa-pj3HP8d+UI(,Lle`U[F`aj%Cbd3Y8p#KH#3EYiaQSNqP-a4(r`9Kmm%
+52QY9@MM"P3aqXjSf4P+T48Kj4LMqP*ac9e'QTYaf1+!1%1AF4fGe(IkQd0%c46-
+1)YCqc'T"ff2`Hb+q%c00)hLVATk@4HI*APD"RYl5I8&5P!&3k*lZV@lF$Fj3VJ9
+ip-#iG@"dI1pYp)!meS["JBPchaL4U@4j-N[F[Q4*4CP9Q)CjeT4P61YZjHChPCX
+&")i#MrJe$JQUhq4Vfpe%Vq1ehLU1aJ+&@QMU&YkG4QqKB8$cLNPYQ%$2l"VCU8Q
+3!1X'fZ`hY(452p3RK8-5h'P5b+XAR2d,1S,eLEIF+H*Y"E2fl2iRZ5Q3!&YX$#)
+-[cR0"35dFeCqGCl4"h6T4F2NGJ@ThRG3#%P%I5(T`M'6Uqk#L"rRT)hlmM&Lh1F
+8Gk6+fidS1'4`cG4kEbF*49BN'X%h[CD4%FZ!KEL@Y#A6Q*KlX&K#rm+p8!+IJSa
+,15Edc,65G"i3H'GCRTflm4RAjTpZ&f3D,(R0rF2T1S06FQ9j+$&8Lph'E&ZcP[3
++'R$qq'Xi(M2,6k3-D'S%k+LQ"lX-Lc%PYQkGcRhA!ZMC),3XP3L"HrH&CV4SA&V
+JeKh46Tc@r9$%d3"'#qE3VI9Zm"1STjdPB5"cfqL)Q"e1SlVYb(,JF5LHlMD%["U
+dGE5e6i8b"RXA`Jk1fjlpD,HGm'-YlLf6M8`mjJ#U[S04F'rc!&mX#M-5l!NM#,)
+FjTijlNYHRmkTKBeTU,L85BBdaH,P6XaEi-JfE`-T+i9MR[e2G0iK@r,1E*XLPI%
+8qRPFDMD`-B`dd)e3'L-V5j(S-#RNq&0SEXpGfFGk5&-*p3QJal+qiH*5LR(498q
+)ebQE!CdNC!TC1*EL0"FrBU5ccFaq9&bQlr39E$(bpKp1GX%G2IcbpIH8HFcRKIK
+AID!D9RLqS5&Cc6HDLLBId&$1S#AHDhah&92e[X9,LD)#NY2@kcmDAhPadMa)@Pb
+fPFKI30d$`hG+ehAk08l2ic5AVSh8Qi"N)0!1!5,jh%mSrhC5IGkf`6PP#&'@3B9
+II6IAL4em,%JP5KV5kX#Y"DM+V$HFk6jJe&b)TB+A0hGJ""EGh&5lPQHAZ,T,3GH
+,HY@RfM5+-SGTHV#hMdVMH8c-$f8(2$arG6&9"Mq0q2&@"-2h@1IR&S$5NcCJ'*(
+L%BLAI+5fNd"dE(Y++fN2!Y90(@rMjKKf9Q(f"B!p&GlRQ2aYAD#"#(G!*8HGYVS
+IVFl6Lh+XFY%'0kU8Ae-#EeVS+MpTf2c*eU&cIbphR@)SQ)%lE6*%V1@$9fJ$44f
+)ZbZqLLHFU3MU@V@Z+RZYB[kr#RSCMNiq,8kL)CkRpaJJSf)$SG8J&,-L!GqL(G@
+Cha3'2BIrlR)DicR!VA*k8cRl5YhiVd5,aRbbKDT%U1mN&XQT+l,FH[l1f[@FD&d
+3$*-G$Xr)$18#P[RSNT[ee(+`)8e!'#R&iE5p))*3lp&"iFJ&IZ@"03h6f5p&%G@
+@cRc,KGrKFK4I$3FJYq8Ai9bdTVEbAJrEBZ`XIGFjGSXYTlIR(C)#2K`BBl`10XU
+5h[f#fG1pP%$D[qPEbD-NdDebldUKYHdL'eXb!U1ID8@S5@lQLB4iSPqq8klUQ["
+,kN)jM2A&H[M$A$0,3"c4B$*[Np-f&#6j)kD[q3[PSBa@al*2d(&G9Z"3UekKC@r
+K[kr,"!)fq#jK91T0#EUc[T+KY2%-d6!1)rrUFmm`M864SD0Nqd%))[+9iiVK2@$
+9"dj*0[h"92q+"kR#Q3L!1hdUHLp%kfL%16PL'#e@[Ipqba%J'8ii[fV-TDiKFEC
+%K3DB)ZDdLV0'#TUrfbTrNlVb1Y%e4BG1fPaXXT5eG3%#N58*J$RcF-DYMK-rPQN
+Z2$BNTN14%`$5e(RS+m-!ML@J"F-m1l6b,E,qC5%Xl8!HI!Vi3e[rR0L8jlehIP@
+HJ0!S135ppRZE$'V)F'b#C4hRQQSF%r8*-*G58kl5kN4Dd[5iA"bLX-2!#4'-a95
+m&CSY+,9RLhL-@CSdQJ$LKKM@*0f*V#JQ&!%r@4)B'jhfqpA)G`L8)83%Uc@TI*i
+U-8k#p&lC[A@9G$lSX*V++X-Z@+cchq0jJ'@"H%CB$'GDDMNlm88$%Ijd665$dV*
+r$c@r!m6V[VV9V`M9F$1@pNZFl1*mH#X$"m(9V-F#BSb8'eN$SfhfE+#kMk%UeLM
+#lCbN28I,TL0h$EZU5m$#qGRj2D(Sebe@MrLkI84#`&Z&H2'4kUZj5aG8T$kCmC-
+Z,GXrRibPN!!EA!c'fHf,[%2df@ajjE4!C&XlTL1QdTUHmh!ak!$dUH"j)HEb`L6
+B*$,JJDG8$@TR!h'UKX``9qjYj3DCbdH9SXR1$9e[2@m@K&51Z5I-h'4kPGSVP)R
+rX'SP*mj-Z`2%(1E)IkS#&k+NNb+iBV&Y(aY34'aF`+Rr3&[HXP6'VP)j8dl3e5`
+qe(6`Z,5YZ@KkP`M$Y-)9!)L-[8B#(8D,aeE&%dL$%KMP+&J[2)q-0q"HBCk@A&M
+'+G9ZMS+I[T1#RG()-+RLP+)qi96V5@Y,4c*ZMi2e0T3![lNfc02L"-E((M)Pp&3
+A25PD)J(dQUFjFASj8IJ+XE$E(iF+R`D5j2!VY3C4GM"hfJQ3!$qjJa-#"NId!GT
+iTdBDNcZ9br3Bi2b60hV*NB)1L*+hVr4E89)`CQlP('DQCS%)e4lr,T51!p4mFUX
+bpSB19f6V*emXTpAI&NBlHLQMKBS+`0J[cCD-0SMUQed[FcCPDTBUXlX00krCMRF
+f4RVKc&,mA)BEh5l'*3eDKj[RHb&(1Ud544"cQGrAH5pKQ8k[5$dP&Y'c`Ii16a%
+84-GI(5imE2lkhl1[rF'!#V@&R,CE$48$A3`mpRjkp8b$NXFE[LfkQjNY2U&jd9j
+RC[9dE2`6T-5Tkb[ccmJTTP$F&6@h99&2N6XFbAD3!(k00((,I`S,baYcpF$j'hl
+M#@!Mq0'2T40FT66Ajir,)YUpDTph)qN&1FHD&eSRm-e-J$&$J"41#N*d'[fSDR$
+&Ahp1KYM+%0UNiY*VX&h@%!P(V#aM'"m3Yd*9a&aYEP@lNlh22-pB1A-eerb'9#F
+ebl1[dBb13E*i%)pecBIB[qY[FMVQfcAf"XcIDHp+9I8M&j*+%Ue#H18PV%pr(6i
+CJT8ZJea1Qk!+RQRGTH$m1GlX4-b&,`2Gf,!0mV5J2hc@(icUaa`Z!)cYA[GqJYi
+#-+02HM9jGD9hRbj5hSjK6RKRH#AaXl+K&`Te08#DE[j%R83ZAlm9``'FLaUhQN9
+BS1Yf%*G#!N(39@'"5IGCr$r5@5X`@j(aG,C+ARa8#Acp3LNdI%C%l4DQFC1)2r-
+43$9lJN-)aCb-FRJA%pdka!e""5G1DV[1[5Y!hfHSfZR0c*ArF)m0kiRXeiNYi,[
+"+"P6&#l`IHZREjVNb)%5f4*4`lQ!qpEN2qfA-I-5GahYPBZm`mHc9K$X@iY%BJ5
+(S'KG419i"S!SYi2diCd3)YG!+rYTeCqSNFQVpP1aMABAKrJPY@3fh$$[$*Fa0HM
+6kk4EaIdqlp'"H4Sap5k-Z*cT#SqV%`JHr`$[5[aG1cGm8I`4ZrHF(PSU46G)SHH
+J0D@0YlNBIXRNqeZdY"X+dYG)$hLf`4%S+a#%(j-+11phBF#Uh"4&q&SajYL5K!H
+ARS)A1X2Vq-HBqU6Dir)La-rL%G8-IDKT'L[f&!N&L@8id&`IJ%6iDd*9"-$AbZb
+5G2J@0STCb!kE-hq,PlL%5PG&4*im)1$D5$a`,Xj$eQBELP,#rd3,X0jphcI'XY6
+lI-m!%(b)m@P,CC9"%)@59M$Ip[+dM6#$Tc$$lMITY,rN4USCLI[J+KC9iNDGE)f
+2`kb4X*'I)DpbkejMi2DC0*+,lj2@p,b3!(iMbYkEJf%Vir1crNTF-eEM$[5qAQq
+mY)3)TeIBCXeFeHJKfI%*c2XhY'cGpGqp*G$Vdd&l[rIr'FNjJ`*3+iZB@60)Rd2
+je`b1U+`JrGPLNRRp9k%QJP)1'Iik5a65bGAZqbcB8pdGNV%)Z-&@8*E09G6CNL8
+XdrC,,cYhRkp*+R)6pC2aH1cFIKH1T@rAC8N1L9b@M1P%KI8bf2Y9BN9XhY!Nj,F
+H2K@+26Q"b)G-mQ+DQ6qVP`DpDec8"A*P84mX#(Uc#cUQV+NJ3!HGXEmh1j!!m%a
+)1"6LBJD),pEab+)Bh`[P%[FP3lYUVUjAh`kJqlk&4Rb,"`m9-L800JREb5'Q(!M
+[U#[)U5bUfJhZ+hj'+$DH''BJQ@[a,JNZfhGhr6D&+J(SX3EEJh@D%LUZ9RUh"qE
+T5mQYGr5k59-hA$VQA"a&JRP`bI+-NR2Lbm!jN5YL(HJK80a1TJZ3!0V0Y3[4fFK
+VfN$br"$&Fl'0r#-QXA)Djl35MIqrX3K0$Nk!%Mh!*U*)69T0DH9LIfMk3kpKBCS
+[fS`P&eGK!VGB-aKGX$SYq"!Ir@BiY*802)"XAqNRAV29GdU5Cp3kclJ'S2"2#S,
+a4f4,G@q2AF6"mdBCQm&8)"CMk,4j0LUj**ifCd9&J"adjDcB3I8Tm)bp9V&82I@
+q[#5dmPM,k1,JpYlHG"EdeaNjX1YXAc`ecqXKmfP(!PXrcN[9T5%lF["pcRD+Q31
+#Pf8@4&E9N9%IA-Z#&9q!rTS-"LBQ!J3GPcICX!%iEB6e6`FkfF%-0XU&kN55UZN
+*mNC$Ke$%4i'@ARe`D[FC!&JAEJA*NEH8$4mk#*C)2(!PbS)a-IHf*6e*eEe#U6S
+lc,2#ib'-P)(8XrS'a"A0+51P2q(RJ,@`jG`4BqP!&H!AT8*h,!aRSTEZ[abEfe$
+BXk8GJ$!NRLfb%6B0MI3jRc6Uc9f-3jJRhKS95a-#Da-$'hL1Np&LdDK)#,UQB5K
+2Q&J$YH%EP9J"NC'Mi@p#dEbU6iP5SeLNUe-IYG(de53ISH29J36P8AkEcFLI(hG
+DpZm`jpmmDpM[YK"4GJ*IkZ8jcKe"YbLV61jZXKSB+Y""VFZmD0DQe!1Z,Q,+!q8
+r#a)IdAp84VCY`PCQr!!E!AJ[FKm1VZa#-PZH82bhAYc8Vc4@q38DFSAV69c'6R1
+!PRBQ(-%JR6Q')JRm`'&0`&584#Sf#,8)fad69RF)I6SQB5F`(i5R')Q[*I`G1V,
+a&Yi+'CPKVr8&HHJh!HMA+C-8`L)V5pZS9Y[ACcE"8S88P`"G9qQd&q$ecX8cd&J
+5,2AH6pUiS@,XAU+cbY1BYTm&P&(mGEGPQJmR*V1N4P49GY1fd#3P'(36&BP'KC,
+mM+,Q'CX4RNk3!'lNT@``XM4TJ0qS@@c9LMHme0$[GVp"lKM-h6eebh9Nmm0YZcb
+NDmF065fJU4HA3[dri$paAES`fJNRrbcARq#%NZEDTq'3!1%Qh0DZZm$$,jU$*XC
+PC-G15!Q4VZjV%b&IIXG*KZU#9&Di%kdL+%*A'K,YQ*!!SQQ[(%1F,',c@dYS-k,
+C5DfLSiDBZ'*P+GJ@6Z,EkCd8!3RX[&&D8!X4(Z@SYXB@JC9Jd*0jX!&THG8`kiU
+Rq%UAhf,Xd(*-&)@jmGZSeID3!)SY(%b3!1D+BkP8qc[49K1bQZR06HR)9e[rUV@
+Vj'SNQ&9PRAQUA12Ac@d@qhIEX3"9BJfkdl9F!GSMlmLp*4M1Nm24-(ZG)&LX%%A
+PqV@'r&f,DkN*`MJ&)['EK@DaQ#S#K)&18lJr*P-X9ff%j-+XrSdN`EmKQR)b'33
+*R%Cm$+Rb'BfDDpRj@',#mT@YDBGhXh$(J#M'Pl,bbcqcT%%d,H*85UeHYQGmFBL
+0S8TqKX3AT[a-JRlr@'JJ(6@hYRh#J+DEN5EJ(6pfb+L,6"((-a6qeRV6,+YH'5c
+`*"3qKXFrkfVkSCl,ZX5Bhf&5M"QaJLBi-f,LYGmC0lSP`rB$9M2TmP@Zh54FTJC
+)$#ldSlL'l@3K%6ae,-FDR30`0TBCN!!V'(lZ-cEZ4R5,mH)-UcN%JPC`XeX9bl+
+TPh`fBe*&+b#93Bm,r5G"6q+A'UQmJ05*bkd$69jVe`0J8j3U!AULCJqFA[8Ed3m
+Id[61CJ&@')$CbUK*(ZEi3d8q1ddDKHdPa+eAKIjZ+Xlfc5TDQhH4`iNqr,@QHk6
+%&q0AEfEU'bm[!,f'YEGM9LZ`'Q$'NA*b%TLh@YdTe+!VRcka[5iQG`r3(YIAq!A
+i5rSYCAer8I(MY0GDiUX4pU,P)dqS-IH"E+AF0h5Giq)I0ZiieP12F@$8!#pqB8k
+B*e##3IrQmhk!b%e""@B&#@U14m%"M"8J`&Ip"lT#Xh5CqaBPVlN*p`)J5K9*+&S
+Vd#P-B'iEq3El5HJha4&6Km"Va%@-NpMkJVSpA'IT'5['BY8HA9T-e#D"d#Miq&K
+mlk,&jGZ56m5*[J,pV[FLJL9HRmqp(B'UPpkd``fb@FXG*'CN8$@EfDfGj0feM,G
+Fk``&d+TX2ZC0rqh2q(MakR,N-jmc@U4d'le8!pQc[JRiGp'[1PBaPpN'Tii*"28
+Q2,"(C5S*[""Eb(kD`&HSX)$ND[5mf1MT1pUPICVGN`pi5GXq6`3CbD9T-XG*8Bq
+bA@6(R2SUm`$E-9VHE@%S0N3#KCD0T)p@Hl$VB$[cTrSF#pFY`J%q4hTja-`@Klr
+)p&iT#TK(I"CXLLRmdG4)AQ2PGS,m@VCC8TPiZ`hHH1ekRLK@!cPl[1pKj+h!LcB
+`#PPJm4KMUQZElC!!DF&@`eKc%q#VR$6XAcfe+E@VCPEhQQXlfUKShD5)EdBjf58
+&[I8N"@26NUQr0,c@(M["`f'c2*9)&DD'[m84D-3I6e!i*ZYmHfIEYEX%*JKEr4'
+HpUUYBNY68ZMC)eb@2Urek*K321U43f!+P4&83GQKF2Tr@KAHMjM!HX9b&qr&Y,9
+ICIlm(XACV45IUJ#@(&JGIa'#bUNpkM2K%&2"'ATh,4D&U$Z`mI6RNJ4pij4e@UJ
+HVY9iSF56-F(,T(1h3L6)KjfVTr508Q6A1Ik*LZ@S4LCdmrbFJ$@eiL!9caf`GUE
+3q@TpY9P#3eT#GMR@Qm-Br'S",fhdpHYL"aV8h!KjQ#q$N!$APK$K'V!"2FQaMdC
+EcM@,4G+-C`#B2A&&LAa0)cA38,dbIpFMe#r#HKcR1pQaU$$I8Qd%%rDG1)V@a$3
+$'fZL[hHXZrYXQ5CHKRM@DC0NF-*KCmp@j'V&KIMkXm2!F3mA(S&[T5QbXJcel2r
+EHlQNJ+epjUM4Z'Xr8*rPE@"(@+I[BfT)S`"T$D+9CSI0V3SJ$)IkdKd"fbL2rlJ
+)h+5*XbLIZrK$"`Q3!$j(hJUi&+Zq,%,cYAa3+hY*hQi1'XmJhBZ!@)Dp(5%ei'"
+KkF,q9Hjp%c')'@f[5*LckL6qU145L3eQkKJY8PiUPlmL%mG1dQ+F6%)(r!,e&9"
+5PpQScq'QRi5YM1TfjlSPI8ZpmpA34+rRDRqI[aYCFfcJcNbZJd(-Lh43`[GPl&Y
+'Fm8GT1`aDIiJPq3P9&D,dS60B5Q"4kbdar8b)BN1Bi[irik1`ldIGCVkIV[RqC!
+!Nb(AeGI5AHZq!#ZJC8L@aF0"%F8Md#[BIcf'YrZ*B$bS99!FqXB'qJ4N2L(#d4M
+mBMc6eRELVSqc9+L3!"fAI3B8ASISFR(Y&j*'dL)d`RBS+N2S2J0DM3!41%$%LpR
+mf2,GBp`"MfEZT'EMDQd5brrQ`5K5kRi`MKG2iI)p1L+Z#QXRLF!i(CU('iYPeNL
+UD8FSi4(",+)&cNhqS3UEdUk6'mAl-iRNqBV5eM-Z6-eYCf$qLi%'+MDj4jSfARE
++$d29C59QP$6ZckCYU,kh34TGQ0M0ppUQm4RPd$8U9pVUZi%J%'Ec368Q[3FJbGk
+[eQ-LpS3*C)iJ!p8"NX)N92Z'1%)@N!#SS#ipDDE6aQSb9EUI6'`$*eeURdbBj6m
+Xf[HLSbaI$`L1(-MSh3)SMl%a-`fUM9"JEFN`T"G#KAhr-4c+!RMlKe3klpXjaqC
+Rj08kUK%[aCeh(@ehGY*D(m&8))Y9cM8M#8JQrm8qeNj+MAMVKSGhh4G&NSfjLTF
+VR28F*M%hpe-afLJqdKA@BpD8-2Q8aR8J`jZi(E)P*YG4PMP!HkJdfV$83rLZTP*
+ANaR2iTl%a5+FS)A,654q!Vkerm9@$X4B2Yf"pql9V4`P"HKTZ6@jG@aH`X1A8a)
+cmZD@1Ia3e8d'fPc*V8Va%`X$1A-KqE$qRG5##L%3Gr`"3+'S$l)mL0aUUf@!ARa
+2q-V'dbrJY2DC2AVl,aX3I-[mHc$fp8ID%FZ0p))CVAV@[l$Y4LpL9f9UEV%F%U[
+KN30pT)0)4[6MK`BbcRNQLFT+Z6J"ikmmQhCS5ahQ`EHV5$CMF!e%*,-C&!i%!"b
+4$B8IppEmieIHekTmP+&L#*FMi(YZMhTFT-a#Tl%c9B1@1C5Q*XXe3kFfXJ`Z,lr
+b,aiGiiTI8qLhZM0kZBdXMEjHKrJl$+(ZeKA!4HJFAr#FQCIf--'UBaKQQa"6I9K
+Sh0bTk3m&(BPZ1JKV-89J-@mL612iSDRNI+D[UDfph0i4A'G`jMjP&V`eRH86VeG
+T(*'q5'CcE8HmM"*BP6-lLc##R11XBfQLY*DkQ3jhAHZf$k")L@h)J+@$HDJHYr1
+C,M+(IrBf!0U`I3Qj#`Ra#Nh60NhVBI4)Z4&VN`V)el&F&H%(YkrhUb'5T3G`+rp
+q1''KaqCQaq&6%aJXpL8V8Q'bilmrIZ&eja*NXSPHKNRd3RGra,&RG#bKP()QF8q
+STK`BEH$mfr"r+5`M`0JAU!XV3*!!FGP,ldjQ%,9-qAq#Fp$a4!8p6ESZi8Q'5b4
+BP0k"(M$@AkHK[(G`ibF0i5@Ap1(Xf)@+1kafYqK,VjaPJ&j`[p,c*X0+ScF&IUl
+J,p(`3bR36EA2LXl6*ifB#kSLH6GI'hb&6E@*8U(q4G-+3FB*ZSh2$1Njd,LN"+C
+FI%2-!VBiFfEqlhi`6m+3!-V2LUXFdbe&%QYA#EU!e-KYeHK@#9C1,%@[hL8VE3U
+QZBi[V'%JceiQe3YkH#cBZUXLZ,LP9fA#@l#P#D9BjBR@V'd4,$I'RRC0d6c$NMG
+Q00RX%$Q-mYKYNd(6q&ci2fAUfD[1*Bl45(aV%A`i)HKBAYE@fAeE-HdX*9e*R%G
+%iTG12bF&HdbaiDrYS0k9MMQ2Fe$[pEjbS'jZR#9D,KZCi5T`@+jN9e2*6XCpG$H
++d5lj8S03"6JP`EeG",'N"Ddi9Y34iGERRCq6kADXM"JkF#!%rY3BpABk++0mKUB
+j18RRl3PG&P$"eBMqF(ckM#8k4(3lc@8R'I&0UZZbi8X"[MicpaHSP*9$41Kq&hd
++H9&4$-ETj1jaCqkR9SAKS6RS'U-`mI$qP&b-T*Pi(&-i46%hK8"bePmj[IqpkeH
+S9XT4B38-%H[@i-IPI"R*#fRNG3U$X-,V`iIJfk3Ue,FB&VQq,2Se'kaSqji1!c2
+mJSkK[Hq*eXQ13$EF+`Rd)aECUb2*HHZZ6`D#cF*jmGj25`XPBl@H[%SE@&q[JND
+k*R@1#p!D55qiIErehb)4Zjb@(Aj%aJSdPp+$T`eML((BBe8f3l!8)p@lT%Z"1YV
+,#&YQ))m[&cQ*qRLAf#B*SI'd'M'lEF4S!#-f-69jG1UU4aKP[`r[#(!QHdG#J00
+2%&Sar$Uje$NYf9UaQ1!+j'ZS`JJE+N"i+F'HNYK)43ea4j1+$2$fFBN6&SZ)`FH
+Q!i&`bH1P%4,ihq-ZLBDHhZpN4JFhe#HihAId%rb%CbrqMD9B'b2q[E2H'mLeThL
+4XBJ-'B1rbUV0hY%UMH,qaMRh-6GlPNMD,D3RSGV$e42Dr4K-hA&U+IL1Zp30C%8
+-1R@+16b"ql+M$p+ZQK'-6f[,!FZe@fG915"KTl$4qr%mYP0#XL4*$(rj(k%L42U
+4&ZAGF"[9h5CjfRIC8B#bU#JL5`c4I5)INN"ErH`+5G'Af5%hfY[,6qjj2Dh69"J
+U99R(l+YUie4mT9kmdGQR44fkN!!'R'E(8Nd&pkdp$`--b$TU#QlXDhJTrP,`Ta&
+,B"pq8CU3!1pDEPM9E[aNdV%DZB"TJEm)0#p"Gqj$MhqK'Q#mM6QCBaREp-di1[H
+IUU'm88EJDN#ZGZIJD4@PVmEPFI-lTLm4L51KfI29r2C9pTB)b0i2hADf8MFI4k[
+R@md3UqFXD822TDK,DQ5QmRQi'!baPB5qD,,F*T!!G5Md+5qp`Q(3)d80J1'pZ[J
+8aiA5cY8K8[SiZ'lSU&U&qB!4LFSYiU-e@kf8,Y"V8K%+Vf`j'HQ1fNG!LbFZ6dD
+kM*hN64Gjl29ZmUqPYM8'rF0UKbPmK69ZlqJ)$()clZISK#'a!-#pJd$4iD)PDU(
+la@IaL$G,mS#QJ"N,@)+Bc5&JNf1@&hMRDVrYMHm,!q!+CEm9E(%D"TQ,8%-iKJA
+NL(K`A#VPrXGhXBdQ50AGrJk"-KDc4E5B0&l9M(K4fmXhZf2PjRb*)A@I@R'#SD`
+Q#JGq3LpS$rjaeKPADPPH&$)+D[V$Y-UjfmYhNV8%ljA)`1EHJLNBM[*'B$40MhA
+E5YeZ`M$VA-!ZY(9MJjD#EkalH*D*&a2PS,4KHK[DfHdT!`b9H5!IdEh,H`2+"Gd
+ddeJP!f2#9eR$4rqq83jC8+("8E1E1KTFP9c6qbHQ8mb2PT6*lRpfB[5rNDNKr[E
+Bf9jki-ZS'%Q[5IU-*BHESKb'@&NMK%G(NLmcHGp@VA*",&Bj9N0p4#pe[S6LN9R
+hFM6fThhGBMd$FPNp`YTYTUlJHEaA'XCcB[L'0&*)4*P*MD5c-4rMQr9ES'cC81[
+FB)@Abrr-$`a!3M)2,Q[EjBKMbfhA`9`G+a$Q'FqiPI14C'Pq%Be3QB3m-5`,'0V
+U-GQBZ@G)$13`8Kr@JNdr8[+1Z3#BQd-*da`44&i6FNP(ZZG1Hc8FJ*8QL9$f5b5
+2mQ"jDFB%jLT@[1Jr(@B820YfUi9&k0cJA*+%IQREH0"fE'[RdA3TNqIKe0XH@RH
+BPkjqCH(4bkNZ6dF`jQU%Qb%LIJ`HcPeG#aQXQBKh3KZC0dI8QP`R93J*+iH+@+,
+L2aR"$M2FKGjGkfF)URES-KrCCaef'F"P9H4ViYR!1Dqk"i$K'h8dDS)AXGZ&J%e
+)E5"9bDaBmN1L"AiQd8Gb8p0(@bc)pRr5l`U)XI8,+34Z%3d["BGjpVdG-(1EThP
+YVJmRPGK82BS*0ZpB[Vp#"@YT,#@YF3142ALdjYCK9a5AK)$(fHK-+)S"$%S+Hrm
+JhXZmUeRfmT3aeN'hBSS&q-6SCb6&V[rjUpk[Ul4`5RVPq4()fCbHG,kXfhqBK!0
+KJ!!SaL0MT68+52kVlFk68(qUjYjflQCm3M'YR8LIbYMMhkX6#528N5irCT%[6$Z
+Q0,Ma`B4U9[P`[mAj+A@lfF!5iCf[l3@m#l0l0*eE)IUejm31*F6dEpqfVV54DNN
+V0fDd`!QTDa8dlUNrQ-"pq$A)rXDj90"M9MS"2TC&a9p4U&CN4[@f[QDMKikE$cl
+'12PYqi-e,(U$8Q`%Q-TIH63%U"EZLjh#&B!B"[+QXN+b5jSVJI#--!NP9L"GrAc
+jSpbEKdRfNrS-!80`C+kc$+D9rlTAeI6SP,m04Aj[,Be`!$4khUIIS`$Fdbdd09r
+$l6BJ"!hPZ24L,3hJZV425f`dQ[bATFA6p3riiSfZQhP11)Z0`Pi`d#bMX2CFh&r
+I5b62`8p`9d6iNJfa$FlYl9XEc`21Q5cYR$&K(em[,G+(kSd*&T3&p!D*ppc!*3q
+(N!$dYDJGV#B9`P[BmpE2#K0Q8!-@bdZKaF6$b!XC+NLeb&P5FJ3FS1G[BIVC46-
+9H0hG2mr@"[BbdRR#ac%66jiM!%ESq!kX#T!!NmkD"qGhk`PrQIBr9`6EaP![IRP
+S58`bb%fdik"N*D-!cP3Bj68RQk9Bk2pqq2CTh(R#4L"8l2)@'AjF!lAZS$fBc15
+*L!9kS#iL2[RKI[9[J@,hd`0,j4J`!"qMYe-fYjLq`B)IDFkmhb`5$!")ifqbj`R
+&)"T#BfTi5hp)![EFGP!F`&hdK!,b%f*H&Xq+i,k!)m'5VS#''8$Yd2[U8#3-JRp
+R9$5Jk9EGA#8'UGJ)Tfm!M2N(EVeNF2XEHAKlr64fAKSiUZ#BeX%p4#6P#eQjYDH
+'L4edT3`Qp*XFLZ*Q3cqd(BrA`2NkEM,h)1M#GKQr3fFX1,jFm+P5qTC#elqZ"V*
+3Zr*#U&++P%EPR!@9KhNIf0A@dN&I)QYa1IR[E"BJ--$!N!#2m+K&*3S@Fc3jr'Q
+b1#0bNh6Lem#"44TGH63Bc@5!4c8A0lC%6BBId&hl)Nd&-$BR,5q3!-5rmZ!%DMF
+Tr5j9[&3XE81XRCp1hArK%Mr0$rC+(Y3#$,SCVCNQX+T,BCcTDr'b"L+6QT00q%H
+YCHa+15jm`h&pcAIh$Z9rQLZlDKV8i!jXfiIGc9IHS)djal&HNj%Y*Re-E9H'6PB
+$RI%hAQD,d3TSl(LDV#(GPN"5)!'SP@5RCKLEhpBcc@FNT5C9[T@N2h"0a%fajB$
+drS&f[Lk,Lh%KNK%6f,&AJA(DK`p5'dA3%$%1,(RJZ',VHII!iLm4*$4PZbhBZ-k
+lD*04UHPE0*f@,11XI&(EQQ6iplc*irEFq83`DA*rm3)``9V-FCp3H$`-cJ`Z(m&
+L32$lMppa"`QVA-mk3r`Hc%TZ"IERceVSEdRiHjXYZ2MH-iPc$0[!X48S0T+e!6G
+%F$P%rb'L8q@3!0mcM@6lP1khcGTK5aHhaZ-p1ELAEXV*cIK*E3%L`"JIc&FP"k6
+(+Ek!!hp)UTaDcMT6)aDek#P83-XQD"*"88'EE3%iXU`)0e5%C&+D,J6GD`Z&)Kh
+,jS1*V)ZUiZXj-kRpJQi"*$9*rKJ@FmHca-`4XLNkep@aZK2K0%C$#GTN5DZEG$r
+,ekj@P6S,e83@5F6X1Jbi*0b!jb8b@3b#MV-m6[ID)r!bNdm$6Z-V+a-+BBb[0Z2
+a9Y51a1J8)!jjjcd2pjIALc'PQA`i4B)mSidHN!#pqRFFEQRmG@S3p)eM&X8rcFf
+m$(ERSX%,1ALG1"Gm$UCcc&`aJIC&lL@G(VN26b`VG##lLI9iNR8#(bPhDL-jM#-
+I1+0*R-J!`Emk&UT$#`*q`ihlF3+8VPFH3(TKBU6AjTd2D!6rJqiHm$NS!Mci#,P
+DTCh5DDR#fY`M(L'LYJI6)jaA4PmUQE$UTpB[cGedBD!X#D`L-59)HL#1q1h8G8$
+$&Yaa&Z(QC#f)Plj`VC0'$jpLRmK3L9G+G![I+JMi,Ap,!B!IBl#4YGKiGlj4-8T
+mUR#[fpp0ZeCJhVKqIhkN"8NRF#BCf-3b5h,YGC!!&Ab@VN,PJEXCN!#Qc&IGa0S
+N3d&'@-(CaM4*p301b1C+S6QC0"NYGEV1iA,39b&e#6M4hqBbdSGpdXR'MLPA*D2
+hZkLH2dSp$JKaSArHRPGC"28pI01GkQAf&9`TTH@@#2"E`,FbqFcB5,0VHCHZ1N9
+0YcE42)(kAVT3@6XP%4UP6J![MVVRV3Q@)GiVA(8+b2L2[X,"BZ14`KVHkq@mpLf
+3!"hrU`B'HdrY6Qa0XYSM`SATkh-e1eiS,V8Q#aIHA8d,C[hQKklr"Krd$f$`(Bc
+cAFP-APX3TQE&[FlpTR@YF0JDYVA4q"N!fr"+'`fQ-IaJ'#DGM[NSH-QE6B-0NJZ
+"6hS)LH$kq9K@b!`JDb0#5Q,&PpkJc'U#@[UJ)iSPq`*)!d`EG)X@-cVc5M8@@`2
+5G@ZL)%cDeE`k(bbbBb&IDSb8ca"I@cV5ZiRX"Qe2QHA$f1U$#pTRDZL!re9TTjR
+jqZl[)`V&eY-*RrlfmHarXiMRrJUM3iG@&'dVQL1J(`FXhhZjkAKYB[1Mk4H5P$V
+6IrJN%Qm-$$U8D9%DDiCB'FR,DifE6PqI+`)$p5)IN499)djXJ#-Q5"-c6#!"L0$
+DQ3[*lBD-hdT2M!@T&LcDXm"lr3,MLVHqFqdUbpTQZ(T-`V$CqiFk@GeNZJ9B5k`
+iNhJGG5bc'D*2C-ZR@SGN'cq3!,6S&'cd!5@mkJSE'dUjq@ar1l(#4TH+p!qPQ5k
+Jm*U[)RajZ&2&)i%cV1-I!0im8Zc1-![N5UQTJENcIY(036--!%5`23)6lRPJa4L
+j-Al-PR1EILU9j)cLfB,kZ0hb9"Cec'0#8HE41&[j5X!EIh5e5d0f)22"!0,Za*)
+KVhIHYQ-I3rVk$jhAKCd9Q*m!M)*-QNIND,TURc4EY,PkCKHp-HUcHQZJ!C!!*qF
+RjGBKM(ZlBjkCaL$dd$FqEPk'MM43I61a!'1#4@YM--DHXpb458,B8@cY#(pba8+
++#X(XmSf%NZ[hdYI+ArPAPkGPjMQ,G#`lM+qcq5dbC@p%)G-@+a+riG%fL$9629X
+M8XZ4''p%$IA)U'8M4MZ3!&M+TqNLqZ%cl9eRF-qB[aG4ba(F#LaVE`2,GS1frT!
+!PbA+TH@3!-m83de,6M&V-UTm6G(#[+0m$0p18E"'Ga%[plq2[N5N+iK+dL+QmTA
+e%G-Pl42mCq2S98(ScZ$'"Rl94HTp+6ek!(M6kciNLNPP28H0lAfaq6Ul(8!FV#!
+L'fc(MlH#-4#'j&fE(fpABd"`J*Sc9(`5Y##`TLj0cmXPV10bNqJK$5N9!6&MiNP
+5a*ippld#6P"ae2(chHNXa%@Tc##HYE-4I[8raG@j1NM)EcT8@8R!kD9G0FRP2b0
+c6jB&U0&`144@I2"Fj(Ad0Td(!N#e5cX5VcqpV`l![jS%+&#08PI21BpHKBd"+Qj
+)JqY0hVpQ4b'G(ZdbdPiNQr6NNYP%)k1Y4ECYR,&JB(#hY*pFUL'HSL2faZ`05N*
+9E#d4J-klk5FlUmIQkeJQ5-PA8Dl+i&A2GpF!ZQYXdB3GQMd%'qLeQIKM(8ViL32
+0dVIF*XCAU5dNjhIia9Z2Sf5Uq"jDU,%G4CIC1A@"+TS81&R25&pVPB5[mpPUf2&
+GhTS*ihJi+jlJX2"1cRAf9QQ3!"*H%MiHj,qH"T(%[@4q9Q![G0f%SI8[l6Z[#4!
+a83dJlSGKX58$mUG(&U@j2)rQQ@f8GR14)8ZZT"'84@T20E1h*YdX"2#E&C%MLI4
++DPl31fjJ!m4*UhH1pD,EE5"Z@@r,YRVMVL8L8QL)lTi("C+R`Kj%q'%j8iEElVD
+)PR*,T9E0%ViRTp1p92JI@ZQmcXq3!+Yl"h1P12`lBi+bBbChJX1N-+B4L-Yha)q
+3!)(9LmUHUUYSiN)[5j1D&qi09+8fB*C12DH2@(q9lmX3hS)A8LAKBb6#12rJq!q
+%B5KjL'SUfU!qdjE`-6!$&PMP%@RrHUQSiCAG-[64'+kTf2#M+XYTC`Q,kFkCR0I
+eq`L%pXD@*D&T!1%lk29"ZHrB80$T'jdl4DeEEEp*N!#-ZSLA-QMNLBG"BQI#XC2
+l4(bp$Pqd`D5QiK,2p!XcaP*5bd@mbN%V#[@5L3rkkZd-E`p6*p$FA#1*HZ'-`aY
+!Qa',apQrpjiG986`EkYIfbpjid)$KChq5Rk@"AaK$[DC4'+,$j(e-#MDbpqC3Mm
+A0Sap)%,9Md`2l3Iba$QHA1-$Ld31qPef6,--jQS-LGZ*%D+#0Ke@pqrk"&"3*m)
+E#B4ja*!!p"CkijZG9X0CSS-'q5D"B9K08(HEdZY&[%2TaH-l+LIMaEr,9r,)'`D
+6Q5HlXe0HT(DEHRCdGPLpPbXZ&p-9Kj2E-R-kbXRJ,#lK'Sp!!Bq(18aMr'5d3ac
+9m+5R%rAep#dINbK0#k)"0"9U4YfhP&$E"4)qKHhc`XXj80[EFejdYL&P5H04[6%
+KM,%c+!6(m1P@5E&hA"iJ[VZNkIRGVqhlh1m6FN3"!MPXcf6NXXl&$@,)KdXpj))
+d!RG2BAaKpjlU*3J!HeN*eD!VfIfX[HRV#4%YX3r!`VDM&QIlV0JJhp%Z(4Q@G$H
++-C'lA&cEBIaQ!DJ$0`TE`986b4QpN5FhD(Y$`YP"bB$-$e2BNM$YIT8BI[`VZLZ
+M!T*2AF36-hXE*Gf[ICj4k9V(8JLjXji,HM@HFM)&0RUlfc%-TNqP2!m@m1KF%%9
+2J"i*Lad%P4[-QpRAD4B+bfZ2JM8Y+J*G6@VHX"@PDfY'Te8ZAdIqk%FAZ#c9JH(
+DpNP0Ch6,A#`AHdU80`!YSfXqe)Z,BKRidZjGpqSiBE@ZR#S6DG[+f(Z&A@6EcrM
++bG'V$9EJY0&B%+!cM-PK29R1G2ekHG(dlhlYK*SJ0H[!MMPPMl)U2YL@ir2R,"!
+@XZNL&VJY11B'Pc,aRLJaLKU'8E-!"UC&b4#F"c#la8CQ!F)BKmRPm93!SUVRiRf
+LV0Si5RKM%Y43!DCK6@&MfCEF)S$@0PkSL0N66N![ark-d[ZMSa8L4V*P[Hefi1%
+lbJl#2bdTip8qAGHc-DTc-c8`,BJF26QU'CV&JIbq1*+bf28JAp+8!cq6DV,'E+Z
+M6ie@lCBNaqiQ)+hJmf8MZkV+@05ZRK)C,e'[P!Hij3YrC5QIV04TQdiAjN"V'9S
+*mCb3!1q6VTGa,!lI[(S3"Ik6LK&Vj'L&!0jmC8K"-M"Nfq[9XMpKGPVPE'pcKNH
+6+qfTfHLm$Zc2`dk+dYGpU9AiIY(9S,J1P3cN%M!GXc8MqFS%+-cDEXSel2M#@'U
+[mKZGEE+hdN#"0-8#-Aq9qIBl'NCpJ%*XCmq[(mk#FB"4a-YSfB8MJDd,L2Z)A`+
+Z6cB1RY+qAS$H(Al%15IE"%%d0EJ@4k+Z*1*lf#1i'Z6T2rVB8[DQ1P"*`ej(HFp
+G$c%FVQlXP8E3pUA%Dh4@`UQ!f#C1Xk&5FGjJN!$3*r)P2frRqJfD9N5(H-8#jXI
+G-0'-,8aUTRM@PBPGSA8Gj&e!c2@mbkQ%3f,APIZhS$pjP[4P([[l2C**Y0[`RM5
+YF9T6eaAj%-6(hHh!ESP2'TZmr+CYU&I3iU!'+0h2%,!pp5IGf%KXp5cP-X!BAr%
+6r`hhAJih0lTe0DcjUS%ad"q2a81ILh3PSCUNah$K`XYGPm42!mAXEj16DTD@HNH
+CY1P4N5q1EL1NV0@!)HmJ$-`RN!$@`N$dI@IX&P-U9TeJNi+"Q9mcAI8FH"DIHH5
+mG0hS(9R!f'`fk5IULeKa+k3A`6%8pr!QY(LGKX6h1hSkZCq53K!%rJNN5a*E*!T
+Ii@51`0k)"lSA$14JPY2&9X0jZehQhR"K-N4faJie2*Pai'`#0h"IDRF@-pcK5b&
+N4TIEm&lI,R*NkJ9YE!Ti6!2%$rL)(!6kR`K3PT4b*&PfG@Zr)r'KjB#3!"(dPrl
+!J0Yeh('FSEUrC(dMB-ML"cASCQ*$F39j*G")dLjJ&Q'4kI'Ue`U!iI5NB5YYq(k
+KRNB$5+`H6fAGmFLQ"0p13F)fImD1!4"&8-m&I)`*F5HH#E*'amK4!#1E-`J0l(M
+(3)JMlM4"dH10h#IJ8BM@C3rf+FBcEjY,hmlFm%r5T#6N5iKK9XZ`Ph`HQ0&R$NM
+X4Xe+kD1Hk@AIMQGKXGIHfZ%hBH@A5(5HPlNDf8BJAkJc2b`j,D[XS2&ck8UGY2N
+[RXI9XA*"*kUe6i4@kba*&[I81kJ341)@)c#P-T[L0LE4#43bf40(Ld291EmJBE9
+mlE#,B!Se3j@Zcp,E9'CGSjiaJELN`*laB"6Z2TKqBh8EDCYV5GA4Tq#c$ejliZ0
+F!$@lE01cVND!L5+5,0c(SDb#AGmbd%UCUq[aEIKd52X(3*Vk@3@d,*fBS!d(")S
+Xl!@E#jKSY"`BKp%HX6L5UXaBdrR+%pf6SE[[a4@jC%X%@M`TA4L)BE31b4$dq@L
+BPpjSHZbJ0#+)2G*h"-N4&UX[4TK4*)!"iLXdNfh'DIEmKp6RQ0+,8YZeM%S2ZXX
+Bj"Q2&5B[6%A9@6K@LP[l#2"r1UGq)dC2S+fB48V+caC*BL"1[-bD@KH&06E!Ibi
+$$L,Sa*@%&!3&Y(dkcpD4[1K1mf%$4Lh`98prKX)'8CkpPqkS3VEhVGS`cRIp*'4
+SKG(RiB0-fQhZUSTU81TLSHYmr!&[HqGb2CbkaPTAf%#@GL*GEkKAf%6YrNG2jrM
+HqBrZR!#q,#ZN)rP&'8&JrCQE-cP'!@()&)6lVHFI1S'Z+)feM[d8a0FHr2@$2@[
+cYa@h*S-!L(KP6kaa5pZj*ZNT8eS[#V,QSSeB[r`Y0$'0BT3R$pI2Ui[CD#G0j1f
+&DLQ)php`CE[*kd`r46Fbbh!p&UXC,8&`ia$Lfm(3bUc+jl#RAacT$ZX1)VPicpf
+[6iQq'd"Rq`XF+0j+j,k8TPk4X@!p28#P`'2N@a*(Np6VE8@CEbCqkRTKL5Y(4Bj
+0a3BZQeFBIrEV@rKYSb3&-CV#,@fqf4T+*`5-5IXPEF[c9l91rQS3X"mR@eZJKVp
+@'3dHS69`XcAJ"k30%mhUT,dmI"LaN!"-UFBb((2Q6chK"BV1q(p4!bq#*irV!)R
+Lc8E'(153!2YIK%UI+GiB8aQkaSLBZXY%+E+-0e4S2,TI*#b@U*Ml%F9b9Y006qH
+e(bYf2[ShSI'bifD[e&*(N!$m!!h!F&pcX%Q9Y5VCbU%3F@,(E)Q9&J([Faf,"lP
+rF4KZV"9Me5Kkbm0J,cLZ5T(5V#LN$0b%9GMQ#8*J@)2-66c5Yh&#h6Xd(U(LL6!
+pMP@`Ib`lGZXJr2iUrmHk$$[P2biYEDL''V0%CY)a6blFTRm4RRhQ-aSUT-Z3!'f
+rB(UdXYQ50%F-9G#akXTGAG![PTB#LLIECT("RE$aM##5[V#"mAQQE5NDKj2(``f
+qRH"2BBUqG#GGE'q@E,"55qB-&5VA&pNlb,ElU(Bd-rRM2pNFq-@&,imVd,2K#XQ
+eLEEV5e,TE`"RTP@GaQ'#L0!e"-fBbT!!0eMVHXKqeiB3-P#J80hjQ144XE*bf%q
+NVDJZK&m,%Xl$XQXijFYPYB#SQpm@#-,J&k'[`mr'mViTdSpJULE&Cck03E*"E(B
+2X9*)R*Nh5!)L"2q3!0"UHLHD*RU-TLd9$G@%#md8c9I[Q%Ybb`k'9R,`N!!FI#R
+5ie6iXmpSm,Zf'*j6lKLV351,ZaBd9%mB-,lFbD9bJ*[D,VINX9K$4LEA9E83'3Z
+dL-icZV-(UNd&[,d5,'6kNHZZ15lR6LjRT",iFH&firY64YhJfCIISYaKIc!pPbL
+HYY)NI*qUe2BAU#6p[C(A("H)mHZZj0j,)A#ZDMLKJ"+VJ"QIAR#)43ZcbNib,T!
+!#eCcd4%9#hB%pec99Tk9Q2FRmmNIMCK48bJFNIGj"2@@Va9Im#+Arrdj*q`%BUM
+J*`Ba'cR)HH"ekNbZ4N2`V6mae3R18TJNN!$j1BJiN3KQA'(`lbT-[CG*3$'qlJM
+%+,c!&NmE'0PHN4eZD5`f0l4UY`+`YrQlea[e(p*Ed1h%BhI'jDZm0#3b!BLP[!j
+i3"aHm45UFf#4M$C*P5h)I&dZL`LCV91HKYRHl'!5rDGra42$*Y`&`,Yr,fHNQYK
+$[FjEc*(RG*+pc[ZZ535A"h2Jf#@K@AQ-,'!F(1aP4k'IjY9DQKmlPHhfCpe#`J0
+5)+RHaRl)'4Qm2C5VCFk$PUEN5HkaYJcI&ReRRY6UALqI`P&Xj+k#L2JlU%0)&p(
+jSSV4TVYpN!"l-ChCUQRm`J-A,SdjPjh*,'6"Hq(3h!%62LeRf,TPR!2p2[MKI9D
+4&RpDXqpbQQb1R5irSh2H+4!E5%(R"*X0m5LlQF$!!XrC9ah6C"SLLG%pb%HEh#`
+2DL3bjR9A5FkF5iLU#YH[2YAh-FFcJBdRCZj*BEhJJSe$q@8kZYXJT*B2C-(m2U4
+R6KC1B`cBQMVp&MVI*q29Jl2pC,UL`",Pm@9X"06UmYFP4#L`dl*)hQphJ01b)+l
+&%08YJI&Qm`+%A#IT8[lk)iR-Le93FV3GZKHpCXPThlUjYflLdEmCJQr%acM3VX-
+T$@L8@cXQSpma+CT1!'!9!%af0GB$haiXIcA,TbZLLC[-eRmq&d[1S"P8E`FZb18
+IUeehNYX-mrac+GTPl13IiaNI,iS5@KNCD@+UId*V43K!DC5BIB(Z0AICP*Z$pKi
+GNZD9MKdS[Db%P0G9h`a659CiifUM3HYbp$FXA*j42EGZS8M`!HfCC'6m[BD#jXr
+rpd6c!CM2iY$2(AZ1GZHmP9#*!E,&(I1mXkT#eV2UXNkS#4D[3"5J"A`b0-fL#p9
+efIZ3!#%9TBkMp8X@FIQH!+[BX#dh2A&NI--A#80(G2q9'Yp1,4&35[`1&!pIB'p
+`-0-V(`&MKL0[m)hQ'!acJZKhEX[9I@23-1bKY2phq`D$)aS$SpqL234B(#Ij`eJ
+bPFp-fA$lCaL,eZZUi`4kbGGiaPUqCV)jVL#'l-39+!bSeGAVaq02E1&a9(6!iRm
+ZGFJrlGaI#!5+%"f'"kC5HX-G6'5r5C-Yqj@LZ)[3NiAadhPA4B4S6Zb'DSZ!4YA
+1#)*4CPm"rT-R+-kcbfN#G&jXBI+T21JJ-0(2B@k)5-E@%3Ih4,dMXF6fTBBbd'm
+"r[Dcc[jHP)"2j&6R&)VZiBENdUCeK91'QM3l3fcUV2jXV5%0jU[*c`NK%kf,ZUe
+cBG`+-+&a0D&k*A-S*fQp!+hfRrQ+&5'E9LI2AA0cY)a4&'"`ajlGq6J[ZCe[e-j
+9aL0IQd[6qjV6,a,Q%9lkUjeZ3qBZAB*bC)-UV!8(FC1+(pIiRb9"!E!ciAZ3!"@
+L&9)UaJ4&%X&JTjN(8SJUA%EPlAK(CLAA)+VqqUdTI+CU3"6KPhYhp%D9m!A6EXT
+9RR%KKAJ"bVN+,)Tf&(aKU,'lE&MDm!%hZ+h+L%hhfGQ4Q3"a8*[iN5*N,2bZ@[B
+(LIKQ51Pp3*p%Z9IchQ"[2c3Lk1A*8K0Rh"TBBLJJF8A)iiilM&3F#pY-P3V6KeR
+mf3lQJqVCEM2d3)NETamjC"lEfGG8d2GV649h$cLqECbEkML@EiD1YbGA`ZjY8m5
+@2*V&Q@i-G&l%8$IiR(ejk&ZFmp4HDI9RJH*r#S[qZ)crL9k$4Bb`!2N$B9+'F[9
+Xe`[5!kLM9`5Sq!1de9eRkD%%*-"Q96L$5+aFeK#5GTA!kaRY*2DId6r0cH[(0*6
+[`2d!h61pbQ#@Mld"`@ba)"QP1diVf08Q%P1qA%)UqEZq,FM8#ElK*HGJQ1DX4LK
+1Q2kIP0FqCpeTlhL'VA8JX6EAI,RPBd"m6aP36F`pD0RmYdN$T66ra-hNS@-P8Y[
+%[j()H[5YZ+miCJqIdT[lc*DrLD),iQfHCKip+I&c4RBKK-Q$dGF#VUl8%Z%SiGL
+Ab&!VTS9'cB)QY$If$8bCq)G3%FhN`65,YL$+9qXdF[&qlcMMbl-(@C4TjF++@(8
+UfI[5[m&9#H)fM9M*A6bQbcq`kl1XXHAJ'%!ld"8L&VkD-D6!BmZLP@jllGqV-E+
+,AGc$[NCeG5(1A!`8EE@qNG%B3[DmBdp)('NS84*'[kK9pAC92Xa#Q'Y[Xi*PV+2
+,kTeU2Z1$ijTG$DDPKT!!ij*XMVe5ERVEKqD`[1,-ZN0cA4XBQj&RLlT,`(dALFh
+!'rhjD*kJaR$`VZj40r#N"BV%T,(f'DhF'1Re&p2dciFVmS0L+[Nk8TTL*[-aZ$L
+UL,1G,r%E,b!G&(ea*lmhJYRD-k1fq"b[*6&q*a0S)#ZZY(PTRZ0EE&md@QbLMhh
+a@EkL+DYYbp(ErlP3fNaZXC02qQ3I*i3iCYP@--e3KrZ94*K1"X+98*CQ5XeGLQq
+iAHqGB!`lFF`Jf35$P2lNm&q[($G#SC3J0JB+K-fAe1SA)i,8f6`R3+&Xr%MHU[f
+LDm),d`'Xpd"TX$EGK1,UN!!TF%$3UEB!EBV[36CUif3Hd2FPA5k58iqL5cbqPrP
+Qr3`*6j5-+J(DHcP*`K&ApbXrFHICfe3H8L9DQUJ5--$1[qTD",&SS*Xra[r%Z9e
+$H2X+JE`DXGpU`CV&'`5aA-f%[1C'UQjf,H0C6`D!qDiUBl%S(@*qDhmr'"SG3)I
+EIVAfdJZX4DBbpmjGM*VT5q%HG!JLQJ@VlhBM1kd)%0A)feirV&fk1de)r,[a%qZ
+phl$Kc8Jd6J25YA#""JP"!CCFSkCi98IApkGI)6)!VK`ANF48'ZlNdEm54PUZ)Pe
+2XEUa6GET"6cJS%J(+e#1R#K$rT3$63Jdd*UfGaLfGcYm*A1Vp$))NZ,!a0"3A63
+1M9R8%ddKR((LIUaGillq,qPh-iY22j-cl"%D5US&p,Amm$16lR@2r4M2pc+qjFE
+FE![Y@A8pGV(0M,@&fL'P5kLkYCMb*-k5pdfZd'PcARN,0&Q$l)-VHe4#TjD8jBP
+Aq"q1qLhdYL1Z2(Zl3j6bGB@*59q6Q5V9`VrQZCXq`(a5Y$e%CAZLNI@i8,#AYS'
+I2Dmmb&L!IF0EpFUB$UA-H3`#SX+FDA0kY%1H8S5$Qr`&k$jNJibU)(T',CZP3mk
+80K5&(4GMTZN2(dLG$K`p2jUmc,@29,Rm@2EhN3MB8$(ViJ18rp3f5JfmfXT`2!Q
+&Zh0drbk[[%D4STe#2jmMmmk%#$!p`mkrGAjrDFbF[Y'YVrQC@8fNk$68)RcVPUM
+G,iIN,B#bY$4Ye'M$Q3YrLVm'9eC,"`'-lep*IZ**M#Mh-V,0U1rM3(IC*kGXZ0!
+jFD!D-AIP5)1)C9D`JS[#Rh"Ec`E+hQiB4hMXE"5HQV4IJiFdC)88K)Rj[P(!iI&
+!6"khKS$,k-@lM[1mhRVBF(#0J&pGeaL8&F"fCHX'm5(bJ+%j"5LpDcmR([(Pk@R
+"PphpY(5fI0m)!mP4[&#lR-A-85GV%GL9T5,+d)1PJkTV%LjD8TpdiklM`ih2rLP
+2mXQl#BK5I*BHllLA0qRNGJE&5T6!@LRaRa"#10)630Zf2qK09@l$FDrIQhBYN`S
+Y&H'2HMTSN`d3"(T&G-mE8NZE*C!!MZ0fVlM(eYUI)*QkN@!fN!$"dpaQDq@Ra6V
+dJmlB'%Tm$fl`m&a`3Q#ZJ1X)%)3M89KdcijE#H@Fb#+!-Cr1)U,'9jCXD9NS3NR
+2BDSj@)M%$2T8lfQTMj!!Kfpqi4TCh+-9h$@"QV,DQ(D'k[iT-6,,TJU4f5N9"3$
+h+*U9!AZ'QKPKmm10[@P$Kkci`50m$IE)(Q4RHNT0aT3)S8N0TE9%mXMr9$r,-k,
++j#(U1r"YAF0BXp20cIXRjP#66pmTqE*+E%P)Ci+PlNK)k8+c#8k,Zm'S-5''@UJ
+&eA3S0ImDc*2j-J"bLq(fFB9PX-P(P+mGQcQGpJ(!%4T6KZSkJ(MkbNf3!&PfhhE
+TQYY214EP!AB!))4TF(b`L[%"Bq#$dqC[p6PK89rLa@JT3#d3mP4'C)AUiU%MdN4
+#!EZAb3`ZXfraBEmb&YF-TVYiiRiL$B6PX[,3+Xl3AcK)"9&V*Kpc#-R%CG1Z)jJ
+rMDXN%$NZ''QcMqih(ReCqm-$4*9mm+31br,PM$aKhDbDUqba*mV3-e0rGl9(pE)
+$QE%,)mPS(PEMHrk'XaFqH5X'@DmR3JiI3T4eXQb[F`(@"qSr,JPl8PE@Nqm+)["
+$FHGJ(8AANlk+FfhA3ZNFkVJC3XHZ!2U&*VY1*,ZiB`!CePG2$l`SaPr,MY4b`D5
+"eENldCNHS63q0NKcmbGpR,JA$GNrN!#e2LLAcQdp6hR&6*DB"cDRZM,[Z@,H(AB
+J6NcZD1HMr6hX$01p&STH!#L[jG*2cSIir"'@M`8l+cX0e1R43!#B0ETAa(cN5%'
+p'Vp6L'#2!@qD$8L$,KY5m)Pc8@!@Bpjp!+Z9P+`Z4QrpQ1N6ebZZb3G,@1lTr2l
+D$!11%@$`MfADkG"A*PSkQ@4$%EJbXjB0aYNMa8+B[[h9N9(r#`YKXBVXb$[(jdl
+(PGc-m,)R2XXh0&rX!Bq@$GL[[RT#LIm06Flj@af*XqP3S,2'B6%*I[%2U'5U&I#
+`8C6kc'deP(9T-JmJTqCJ(5e58Ek64BL6aC!!-hl*N!#i0,3b@MH"+kf`!*Zjj8)
+E`YEIdc3T88-rdh45349i95B)Mm!TV$Ek3QiZf4M#!Nj`G!dVaDU2)jcM["3De#0
+XZ3rairdPTh`H1eBma1a"h[dj4TZ[FkYBeYdC64'rpr6[rPGIZCM*8m#Jp9(b4KI
+@Gk&5ac4k*54mmp@)*P)BMH9e9"*4(Klrmbheq(D2Q60dEdkfi9U3!-XX3eHfMJ'
+)'[,3`3c6$iFUjY*l)c%5YcMfpr*@UYK[jdXrX#facdAH%H,#'T(EPS1ZH$kji59
+k1E'VCQdCk(Ti*m#PjUQGBXN%*MAAjE)mT1h65heeTKr&N`NK5C1$2f8%@3YD(H)
+XiHEHlbEBfB6Dq2DFJUZlAG+Cd#K5fH0NP@c$LF*LQajPZJp8KCGVI`!'PQPBVV8
+VQq65Sji1blV#R),$#EV38SNlKDcdVH44RFrFGfh,`CdmQkc'pUIKG8mF53*G*[E
+3`a6-Imii%F'"Uj8)Z[f65PD$&VEBi&(SkQ2R3LJcBAC-*+$!6i#k'B1P,E[b%p'
+j*5!K@h!VU2m2G50ap*L"S'9d*k0Vkk@k2MF5+VNhHSd%)jTlD$8L@3RVFQ&@D1@
+iKN@NN833Ll!eVIT5-HQdSIAQTjp2iSh-h$PZBX6J`0"9GqJS#r`k#*04mSQ`01V
+&@G`[QZk9)d-lk@3G6b0PBefQ5BXUTh,A*G1G(+14GG"aCV`FXBCL5fST!dCTPI+
+JB$NSjTd%eIYh[4b+A[L-Ai-PBp"#cD-*a%q-1[aQBS[[qPGfr)L[fX,%q+BZ`11
+Gdml-VrZ$A,qrc3qVKS))5aDF(R,"ARp@d5NQ`h06fDBHY6M8"LjfNh!8$Cd-["'
+dTZ%!GefPl,),aT)1F6K8`bAUDRmf!A(j,J'f,HcAG%Na`,VQE2GVN`USi2KGqf!
+fS-HC)l0(HNEDlfE,XRkj3,XKRbUTCL#T6)Dc4Ul'+)m*CXkYM6qBSYc`XB(`$SE
+32iT`m(+68`aq3832[#8E3U3rH8k`kHH+flji)QUGB%k&lG66h66@*YU"j8E01N)
++VHfP"XJiBF12qc9rlTKPeG)&!Brh23"TadR*qTkP(dTAcF2Brb4!C3+M"P3SM5A
+0XNUJN31%UI&2F8Q,B[EG5E8fXTGNK"P-j5q-PLTK0qmk+qqFFDZJINe0Q0ZRX9T
+Gp,2ETS0Q`JJ)Z%QAf3EFjeBd9%2V+p8Z$9Uei5q@*TYaX'cUC$1-2RXXrlT2KA#
+CN!$!lr)GKRI3+,*d0"A(fD@r"&5#IJ-ciL)3k3cbQK[XQaC0)X@p8kX5pSr'MhA
+&ackQ`T,'$PZDH&`88'(F[*QGA'FUC[Zm,T!!(e1VIfA'--YUprXPX6F,eVHSIFF
+&$Yr2E@Rqd)h2EiC6(K&`qZZk`MD[&,0S!28qET9)QSi$mN6Ze4Q[hMd'm#%)N!"
+Q+3e`SqmiT)qc[QDAiQF`%PUKGjIMmFKr0Df#mM%Q3@eDjrCNHaEG0ZK@hFD2Q)i
+pVJa9S,%XqJ*GCKCRVaCI9r`KBr4AaEZm29BNq2ikCp[Dl"JM5SL"NZKC$CjNmiq
+$EEiEGfF"Nh9H(m$1-hFfj2bQEZ6bc)qKqCp8DP-i2V[NH+p*)1fDd#k-b[J"*DJ
+39EZ[c1F46E46M!SI[C)j'Y%33(3i5GrdK+&l4Am+'meHlqK2&RL&85`a2Y'PE(J
+Y39V+Y2ZjX$'ekLJl1I8G8+*K3k*#%T[`,JAKZ[dDQ(CICN"X!Kd[q*Q-K*bD'k!
+fcIji4PAGb1CXDaZX@rUEic[fjI9!j'(+8c[q"K'p"@`'rQ&fM[6h%fXQ8TP0pT(
+JB9)ipP6#"+Mf"HA(cqh[aIbHiqk+jQJViJ0,T'f[-S8A$3Q4Md"[MA%4FmlI!(b
+2(hQE`$r(&Ne6QlY#b,4a1(e)&K94U8bL4ISbbE8pUp'"IY"J,6#-35Y%T$59*[i
+Mc9)4Yp*8Vp9#8VMhAfP45U4`N!!"DYq,EH2#djB'8Y!'AhMRLf-&5!SP%EiR'RC
+pdaK*G0A0!d30[F0H,3p4[FRQQXfT(I*--[Fe+)l+*HCjR'KeR(jZZj!!XS$MilL
+D#G,6F)T6-RFlYhQPflIm&)6%%EEh&LDQI[PMFEY#i)dp68PL"hIV5pS6d)bL-L5
+d%3diC,Q8Tj6MpS9LqLXVG$XHfECBh5K(0lVQBMGfb5*bE@G4LkXpmbHN5&fl*"k
+-iphk#ED*1i$PlK5Prk939l$(XNP,"Mi'GM*l2mR+3q[H),8('pa#q,e6S[*&*Hh
+Mb%,F@#6V,4mlc!qR%j!!84lFSPAke*pVF0JUM3,cRa*bMV`!ED[+M`9$'8S6Kcj
+ZDA48MQ@mF)HK&-%T!klZ9BI2bp`6-5`"(ZIN#$CmUq"9RUERfr5KBE1!0Ef5'Bh
+[i`,Q%N2H)5$$CEV-`Ed5(NqY&`S9q9++H5lL(M3h6cPAd,`aU#-Z`e8SfC!!j`Q
+Jd(8QQrZfqa!lm4IZ-SV)GFQaY*8+YPZBDb`9P'MS+PG*HVBX`mZcD@E()llIMK!
+$IY+F+q#*q'Z"3N4%V##Je4NRpRbq%+K&[rNCBKie6&I@1-M(*%`IG9kf3!R30La
+0b&,m#Rj$B($m)*qFH)3&IA&9rMDiZ`@S8K46cqTPKAbSrG@2"UC1!#p(LE@kJZ5
+@`[A%5%Cq"[CMd9'Nc8@P4*+eB5RhH4h"Sdl8MVV5lM2H`A3[lU`r-*++S6l*RJ!
+b,b*hfhJH&dG(lYcjJ0T''pqd#*c43Sl39L1B'V9h4[I4!94GcfH$i`@!VDSmS9j
+arGj2qqXm1E[#kBLjS(TbUSU3!(jN&Nl(XT-N[+IA6FC5309TBBCk*fk@89k9`eQ
+k#p$BkcMaG4f[p*a#J1H+hr+-[4E4L'44@EV62DmmBJcXXPV`*p+#&025a5&ibKd
+&a90NH&@0UR`-r[q*3m`4LrI#qVX5NP&-jiA$MMm($1)YL(8f6J&8Rp0RI-B*hXY
+m(`V$Y[FBFhkT,8%l4ehjh$A"Pi2p$6J#DS(RId#%5'eU+-Sc-hFBY1#H%%AT@qQ
+C(0M$bU$i1ch3da[abHNa1Y[PTlBp28b9L-Dj*$@[M9QKDD80A1T@1hK`AHQEM1Z
+F&EGE9Brl'`BH81ZL3'*@KihL0Mi+!jklbHK8[lVBN!$ih3Fr@5h)jlliQ!$(M`i
+3c5%0+RDeXUlJ`,ZmSJIJ"XR6ATUMM-!NBEkc4d8cQ))IMV9Ab5(6-kDraBme8+1
+NfSJ"fYRRHmKRPr)DfZfF&Y[jU3qr8CE!!bhKlkr642je$mjH@1ZRk#0F%)$9j("
+J#RZlqp515I(`QDB%+39ipmdc58[eQk'`!q0q+S)@r-GNHTP(590[,8j3b18PKZi
+UTF96))QPkV3N%qDLi0X0"id+[*M445kj@EdRJYl,V"`b1mUdd-(%0R&Fp&+h4@Y
+laQ(Fji%QGUE)#aM!*6*qAh*k,rK(B26eEfNFN91eaD#hJHjE$bGPL8S%Z`lN%C`
+r2'MqVh6hm0Y52'Z-qXEZD&CJLrRR)Gl!Q2Y2L60j!9$ckXC5h3&E+&')`Qd81I5
+Rq(eGLSdkpcCJlPGLFYhDB()dC$`)"aRZb*%K!e2qrI")PPcjZ%rjmYaRPB%3F+6
+'S-QPN9SS3C,I`IlD8YJGXrMH1Nq06eBZJ2&%I3+%&9%rd6K3hEf1)j2ZQeMTMHY
+LJLbN%p8JC+pAE$e+[)H"6r3FkN@PN!$QCVddEL)4T"GHTV4C-8TRVd"")JR0kMD
+jPa(1JF1)%MPe-5SXbS'X!DBGc0HJ0"iXl5!'d2[K1KBe$%I0QbcT$q)"l#$j,11
+`rjAkaD9r2FQhdBD)+4Tdhm&ZAeJl22YDM8mFl$Jjbb+9fhFd2JR8T5rGr"A0KB'
+qc`M[6-Dk+"*`-09S3,KIQU!dir@Ya@$)IQ-Em"RA%DN2S'r"$Z'ZEVBNZNdc*8J
+eAA)3HQkFD4J#6c`0T(B3lGJia)K0XJf866hZLd5+TN+,5h"9kRYRD0i*TDC4i*P
+Q-"`9'MRjY-DD3[*lT2h8DfFZUVM#A#%MpkSH0NNNUXP[eZ(L)Km!+U9%bfbb96i
+f)1P)4a+3!1$DSlTL'C!!fI+f!)dr!bK!VA`Y5Pd&aRl9qH[j5d(kRc)YFIar1I-
+[U9m'SR$)E[Y&Z%LfL4lm,6Xpp(i-5%HZ&D(c*V%jIDhm-lQbZYi[3JlVM(+YCI[
+9`#06erdjdl1YAp$E#qF+8ZkFr!L+%IVhir$"QI+CdBc@R3GdU)QfUfpA!$q8&A&
+Hm%R@PVTdI1D2Z[EjP(bmpkDQ,da[c-FFG6J--9q#)fI*Z2YfCe+G0h$YMXAbPF'
+cJ2VfJZfiS60cHq1@Z+p3baEF$Z3[jXa#A`h"J@2(6FlVb)i#CSM)%,J"*$jfff#
+8c%qT#mP3L*eIh'ccT510X`3Pmbr(PeSqSqJT[M&AS+2EY'a9[YUBH4,Q3Dq2X[L
+1jDj2HDr-J'+8fa)h4%EkP5%RUKC`K&"54N2-5L4L`)9'ePND&djG'S1G!jk*GBj
+V#JF0pcE@rl"%iUDp[[2QkN%q,*ZY(&`TRqJahe)VMK,QJ(%2,H`CSLm6@``6cC!
+!(*CmIY"-Q,lik0aK!N@CB[-cSGKkarV1K(++f9*+&FlC8EBH'+bG!lY,RXLp%eL
+@S3PeQ2)Y1fGpKEecBQdC-CbmFTa#0q+5"E`r"$$L5cNX"19YBcG`3!GS-J*2ka-
+q$l$1&A`Z2rHl94Sm0p68'*lB#IbC+T1!j8U"b!m`8IQR-1Q3!!S8XG0-S9SB+cc
+`R!q)ABX*[[9"iQCMpRkH)9eBe`iZZBS!5J3PZcXrY*q,*Im'a+26Q[mA1lT5Q@,
+$NM#QVHqYDT%@cM1!,rDP56fMemTaGjUUqdYLkYQNRZVLZ5BqQ&@m2MJ9Z6hQ4ZS
+N03hc+kRE&&EGq+)DF1Z"HGClB'cNPr*+`LkM3f1[k61eqFSdUk8-3[4"q5SffHD
+MRB-bZ9q'HTIVceLfmm1k[pb11kFfJNJMPK90RMX-`AcpSeT*mqGH"L2[#p"$81`
+dK`A5(m03TaAUVmDp#j*eU0C1JDAaM!&maE9U29Xm0e'V)5Y5-$hh$`XAa9P3GkJ
+6K%6`BFGAFGAFCjkFCU@`3kH&#$V"a'&pr@rFf"j-p(SrHY#F"Fh@0Y`Hf''HCrY
+q-bqa892!)UmHMXU`""B(DYArBE9SbKGrGecjrNj"$`KjY*Z,d91!93,L9T!!)PH
+05K1fLTb25q-$f,hS8@hAAI@$6Z'j)`ZBdBd)l4Sd1Ai"-rjh5#A'0m`"-Rp28CL
+D9Y*bZANY'6JGCI,plX5HNc",D1VDTTamE@-q0c)TppAr6&HakL+a3hU&3,e`1lq
+qBaf`&G+lb`Y%3RrYH+,-@@lV1j,@X+Y4-ah6ki2d4d1C`,fPm+HZ1akLl#"Y)#[
+SRQZTCeEZmIP)*KHekf'#ke"*$kpcD24S(J`6eI[3&M0E-GjG+Ac-I$ND9qIRVDq
+NTL*iHI3l'D*Hc!,rBla!Nm0EJS$,"rCFJb9*Rbf'kFGq@L4a',SFUDXjbS6G6lc
+"bY@D4lTBd++d+lFVV@k1@,EpE)06AXfj9FT(C@HU+J"kT1L1(Q"S10$6KV9(68A
+qq-N9jc%ISdkH+e"SN!"MbI+r8(&L!DeYrG8*6jXQZ#*Y0KmZ64f2*#SLhh,%JZ1
+&ebaKFJ[`'L[aR8m-*T8NCi`*edNiQ*M"ed@VP&CF4[amV@F%N!"X',@J1U'MifJ
+M1S)fY+B+Y@F!(BHB[+RlDhL)P-D+*RE*2)la6'2P%h-R$'%@c@Te@''f41#FH5,
+l"ekAqBl6bYSR+Chk6!@%ih#+hm#&'m#N#-Zj5JGmZ-QkfSMbLS3jlFC6aX4N5TZ
+`Z4XA-f26N!!HQrLJqaJ&0cKD&J)cULEUe9,ec9kDeKVA0XjpHBpN8)1"U*!!'4V
+kK[TFe)l2a0r4#c[CGhQ+p(9"mNXm2m5184e9YBm1Pa[-3`mPGi@0ZL)([dK-2bI
+dX&dH0Z2SDE8[[empb)NpU6J$c[K,MH(dUc2IcIS8ZD&e%K6(QkT%kcp6+[8k+5q
+jq$#%*)jb)YG8r3R'bh*82S!'9#GlCp04Z6AY0F,d6+q-fP8d&lG'P&jG6MA#QTa
+Sjdj&mH#*`e"0pV'jeKY-Gf(QkKjkVm4)L&#d9X*ULd"Dh`6(cPI`,cV2E0)+[kY
+Zd`rA!3j-c038jlHmiI3")f6@iB9[EiZf'SV)LB#GKB`PJMQ#"rp3PSI9X19Yh-$
+@230TUMXU2l%EpRP$!9JGbkfm))PP@FThYAj3kmACL#YT(lVKi4%X*"dEPeU@Gfp
+i,Up68Ub5#@,-JG3ARZACQP&Q@e[`!H[3bG6"PLIBr$*eh`81'R$mf)"m@f)9(N*
+L[9#"JGB5[BJKPrDpFTNr91pS6ZJ%T"+f*%4+pMr`4QMdVG50C5N3ZA%@pZU(03,
+I&L1T-Sb9mA&Q6J@aK"G"0GSDIMTce5`#aGpT)ZV')3p`L)qmD"P4Fe+`TMdc0fD
+iPXHYbKZaPI)3cNX*aBk64+B!JRM[CLP9GRRcCMXBmT5@,HG)SV)NBEK!ijIkQb&
+H"&kX*lGcJQCTR1J(@U#eE[4%lGSUVq@KXQE-TaBdc9k,Nm8JP!()`)qL'"R2HP"
+AU`R@$lrI*V(bb62KL!DJ+K3(I'%4`00Q$ld+Fk-*Y3IbC%L"B,&#YI3p500iEX,
+Pq&fUAXhEZY)[MLp[P(PH8'iJZ!DeAHVQa61el"jL)mB#dr(Yk&@SJ)(,iV`9r3P
+dH,C)kGJh#M5d%910DHUE45,AfLYlB0A@l0+IV#3#DQ0fjmXQGh(CqJ+dF[4!FPJ
+XP*%538Fr-QPBQ5,P#*aCmD3PVDddD1"*f1X!80H99HQVfSVD%lbP-ZTZNXY`TEk
+Qij0#02(jG92JDBi"3)16HF%RFP$rLd!2`DdT*jbG6[C8r4#f@0Q$38iMUAN2PY6
+2rQB'43Y2N!!V[mV65K(X(K!FpBa+rdQ!+FLrd2,`2lMEaDBHL8$qMRXe9ADZNDL
+Q2#EMj`S1Y2BCPPNLG9![kC,-P[8j@ZPL+$99A"6[HD[ir@VqM'caA39jZik2PB`
+,'5ALjp431bY$T6"N@0p4M+c3U@pJhJX2#E*,IjkeAFSlTE-(%j93a8&Gi,Y*&N'
+40DrM%j`rYqrUmA1hG(A"5m[6(Y+F1Ul+0k*M*iHh-FmAH1"+64&E5)$ilTDc!al
+CMiAIFb8)ZMEpfBQ+J#pYl*!!+hm-IIURBplXc`b#cdqiZQ)DeArmb"BQA'*AYN8
+$K5[@5A[,q&DCC$iVHNerkUFcQ!&mY69&$#mFccT@2S(Lb`h'1Uj1P5PeIQLJPEd
+9DHdZ+BN%rFR-38(Ed2BHmB)3RE@,#-G89e5(5@#21eqp3URQNf&JpQhL1&MS(Yp
+bQ*VHPGi6@3FaB,R(iii65pm`d@4!SpU40hN9-i+9KT--iF2crl'$cqE8V1)SQPD
+1UVjRrMK8mF1YbI`F+e`cB9c,$$l[M9kI(r"bI#&2428Bm)a![QIk!1NK'EJIF9E
+T20rfa$QAREEPak,[T-q`RNqld2UQ16ip*aC"e)%6rV6P'JIKQ4DHbQ-e"U2&dkh
+*9X&YI3JSL46)(L+!iP$XN!#KlG"fbC%$NbBNbj99VGZ)(b)5R[5-RFGJ8q-hXSM
+C%)0Ymhc1AjZ5&LL'(fMH2rp8%-@55S(aBB59Y`Drek`&+@2iEFZGdCX!XBajpAa
+G!S*S*@6al,kSbYkm06q*)DhS6EfcT@6X`L2P2bqI5S-F!r[@1&"eV,qS8Ikdi9&
+q0i6emcQQ"kK#R*H!`J5rQ4!eA+#MpI5L-N)bT8#3!1FFN!!Tlf"ai&bAJB+N1%*
+YbJ%V6H%@e13RRa0I%dTGNYQ'$T!!9l!4Kk#m!lKr,%)`l"5jk()#BE#FhVaK20V
+d@"&"#KY2LCl-D9CE(Pp[raTEM5KE+bQ@+),%Sj-GJE'h[i%H4pe#XN&1G[,$*`6
+P)G42NC!!LY3p4N0iL@J,XaSR5KNpJZJQ-dPYYIBS5*!!JdbcLTm,-Y@i3+MG49r
+'"04),KPK9`dRY1lAXRQHK)Ulrhp&$`Yh#8NX1CHp`TA1TN"'8[rNd#Y!@Ar8kRd
+rC%"mpm1p[`#506X2QBJCZZNp6ecqUhkIXQ1H`m0`&kc!hIADjL3`C-,BLc*Djk%
++J@lP9dV-0$rBF-L`JGLhZI,GNiP@YG3MXYdI&VhI@he85iRm80pcRDacAFfJDR,
+1Eei#@Gj,LJc3-+4R*HkVAi(T)39p9jC!fLNaeA[%l56!64(R2[aT!4@p0)@!953
+T*km,$$5K#A'ICSU(A3Bie8IG,(GBA42e2JF1)h9@IE4D"CY"X")BTJ#YS`QRH&A
+8p9#IL9fqU4&9daEH$ULES2KSb%CLM2FHF+!"q6%NhkZLpL#G1M@-'&TNdTd'cKD
+,NHr%E2aRY4KjErNId1#(NYmZ5)Lk0YmYKCEbVf3Fhi("Kp1`TUAhr(hUGN'@!FC
+RR$a)%J50kV0#f-T5B&h"268i0(FpadjIb@I@S$P$SL1Ck!E30Le%6e*Nm6l%D&0
+MHJ"[C5Qb$Z!,D)Iba6Cm&(k"#!(9-k6ZSXk`CB2B[,h"C)IX%6lpdU-KZIVN$$4
+rK28[e"LPHmp0iVA,"r+JG*``1XE`a(YG(T!!D#Xl5EAHTThh2(JNNLbjR#Yj+4#
+Kf,mpTVi8BhEq)6K2b9fP$fPl,Z&*bB`c[$U,9mf`jkFVrZlFYK0a9qhqc4(H`dX
+Tjh`4DPTeY,!LZqTXThF`Kl)"j&TVlPCA#%-JF1*-bDbcCNEV-lMH[b"Z`A!e0!Q
+@a2pi6b$,3*j2I8G@U8e#m*8V5)8rA-V0')@$kX+LKm%8Me#Ve8B&lZE4P(1$Sa'
+q*pm@jHk"pf[09N6iQ[4YBBm+aqZ+SNK@,c@)I$4#cj+$FE$Y*D2Bj$Q90%Q1L4l
+%@)d%rCZX0S*Lqc39QG2&b0bEQjQRFdq`)L$(-Q,)N!$j$TiDpK!()%FhFrLY[a-
+d[*jAaD&1%B-5i$cQFbG-hf1jiX3NFBlKS926U1N%P*L)j`bY9mN4UVdfj4Faqc@
+,K2qM4qAD!jYYaiq1&cY-22Ke8Q6JYUeHL3fA`GE$&X@L&l8#D4pQq,peRj&Qdcf
+D4!EQ-3KMP!Rh5qf[4()"%Q@2BNV#+4FG'[@V$VVb[pIH"4U8-lM`UErM6AbZ9dl
+L,q"Nc+bmj"0N9CMALUGpF$5TYmK#p[c#ShJhK,kbmYh*&5jh2Vk`id-+-G0C+Mj
+K3)@je[qHfM%J*kq1iSVJqM)!c3"cqX(RaVFdL0(NUbSlRaLRNr81(CMYLQD`YD0
+b3)i9q2iF+MpPaqNJZTP3TPfJ'!#(H)JeZ*1,T3USTF$kK@BU+hdNbj6ljZ&hNVc
+mF&'qK0PTP0G-M%1Pld'`q1D[V3-kJNJVq40TIBURY@UHPDRYD-Q`U0H)92T2!Y9
+%6Kree8)@[N9YaH0D&3%QmLSb()G,9VU!NrlDU%1Zk5,Z19,!FdAS0AYP+ALak&)
+DAMI[cS#iZY'N4QHfY@[QhJ1#fS!ElrQ%AG8a%*TL!IYHYA6l6JceAVrSR(aqN!!
+XMc+`4XkBX2$Y8lIf)EU)D,dI0(RlXrj`ZTc6KimVC&3)T"@m6"+!!3"ZTD9H#8a
+$-c05'aI9Z2pJc(-6%S(0k*H&Adf*VQkBbqCX9Q#X8aB$9TE"KFE`PYerEflC!hZ
+1Z,X@5`)iem048Q5'-+#GXi!-"ASTa2UTB(XAFqaBmrd$'#L9H+%h[164mBhaASl
+"A@5p&A3`Qi#i@bjPd[`J3pBe)0I0'I058a%-4cVVV3M56Z%`I!DFG!1RBUK*AX*
+NB!)0fUD3!%,'(c*SJHTG8EH+QGBb)0bAB%lbam+EDV%Qd6Bfm@TMV9SJ*P[IIPX
+fU*3iCd$63J5VSDY2SXq8Fd,4*',5iLkT$"EE@6lNifeA,PI@'rlj)ak)Q'1ZFK+
+*9GXFm)9#Fe(4`K+(0C%(3[L(pKja-03[Xd0c95-Q2@cc9-$bSh@L&`d1PN1rXJ`
+1(H)TU`mh,GLhKG9LT,M`+eKK`%kI$qF#($+)Pm[ZX48`TiV9ek+cLaamPYPc(!#
+lKBh2GB-)p!2%6`*QKP8bQR'k,BYr3KTP0qE3KS5SmF$b'"CCe[iJ#+aeTJiQP43
+)h+%iHEX&0dTX5rIXSaeN6$$hA5PB6MH@XXcq`(GHaLN%q(X(@0MAbjj8bp6"a#1
+fYe0c[cC9-&iqZ)f"D0B+)Jc#Z)ld'5GQTX-jVVYG)1VS$#3r26*iaFGP0BB&Gm6
+B4)4R!Ef#3jJb&,YQ)*G9SU3HSSF"GAYB`G*q1JP!PX4`H!Tq2V&r98Q2-J[MTVb
+i11H"@&Lbj(pk1ck*#RZ)8JNlIXrpYC0ejc,$+q)'1flp`KYLGK((6%bb2)iVEp)
+fkFe9qeC@aI%hm#Q8RMme&9aQliEJAL9X)q1iaNEb0+#mR(J3`8C2AB6L+!5VT"6
+kS'LNC%",VL+-B&KmDj8A"b&"%r1PQH$8b)l5IcKm@k[r1acmk4#c"I4C5FMk94&
+b@Bj9GkNri**rRG@fND@VPpifqLC"qYRQmFp&(QD-BQljlj2#P,M@#$)k!b2`mVm
+Ke$IQ+ddbAYJaR4`TbBhMFMU2)4mGR5RaX08%13&@qVSE,TJ930fFZ8E6Ba4(ZFG
+d"k`kSPTF0pXcqII!kq&Le9mP94R49SH#2cmfi$3*80b,rk-XN6VhCU)liM%$Rk2
+ZN!!dqM1a3M#ChfM+GlLi3kkZh2M4LLaKQ1-#[598PEQ[-3KTQZ`#A`U4($GmPFM
+!Q$pVf`1*qbelNN'25bqIDYAJDZ6TC%c,d66!J&G6M0@hj,H8Y69X(pf!Se,h-1A
+M+&(BGVAc+K`Rf39HBJ4IUic""9"'rk8"a&!VdqG'rTDrlRG#B!3KJ6eCTMiI)+E
++U#BNb+U9(%L+f5df22rd6S+!-VE'SapYSCFmT)k$i+h)A(brd-1aUURE3&6V8,'
+jpH5q9q!amJV'SR#%UADA"aCRFNNDSJ2SiT'3!%p+"mjiplG12([DC2aPUDA)!&1
+PH-UM[X`"P#4A2%L,5$-CDF15S3m)-MdQ"j!!!2GhTqKm3bVRSXRNF&XFqT!!+8S
+-JFi3S0LEa,G%GmZ(A8Z4X5Z(TJEH),0JflE)lR`Z8)('+h%U0"KKBAkIRF1+jp[
+a3#CHj2$MFYIQLi80VDLCpQMc'M0M0F'da64h*0@b*#iX5!kS$lpJC$(m`5GXj3'
+lK$[iT5,NPJ8Kr21l@(N&&iH-DDi+IR*TRMZUlUFhAjU+3f%,0f!JH$ER-X%Np@M
+@D[5[SbT+FZ3GT0SBA3*`[+)[b@MAPc'Ti)-%H%2EX*!!Bqh!LYYMSYI8YPM,HFD
+dR+,-YRC9HQUkP5bRKfeQ3!k6I%6$rY2I"rqMGbAGL,f%pehUc"R8f'lR1,HX4NT
+16GDi+hjEd[bKR3d+dYG4Np*cQ%XIm6*elpB!@e4KV"*SdSS!A3T0@aYc&ChF!UB
++TR2Y`M'*LAq+LB%854J)Sr4MG-!6iA"fREf-5l)F0h6F3QP[RdM$L62KPN5,qcI
+3Z"H6Mp*mhI!L'3Kr3*%9f*8L*k(3fCkJ#[h!I)K8e3ZfkK)XXM-Dihj2[rIhCcG
+RNH14j#dIcJVDeq"#G[C4FPB"CGHqGSMc"QUb0LR[SeeVY'J[((P-F!8)pf`BRj4
+PfF)X))8(hi5aG'akG9dr0A$2dp+A`rYT5MAeB%rAIJ"m$UlJceTqhr(D%6C#!La
+J,c-9fA348%RL-f25iaG-*HB29jdaVlIPJrK%!Q2-BHM*-Ef0h+4`pEZ8IRPZ(#M
+$R-B&eI5I68EUlbKZ1b8kJ#"kH8NBNc5`9C3l`PMlprRbIjDEXFJm(dI)$IjKh4L
+lUkba[+(+aUL+f(E2(`c(TBiq%N[#EN9lHmp6ZPfR@IT6)r%)4r"AQZdR#9Tj&50
+raMjb'E5jq@$Y!CQQ*2E,@[pSTBRMK-cXB5VP8Zh6hf$"*bHSH4dpXFMj-Q&b3c'
++9$bBkmj*R9qG3S8F[i!U%Gj-hc$L&Ur*S)iCYMPd(bjN0&JB2[*$R5(FG05QZiV
+l[f3c%i*+*Lje2rAmHJ9Y2R+B2MGl"XYT&hSfDSpUP!3iFc@!'Lq*3l`iGL38(&@
+VICUb[@pQAr+m5iXYMijhdiVU,(j#lT[j+Jm6HL4FfNreYpU#YUP[+hM%(icHKFV
+aF!"C@#ECQ#lHl(mAI2-A8-M2JVd"0Fe#L0Gr'*kA-86#,Updl%mNJCFD,1El'P1
+M"A2fFLDG6a[Vl9%2IjkC$U6rlM5RdpMR8Ph!!'Y(p@NG49+C+l4LB[Pl,`NVU2,
+*'DKlLjM"133(dlE4Mq&M-ZPF!Le&)HC#5p1Z`9q!D0k+IfMmc)drG,+qVb[5(Lh
+2SI[m+rdKBleDDFDMAVCfK5Q$58UIeF5L@G%G&bZNXJTSCqr)KCk$I%L!Y"4NfAN
+p"S%I@Yk&qak"m6lafk+A2c',$LX!Xjml!"hN(@PjDL(I590lU4(Q9q5iXaSe9A&
+1!,DPmhcCT)[,S1rDZ0pQQ1m%UXA$*&kc[j0)Gd(bBfj!%5@riG4rkUXIcq(![*!
+!3(EBUQGfl0bPEVA[`Cic"FlrPI6'm11a"0QlbG@)%f4aC5L!k)M@r1*)kD+EXG(
+*"!$mCfcDJSrTP5S,hqbY@T9SPVE$Z2UQ4E0palHUUCZY)S36rYdkE6piq@6,aNU
+@GXap'D@F,er`b"N!`46d#Gir'q&)fK)9EI(a+6YZ%(deAS"A4P80`)N2NmiN@Eq
+$j$P9dC9@P3je$IDHGE98AUeaZ&iZ")bqL,C$9A8Fa&TU4&8CHSbb!(Y6'k58bPP
+cFEP`hfNYfF0#,LH$lmCAXh4$PE8SjI-0Y28+&a4T(%(PT%XU1G`cl&UAY'a9@lf
+*kLQI$&@b+1CDGqd9l8U+ETPfJ0TmACckH#b$"e,rq%VUr-,aq#N+EIR8YbBVJ5'
+qb("-r@hK,2YFQ+`X,'T8"T,A'0PAaZ1qp6f*EU82pb%[RN*ke$Z)bcqP'NQh%rK
+#&C%ri&pAMab(9rH&dD2`'(8h[pBJi*9rmbKC@3!EM3MDKc81-i&MC("UFjdMj4+
+e0)E#8IcKFr1*R$&SaY`U(QeP!5b!mUk--)6018`XJ0NC2Kcq(UISc6Xe#c3Tf-X
+GJlk4Y%JG4dLm,mVS-aZ+45GNacM!FA+RlhF`I*lAp4V!SdEZ+0V0C+PMB"V[P$b
+IrlaACbrrPH4&HMq2RP4BR'BZfqaP+CGIdL+r&1-IA%l"8CR!N!"[0I)2Eb+QUUi
+S3!p89(mr,Gf5FSJTp66eHm6f!S,V%9dL++2mQTr5AXmfAjL$ciCP`'3@FIdmcAl
+`8,-4&B#@3IHB@&(E1D2QE)GRr3&9hK-3AQTZY0baIPe"GY)6Md8q[9-qJApZYCN
+0Z2PQ!ajk1PXbS0rL!D(e6V616-V8Jb8P4lGMGJH-E+1M2@c'PI6KMfFbDFlS!3h
+M8[LfcML9,b"[*%dqaDT$q!ihAk"eD8T1SIr40U*Ii4NP#MJ,V3ZEdbM!AY%LVU5
+)f"UBhN5f"'bcC%Jem(Hq9KbUTIaQ&`H6ME,mYFVZ*V'K*(FRGSZ-F6`c8(b)SrI
+*2bY*FD,bKS3c'f9(m,qTYVQ6P*C2Y-KM2cdrM&aDFiN,Vdq-hYMr#'G!GKF1kII
+e'c8hRqi%dD6)-kUl+R("qp$el)jT@41eHlF9R$d0,3TllB5hAbG(1bD8X+!)"4f
+"%DA9IfAT9"VFjqqPBL3U'B8k0JTHeY-6ZZ&`aZ`I%rb%*`lE"drSFdKl[IBVMrj
+BR#"P3Q9G)0RD,2f%CSXPcd,6qj*kD&SqNG,*mJ4@0Z4)+@ja(C+cRdKG!5$f+ZB
+S-5[YH0IF8RFbc406#mmda82k2hBm,IfZiq81Ur'%[1,Lmh+!&,RN!SL888jp*Qj
+N80lLj9Nj!(482jCIac)AUN+9NrPP,bU4dklq9b5!P*8aE"-V$p![JI,(&SED'98
+S6+1Xd`S(@JXKBFb`PPXeqAGKFQ%KJbQJH@[&kVcj4+mCUjY[DkcE"*Fb[M,ShJ3
+J)lMPq0+B,4`Ddb1*clEbVQQLS"b@ZeHRN9@D"JEkkbZ8#+11i%RM@j5+abNP3(i
+`SNY3aM#j1r,-8Rj$U4pm6[bJ@qDemL-a1`qV"ClAZKYDflk0(cNcbRf3!'T8N@R
+B+"(#$I&BBLQ"(4IG6lhjA0EThHMQ8@pBm&%m3@SEFm%iBB'"2+BkHaRU1NEj5VH
+K#TjjN!"kRFl(5R(p[L'1I4LCAf[bh`3Aek&DM&hkk"M16Ymmld`VXJq'3-)[48Q
+HDDP*caClNN+DFQNRj-Hl11hU*VU-J#`XV,p%#ZFY%r!V`BBMG!NA!dlaUFHE`KE
+RL'M`PbSl-Q$kViVI@6C%%K(!e6B$PT1[e[9+@qY19pX8-r9BlEY0,RDI9-YF&$'
+kLZ-6T1)(Z#p4@$fFGDYp@XbP8d`V9r8aFS8r,Uk`qTCJhNPVF4RFNHSN$pBDmQA
+f2RHpQ5YQd`BbK[cIR*ATd(LjU)apJZ%U-S8J#hX0pYf&%6@5&S4*-a+a2ZGMS2S
+K@,%%KFNNJlYJ5IefT#0RZMGaV3"Vm-ESi@d!EVXXEUC2ZmV0"++crBX8`4+0KC8
+H-9h3cP9TeII%Y8m"NVP+MdPN"3+-,%BqId)*NNr#Be-aKGSGeF)m@T9DDiHkR3c
+A6rapBb3)heGRV!FQSQP'a#FFq(beR80pl2H!)dQ*BkQC@"MkS@Dm!JR!j`AfI86
+EeJj,I`+*Q%LD*NU%JQ@@"Ba5lJ[c2&'d3e9+A++@B6$c18kZ[C2B3'D'14PhiIG
+kaT5pLhcQRQXCF0c4q2"jejqZZCd'`5*M404TRTK#6-i$b+H!R"j1-ep(!NcP5)"
+*EZZ+ccaMF&ZS8*%2bYZ@)AbN`'2,ULbmGPXT656bK@#ClT8D[G%3cad#-ZGkVX0
+ej+PRmq8m6ca5IejU`GLGN[*NU13C`PMpNYDJe$!"6&GQ(``6Nq!0NQVi+RP-LdH
+F28S+J!I`9*1fm56'&NpdGDbl-j!!cCI,[jbfRVDlH"&9a3PbSlrKKM-Z9a5a!b*
+j6Pi68Di5(-jQpN4ZU!aQSXUa"4*#HKTXXke"Y8F+$L'fSH#2G[e12&&)Y-#k##K
+YGT*192Vq+E+AiFk3!%1pUUZG&akS'9Ib#EfMK$9AmS%EX,2)pUTG@NRF"'4KR&6
+34P2NEBe!mMTldq'Y6-f++HTcDC+q*LkbifBeH'r$3Y#k[PSlJqALJ'mIC)p6(+8
+jRY6LjP(aj&YN(rRle-i!XrT6Z$BaQB$q[cl*p6Tr1*1*BXeBQTRk-UkKcbm8J3Q
+E(`EVbVVMTQ2GqjFAe@A(AQjh`,YJffHRi-'M3KRH!Y'2[&!EdY,Ve8fb'GX(-M@
+bU*!!Ud%-#3VY@Q&Kb3"pZR!"'HGbkY+((U3Vc3GL!piCPeA5k(22)-SYH2pLS$r
+'6(F9qRa5G,cMUUJEb)NhJ2aLLb$9(Y*&H193@SQ#JXm4-4HBR`$A2HP#5DUEdmP
+P+)[a%m8MQRPYFIh1l9Y[I)fA-lK!lYa+NSj2+XehD&YLLID81*(iBZe4!e5C9%*
+RqT3pmr#eF``!(4MUYd,Rf08[%'iUPGVrcV'CG5DU`FKbEpK"'4`DbRM"2H4j9'X
+DmRBfSV@TKeM+2kMRpV)cLVGG,Z68Q&ACblBXATQDqJEbR4"Ef$qVMKF!T+*DFKH
+'IMlF0QZ!0*EJQJF`rafI1[[XbKaCF!qS`%m3Fi'`S)8BMY65EDjaCCTR!Srab%e
+bAF-pPmd+@3kG+8%N[2mKA5I)&)eLY[lTrj&04T648C@PUdLSCa2aZcY[,!#C-lD
+PQrX!,N'SF+!M&0M-0[3jrL@E@+90!NHAG)5m62"rLSeA'H5HZG`6erA&lRZ0#+p
+5#+Z8*3BU1#GXVXT0AlMSdbNh%#6HmLG6H6(B,GN*0FM&5NcX9K!dVS*p#@Yp4dk
+5heerYE'EprSr)"L-E@qr"G6*@XDL2J@pG8'BBe`-5h0dM-RINN2ic`hj&RFLVbN
+)ljIpY0NdJlXT!hFB@H&GfXkphq5TE"Zl$,c&-UD2Ek,bdkc2N!#UF$pS9V6U1,#
+'#Q5`fIVr5J0V[Fi"cDP0N!$LpAG1+!!H5jL9#Xj2&V+T8'R2)D(DFSUNJKk#!j0
+)Ljke*$p2RQUi(c)bb#lLIbU@'9blrK#lql6k1K(9F8@KFeY&9VU(PVp(d1VR!q`
+[bUjJ5Tlq)c(d9TR#Tm1980*)5k'S-#Yc3ljKiK+!X4$r*6#3!2L+M-hk0cDF*+Z
+XKSKSIC,@Lm`60A6D&VXpNeUl69MhXidSS`1!%IM3iIVGj05jjJbRclh)X"-QMZ,
+8hGS'`h5dSFcCeSDSe3JP8S+%&Eb3!(995SDQ+#E`dqk$2!q*YN-$dUh6G"`&3EG
+(DQAF(c`ce,l'&MA-IK+1MeE9%%ThDG8lL02c[-)DpUDZRj8Ji4ATGB3&i)DbEj,
+X[UEZBH!"T`AF3#)BKCahpBBlLrRD*(J'qUjHl8F69"C*$S`"$Qar#kjbfacdp`V
+`"B-4NeM+!64a[#A3D9`E6qZ8GdM#+F5Jc53HD068EHJ3Z(I#NGaDYmJV)ieYBq6
+`2`T)lFqj1+f&ZqDAFTK$BTaLpi$6q8)a)ar93jra@ka@STa"r(46"9DZ3`&ZGLQ
+m-`VYr4jIZdVC199G00Nrq(b1X-VMVp*T$9h82Dl,05R(rKK&0i1NFCeF5,$lUp'
+r%qI&8fETI&iZ,X#F+A5Pj-G2!)aZF%m2CdlJY3GmMIA3M24eD`Qqlrm'XAT$eLb
+`p+e$Hqe`R4PVj!`*qMVkji3T,@Ml180cidUe@5%,abTpeHPD8HSj9iTfj*L*PZP
+jV2jpE*NM)@Rh,CrYcP5j+4VKVY'BFKZr-`LTFpR)X0Xh`h*Xq`irhrpCq*i(@Pb
+M6"+%1#*5Y#+`E@JYp%`ScMBRaLi0[5#KD6JD"YX(@PdqK"&8ec%Y-K8d"4F$L()
+1bLrrekhZmEiFEqL'2SU*4`r34i)ld2CmEUp$C4-"dh2H[U6Y!mhciLrieSrXf56
+Ic@&f`$("R&pI'#+0LiD94UM"XfINpFY`1IJmZd8BdrE6iA64CdIR$Q,Z0K0$f!)
+hGEJQ$daL,r1+rPDb0N,Ed(QE"e4mSJ6#),#XZU!@X0$H(J55DkU4d@JJ%*T!b,Z
+)rJ)$bCN$k9KKEba4LY3mh3JGC(2jA`)$CMT8&PLDG`L4BE+NC#abB9Nfr0IF-C@
+83dp()&DG"cEAY(jIDD,'m[0+qNR3pp9m,(B1"mbPrPJrS3A#dR,kjFQec&*+ddi
+"00BG@K5[ke'clYc8VK#'a,DaEDMdG`qC%!`,8,-e21Va,#3DeEG)(0qLYE"J(V&
+QDF-$Y$NTS-r4$54m[(*CaQm*T)C`Jd6iX!"4KXHI,@JmN!"QmKHZNp5Ap8!C1f&
+Mplr0"AkKc!hFSC-qF0QLe`&[QViSa!kF(%U+@EHr[&-Pme@C2bKkb2!Z'P)'S*3
+#)V8P#BV[Ap@6M*0@3fmfDC!!r#X&NHHTCpU4hc9qF2f1C0,dBBG%eC&%'G8Zm+C
+#Ui9cG`4%cd*+GGFj*A[`0+fMAAAq0GDLfC!!(ZpF0"2m0$Hr*LZmCVLaUhkDi8[
+,i`PimbPLC13H)Z[+"#,ThB-D0q5HR"j[8pZf"-8H)EG"ZL)&5apS['N`l5IUX9"
+"XF&+qmM%drV-K6Nm[`rSh3S+L*8kHDGpcRef5XdDMVlV!K`I6)pJ5&JN@GJ%Q$#
+SiSqU`r[YDm%4#X$prLm,36R`$@cIaG[RhRU-38aPLPlbdYbcr5$YBklaaK1Sc8Y
+lUA&I3pUad`&lm'+&@SUk9V,"kQQFQRm,RNXCPZB'JihIE`8UP"4@%VFrUB(X#bq
+l@8qA@-e'D!B2rP5AFXV&jA0I,SBDjT3M&UUcaDE(iCLEURi"Ui5k0ec3'Zhk-Jb
+#QY"H-Id2pFZdRTrBh&!bl"Dl3CFrc`TV6FaIB8Pekm+RDC*Qmp+fYTriNRQXa#B
+f6RmD`mi4kQh42pRISFAp*rC))XJlp%QPkmdPa`jK@eG#-I)@5C1`iXj!Mp(+V02
+60c91C5GqJ2&`BP#DDldZ)f6'J5IS[BleR,!A43Ym3k@*e4['Sl+L""XCGk2MSFr
+BmKmH0D'Y(bC!F5FSiEC&2FCQf-aYKSi[%"GA0Y2pKm2qZ-mcN[B"&%C8232AAL0
+4#RP@Df1RJa8ANf4N@3G*LdPI)UqTJb5Z-@MN+af$2@6+'Yr,UfGNB"G1-F#qkdS
+I3Q544-2e!LDEZLlkL`YS#PhqkC`D$iAi4fE%64aM'%2D@aXFh3l)Y[q!)kQ[!+@
+f5`UL+`B%'Me9kl8PU4q`)69T#CY24%li2V!aX("Zl240%,"Dq&-YbFAR*#Zp13+
+Z"4D'(U*I`Njc60f(V5Ck6)Ql+G61Zpd#06CTh1c`d#9jNMfH,$`b[Qr`eTfA[Fc
+'&8'h6bpiD5M96#"Yf+PqKKD&aNSX9kJ(Dr%-PE4cM1`@-9Hd(&$6*[I2bD,QG#3
+(d-%#ImBdd9`MeD"Am$HLma439IL!K4S-eP5mjD8d(pGpj`a!-ATfY"E(kMeB*#8
+UbjJJckr1MCVTXp5bqj)cdqk1P#fL-3I%(CiPa8,Y$Vp1bBed-!l!F"c+[E9538P
++Va6Fk6ZK`LTKrBkqJrU)Ra!Y6fM-[lRrX(BDahTERk+#3N3i)ZkD!2J5C@pIFkN
+M,@#MQF4C%NpB!MkHBdl"Q'L&QG#[+m[`p#JM!4p'+Bd5IGrLbeiK-Q0)f%dXd+'
+Vm@))H*&S8!$ZTcc1DpQ8FS(KHVQ&Er'B,8TMbq!(U0l5f[TlMp%-,6jBdHTkj2"
+3ldrj,6Rj1r*P!FmpP[diGJfc$iLS!e%qGY[68"A#DaG9$jq!9ekcY1VINMYD-[4
+Xp2k5mCXm`b41,VK)Zk-ImBR"THr5l0e&SS'SbNqmH&kFI9D)kB*RfN-Xf+3MZC,
+fpZ6mP0,5U(%EI(2%BfeHV)+0Mf"pR-(k@NeXCS&6$IHbcrL(0H6'F**iK[r)U%(
+Jp4RZ`-&QC%%jM1-GZb"ZYZ[(GQqb84Pm8MCUjBa,R(G*N!#$-%X*!pJbL!Rj)FX
+hZY"cp+5qPRFqVmLi[NXTDLT@&I3mNX4N#1PJ&adarF2T'-pk[5HbTBY%ITZPe@X
+k![bH&B!4LZ"ZAS$p!863arK3RS2)`BUe@AbXpPlraad29kKr1bj3YqMP6KV&(4G
+!DKf",F0Xl6KFm6j)98J&Z-cpeVZBZa0MG9"N$CUhH&2G0[58T*Rb5)TE9"@@(DB
+DiQXh`LM0*Y(eP+CFFmFTU2BThN`DEfS+%(&T-ei*JZP&)&(i4DER$0q9`NK3JAk
+4f2idC"ETNF!6,9U!b-qTcdJJ*lQ%F4JS*bEFi%r4fchf#IQ[Mp5P+$(e11X4ddb
+CGYq-XF)Ap*N&6R!RX-P#@!C-A!ZiM2S,FKP,h@"KjA91(B!Y,MdI*1((J,q,2('
+%+G*-pl4l9),TTlcId,413(TE&@rB$F9c[ePBLS*I4"H4MdaB'$"TBj!!daTZJ,R
+H*F[H8EfJ&hA[1p)Mh3qlck&jN5AjQ!0)A-E3D*3NC#l(*'Vi6MGTEE5*5If(,i`
+pf"l$H9#*ll"`+%(X8fM(eQ#)9GjbrB"ICS%eqHBXX2&MHBq*E-AJBQ5$XE8(Ll6
+BeqYBZ9Jh2,pR1brk$%LVZD)-[6F%HX**kr*HTYK1#,L64r9PaIr#[UH)8SPMSN%
+!jP,H43cc&@3BcjBkm"EDb`lL6aG8(I``"@VN+@#6`[TQS2h*SGA#i%"&1Hrc6FB
+'ZZ4p"+93CAdq)`,a`fS1aL8d[IKH)4%Q2SNeEDqI@J%DEaSV+Q+TRkCA[S[Y8-C
+mSjeDa56!F*ZpBH[6a'Kf$D+`5'R5i08h@8c@SihBP+e`2#i+MCVDq#"UFpf*9(4
+GeT6@TX)G$-[N6hkq8PBD69U#XcJfR+kdXlSDLQ3JV!aeh0E!P3XYp$1*%%Y2AYR
+3RQBHV13%1!R[kELNFP+mchkjY*hXL[D-Ep*l(M66"(&#2jMC)QbHS%J6AI)!(l%
+4VV064&YJ,((Gj9R61M!`eTa%qi3R('Kq8Xk#pfDNmLV)J'#`J2PKmNH(J1'M[+T
+1Qp1HBRCE2b$Cb`I$rR#U*V$D-CSHG,ZLYf&)-erA!TiITmX1N3V5Me$JVkjDiGh
+B@NX-2)6MIY2mmXaM%FIX&Xfp[qpNBXU5@D(4aX&c*K0FiXMHb+"[5HKqq#6prNB
+a!X,8H*5ZDTNVVRS2*)0rSQYEMPM[a#"GKXFUQ@#`f@QaR",q6KUc,[)%ITEZ3J1
+cTU&Q(C,HPR'ee`b@LP5GNRejbLamm`Gih@!LK!U6@34RG!-A`a4dUGHd2bA'&im
+RX!#h6Id`[[14L[&CkMa,%-dD9DE6$GBf!YJJMD(Z+CcLEiajK*8cQ#+c2m6jZKh
+iHh9Qd1aGPYHALYX3G9dB"5[iB(1@"V+Q3NMNrBKA[q!4jjGjS"LLLj'`X$#E(NQ
+cU)XAT,`%Ca('H5%`M31AIPS!A3VeC')QZ%d$rHHf6j)E25HI1$iCb6P`mfNMhjM
+GeNhK9LH"X*5%#XNTR00Tm8pG-)Lq2$BKchU3!(DF3P4SYiLmLBVP`-LZ!2m6I!0
+L0JP6Q9,dAKY![*Vd56@+SCc'GrIfGD%@q5h*48DA&#D15k%UE@HEYq(N[MMJVrk
+BZrr6k)!1TS1V%Ueh62cJGLP)rpFYR6`X&QVF-$!kAVMYp8,P@if*B$UfieQIcXV
+edqLr-e@9i8S((*6m1lBhPbJ2`Ae1'!@6-J"lR5C9X'TPFN+mVGXlm-k9r3$1'Xf
+XcXZ1fej6Rr%PQH[hENrE&FC3CpAi8PqP[h*HSfM--JSE[%DHB,5U"4REiamf4'i
+5[A%b[%CrY@4892E`+CAU2T)6$[*Dli'J['8cr63H"rlXDMm&mpIjee0)dLH9Y#X
+(iJ!3dRT@jDCIX2lQ6"$9ACVT9[Qf-K*#Q#4ke9%F10mdZNk08A"C4h6EQBaL)3"
+@T`pYq0kNNYR2(Vpi$jJXj9TL6%[2%&P*Z'691m[BZp[0`R-(N!!SbC!!ec%mDY"
+*`q9M!)Q8p6$a&eRemiq4)ZhLC6JT*4@E2SSle#VV'`V0C[0(%dTlK$Tk)f3*D*k
+f8cNmP!,Q&PJ8q'pDU$K#8kEKURVXm*586p)PXq3j245Eq$Bkh0!KGeM+RG0[+1H
+G8SrdV9TU@hhpJ(X$JTf,S9"j3hMSEZF6*HP2Ah!U5-Y!CbC4*+&6)J1`Sd`*EkQ
+ZTYdZRHSISh$K!"ml-KqFp2@jGBph4#9F`afL5QqY+belQYDQ00CR)%'Nh+8iYU6
+E&E8`eScM#Df%h*K$Mf8e8`k6NXf*h,Ii8EMiXcAP-iI&*JTMXHJ*a)['-r3k5NK
+*3`TA`qCphCA9L"X)&9P-3LDaSA+C$j[fcPEe#dPQF!bGar54T,%CPHH$SpAkbMT
++'immiL2jkP3)&Hhd%VVieP%Q&HG,6KSS+#QZ(MALk%1iPLe*8i"4hmbp1!KdKET
+cDl"(-b6%qU'IViTp6(iEVqY2%%'&hD4mNbr0QN!8('%dQ!lAGV8J20@1CT2U!5K
+T@p(!S,'BU43V1,3J(8`aHAR'$BQFc1pajMkK",i,RaeeCr#,(iU6UaQ0lll"kNq
+6*Pj%mmT&GE'T'(Gib9&jh+RV"bI%SKMA'E3QX9`%H@jZ#-A'kFJ8LA&09qLEQXi
+9JAPcmNS"jP*['EUGr4)R*LqPcDic4%kp@5afVhLKh`ZdSch,XRV%l4bDP5#Ra!,
+U1DAP&rl&"!3-r*ljDD$@ZPVG[YFKaqk*maj+pjZBflU4l@4aKP(h0Fp-)XfhaNY
+IjkMNTccU4[6S6fEJYEiZQi*Gi-@!eI@#N3lM!c9mra!*0DZ&fAqDqb-$Ycf,2'!
+3hihcK5iEar!2aBA5h@r%JJ@ql)B%Kq@+,9E%59GjiqV[a&$I'("2dmfb0VFH@"F
+h)MF33U*$'P1-83G4-6Y+2+3Q&EdHe4L4T$,CJ#X5($fk&8XTa""eJpPV*SN,X%f
+LphUH8Qr8$4V!UNr`Qi`,h0fNDQ$Z!4-iU-mk$TDC49rdq+bVAaIVLS)6q44Pfjl
+l@&dT#X$3aRFH`5pU8Ef$R[H9Xp@&CYm-VaFQi4c#HKLGIDDUXX-K&J)LfQ`h!Al
+hH(##6)8#m@qQ,f#frk0Yk%,#jC8e'@MH+k90kMV+3`ABdK+GI+MT9-$*IqZ%qU$
+2[DD#c&qa-5S'8KZh(8V8)1Rp42beMS)ZeBpEr1FKpKl16RIKhQ)Mj(e9XHGi&l-
+FP"pRQGUQ3A-jl"c3jTb"3F)U2P8-BF92+CY$HBX),QNB#9,23V--C69'V#U"TlH
+mU9Y`["pM(iC$8YA%*90NZH9$m`NV!#()eLR,!)iLd-jR81eDQl(DjD@%YpMqFr5
+"pF[4*8lcRi1!'6GJfcFfHpS@AX*BfBalXbGkp*bk[3&SddJ5eEHL$CPN1kkV'I'
+QX&iR,),Nqp$KXHYE&IB-#r,UIj%KdBd2*PV55(fAb"5j@8-B[*0RA2Ai9iB69%J
+IR6KUJKrRlqP$rp6%IN$"*ph$49VDMYmYqH#DK*TefA9@@1VlBh(6#Z`&b*pJPa*
+Rc0%6RUE2[&j'k3B&Z&mq-Y@6'SLQCBVICT-Z4GHGVAk@l+J5VD`8m#dbFjJqGkh
+TPeGSLbQ[K6a[!I#I%M39X`dpRerU$PjpUdLRYbMlYU"%"H4Ikh8Ip6q@D[FBI`&
+@lIdlkiNfHLfB6j-F91,`C,B4KRdIc1`00*+6*@$FF0EbKackV9bNB$Rr2QC9ZNM
+2eLkTMZZr(D`Aq`mj@Z!jNVhKCEcF#Qk21RPYNq3"QrZAZ`N9$jCC"VG&"SB$BUq
+e,E"BMj51AYQ*-5bEPbm-f3TKPpLc-'Lhe2aSeed,@@VPr13"GR1j-aS@)aNQ5e@
+qZCN2LIaSj4TUfSE)[F"CD3BFcB`l1R4KhE@[2[0[hV@iHKD`$KdV@1YRcKUST`K
+%XpTGcIV$,"N%-K(P%XMH4#&EHKl`6Ki5-@BmM1"T35AP!U+UK"dEKBi,-(Ap@-B
+LPf1UEDlVSQ2LQ!(B)`KKfEGbUD-cMCdPV5pHec8))B+MPLfU9M%IYSPGGarjK`Q
+!d(T$jT!!Y[[*F'bkJR3qE`kTQKJRH1,B[BB30)"[&&[Lp&TX8-3k1Z33`J&+6m[
+mBPYBe2j3dAGTG#!6@EPmd*L+ENk0AEFB-bE"rk4!EeA#m"E4q,EJc*0iDq*j$Y[
+IA+4@fhV23j-)99ibH)80l,-NTa!YIET$XM8&k#qEQ4-LAl5X+36a`P5hmZ"b1ZY
+FI2$c2CL%Q2$2bXIV8rURm!e0$m45r1NAc[Tj6"!YlER#ceDGFjR'm(Ldk8H,CK,
+@5mC+pKpbf%BY*2P!q(RTqeb51!I(dZqi,&Fm(qlJ)HrCm+RPqaQ(UcMk5)6C)"!
+5qqN`Bc%&DqbdAY0$#-kLd+*(Bpp$MjdDEcL)'Q2Zh5VM)pK@95NU9[*U#l+H5YT
+p2eh8lXd`(0*!#+*j[@DNUN8+%KPX*&r`CAmI0k+mLS*D%!JX*Z3C&hk(UG3BC-*
+Vce9K`%b1l86"9q2$[-Sdr%AFAad[%BKC`-L"!J+`)83*T-9M,T&M`ai%Q4Yjpbq
+BJ*k'iLMKMYhrehECJlm)MDDe6T+fIIi#$c@kq,mYBci"`M'1ZHR+0[IiT"6PA"@
+m`I@8T05jPIX`H6Tmj"SjUVXNcMBlK(69%l9QGU5Lh3KA!-@F(rU%U+m(Bi8ciGC
+a9p$lTUjAlidQrcRdC)brF,156CpqU558!kXMc$EarPp(!f)6KKRehbMRV'U4Dal
+12N6)RBVj!VXjl4DrV'62`0+P$'R#ef,X%MLm(232KRA'QVF(N!"B'0jUf&M%)a2
+H4MPkS8"$`"pd[)(1q$kjB)CrHk*2TaL,9K0beTc6S"c2ie2Kb69KLF0VU#8ijCf
+B9Kbf!2N-QaHPiDM"B9YdHZG,*PaleETh@[,D&i'4@J-Vm$Jd1Xa%Bkb`@k4YCc%
+!J1'f#m28%hQjB%T2`4XCqBJfJ[Y,iMIMKKS@pEm9CTp!0i8lRQUHrMD,8R4Db#q
+@2`e1P5KkH(Gdc+GrblQPPBbcR55L*9#[d8aFVbpF#*LI*-p6jI@06iCdhmMM@HP
+iqSYQd-"DSB9*9q"J!p%bA85Ae,HrIVK#IXAmECNPX%AlQAqa1A'qHk%CPf3(4D5
+C8mEK1TH'-YNXTX2P)KGZa6Srm!X'p$rS[C&UZ!-T6F)pV+ChpF$)mGP5Lr-ii@i
+1$,ChHV(&BA#!`E-+iFS#GfS1*m84%QTAr`,2qe@R283`3V,ZFkhe'ad@Kd4r8KD
+M51kc61Fr2DM6lMCbHcZqEVdp&A84IL6@9$GZ)re&kHd1f06CUXUaFr2hEV,aFAM
+If$+V[9'cVSZVQm0K#K5ip0YqP`eEJG6L@LqlDX"-aKQi#,8D`%*3'Pj*+qb$0Hd
+RL)2+@!KfYfJ9cU%06rrA9l)&bS!mrbIhZPk5Gch&@C-Fd(Iq"LjrQH8mM!X@9&Y
+BfZUUbDlV`I3SB*-33fVHIP'LX81+644`)+5%lDN8VQGija-$i5%PNQQRqHeh9"L
+Fdbq[DPEYC`,YE4,8,@&3fX1@8ZXVc#B@V$#lI+&+H!Db4eBPNTH-!*r3AIL4jRK
+Yj2dqZUJ+!q%HP+pX6LS8Aa,B!&l'q(AJd0N9*ChK)aiR6'GX'S-,&S)iPlQ#YPa
+hFB#-2lB9H45AbC11ZADk@[!h-[-EQ+jVK!HJL8C)eLlDBr3-#`ca43mU9E)$XP5
+l*H6$'@-aZm#r!9QUPkC[2A`1a+"hUL-k!MA"keiq5QcTNKrVS!HkPB)h5iqRqU`
+*,CJiGVU'UeKh(I%X1kfP2bY-d+cTGfBF6`Y'Fcj(5RS2CBHL+!M8LhMZ[$'l))r
+`Z@F&pDFCRhTYC!f4rQ0dAXH@@-ACAlAm[++jSXNjErZJ!KXF*cka*I-4Uae[mfR
+VM*l!'fm"A82$60P8LCVLECZf2phBMGI+UbNZpAp66PfVVK)03$"Z2jI(092drVl
+k%B(lReq1-')1Y38ecN%aNffU(YF!@b1k3bfFE3IK+-)ih#q1@r8A5FP%DFj0L#5
+Mc[E*'9bAKE1DX-2rR0Q$daGf*M[-l#ClFpbV*K('mAlma,fRNX`PcJ8S,l'j,Sp
+'Z%4j!YhJmfF2&G#rN8RRp(mG[1)*bX*9IrH!a$20iNe4&PG"qTIK1*er)aQSZ[(
+bC@kZ#Se"K,22"bkPhrTle@VacP9GPdBMUb+[2lQa4e5L4eCel03!K5@691)bcm9
+!KdT3JV3,r39[T%-"hqkSlh6@K@aFG)0jSpD[5P%d+ZE#'1eS&YrA5dJbH+HH5V!
+Z3er*5%Ph9mNZ6(6b*pSS%5jQVe,6$Li(Nq5T)0QAR4[Jfm1aeHphrIR"0f"T,'5
+YJENk!m9a%`cmMq!bfa[N($TX,#H2DUK44N*R2SBm4%k1k5Cr"1[JLbaAS$#E&hN
+[FD,AX&&'C6bF2*q-*(Zq2R13!$,rce&##&GCXrK62cc!9h%1VAhe(8al$kAiA)e
+&-h@,5E0+FciL4"f2f8FDVZEQd2hVE-PNcU`9Zj*TdIfacL+dfQ0UE[TDfC8lp+P
+YJN1XSm1F2K0Cfca`TS"irMA3*!0RZ,X`bNRG!mPH,+M[T8DK(4-E8Hji*G*%fML
+#Va*Z[c+R$c(qkBZ$5PLXF%Fb++-N,e(8@$)8CBa0cq*d6*Y@Ljki#bJ")fZGei6
+H-#-5!'GIFh$@9pjljQ&!S+)4YaIJmE-[9&E-$Q`J(dDCe)6P#bQG5j*X11Nmh)R
+4)DH3!*k4HAfefV2Kb&J8eSr9J(2BPB[N`YKJEJ3a9+D#Cj4A6E5a18qe,h&M$L0
+NdAq,+h"8N4r3"T-3PZj$E4MEp[,qVQEf)e3a4%qfa2K4$#lQB5&bB%i#bQf)ZeD
+(`'8-Q3,kE*fZcZ2%Q+qSE%&`*#P2'Tp)D,ELk$VbD8%-A4fmZTZBjMfYYAhecV,
+#U,XQG*DGcJqhmZ*'N!!ECB-[l&(M'L#PV!Q*r9bb4bEe5G`f[FD9AbG`)'pdqpm
+5'3A@-eFp5i'pM4VGD)KGNkPlb0D4S6amLdA08EE#f2)Yr$rZ`#8aai6a6YT4h'4
+*f1l0Up)8+FA&q*Ze5C!!92m$SNYE,r[-+rELm#PArQJJa3'FE%p4(2I$0LR50+6
+h&h&E'"a2l-BRmV'"%I@$&N%NVNYhK,qCM&43Y3`MdXIj)primem(#!1TPaTbbM2
+2*"Cj5!I)MbG9!i0pFTZ(md-cpqc'6E2IRPh-IRDTa3Di!4JXCikVpAaENc0YM&i
+(Yq!&MiB)$"[6YT*JqiHLR5m)+e[(hG0iK0+pCm-4jQr4@[AD`a!$UhH2DL%hP9U
+dH(Lfrq8RNbS2q`k,mT!!*Z!5Y,KJFeD!6fla'0)rrVK64dGlfLIfYp[eeb058T2
+XFBJN"UmfmP,GerV[8Y6MVMc%59CeTZ1CjqIVK+IRXe-XVR(DkEqBX5@r#kIU`9I
+`2G19[XN`8SH*p,[LrdkN!PH1[,+M2KqaKrJr*1b9chGle@`V%XARF#D6N3hSXr&
+,&f(Cm+mZj*4JM&YBrLd9[riiq4fjfp',NAebX'TYRFjkhTMi'c3HN9Q#RIG'1TD
+$FFpX*,V#bZXl,F[8aYRrC-D-kaMGi8BA+eX5MKj5+EHfG(Ke0&PN*%*Cdi1FAQ@
+@C&D0N!#r(GE6LrLXU+E4idGD[Q5%5#QT*4JEEYrBEMcDV8apCA-L44K,r&pB6'1
+$iUpB`0%k)"MrJ5BcXM%P[jHZj+,(D1r25)G0FMDbIeDi6*'jS%(0AHU,2pcJ$PF
+ADr[C4pb+rKlc[a([TU9I&5L-AMTHc%"j$HHRDLA$9(51lHeBfq3RH3cVLN4q$%4
+VJriX1`&@K$4(R1R@)%pEX"86LQjQ4(S$VT*La[f5(&C'Dbm4Sp*Jm'BGZCGl$i4
+P1S4$jeIN&`C*k($BkLTFq3UH(QNhdq&-bMG6KLlRiB*e'1Lf3`KJeq%aKNaQ0Q,
+*0D14VRL)88PAprPH*'&X,YmM1%L#J@qFBrDq!8D5hXP(&SGUh"cr#'CrVIqr$Ph
+AE5++p20SrmAMB$c8pejZEZdG-H5b4SQRBbkNrN4Hmk%8GeJj$JlEmc3MfIaqRBA
+irX8UhPd3NH,+)IXeUIA0YA3e#L(c-`9U2qeZA3ZqT,G42BSJcYQA3$+c@Yk8,G0
+#lDKFHCafC*id53k3!2pcp@SGCahCZ[`)Cq!hM,d9e2p6+dKJ4(-Yif`*N!#3!,J
+Mq@YCM1piD$Ceq'5@bD03jDKU`FlGliT`qN6bDQ)0jM3kR-LZi+UHLY3aE9A$6Dj
+HH8)KES%+iCZI)A(p'p-+CaYNVHRE%``MU%Prk'hQ-[MB&2afSq0,Q8Y5CHR)@#'
+,CfE(#TC#'EC'a'-V,IB3I'KUe[j3V$B2b'"ChBTGL'pj86dVDY`X!bIGVMI'Y96
+ImD!N3R0@`UI(l`Q*m)6ApQp$I*X-XKK135mM*KiaK(I`dL8a4V#+bCZ"GTE-B[R
+JPe'[$`@YcV"Se%cY$6Bq@G2!jKk)L6B6%M`j5E"BCQa[U3-G3Fak1$MFXU!YjR&
+LX"[DE@11%A-!"dJqX15hfkQd(k$i)8YTqULfBEadacm`3LlJJYf0#$-S"arIG*5
+V$iDHF8M-fb#(%8Nj$j`Q+e8ff@p*CXkphP!@IphBTd&R"Qa[&m4!BGqcGRj`+'d
+HD1aCJ[TGU$"JPP)!h!iclMqL'!T4%B"Jfe(1Sh&)l9k@NaY!Ul8qe*pd+rJ*d`b
+$0!piAP$R6FFQEF,dU53l5"j!4TjB02`dhdri(X-kS(pkrpG`fU#`Z3%GbrUK0fY
+%`lc8raGdkR%TZQAVqe+DbXFDN!$e4,9k[abYbq+-l(Kh3+L"+XeVfi0Mf4)dIGE
+JQ9#1*5I@RR5@dK2qZYG"mb*R@-p`[69FK[aI@hd,0[q5baEkSE(DmC(fD$E!VVm
+V[Ee4QUp"HK"!JZK4IG[,G3JRlQ,+G(!%2&#L`k$Ib4P#eF"VrqV1UZcE%3*R'K(
+I+Lr"Vdp[VGmMB0e@9)pL%Y6[r3[*&4fGcU6Q1,&C3GXa4!rGCB3,Pc[TmlVQY0j
+PB&3f5#+%d)B!k@651k5$cd'p-e,$qPcm#(M,iFccTGh8YqX&-V2@0r2qMSpHU&S
++V%SNZShPpB)R&5%"RBe+%,mR,IrD3NjM,ccC#3MIF['G,SYImm`cqa4FNYkj8qF
+`(V+i0e-lZ81mPjZJI!3$6EAKE"V(Em3TS+JF,(XJGmFk'[,08Fm+Zq4)HKI*k&M
+LYAk0lfRTA)r"KZ"V&G'M&'Yc#bN85fD2015ZV`rX#Q[#QhCFQDe*V`8UM2(d16"
+T3rm`f3fihY!XMpf(L(N$e4V3'e`D1qeaVi8bSHTZ&45pKj9cb6)H2f0%EX!PEXa
++kCSA$p0@-``['p8J)#V8!1ccjHl4&X"flBKS83hLfUJ5j0,YLRHfNH`VmcpE`%!
+1LbU-Aa4QGjUR"$YI[aiVVIHcS4QMiX%QpB+JLpQFGcabS2eJ)r&NB4i'DXBT$-A
+V#0klF[T)#,(Z@SCV)-"(AHb,bXBpbHk(rV*D68CEN!"KLGKZZiF9MS5A!-0+TQV
+GM&3k58'T)LHDF%RrYa02VqP+PkVbEh2'pP@2Sk(NRUr%dT+Ppe#9Gl34X#3Q+%e
+rlR`RCq6Z8LfC9`Vi$I'cR'QQ2X5Rr!6h%0TL3Fkh+H3Aeq'NESDiid%'ZSaD$G1
+YdDrDV8@jNT(mDIbJ9&&P`FmU`i*El8SAm$*pA#Ai*bX9bL6lT#eX5V*'aDdD'+1
+Z"DHj4`C4ETZXIrBX&eV5P9[8H[[D*-pNU+SKZjD$NY'0`C53!,jZ$T2B822f`&j
+rD$S#6'GpPPG[53Y@d2J`JV*cZ',&LA1&l6R)i'h&Qp$jI#j4R$CDq,#c5INR2Ib
+!NqfK!X+APreZ61fR2b0)*(YDHmJ!))qj5dY`TfDZ9CAi3T8'Y2[DTVNbE&q99Ki
+Y4fk'#`H))jCd$i`0Xp#&,834iH%rU9IfYNZeBLpmC-G[Rfh5(JD+9hE46SUGHaE
+[FMK5"2bq,,%T*'b4h2(hhXVFJlQNFSj"XRrY%lZXZ+$G0UmDIC09h4IY6&UL8eS
+DqRQ@a)F"1j,'M3-'e3+If-fmj6)hf3h""(JDckRAb4mj`p!5S$(J2P9HkL0V@$@
+L(4bkh,3T+551[EM`P*TicelK"ZjfSYQjibAX*pU5dh$-GV'-)dC-aGYQME#K-[L
+)1T!!2k3ZCMCb2!QJ8ef6(S[Qa)L)M)b+45C2)P`Kq"QM[h84'[N([eNH`fdMf4i
+8fC`Sl@$3q2M820DidKN*0a-QKhDM*5D($APlrI"hEZ!l#F&-mR@"$BTD[Yk,r8m
+k0X03jUec0R8"dV)5'Y&HM$P5Gfbf-CFT#Sq#"rLRBi8L9rTPlm$2Dpr[!C0"KB*
+$ALiR-m!$P*!!c(-)"ce"!HR3A69AFG+[[l+3!2A!I3irYEKR*5@3!%qR&BZVLE8
+qIN+U*#KY)%2p@HP#'RAb*i41A`mVjIf`a4k$)4lH3'fe"$0I&f&@Q2p@TI#dV5[
+EVrI,A+q9rEXJLEJSLdmKA'RQX+-BL2HJR*X'#4)99F@9Bc2L[22TRj285D1%[$P
+RH$Bm@*C--Q'GSlRalAbkp3PIND@Qke48F`[$T)L&eB6Aj@%-a"f[B4!c*CIjf)`
+8E6(M'aYqehBrd,2XBTS-Hp%J&AMA%Xk3!'lQcE6T',I0YL9(4(c9kjq9MBjfE,U
+Si2KLG+HFNA$adlN44jY9K*KbF!4N9f4Sfk6Ii!0q1(TC#L%Rc`hXK[4iVl2&1qU
+Fa1fqT4D+B0NQf,qqj5$al6Y&mj)GK[0RQ9eS'&BNfT,4i5BCTqjKEjFddRTiF)Q
+6k4J#$ME)LIYG[PAHCUF3#2I'!#Y&r6U!,YY08hqmcBcU#*%JD9[6UX!p!jN*-K-
+RLLY3H[PL'!G8BcZBKe$[("[k&X9J`!6&QNYPDF(4"(F,ld4r%Q$"Hplq8-0b%&U
+XKMa(MdUr'*!!QD'ZNbSVD$c(0M$1Uh&Q@(#XN@$Mp6#JIq-Xf9-aPi0D"$0'aSA
+cie30j`+m(qLL)C[bS,cir88#4&rI)L9aY+2U+*`jlG3fGk)SkN(LhpK)fLfB+Md
+rBI'Q&HZ`p@#80K46%p'j*1@HMMB5B52UFN'V`MP9PPaVh%&f"l5@+qBB60VL5`b
+1XpBijFXT!aFT%NeVqJ$4Mql`1E)Q$ef1C!9%443pQJ%&rXS6S3UN1&,BpLQ,i45
+FErLrfi#G@AUbkhVI0BddNUUHM0KTeKk+YUNJYq6AU1CE'5PRE5K4($Q9#IHa4@1
+6*DeeHJUk*iSHNa'iZhj,$%,F'K!Xf@BLQmbKj$*Zp#6epKk[TV[()Ie!-d6*iB)
+(eQFj!3L0e9jFH4N1(eHImMAYa`$(A&PDh!,P5U#mZLJXjefKQakbAh'8'Pp8+d)
+RL'1N$PGB8Nl&8(EKRA%9"!bicA$`5c@KXZpi8ek#ELQfL(d8XYJ[3%5D%eV(2+i
+0!l"1U%PkjrbRD9$lVKkqMqGCNDC`2Ia8X-d4C0h"@8LTD3Dc+Q%-(Y$-"Cm5f&!
+VAIP)q(Q2+IJbCXHVa1k(2pDmYc*aePRp%E`6aj&ZBh1J!1S95b0`!-$i5,*A[IJ
+1lEQ!Q23GrVpQRC8E85k+,D-+RKUANNRXRLDefK[UZAhk$cdIkUFQiK"#q8+$[bd
+iX`#UJf-Qcdrr6#%U8JmeF+S65hSRh6P@LNqV*d@SkIYFr(Y+mDa$qAI'eQe#DC8
+JjG#Yl@1KpB(KMq@&A'@Q!"%[%"f!2kMib3X4DUKQQS5qPS9XRZ9'9jM+e3rf82i
+kr)GM(P3YG9cE-&G*Y+,E'`hRlRaZkM+[!kfBT[Mj+ppdY$[!TIHT1ii*!#@411"
+mS5fhMpb!hC93R%Y+qA'+I,L![h)L"mS33*1il,1U[2R98bK+Q-@&BRLI3hZ`&m$
+('U'SB@i0H$YV3`b0Hq6P6Up[m+(GZP-Mh&q*`N1bQ6A)j$2p@"AaA#)bbGb"'SU
+4#H*I+X5DT#IV"dYYSi91PF'F9Z,E1Cd%0FLipLfeAEqe+#rDFPUShP8$@Dedc1F
+3BBe+R)A(CY,[h"kd)fi6aSZc''Eq1M&4MErYK6`(-[IA8Xq'G4q3!$KBcZT)9'-
+1#c*hSf9K*L)[S4%+ceXa)%i1&IEZ68U(bq1*ImFJN8"HhP,Q1+"2rkR4Fe4@ZFL
+EDBJe[ITQSpM$EN0li1qUqc+U6kB!(V)MGrQcMD8fcI&iNKRc8&'rA`aSNJjArHY
+eJTYP6U69-$JhR%1[*lkX*)N*8KKcre5!lDKpeC@i*%i8LJHM,$9J4Pq9VlNJI9m
+B2`jqqlV@*d%%@e($(N0+-XlBfme+LT9E6i`X*&Y15&q,eJ"c2DN3-F#p(II8(RL
+J9AeK*MSZBDi(@hX#LVb1JNLjC,8rdY-@D)U-N!!h4!UJ'CT)FUSr%Q"c)246$V*
+139RmZc0J!KYA)1d[K)h@$!b0%6Y5r9pjP)2ji-"Z"eqP8Ti0Dr8A&$q3!)PYHjj
+3TNlT$P'%I[Z-@T!!d#%+PJVPi1YHqp%A#GDjHqe%HNT`2&bk8NAhL(VLXM%#68P
+i(E$04a%`)6-UD3@N0dT&(f)p3jk#))9BiXDf-QfH[S*(p`R9,P5,!"eL(fXVrV%
+iia'B3qLJYU*mrR65hr&0@ASCaJ4j"LP-3'CKcB&iTK)Nc&&ZV!,i*hXb3N#ha`b
+K+0Bf,%A!amlLQ`(ZYI'RikmB*J$k)-LI6)1ND1dADL,,l02!MT9D$`S6#&jlIi&
+C8f$#lmLb'&XJADa"fpHZZT!!r#T"1d4VrTNJm9lHHcbmT6T$Vp[,"(ELZMF&q#M
+Da+cQZGhAA")fqQUHGYYVr)&JAAr++qbU"[G&jQqFI&-#J[2%*TN(Ah*P))"Ck-(
+fi1eQfjhaCcTM!0rU`)NKcV[MY%i*--PLN85Qb-Xr+(H1b'dc2+(hj+ZI!E6K#VJ
+ViFYSef&I@2&ml84ZPRN5-ji1K$AFNZA9fEUHqL!@MU"BeNVGc&D*j%lLb-4(6HR
+AH%4HTj4%IA@9Y")38B%kZjkr'3#dbb8XhNh'4rJ%3i(E0cP9F69YMH5#iA*+![0
+'`8HSLUK&-cK3JSL+CJ8$YF50L#dkY%Lfj0[j4M'#frhi'*+4#Nf@K1QN62QJ',-
+)0Z8di$48XqKXp"qV@br,ZTN,r@5K-Z%)5Z8`r$%%4ArqV0&G93"L'E`"P2+VcHT
+K@NAQqrST*,pCZ&!M8T2AM#L4!4(QDUR,J%#jB-UhHpkRAXhZD(p+RacXlF*p-d+
+,Z!b9p9Dbj"YiGhk$,2NG2)#IX@6ClDCf[&bEBaX6495iZlM4CCQcRRCM3`#j#NH
+AArZdYViETf)K4JH4d6"#RrL+3)h#)BV4rB8L4D&(pAa3QNGpY)T#@(@ihDFf$#a
+6MfIKVP5+"X'!)#55-9Jl!-VB-2`0Qc)CcM9'Aq@+1S&q94I'DY$%5ZB-KN9JB5d
+-Jhq2[-Sb8Cf9hVY[6#CqQ9$Gp`**E2`0SPb(im%`)(%Re34'YMkECZcPdp2CrRS
+Q2Jk'frFI('cY[4aSXDjN1,fHpX"JRC8mfcb"&h5rU%j3[D+eie6kMrm$1@[VDJ(
+fa#,4K@*pbhq-@&Z4`AC96)3kYjcP0qS@eNr`FA5XUl%LH1pmG``)3I`&[Q4j1-j
+E!CY-I!P+BHcNPA*edH&hHc!2Mqpjpl-e[Apj'!2Lk"5ErZPlEDiUFkL0dNE"q3N
+c06PHlEPC#PD2PRDJ@,caUZ1"$eNV1#iY-Cc&13[@12MVR4D+j"2@h`1L&%Ih3Zj
+i8'le@dEX,685dcV&L!%Pb8dTJN1GETB9e4UiDeibTEBmGaG6id`[+LChaP6laZ$
+Ai*L@k8Hlp*-,#@B8JATe(UP&6(S)-5JT#jVqF*h#RB0j#pbGr[*-aXbEI(RJlP#
+4DM[iA+iRed8KNj9[H[`h$*H,1&(`dTQd$CRQlrC-"(UUcqHkC5TRF-2VN!$GH%S
+X'ap@Z0&NB@IUe`FL#BA+Z+#041K1!jRb!GkYd%Zbi2DbFCTfS2BcHF`0GCkGjJS
+eFVA+MD5)qD*kqBZ,lDA)*4FRk5mDrf$0PiDa"BJXFrYl0*PrlUkf#K)aX#q`UPR
+9,k("VATE-4Y$Fa@h0"aH*EQ9UTmT,QiGfQ3)5%2%`#,5SRY5j,JB!'Q#kk'2qDR
+3e)4B#-rb4,`lp"2E()U5Hf*qNVX4YpPJC)+,ceJP0bUCC5N3-bThijp'b[50AGE
+3bCYNVTfIDBa8E608%jLbT91iLrj`c$'ErR6N-%l9iF`l9e*GjA(N%KGUpMYXjl+
+-VeqDM@A6H#-2FDGm2dE42jNj(e-IVhc0Gh+RH9YcSl"4S-H,jcPa1f"Pl4G5,eB
+i!U1pj%eR*)0m!eJra1[QUES*#N48mC2H9,e%f-4LNC%L-EF86k`6a*&C1R4eTkP
+HM3UXRPc,eY9"#,X6)hGb9NTVKr1ip1ZiBD$eJh9$[Eb[E'0VYbHEJk3B!6F`qYY
+[*PhQmlk9RF2GT&l)'c,m9(3qc0IUc9$Jrb`U@2%kf$fA9Ya$G%h`G#bUj&2(aMm
+c2SUH@Q5'PKkLM""NUbGFP&M@,kJrRBbJ1'h8L"-#N!#cr"32HK*N'Ik$m1DN[C!
+!+@*j$([-#&VkSk(lV-G4$QhZa6SQrF(G)&[cB+JXAffaPRRN#R3TI#BS9V)Ai&a
+EI4&13m*k%PYl"EcdVj!!!Qi5c+SEL6KlDed@N!$CFMae6+HSml"*M!1m''+b`C)
+-VGaTXV&b(fi!T$4IEm)MM#9&U)AriMG3$LD`633bNjeHYk4K3iE*AI%QAYR146,
+bf#&pBBA9-@r&Gcl&mX3DD)8Rf6IEFG2rRqQrjU9R3ka3B-plX6C'9G'Z+e8&ZIj
+[MbT!h%XADF#m$`If-V9TmNf@Dlh'd)["Xb-&k#a-,M!bp0L%Z%5i,QXMYIDY5Gk
+j[`&1qMREc+ir1Y@VG-m0NRR-CeG9fC%I3r1'28#YDrb@iBj$Z5q4ASYl2)fK9@f
+G9$mmR-j0kM%LbUqNBSZGJp(,lK5@L#q"U8LFqFFL0"E1DAD0NK*2lAPeiANHDQM
+c-Fma`3&dASDScfH[JcEmQLY*3e5kl#hVV1abDf-ZT&p3UR"RMrRK-R*1$m5c(5h
+&1CT,6j)IqqV[9*HKkHRJh6)Z8H)qVfImUplRqiUAVQ9FCE[Q"Q%l2GE[JmBmD$'
+qq2XkP[6AlF$$e8Gl311PmVi6%8(ISKYD,0M-*4cTD4BBj5R9C#eFCAm+82YcJVC
+!1cP!A68Ph00h603M+k+&VFf(X4ID9A$E)#D*)I,(q1*@H!ZHATF$iCaE+Dj+&'5
+l@JQFmlE4P#ND`$rr3Z@)m3A#jJU#m%!N!+%)j)0j4DU6Yid,[5lN8I9BXY3fAB2
+6HXfT&`Hl&@V%V%m%1@X$DdL"%!(fcTf$RcG6Qm'8p`l38f9T"VpZN!#pR1P'([+
+KG-h"-ei6M)K&#Gi6Cida1rl0d-"i$JMpeb-,+RB'!AZ6VNP'bBl9pJIbNiC['+0
+`(c!`KD([*)AU+3NT*#PL6X0Afc#U499GiVSQ%1&*Zdl[8l$[%,(LEaXUV10l8iH
+!'4Z)Q&cd@rR5$&*pEJ&i(%+rV%q-)SG[SaU46E#8Em0KQL#+2K[B5(ieAMhQ2h+
+S2Aai!UEpPRkdMLR+%2&fed$hPC!!T1@ZUG@&5JZmEHP1-pX$Qh@+fGe46A(Zj[4
+fdL#%bc6PmdV&![p%%#j0#MrafYfRqhkSFBhAjp&443j68EHfZYDQ6NlLbI9a6e+
+SRaiiGa)D&'LPIK[*r21pfU$4E(Za&"D&-Pe&ZfV6q,#NrD82e9[lAL6IfVi3-Em
+Llj-h`P58PL0ZqJ911q[lBTfJ-DB`(2pMT2IId5&6Ph),8CFA!AqabGL!0K4[F%P
+@CUNHESp9!p6jB9-8cRL$-&VbH93f,D)CEX3[(rGlrF*5q-kkb953!%1rUkM*e-`
+$bllU$kjV1BMj'`HcF@aqbbpJ,pdN+4hrUcJGKBE+c0m&rBSd5"*,K)54NraLNR3
+Kf0f8p8`AUdplkcdaM4'P&a"#,!CFC@(Hkp!(llYjdC9Q-!e0D2e[aVNqHF"2'UY
+![T3Q8eUQ,mljUL(4(f'idb@'``8pR)UAMb)&PKpk5QEBPKqF'J-F-Uf1m"CpIhF
+lV#b!(+-C$4[L"jJe8DS8T'4Z%F8%#TQGV[fNdI9h"33GrVY4dcScdiD#IV&$ae"
+AR*!!&LeS"`qc9)N1CPlBrcL(@2KjQU0Y1F'1b&+",&h"+qX-X6bkTDU6,i%IkB1
+r8jJRmdV8)fI#Rjm&8'9lAMMl4BV,+5bVY[QiVCF2F4T"U2TPDa$+&'U1rZ@8,,#
+f36BDmTTV*B0XU-c((25cC(m9h"(Amih6JJKTdFLe+@59Rae9+8b0`9H,A+kTq#j
+2*5H6-)4lAYe,G1L[,T%p3$QV$+a0)NJ3dXr1@$QjG5I0m`KUBKNImEl8dTk$`,3
+0d2ZG@"D,)8DeKL`FjF@RY'j58,#(GH'GYC-f!M2L*89!QZbM9+Rp5jaN&qXbPqr
+)rcYI[4dPe9[l'qLe%A15&G"5`[0QAYKd22BaSip`*YI%VfjGcZH*346"Hd"S5Y0
+TSF&elfp8hVPBGjlP&ikkXKSrr8Mfh9"Y!Gr6U@RJX1F&'!5fNb#ARY0D9&*%3"L
+[SbQk6a*[+hMVPicLML+Qj90lJQN6c`!YHQi#9PU6aD"'RA%'ac33SmK[ca-3'S[
+r+G$4FNhYZipZHJ6(ml#+Ql-2L[Rl###J#RV5R)lp0@aAA&qVd"5c`p%H3TmZkl3
+UG$Vb6$&VhmCqKX6X[qYIf#Jf2LX$&M2%0LG-mU)8Le#!@bdp%39rQl$!9f)&8T,
+qFrKcpb'NhKmKMC!!r0ALCMqc8FYjkQVdUVV0Vp+@66G'h-MF3CLr["c!hI[rZMD
+efF@RCjcPFI5@TDe+2$fFM2p5ID#h65#FKJ'CI%5B1mpdZ3'IKr2(#5&,FChQfZU
+Lqj8V*0#!9pZET449f"'1#$K(U,%Jc'SYI%T+a1TAZU8dfH*QEBaE[D$$(6#qe2`
+*P%`lkFUEcDXm,2Nm('+0%LQ&cQ*%Gb$*Z5ad&S%,MSF2C)Y2CPT#"lDCSlk%ARV
+Ji'ZSCJ8S38N12VKHB,,X`HY)LIh-5AM%AZhK3%"hL&KRp#M)pYT'IUAbqLhQ-&B
+QaARY@-9ZJ(-`YV@5CKi'UJ0@EA5A0MkLUB)JB4$[HDH5phQ2fZ'md1a`%*),jpP
+VRBT8mh'M5R*ef%%F&&V0b6UEdid,Z`6YXEXKHYAcTAY9-Tc95bdl-mER)LdET31
+2mhJ@XfCP0IG4jeSr0ICrkH+Vp*I1!b'+DJP1)R,Qm,l)"lR8iD(3BMb3!%&H4QE
+SHq[XM$M8k&@Lbl8ZVJpCjAC*[HicMr@(*!3L3*jE5&UfmkGb5&A$phSSjR4"@`N
+hMqK5Q2m$0qqPL&"eP)Rlr++C6fiM+V"#ce&1D@U(jGpc-MmQ8lEmTK@VT96@q1I
+kCJ6Yrc%'Ap5kL(8i0Jimm&[iHN(53VUeN!$FYB2b-rMX1(+dU&!A2cZZX389V*a
+'L%2N&6c4!%HH+)FIbGH+A2E#$YNh-TZACQjTIQekpfLZHA!Xj*!!@p@F"eihUK$
+lPI*T,QBl'Y[-3+jD#qjAME%)emcZZB(UeHEXSFdcSC6R@,2bZ$k99b!9)CbXVjE
+'R8fi&cdfRPIL!deBYF`(YZZC&JCLThC,aqCfa8!e8[Q[pr-,r4jlZl3#9qYHHYb
+a$R4q0Ue@1M-ec1ecVHk1@C!!`d1I2hL-VZ6e*d%!#Nh4PY(I4Lp%#3M#Q-IAll#
+,U3M!i$#$fU9S%-RQHM5!F-&L2ZZ@H(jM@r-D&hp5V4ebZBIJL"*%!49S,lh451[
+Mc`d1R-p"@@01EJrKk$`(0359&YbVUd5J3EJd3d0h[ST21XRYl[+V-1fk1aH@A-Q
+5clF$lb*L+Amq&Je36F`Y3f!ddRQrf89F+rY[X8S*1#5'if4-ANlSbhQS01%%6'A
+"ld@IMPFdAHppS4*-"*cX6IHL$[p6E%Mh"(6d4$hATYc2L@*)2FKceKdEJG$I("!
+%kYMi0V*BZ0-XmkGIN!"Ip-Z%'j6(9#"pZ40IcZ3p#jAR)La@1H*dRSKe2BSaU&h
+k@%[2AB@r@"8N[T+63F'8TZ93q1$DY6d4l%R(`&jY0PZbra4NV`C'b#e*j3,@NaH
+Giqd[@1A38`EZc9HIaCA%B`CXDTl0fHkhH1+Q+1aR9"P,8D-9HDpiNdC([#SNHbp
+!$UPMLNlQc$cH5YNd(MC6BhkBI'lV`AS*@1Q@9qU$&eDEH1`!53B,E$X*3Er@f*)
+FT-p-2mUc4l+%53ilq[Scm`MXFFdJ!-EJF5+99b01ac2Q3j[Z0A3[R9X4"fdG8AJ
+%!,DqR"khqFDaBAUbN@aKM6A)BSKaFP%!KR0@p!J8c)TA[HFB)m2U$MbEH6A3Hm-
+A$KA55HS9T2VpZi)h+4CJIA*Hfq8mUjXE2008Rpcb3c[YjcX4Ja+*m+Z6dEpm9e+
+S%HP'dPST(#CYIN(STN,BAij*ARC`"H)Xq4$`!KXFN9GJAD3DmK'SpaVRfa2TJ0G
+rTR%Nf&k'EZb!S'3kp6N"PfX"SC'9lj&DR2J3%l906SP")HF*I`$PJf(lA4Jfd"M
+TRNAiP"bK#a4&,T[ZYmYY6&QrDPLBF[,34[f[)`S8MTqE2VhE5VR($im,@(H8,MZ
+JV@Yp5lPMF9+haaEj+YaEhR(efVUkGZYaJ0!G!G`,IZcQ)L-'ZkS(,F['bEP"ZQa
+59KcQ,Nl5rBSiTqEq`-#TV,+8RCPKLM)q46jN6Ga@Re"apEc'8pLKmZmh`*!!Pa8
+38H!QpAp[T2(%QbVDF[0*FjC((Qaj*q9C-"-[CUi5X1HM["%lDZ*+N!"lmU4'8VP
+Z98SUm#98-&@LPDmLh1iRZ8M89`+9+kC,ZNq1Qk-`B`m+'p-lRp#G&2UC,6&0p1e
+[$5"p2II0((jAGBq$Gq$cVL!Nk1Mk(Cpf@ERa"`+`e5)jA3KB@NYPlf9eY5Mr%'U
+19m91BEqiMPT"V"[(N!!hF!ab,S2FRJUFPT*G@D,`+C5KrdFleiKlPmdlM9mVLeQ
+9ZAeA5C!!'D4R26#IY*1Tm3rF1l+`8a+Bk4QdVi$Vl[3'`,8*#XU@R9V'@-Ahe3i
+pir0IHMF8e-2NbF6i8NPLQ[A&UDkN#d5iZ5Z,le2Jj,2`-Dp$p!0V8aAR8CB+GVh
+r&)C$RM2QV["!Cl16DdTbb%i$J`HUir@B"&!l&95235lcp!Yb+qri"r(4cSmqeYS
+`TE[F0"+f*)1Xd2i6IM0qGHDBJ4"%@HIk@r52!49C#f@@eGQpdV6(`L*kCQLdciS
+8I-YZchqAY*5@KIM-bA+JL`a-TlA6T5`R9$I)pFf!h3l%A98"Td0NF4`0p08LkD[
+3J)GVm%C@dID-(I#iH"kXSR&H+2aPmSm-RPm2%S[jdPL[T)hZ0Q!5mj!!)Z+R$fY
+08U@Hf#'SJjSDVTREGKcq-F$q5L!4FN6"T*9a+dd#0MR6+NpZ#+iG#ph"B+*5j`N
+VM%1Q@a8GYKd#9cGDH+eQ9Iij!QUk41Ia4SE"S[LJAJ8-+KIXGFS1bc(6@V5f-Q(
+#'UpLJ*!!iGjNKG#`d+fchke3"`fa$&UBKl8'@ml2XjS8l6*1GUk+U@DTT%!qT*M
+'5pXRV%SFY0Z[re(Z+Z4Qie+4-A2[6%VRX1ihU`MD5[3+kVJZ0D&,fEml6#1Y4S1
+1'5N-bd$0J&bV6d841pQ1Y5HGe$I#,E8fFf%'H#H)P`H1eC`P48KB@bqBiMRarMa
+MQP&P&CehN!#[CbCFheSkbpa[YqY@8U*Sar-i4SlQK$P"a9X8Kjqm)+(F$H,@YVK
+`r""i+@RX(SURARfh66BkD"(lc`*h,c9346P18e2[H"b*UeF8k9*Zp@Ia[`k+Q8)
+YV&dQ6QFT#QcdFL5Xcl*[f2rXcR0QD4[%BYMGPh-4!cE,,BqjdqIeXkd,Hf'1khd
+m,MM[fp1UaDdMllp1R!LZ@1mSdI-pL'eFUfZUJBNjH)[[AUNPkDLDZ2ZU1TRr!cf
+bq1NeDmC,l)0*9PHBMkHT2#(@21`rPpK%ZlLkqf"SC!'!MM3AhZYP,(9@m4[10lG
+MR'UL5(0!5VBJGbU6q5afQiaUaI1P#dND3S*ccF#6kPI2cMD#+JR*6kjSI8i[J"H
+R'%V""HBQ9AN3-BR0'+QB8V#IG%rI@NaMp(Q%lJ3"[3eE3!ZYV%Mrq%H1hQ[kC"-
+JJPYKN!#T")c+k'E,U0B%K4IE("`!Kd(NF4jFfMfF[FX-kL%8'4llp6[b&mU[*Db
+,)`%PVS3X5H,1rrlZZ$d[alRdJ!93,rR)6L9Z1QD+M6GQ#0PEY)Sm,rqlFL(YLQS
+ZYQhXYMiIff*,dkd[FJ#+Ul4"iS[pQGL#*0aKKkZp-BbQP3pVj1HU0HY%2bjqR)R
+fRU"%bC5i#f#aRPJLdSqN%9P*Y-4jEfQP5SQD5M80ED,i'%H'KX+6L,FVJhbTcS*
+ZB3bSp+ZNU9fb4V(2Zk2eC49J6iBQaIT"*lJlYAT(p2CMHjC[)aYl$ICCL@P#NH$
+q3UM)6d`lN!!eY[ricam!@G0A(6pb0IY(GqN&kLi9cTbEJmpbc+M0D[5Gc&L`cIm
+85C(IGN'R#jQ#8&aFUTmLk@fqP2N3)pF'U3I2PQDPI-&MYFZjHk@TBS9GhqkHe$j
+#i9IYG6FY,G@FQQFk8AVSE-q@IlKd#SY26QHRfphqTC9qmPk9mPDAKDeiLE8cA8l
+dDK*9@lj0Si#dkMr%IrX8%rhac4(@Z5Kkm'm9phU-Y1`lHKHEmS9`&84qiDC2KYM
+fKkYCK8H([h[L(CAfi)![SB,F*%)B"3*+aieF[p6K#-6XKiID5'K,N!$2-[KE[6!
+b&)FKaK"ifak",&$Tq@V$H1P,&hD#%"+9G6UHhf-#QdpCbXXBj&dNV'qBqre,qqH
+h9Q$m#EYHVV-lUjcbGbPkE6pBkM10pSBFGj@kTCJVHjpbEU9K+*+DEV%+(%#UBJ$
+5pJ26[KM[DbbBr-HGb`ZYij2+[1aCIGFQ3MB"`qh362ZlXAl'Kh$+Z*!!A9AN6b*
+Gh`Z,$beFFU6T!$8ENLUF1[NU@)IEB4rcSKEPX@)N"6f6Vf*a8FhUkVm4B!miD%Y
+2#+[)`B+-@'G!bTN0e[+bN@)3E@`(Gjq%kEeke&+,+T923rhaAN,hDj&HKUYYA6d
+#8[Q!p"UcLAK*[1FTT"!6X4!PYpE8Dp(H3h[2R$fmCjk[F`H'4$k&,f*"R@U6HY!
+-VN!PpqkfI5ImLi[QYd4NBli5N5bUF+("ib-Tpc8cqhbaFLh)`Y!PNN2X(M&,-S`
+h6+$09eP0-[%rEDVUp%CLQ5)E3c+jIlcRAKEP8+QfPP%$N!#)IJ"Sr@HeeMC0YIM
+Rr3V#XR$$ddJ3JYQ`XA&ZL-`$%&TZ)0ladTEdiF5![jQE)PaNj@+[XV!#Df-2$E)
+!Z!0@R,iZSf[+(8N2KSKfemTcYElIY$rL!11Tl!edlDI!I5ULl!0rAh0`%dA0#U3
+@5*LN&(m22+&8Vk(Hi@#GGhK1mYUQkM[IK-CINGC!HB6B&Z8hc2GmT@Kbq*!!FK&
+T4!BKYmZCdX,dblGRDlSYC*eibd1PGl12'SqX)lFI"4)RiDH(D"Z9LL9M-RbSNNp
+42l+`m`6H5UqZ56#M*[G!*4'U2*5`FBjm@mDDADY&!m2F"rmp6"4*k"bjTQB5#C5
+,DHecaGHFrL6i%(+-#)"p8BYd8I8D4SG!aTk%K"Gl'A[Xi&[3i(YNZR[Hd8JAqdH
+2TqLkqpFbZRG$RE+Bb6(r28aUAidY0Zp45+J8KcTY*m60!pa1S0T(6q'I)bSpV!#
+Tm@)m`0G*-MfmXL4&)f&$NBChKA#5&VpeX'Xrl5VV!,QdL%!U5bZUP)$H+"rCU!)
+SRahGMD9Gj2H6"QSG-[)86ML%$A,GV9-5()IYP3bl!KMk+)R'i1Dkbea532,1#59
+%LS2*e*A9$Bmq8I$%b0pkL&Pc3KcQMl40Cq$`2b90E92e+q1cr+rk#bm"SqXkUQ'
+KaDQUXk,MZp(82Zaa!lFh+IH+2hpC4pekk%ID$[qi5#FfXp)j8$LKQeD(HdpcCjL
+15FeT5+GM2a1dTl@qRpQr480'&A[V*85E[%3J0F-NK83#HH4AL`3h2A(fr)1q+(f
+J`ET@i()c23HKd$ImdcZ*D)ISkGlT2+jBJJ&j[`!Bh9@`dALUJT+mD1irjQ3Z[[B
+[4eaHBJ+-I8IXYqp"+)LTKP-@%'IH6R@4Y"5kV'YTV-Eapj1XC2Fqp[`!)J0j&Ma
+6!AF+0@3FL(hRI@fYci(aBl5-TcbmFdLZ,JVk,#S3aPEXB&!qNhN*ji"('UcU,aH
+J@M`+dVmUjelaIj!!-rfN4*!!1+kI@drB,R1IN3D5EAfhbKDU)BfE83"4b$F)$F+
+(CQR`,5'&,BIjV*L)lLqAlf+m61iNh-L9UCR$UXmL%@GHV3[L&Mi23I9bcUlH2kb
+%hTr@m0$j6%22c,4F$l[#l)+DKdlE*4HbH&G9*rFH3e1ILNap1d15d"'GGb$Q"9R
+2$"9[`C@Hf03Rmq2*B#bXYk[NA1PPa[LPDXJ!f8)5'pFd-kC'B&&pamDZ4j3FLc*
+!`prJcI%rk5KI(Ej*Qp@kCNYPX[epZpF5)ZG@fD@"&DJBPTMhMfjk1pT0'$h'44f
+`)deb-`j$)KQ%f'ef5i*$6iHj!X1XLA'd!Jm30AVLa*,dKrYhY58Vd9HYGI,I&m+
+',kcBB%&qH'$30EK2$kP)lKdJDI)La$X+XJ%%h@Zji8j-qM#F-SN'HAQQF5-$GIG
+QYk'q&(aBm$a6"Vi-lEb$[8TBeGVe*BDICZ,NQE)@Ykrf1J#laEMrN!!8JKe62'@
+IqUbMLRVV'#YPeD-k4k+eYFlmIAlhS+Dk8"#Xh3*Hk6LPNl*(%9k%IIlVU)f"f$3
+"!N'X&ll&EaL&cB2Hbd0&m%)Ye&k5r[,U$cL3!-#SHU@4F2YlqhpV+jV%2QY(iI8
+'X%`6HPNimJ'(2G+N&SD`DkCIY[!&Z(X#a[@iALDB$0dl[Lb-C8Ze%RQ(-QJX6%k
+J[Kb%IH8XA!``X-(cjr6EIKFVL'1A)+(&1j(MiLDM@#HYQN,'&AReG3AiN!#j3Zq
+DU@(Bd#BQ+V[1D6%`84l`hjYf"Nd##-Hpk(ac%X[RB[)k`h$T2C3+P-#Hb-DpHX#
+#Ym)FV@qGc)99BiC,E*j,XQ[E)'GPB2CaGY),jNAa6RqFebc4!kGKYiBFUK`6hJj
+,E8QCA'8VK$hZ@EqHrIZ[fhA*Y)Ke'RFDH'Er+A,VGm4l))('D$AJ+0XcY+kH[[6
+pmfqMNH%T+bLNQQI#G1I&SIYQLPDVN!$dL8H#FEV5[H93qMMU69*PXa1U24bh-%X
+`A!Y[Yf-L,QqVM')GB%8&fejeb2DjUSBmEL6FH+pqE1[k(UX*`DJUh@U2M%T-,,T
+bZikFhZK3)h$'qRTFA(9**(iPG%XRqVP`D(DLVal*F9m%YFbBXe*4QMf0mk45!ld
+Rcqck1r(@fHdQlqiTpJ,rDVJ@"Ri-6q30`Y0fbN58!Zkfjf4!"J9Bl,![C8%B2KK
+0c!`EH0q1#A@fiGN*jSfXl&GTI8fk94fSMCTMU2H@Z14cS9m,Fq+l8*dZ&jiM-bk
+YQ"9!,jA`+8#6C5C8ielhE&jYX!NNE8)j,A59EYLUR5pC2$6C8dl,r89%i+S1l[Q
+"XM!Fej&-Kh$+V'm)YkfM)J#p@($l$0-HlQK)SJ(3Sf`14'$Qc8YB'BE#*AAL6&@
+&CZ"Nd0R#Irrq308X*bNhkpkME$9XrcjKi4L'63ZY`VM5d(3#cTTFT2ZHjRcJME+
+cR0VVXZbaQ5Q`KV@ISTqfrAqmr#kKHq+2i"MTVERG6eX-mR3(F+VBrY(%MG(Qa0K
+f[&bK+'PC2"1XpMrUp`ej%N%LG$+4YYLCE4p[HHR)@iM!HV'HUrD$"D@BITT3HFQ
+@Zhk5H"@+KdqUlT@CE(@)dNd1iK5l'm8`ehS@,Jec@*mC3KY!SF92RAX!hj%LK0d
+m)25S4a'Z9SFi5MZ#N5h)EmYA4%QI@r',Z+3%l4hY3Q'!TJMJ$N)-9$&FC)G&Hrj
+CeFf*1ZX2f*d5&1K"6rJ&%@#XC-9LjAL2Br1dbRJaJD#RqCCi&lpecB6dK@CBJmc
+%`'1V5!4YI`[hfJpX+h'3!#I)"8PjqLL3!2#*fhCcT0+0EEechUr&qhGclQZ8F1S
+EHE$LJ$5PM$Y'lXEA)R&["CEe1TfaUdLT"Dq0ESGchL`KSEKdIZ9DIkh$N!!iT6"
+"h9$rYcLLQlAT8&'aRDdbY`RrAMQc*1EZAeeZ(6Ed`[#'aAT+I!92""G$PXjj1A#
+VchCY&Hah$Cc-Adb5M)06D0N'[UFZ&$T$TXZT!R$)($F2dAmD5q4aZD+N-fGHqhY
+4VMSP2U"af0%#PFC6"RTb%44[+NSPLqaZ5[c!-4L@2p#bPK%,bDU8T[UB@@D3!"!
+ea()2,J)Ij0cZpl*J%Lf$1,NGX[686e(IF@+HPU&)PLqfk4i$I9IArFbLFb1Ci,+
+HT8cSrcQNZRih9$('SELphKMTcqYc*9mi)%E[3RQd9aA`Mk#d,qmSSGcNi4X(B1F
+b1,i80'`0@Nb#G)r*#qrrh0*JP82S"2!62Ai(4)1[Lh4%qlK9U,T88(kdH3@!AYY
+LeKcQI%e*)+-dBh1@,JD`qIfJl()Yb[3Y9"J`p'jj'$d*6%AEb(GRh)HAkSrjDQU
+QJ6EqY([D"a!1([LN@RrBc%#h@6`,#X[kCmF`EGc&SZ5A0KAM6LSFC$)mAq504KD
+bQQ'q+TrIRRKUhhKB#jiA-hTSea0,T65mN!!3%mb8f,@%p-$#!A@1#QUh(N$3hVB
+E9(2fUXdTb*mISl$a0$EmY6Pc,,MK[8BKDh3Fjc1jS1T8)brb%A$,qX33L[1k[NT
+6-@9#QRFkFiFE8YGS4ra(Xk6#&pFU'0NC8BX625)Jbl6DSSK+N!"H9QC*6UiHEcq
+55H*PrjXK9IPC*(6M5fr`d2815AH9(C!!+krVppF%P%96'*cFqaBcZ0KP68k+jbp
+Q1d,jM8eAbFKj0G,X18*%c)YX&Vj*YJ@kDrA604rkbdLX,0,)54eV!iqECFcJ3CU
+`hmd*K$pJ`&0Ef[D#r-fPV#c!05LI[EA,2*cq2Alj1R0qJEU#c95$8h9BLp`"0RC
+2a!!"4GRQaEkTVm*)5Lj[QEaG+r%9*ak6G'0ClpVakBG%*Zpb#fL!N!!816),)jX
+#eI89Mlik*`rTGN0lE-lA@aPCh55`[eS2kiM*%P*89HRH,5'pF(UeG$[rU#d8XRh
+2bRqh)j4Tj+m*@RclAhYbl4biD&AdIrhGqMG8$H(A8qBiF(aAcpGV%&N20T!!T%S
+,R#CQJcM)V"aTq`S%kaY4,(9#Gp4a0iErQ8m#)83Z**[1cI8pbU6,RPbZ$a81i'i
+hFTKaf,mbFHJLmJMJSa"M"%cR[l#"%e)5EK(X%+!DE9M@"&3&'X2E`pViK&LXimi
+,qb5N0&4D,QAI6ZHpX4LNQVU@q4+0qcX#5HV[F@CJH9ZpBLBUbZ8UPXF'360$Y&%
+!QB#*)T`#h%lGD6pY)l'H-aUijaR3&9HE(jXTX1hQZ1b%le,-`lLP$3N[8*3`CU,
+5L@2F$5cXNh#VJIp40#SH`d-q"!IB"`fDbJm(j+0V%Zk0r328YrKBl2jUUNfj(qQ
+B`,f+[02FA"!YV9$jC$1R$X'p[i#YQT(Vp,Qp%cARB'1UZKP$kLa`(kjKKKp0q,%
+X(25UA&'3!'lMBq%+Hpk#R*Sm-Q!)e['99ld&i"Y-K+ZpQNK#8YHk%$'5XHpE9lP
+Bfk66*f35`A`#M'ZX%1[d"Ljrq%*HU8`r+'fJXZ4%)!BRT'qp-@8&CEQP-1+XCGM
+XkBLYrPi8CIZTeX9qEl`8QT@X$K&-1rl#J+&)E[C46I)&&*FmC$9X&BFcdh,VLdk
+Vi"Q$r$UMUZ5@6+pKBiNY+mD9)FdJZCR0mqaKiJ#&e*f&6,5[+mR9m#0JVCmIaA9
+Rqk9UeUV#i&H9ZFb$J(MIB-2UCaGNd8HR@'2b2)IlLmDE8B3KS+94R1R#A(r@UeE
+#ENk-EeQ'-f(dX#l)680lS5r'VP+LE[HAZNilL)9+(6bV)pr6Nh+*'a+lNpBfJ1-
+Q1#4[+)l"6"D5&&5!E0R5R,'#$qRS0CTb,Z,5eTSJQR!VabMK3NP-5bB!Y@GICb(
+KArTVB"6l@5CPS*4fiKbpPiCfD5ZUpk,FN!$S`1q4X0p8[`'!)X`bMihX0iSQ0jJ
+'B3[D@q6q&h8B`cP'0eqC#@80c4TH(T'`+FbA9"Ii6YF[U9X4Jb*(RBJ8"%iK1Lb
+XVjU&!C4(90T"'B@THC'BFKJ@(5+)NEPe(E,#'QUYclMah[#F(KP)0@XeIK6,Ya`
+*hq-5CG5E,D38Rk&JN!$TR-29PH1d0&c(%V2d,&8kA&(PRe'9"YY'6JeDG#pQY9R
+Ba+F!XA8YU#Z[eE'rRL8CZe(fb[-l)iC4bBSf)[`FD,!NP#4S-UC!M&2R`b&(hR&
+m(rSM"fj5,4`9&mQ5B!lJ)C006F(G!"cJMX'5a,ijMS61R'eMHK1a9kTPdH#Gpqd
+NP5jJS,+jX!+H6U@1,U+k*lSrK*DI#NBjlS9,,(hH0N4$%DY%HB)+r1h9%X"G`j,
+IEqfh[EB&5,UaHiBAGVZM%b(0GNFR@2Xm[BBE)jNP$@-fK)mMZKp[ENpJpNhm#he
+Dqh5S%9r`2B**kJjCcF3Nb&D5iAAC8e@`YES#PfY%SR@-$NdB4Ra`6b)r"9#h`jX
+9MDbGiZLj%**,j)$iScQ9kC!!iE5Ikj!!,Z@I6SM8Fr"!(J!A1#EKCJbNNGJkD0S
+cMa#NUEqkLHA0RK4mBJQ$Z-AYCNjA"#PpH#cFNRl3L6Kq&5%9,6Fd'%!F6-5QR@L
+hQ"J8abrTacr&jC&aE$rpeLQ3!&Dj44q6*BRGX#f+I)B0RR!!FB4C@)%GbpaLAX6
+mGFZ+C6e6!m3ML#&2XVD"TEm5Z%'(3"Tc#HkS5&+[GPqmBTX5!bIXVRe60mMi%S1
+MB'a)G'&ZErPBL8NXEf4rhmJr`[rIKN-kb+`*@T-&%99ZU4@$i-8aQ8A,3cZ&"YT
+Yli3e3l-BZP*J)3XkiQZIlm'e55D[bXNfPKM9P@bPb5KaaAcTPJqea,l$-SJV(%8
+Fa`I(01G%*$P9Q50N8)idi5aF,i$R9#kY+3"PSd$Z,AQ-FaAU,KV6#i8b4K*5GS1
+BV$BXi&CK`B5AcUjFhfQKSm[qXdNHYiINk05%VA2MU)lFfQZYBPG$@"!j*G'R!6[
+)&N&8A*XCjH@A*@P3rUc5VBKkc'5###EV%jPm2FE"CDh,+k44(e4LcaBEE&#Mf1Z
+RFFdH&!6c96rbFNleTe)!-$Yh0+,DSd0kQp@D32h9IR9hm'kNESC5AXqlPKrRa8$
+8N!"FN[BVkhU8!kB!!flZ!84J+U)CEAcQpd'FSf(!XVh@ZMfV!T'XZ4E!`d3[$@0
+!J0qec@GP4#9"Q-M%qiN-'344e1U`B6VIm'4MK#A[)"S(a8&j2j82UThrT195GbE
+`!,B)QlaFYkZM0LErJDl[!%"l5,If-+0jp(MF)`AL2mSEEF8%IKcCkpcL2HN`dHA
+$jKU!YG0*0hYSp8VZ`AR648%D4JS`AJ*Rk5`p04e&&p3jpdK!4,[$4AHq4%lfa5f
+5GIM,Z"(L)&9dcY3dQ60$8U3bKdX4TB4*4jr&m@p`BYaGCab'5K%CTPPHA3YYd9N
+Dmh'-M&,Eai2l'%KXR"JJmIA(rHJ9aqNd"-I2FkP+H,Q2bUhdRDSm(b[c(Lj[A(Y
+8&S"R%1ee4kPIGDPL-#ki#PF9a*E6+2#jQGVEK1UP,G1IZFLlqPa6GFD+'%rfdbd
+mRM2b0cFV`'%#NFiL-4iL28F[V)b3!21)#P,Elmf2+k`BelE%P!LId32A[A"biZN
+B-Vh!G2,#m[%lm8&C"pP8@N6q#D0LZKbEb$6V#rJ@*@U['dcq*5LHY,E3djkC(KX
+YH,IECpbm0i$&,R)D-mYLPRN0&rUACbei1kFAq-BG65)ij[5h%qUBM4[)(0MQbcC
+pI6(-Y[3S1J5mPQ1-YIK1$rQENLY*)IM$1qEI#1`b-cfd!9PZ)ijS3NH*bLl,@+@
+66Z-bVdU$iSbDUpIm8T-D'qr+Pjm`RpNhbHP@@EV(&"KrK-c3'AYfGqliTL9i`&K
+*#)UiU9$,eb1SA+a&!H-b%-iR1qmdGM)q1)(DURGN[phAp!VJYq*fV886A,U[m1P
+)SFp*Li9eLHKLN!"GJ&NFVD,4jA#@(IcpV(*EAC`Le%!Ml$IqS8TNa*28(P`!krC
+Ja43,kEj&L+YTDF)'(KSplV%cN!"[r[#f(fpd`rP&d)mR22iUfjeN9([8'SQ%3-9
+D[,Ai`1jFC@PrJ#DD)ZZfl%Cb*p1[$9f149Qf%CjYAq0SIk!B6k8@@-%cd'2IGDp
+E4'Lm$2VLjRF'*V9a3RXN*mEN&U4#Zel-9L$hJ2Nq2$G+r3S&bQ32)#6Af$IfMLN
+8dEQCKT2@@"dC*mXGP1RKkjPdk53HR!$"0kqrZ5GFMMP9"mdYYZr1fi2THGDIZL9
+HChH(VRL6pX%l,Pe,rm6SHSq'$3e@'cbIR-VVdEpd5DMlC5chp-#fq1eaSh0aZ56
+9ZRdir2Hb#h*HSY"XQ$"hIk%G%6,PF@X@J$[Fq3JE,Li"1+"R[LYhHG-0bL'Kp3$
+$P9&V"CfmFUFqh858VUNU$J8kRhl3N!#cJ5lTJ$4!hF2IfK'EdY"E9bGFb!NmTB5
+6kFENRKr@R8VpQ@"ZQ9iP&CpLm24SLF("3rdh8J,hGl@CUDbjlp+0pLX*rp03)41
+lCMrZdQ"2qH24k0k6F0Z8rQ(alfN00l`T#-@3!%#8)UJ9GN`G6+lfAj0Y)2elCk[
+LG@J9P$)S#1X[%,AGXEiP5")!Il[Uj-JFI,b2hj@aL%lF%f)e%CBd'f)PCQC56QI
+8%pVPjT8ZP[J'0KqJQkCcN`D&lqP%K'22EP32B)I!lHU3!"ZM%jjqliQrpbbHY,2
+I+rS9'$UkRNI-2JSNL)1,1k&C@5fTDmmaSbh699eb[Rqddc9rS+V8@$([AJN"mLr
+Ir$aBP)!p)KTEI3,ME-`U5+9-h!i*JYDeCHVhN!!CC"VQdcYYlF34kId&aR(,,2`
+3UMQ@k&G0[,&HY)LJd'ipGpLKiC!!IiVP*ULH%&`Q-(+Y`2Qq%PHA"P@AI+IU$81
+A#Glm84J9-TM*UpTl#fAZTibibaSPk&U&r',@VL,43A!I%+l3md"AjE-VfcrEa+1
+B1*MZVeH`19X41rm9+FhFdLIGMZ-qGKG%U+RHBKkMUNmDaA@-*LY5'`1!mV6X6Cj
+P34VfD#9HP8PZTUUKkRHNAE+jcl+j!'q5Ribm[JA'404JfrX0$(jDbb&3dFZL6'#
+r3N0lC"rY!q-PqB+SCkLPm,39J9U[e[F35aebGAkED$3&@d)3"8)8#c%DL(4TdpD
+pJ88M&9fl2TrGa'F8S52"T!l1qD(C+Y+"EEfld#p45k%'M"69Uja`l5-RE`2A+Um
+M%i9k4lHS4`9aZ6JZhYk2%)5%B#RXM1(M2kL[TZBqY'LdC#Jb9S4K5&p$"!@NM%I
+$#lqT'P1L%%"f[le&P65fQk9+FP1a&ZKPdXl*LiCZ%%Rf![Xp5ci6BR&AFAmm5A3
+b-1AL06I`%m6I"0a5c#BN)k1k3k0hU+1"NGi55P8mZlIb`Dcp+V!IE&3qK&Dlfk%
+NqEF-P25eKGS-)T!!@m*lElX4NR[pU)'9RJ3a5,)bGhJJc$)4`NQA)LNjqcA#fmP
+pX2T+p$MfbU*pVhjfF-D+D)V6U5jM#qbI[ZH09Ti"RAdb%Vh`EDZ%UG3ebTRl08B
+6(rU`YS0BDhCY29Z$mfV#SMM2UUKkf)Dlc2`GSqYC6e*fDjPKE'13!1TeccQ3!!)
+39HR9K[MD@A6,$UC+qp!!3eeLMB+r)E8R%2!)4b"@R91aPrA3-"GSTPPY!M&'8h0
+iF$PT$1cd8eJ%9ZSBUC!!TMDeR%aK`%bTmIJ4ffBS``BpX-MH"m(QC5'rPRGHUm`
+RH[Z-)"Apj*@ViU!HT1eLGS@UM86b',fL9%M05PM[YYT26JdB4a,E@b1Ur&P#0[D
+c#3%L5!ip-BRDb)3'#)H1,*@'6"RcUP9HVrcK[YTUfUPR4lTXLrY-hmEir#GYrY1
+p5+DZ`FUpfeD)VE30J!CXIQ(C%'rqlL2hU93%P5$F3cl'IE*c-r*Q-XRX3&)MhAM
+19eFY1Y#MC`F9jVX#YfXD5)8*TFE[ZXb0epj[TFY#KpphGDNDF5q[irJE$%,54iY
+l'BcGlJYSMiac8bFk&Vd`M,4KqJJ((jPXYb24j0VBp*+d[4jNNh`*-m6AA"9D['Y
+Nq!Yp5UkMRi36Ud0kLjRer(3+BPk&&'bb`PbJ!9rRjK3r%jfML8U6rhj%+QFq12l
++EXq)19hFh%Vb$&a5HXM$U)0&X5jE5F0#3HI$P5#h#YLNZ0%rN!$kqhDX$I'A+rk
+PH$EC$[c#Jj6MDT@1jMa4%!5R8rPpIljM4j&JX+QaqK)f46[!SM!rVZj-4%(KdAY
+@kc`bFA4%d0X2-UEX5MM,B,!GECM0+@KVkY-`bjT8)I9ji34"lF&FY'`j1'K6aXP
+23p@#lb!8hLiHU+)EQ5UY4e11I3q9Rl'Z)-U#Fqa8l+F$G8m6*5d85BA,X)j84mM
+1Y4BIA1hZ4i+B+Y96+ND4RP%XY4EPRF$DURJjCDiQF,kDZ@Dja1HpRcY,rrUYBa0
+"0dmhVLE,b4%cq&[!Da`"*&3f+k8L"L2QCaj4kDX+S%m%GZU3!#$LPkA2Z0IXYh5
+SMl*`Q"Z6CeP1GU8!ebE(qA*F+$VQKp+pR[%qe9bN1i!BEQCK9!%Pap4jA$D!Pq%
+PENjqMGr(fV"l05+F*HpL[Nd!M`mLp),MS353!0N(Z&U@ZL68C+Y"XJ*p(qBq4Li
+i4UlKl#m*ZcSdLKXL8D",ZH%5@dXPjN2qPN5UjepSS2KH@94f$XTEpl4mrc[SIBq
+X3C9D-9iH&hd!G%rTfIfrXY)4!j%2d0p3'I,23Fhqq[bTNUNBbmfrYNqL3Zmj0QY
+r03%Q#pQAKEIj5Gr3k'5cipJIN!#,#qU*!MR8hcC(ReP'+i9J0G6rjD"'m!Z%VF*
+`j[J2#[UqF9IH&F2(fb'"Kr&*)UkGNH)q%e9-ANH%Z2Q&QM0K5U62*khHZNKP"i#
+U[&rhBTr0E4q(jC[Y%laJ0HPXr66"F9qh2[bPeZP-48-j,5UkI"4XlHh'Yki'Lrq
+rJ1DqK3l$p6[d+V9fI"aN(a"G(&4NpH5p"d$Z"&kF(r4"'RKPpJ@'-[-G4J4dp2Q
+l)Qq!@Ed25@f)6V'#*6kN*4a*J'"e)Y%hlZHX!p-2V(rlbMlq6MX%$,%5rI'a52-
+"Nc[B[#8h8"(Yf#VP-Q9q3`NcUR5F,bRSaR(UPhl*m3RSLJM4DU+LHEH,`2Fk69"
+PPKq1A+`mHG@6,*ibhiXI0D[GN[LYN!"k8VB2pA,LB4S'NRI'*!U2Z+3V(I`(T#d
+ITSZ61qVDPTS6e09c2JZEkdRm$ZeG%a`&Ude$i[M8Tfjp$8!HN8B`[AYVp$i6-a+
+R8crB`"MMf#@c(S(e-)`pGLH'PTq(&#m3%KdT5U@mi%mR9@("0USHkM'3!#@4a$E
+"BeTkASp1P+Y)HGGf6*TAGNTZ60,dXi(m`53!($3%bJ%mYDQC*qN3!c&[HQT0Y[,
+Ti!Zc9E$,IGp%EdqFjXAI"q!mC!022BVAcib!FRQ"HMF[FPcNBJ)(T"'R)T2CCf1
+0b`r#&q9"%k&im8kHMTRq8qQ`r,+#VUbVb02iHT%mm(eEhkb&Vf'JP4P(eZmSq@9
+,J)kQ"d[V5XR$K1alirIpl$%0TQcQfB0Jp+N2#Xl0#!%U"NZM$3L3!*k6`SfQ-D!
+e#AbQa1reJL4"RB"kdJi'DqJ$&fEI@%*(8Gh,)bEqA#kT4i0p,TqMH4FrU`VYlKC
+*U"2PV9jGAR&m+YM&fI$dc`C!GTY&)CRX`B'-TLR61(1DY(cEqFacIYYS[YBh1Sf
+b30G)UH28BBc2RZL&DPD*6$`KLX,JiV1"KQ4QPeeI0P@Z+ThiT$"@"A4,SZTlr-1
+N5D[0Km*$SpC8YGNb($95(')Hbl#,HLhIj5MdUVr"p,2+$4-80%NET0$UQL,*YX5
+RUD6Y(!KAJfH6V0k,XdTbPAG",+MM*(iCaP-Gh8+me2QTZZ0HS"bI[m5&2eQ,ZEa
+!`8!,')#i4Rk,F&,4H"b5#HGrC"Td-IV0SmAa)p+jpSJ2`i3e`1*+%*%QbQ$q3q+
+%#jAP0S'Y%@#+kpaV6UH+IVjkR&'Ba(mZ'X[T1Y(qNY+lNd@&)PL!VNEi3C-PAj!
+!pqp5%rJmJ"F@52Z,hYUQ@X(a1)E(bChE9%6GD%'UhmBhKBLmL!hb@i+6PTqI@Im
+jGTB##N1$#EhmCfMCqP8D,fF"R,Nd-&N`)YGc1%bm`m*A$YUl(N1@U0@qre8I0N"
+GVT(QDV$M,@q5#1+K1%1+rQj3h-K$X+YpiY6TjDL8)bmHD6LMiEY!pT!!C16PX&3
+"ZVa9ZQq5aC0Y()"5L$Np+50AZ6F3Z)Vp0SGq(AZlCQ0b6M+dC!M@UA43Xe2D[Nj
+$mm1rNN9EcaTb-e("%@3d4G32PbqM($bi!+2'!kQq-PC)6$f(D+cYFC3A@J5Y5lb
+B&GTrVr'$B,cC0@FX'HfeCJEe!f$cI-1E5"P0F'18ahMmchrVZ09BTH(iZ3SXE(m
++A`$pI(9q"B09AcmGl591*9FM$qMS%I)DGRERML5jdqikGSJa%af80p@"62ZaMir
+,jk`mSYT9"V@-$0B6kDC"@-+QC'hl[IKXK+I3&`j0Kck##2U&`K'Tk$1q(3(Ud#9
+,p("Cl-eZ,[CE2H`-+C`()C1a+*(Q[LA*T&1Vp#Y(6B2GcMqZ@PEUTdHfi00rcZ1
+AbU@F)Z[)@-@$h+2&45DVEDq#cL@cIi+*4R)SAJimjfqQA55TZJYNqJ0"d4*0TC-
+&"4#1`Vqm#fB9@L9!&'HDT*3X03qUhYQVR@HFH1pGEHT6XbrAj%(LR5hCF'Cibc9
+fc-cFEIYDjS5dSBH0kc4Kr3m3%0XIG0)[I"iHD$F`GUlQcfqc%dLC*dU0Mf49+!8
+&dB2kH8S'"dSPFDZe`Z6NXPP@P@N9p)GTk!3[ccl$hZI!XFM8X[+ifQS,kfY#'pE
+cRBIT9cRCVBaqqpl!Tm'[Ka'&pBNTp(Pq2`-akicQM1*HFI&#qDDlZiD`8E%L-Y4
+`I56DCjLTDK!J466Y3fN(EXc[(pZVp*%brhYmb`8&Bd"k&9k2a#-R&HVA-6AVGHN
+eHATQ`jhQQBY8[H(L5QE-RX0Yc((L)B,0lMj*QDVAX[#iJeG!N[V[+I5r)Z+B@U*
+Fq"!6J#EMbRMCQp[aPj'RZJfRl)Z'VJZ9Tdr)K4piL)h-m+9EF&bD[l!(jhLcCm3
+$p@0f2q%DI38[cN&BPT,XqQfdeF46A#c'V*k$X",#68RXR4`Q4P4jAR(KdTCfQZ@
+T`@B6&&I!A5&KGMYpQac[,SV8Q9[9P,k$68pl-0G3RFB4[#NIB!-95,)"$*VBS))
+h2XbL@24JP4[X9@14435dpJ5QPZb)Cj[r[Ek5(cLM,SH@HUL#3i'ZSr$V1DSU@$!
+CA(1VEYl5$$liNVBhQ2l$0LA0&(%)PBIZ0kI-0(SY,&"Nl&EfqQ@Ml+ZNbFP-4ZR
+ZS+PaCP!S$S!#*42hXc,YVa*H+p,C-"!FlI'-FhhXR"B1!!C8[-X39YZ!!"MADR'
+9faTXrd*,VL[+Rk+Q&`R&V*pCkfp8I0If2m"P`QRlj6i#5,8R"TJjYQIjNdSRJ+[
+&Z"5XFKqJC`'&PYc8bK$a%j(-Qc6F@)CHm5P@*K(3h[NCkHS[,c1-LBPT*JT2pJ6
+X6d-BSp2LYK0R92Tad4`)eSii5241bpR2#&#$ZfC&ZY*EQi1p0YBTB6X2"lc`U+Q
+[`brmH[j60A459P"f&RBGhP&+0Z00H0qF%*!!G0B%F3MpPS0G$BA3rc+KIkk+l+a
+HDQ[hJ6"p@XKar[N!hCqL,,N[[Z5f6[YGpLMkk5Z%&j@-6-p(@VCb"er8MCHLhaZ
+k1'+eZ[hCMTil8UfiRdfYp@kL418Kl*X-U6edU[8ASabHDmKlrqBlQEUmZNqjZGK
+ppVBFAE9$EqhJqCHA6'9K$%E)q1VA6brim"1V,"!#2J"0,Tql1hp1(*0$C0`,-M8
+EXYNAG#f`YPHZrjjrL(X$afG`LCp[h!LYIrTT&NE"CricPN!3C[SCILc"r,Uci-2
+EBRbMj!Nr-8%EQbH&APS'b5IjHZjb+hV#Eb2kh!RLRqZ3!$CpFkUBd'TlIf30hTU
+`JkDVcpd3Z3&FjE(1ih&2pTMSKJ"B-bM)G%"KdIGN&dRPbmJ6,1H(6Fbqp@MhDDY
+-30ejMpX![q%Fba'TJmc%)`eHTi,4K"A[CiJlS[CbemhHp(eBDN!(!D+T3M%c9'C
+1ZSU"f8irB%`m4TEV'MMiqlEaX0mMHba,CN$dX"HXdPS53A'[qYJQa[%b1hh)m9Q
+Q''ZQ'PYM$[N'lefjJ29KblhFDmTGNCA2f*9+SJ"'MYRQ6G#I('Kj0('*fF,CAj0
+"L,1Q!dPB)cbMMGF&[*[M"hmCkFHc&i@D,!"'kHGh!09B$*C0I8be8![Q,M+hpE'
+)8N+a3YjQ[qYa9m3ipL@YMQ)dqmFh&jph(emY[5#1,SRD9cXiA4ePApr5%MCa!JP
+$m)![ZTlD'c2E0D+%ehmRE!'X1hLF3H9f,2(1e)2UL2$r42T!%&b#k5Xe0N'd6,@
+LUTm%SRiRYpiR6cX0ViBM[IDRj9P'p&36A9NZRCr`)(Q$G+%m4KY0UCAm3b6kpN`
+I5+b[R9@CI4-&Q5XG-kA)rZ64Y9Aqa@Akq4V$VXTi4J3MM1VFL*8bH**2J6&Ni01
+HaYPE"(hl&MA&K4B`mDpU4L*#e,PqG%1aG6KJaerPLL,L-F0eYb35'%**%FYDc6D
+lR*02!bF0&MM@`QFbjMqAhq1+Zdj0C)bGNljajDdDM4fM+B4TN9iIIDNJ$DNa5R"
+8-A*C-+`Ij4[*h-!&fAd%J('B@lI1[bMD2!m-3mpdKQ0"2UPQpT*&6k*k3m0Jm5h
+-50&KhX&R3X*Yk5-KVZIMk0bbDUbG'-q$([ba'N%BkD8DEKYJ8(,PXY*,&LIrF1$
++[@'h6N5!m,,dUHM0$%NGcNcShrC"I0#@2#PS31rkCc90I94l3Zf$Yrl9F"pM+9[
+%aik'05LA`2BJIQNG'P'Mh[XjfRYdqHA-VAGfN[E08AbkCh4ZPdL)CQp&E9jJqL(
+p3A4"eZFH2Q&NDJMU4&Rrek+1U`3r&c'jJ6,IQ#+Y"bIX[dmMGHJm!lP'HrJD2i1
+)C@*G[PX*L661+#qfb!m1'"$*@L64ThT5U$B-P25i$0JjYSfZkj9qH%5dYYaqIqJ
+a@eXb+e`'R)V6BKVm3iNA)@Y5c,8"NQ`S9B-E2+RZpHUT4TiGjZ,3#ET!pM5XbGe
+00Sq5(Sc(HGmAlPQ(0$18*4TUNppNhR4cJIAiB!D"c$qEG#8VQi5KUC5p1jNUaU`
+#TBj-h`j21ESpQj14FADh8-$SJbQ5&BJQ,+-aa(RY&`1+[i-dUP6A%mjeSYF-AVr
+XULH"m#4Sie"FD,1qNi+0"!!4)eX4$ZhqP,iU1iN3jL!,Rq*1[KEU9)8*krqF'0A
+dG!)q1b0JE49GAJL4*Zbf)TkP@mDN!fIJi,m2eNZR-J",N!$X",+VJ9c(pj6AJ#)
+9YbDYaaP)CCCcf+p4X$0''2$2#9Re,AiL3ZI6H4KEkmqT`Pdm(*+!(SV@HG8&f6e
+8pT!!S$FR62lHDq4X@5T`"dd@J!*0a+*+M4Apr@NpKphrCi1cD#f-@V@Z,UPISM*
+9EA@5JBN#dGdh)%P'N!#8l,j*NIrJb-6GQNTp%dMSS3i-`0Bpb)JXXM*feDV&"*@
+hH6ZErF0,'LBfhdEhDG,lSlBq(m("eY2'9[l8#2)$q4!0c1m",LRVJ(H[BXVF*k$
+L+#)1L8Z%fU)56@a0X9HL)b[k&)541ZqPfS4DTp5cc`$&RH0QS53&I4C)rUA'IIP
+Y#5Li[$CGe0kDi3'ba1ZE!FJN94qPBG`+LaL3!&q2QD55r5KaI[alAMpXPafH61A
+&1P[)LBXE+IqHd+rp&Hk5F2&S#lM!E0blJ[AfCfFCrUc$Kr!FcJrpjl8UQlhTQ29
+G)(&iqiCHC%+T0[a)3+PQRY6c)ZBH[$[6pP1,lFAUE4,[I)K``*CCGYS3Thh,N4[
+)NA1%eUTiKdU%$cjUQ*E2lqGT5jDE2%V1&Kl4LirbP!hqh,FaikiTMkqNTc4Am(-
+*3fAISjc&3pCBUVi'BMN'm44&mIEc'2UES"jFk,cA)i+K!8!m#hSM9*[%mE+1Jbj
+B5A&fmGmfJ`lqYiZI-S@*4JcpHMY&&4J1Ch6JGQej"*mr*4b0J)hHkh@jZF4Dl4%
+`I#kMbFVNC*!!FJPD99Tf%VJ'BE$[hTr9Q!dMB4fH#&m-mYKT%LHlCamS#-c`bpd
+'9XQ(Kk5U"p+hf,FZ&XIYf`$pXU%E(SXr$UAT[+BDNr)JH0jC5BDD%2pIKE&JmaL
+V2[LLJNfI!8b12`%[G4DEjH8[Mm85',#,lL,LKSYaEhk8h6C2%%4PHcXUX%Q9BY4
+D+hG,2k!EXHrT6'(+""6*#8R`H[M04"Lj(qAhh$(PM!@lU49)iF$490IYqcEb2DA
+I9r1hBq-aKDplAkDhX6[$)CYRf4[4ri4KGSZVk%8DM493H+bck!&ATNH8P`ZcGF#
+0$UL$31A%@8Jc1jN(8b0cT#m69Ll,4BLSlr$k[!H)GXi`5f[caPcV)8+6#C%+pb0
+q0(8128VXThPQ3PSceXKVAaqHLPZB3C4R)&8iF"I-UpEq6l,LprLJaji`N4B%IT9
+63*2'KCp!3eKV4fFd@2Ji8iTr*heD`G@+GpHb0L0J-i0Ic8C3c5CIPaA!S4R8HEk
+F`2DT&N%[[APd@R1$A0R8F(6%eiIr+D&!"aBI'V`a"HhE-`3ar5i@&e)*(d*YpCH
+EDY[9BEbehlS9R@UM'@e%HPG*"8dT6VE*JAL6FLAP!"%+Gc&8EZbCa%3Ge$&X6pZ
+UAC*0Ri`5aPYPZ`!KV&KSJ+cAPSFAfj,5@U"ek4J)4YSYq2d19%r[X#e*Y+iU$JI
+`&hqX-(iSGAGV&PjlbN5M2M6c5CfFVcEEI&JcZjd40REm@FcZSJ+T-Zl8Zr`*bcE
+fkq`fpf2J%ia@8*DT[5dX&e1&BaJU@Xmld*Fp#(6rqf9)+ad3j3lTDU2'Th&al5M
+K$B`J&Y"H$AK2(DU13EDIZ[0&DE@#eKTM&9Cjd1kN*cmdd0c*m%83f8km@T'l+qQ
+rr&dcVK(NmajThEi'NDBfZ-$E(pib1k@k+m*lMY!Sjj!!qh!JFG05HE&bDR#'!F2
+f8VbLBDSL)D,$UZA(DUmPJk2rkA*%FSk2"&9-LKNL&PH6&cJm-#f-DaFGCIa#IB5
+JL#E`-0Bad!GM)rY'SS59h!9N$@AeF&'ZC+(CPLfa6eJ$F%8QP8Nr2Z-(C@Eb5rD
+Eh*!!Td$3%QG+b'cH4jXPU3iN@pi4J5Q1J$*+Thrrb@GL9qYClNAkrmUF,%F-k6-
+fa)89EVGlTR+"r,V&%*21Yh3Gr3EDQ1I*pdIk$eb'4!p[KUQ0ZqrmT$"J-1,d-FP
+SF01aCbaNF-MY@V+i5kc9Ajj4-Rb!'0B@PZ&498+m)R'mRB(CBhX8DMQ!ckSTd+j
+T'IT-LN(K*e!PNmpUFl,qF[9rY+B21Vqf&qhFTBFmmX&1@A*SjB@"HI[fL()V3Nc
+MPkD$@l1pY6*9SFrH"GJRXL@ZA!rQL!EBAHPl%hqU($rIUUrcFYh$,9[!qQb0%hc
+S20E*CH2Y(N!@42j,Za'F64C$HmaM2M[FckX(KSdIM@GUfr0FT&[8()R"VfMJ4d@
+IHi&q0hIH2f#R52YYYQf)Q&-PLU!&ZbFcmTIR9q!E4iLij1H1'H$!pN98Y('H1cb
+0Q,FaJ$-LPGNi4'Sp!EeiL9bbfMU+-(Tq6lKAE$UNX26eGcDak"%1H03YDX"(%lT
+%d'dd&imaq!j#*+)Uel-[q)(Y5%bAl3Jl`CC$$mL*RfIUYpcRL,)jbbK`irPkSbD
+Fqkh+C)BMAH%qbE+SX22`,NFrENV@*#c@9L6jV*Cf`,8G0mi"i[GN,,e@D$3JeeN
+5Bd`jq$3%j!'f%d`%S+Q[2rLj(b0brHdkj3dBSa`c3!r-RdjiL[ihC&L89aK3P3l
+MTP&88cX*3*a&jrP&Gpj+GI6)TJPl,S6-(L`jHA'UR0cYF&NAYbFY85VVp4Q8NUR
+jDqTYaQr&c&-X%"GJ%HZTK*!!jm+DqS**+e4RSeJ4`Fml+Le)a'#+M&3BGZ1b%-G
+E+*R"6Mq[(G@$1pfD5a+&d5diL&PTc93d3hU[@lERLQ@943VC0S'fqf%2rP%9aBY
+`eAh@%b8@aQqrc1K&eUd-JE)l+bm4BlQ&jMSR[S4918Ph4r`creHUJKQ-RH3!F&N
+M-U[ak[K5,kBSq-q)Ce02BhpJ0j5@'TNSih8,B+"l3FF0-6Hjf`4JV3I[[Q8+&jF
+60B-6f)RFdfbk'd)CjU%I@jD'Y5UlJ!d+NQ@1djUa29r"Qh)"GIe1aJ8R8$NP[ak
+NXU9mTN,6!Q@b!@YV(6kLV1Ulqh3!q'QF8qq@,MGpF,E@,%AA&C!!Pd1P@r4ljP4
+p2heHPH1ZKq3mIpTiCcc5DibNUkrH8"-3SZb9e6Rck@SA%@Qjlc$2'CDf59&V4hX
+r%Tk#A[%cJXEN(bjqR0-!X`503i8J$Al4K`2!Xle3h9b0@RZr[DZqlU(+mPC*26a
+A)jH*QR`Qp1QLTV8T3#$XKK1T&l-e53NU5lq2X+20S+DrL-53!-hE3P)j0Lj#l*6
+6A69UPN&B60Z(8[89XbB@JjP#cqqj,G0Ah)bC)rJ--"FVA`qD(`R$D(XXVKX"caP
+a5Z[Kb*%&f+plC&)L34M4R3m!*d#T'SIZqD#VMXApbPFEhFL`)'`%'0e$)akLNeM
+aphL@[4B1"Qm*Q6T59PBD`+VHK@SZ)K,1ZdZE$P4GN!#f%4S8jM&4ar%--CmI2rk
+'9IlFh+0,K6CV"CEIYF[)cDPUhT8)qYQZ23kFA9"B,E#mlrT2k[H-T%d&maA4C&a
+XZ5,!I0"Ke6TA@6%M'9be-qLT0U2mr(J,lH'B!U-a@jC",N@,F$JeR0"eBQP*Mh[
+kQ-0-@KL3!(K8[["B3c6[*R+j5m#E4,1,9c$@'kIJ9RPBlVDUXTp&,C9FHkZjQ'a
+&++T%[&i"fIi[D1'lR@E@&+DND("[&pJ%,#N["b#`+@UG[jhb0R[j*4*`JH#f9RZ
+8C58iRQ!@kY+4M#JX3&llEp8RJD@(jX!9J8fV+kefN!#P(6+h"!N5pAdjmkI@8fV
+Y10"k(emH3HpebqK)C-bi$V,LcjPhfQl61GZ3!#+pCZF&,*K)`)pMQ@ZCdmDdCBd
+IYc(S1KV428-0hPQmA1Ap6Z34UB*3d'-TQh%5R`MMcceJJ#-k4qVHc-$ih$6'$VX
+PEL3Ul"$+eBX'SH8Ff3!l+)2`)I'iUK&kZf1m(8)`L9aSpbdJL4%mFGCmmB@)kG(
+eb-4ecD%8[T[j1kLAT&E['j4)%kQ*4@iKiX@CH2*ac9A)QV'kSXb0K#+F*bdlrCh
+NqQ8kRpi+AI-Y1cF5Qkbal8Mi9mJMM[V4@lYDqP3mK2#G0eLCkQ5@1d%QXiLcVLP
+6UI[!EEYa+0'qQ-&$(TK%X@U6Rc+'i[D"'kr@YK1(9Q!$3Z'CRG(31CcBeJLTNT,
+r6-NNe!LHd8CCF4#5i234NJFP-JE6d2!))&r&c*-mi8*RC9'C`HVT68iCY$D&r",
+2hP`Da%,3S![l25Fl33$cdYJ0rNMqC`p%r"AP%bGT"fJAAA)-9b'*6eJDp()XVU$
+-,*@,JeTJMc"$aePU[f+HRm)T'Mhm)QBC`q6FR!ZNPE+MN6*#4-HN2IdjYhH,ja1
+R$GlBjp!P#%)bqVS4r24S5XA6q)J#rKE)NT)J3`GR0"YYp,0XHk*@m1C$%)C5h*4
+8TaIibqfT`DKIe,25Iqm#30@m5%YVqZ)KLTD'IG)DCS-32MZPHh5@c1b)V63FKq0
+Q#PVj"LMpc-AZ5i`)V(!RRi"R'+TJlpXDUHG4N!#N6926F"SekXl*aeKU#B`0JMU
+i&,!FTjjEK9QjmHIZSi+U"j!!$"[3@!&V`#9U,BeAD3DJ'+'U'Q#C9J2i9q@,[VA
+A3S-UVQDXCcYcDkb1"iXCSl[%,r-1!MHjMSeYIYQ,32cA-EA,mHMG)6DDZ,pXZZ#
+lKh$BUZUEqi$AYBmTXDTra(C9mQXX#lC5!$$*L9Uf'TBLqNZDUplrNL!`YGef56P
+r4$C85@%p&6XFTQ5VJaRUQl)1GpkB8r$K!$)-Z9fHC!R)6cHVp(""5p0Mi5R5)(i
+(PN[0A1+bL#T"plbR(5Erh1d)**Vj@NFR*'%#FVh1`P5(qE$f@15Sa6Q+bjj,cDP
+LJF$9&q0#'0XE%lH8XNATS`aID[Gq3Z8!eb)pKYe,LNV%*k3*j%hfKJM"(6$`@#j
+,#9R#0Cr!D)hB!`ijYfKTIkYai-GV)[hC`)48PSPUGBMJ-j'1QEc9*D9m),6hS-J
+r((P1&I63+rVDZ#&RD2FT`k0&0r9FC2R6F''-SMP6`rh`5e0`k1jX8P1I-pUMpTp
+3YKC($%8*qCd*048QPG5AX2k1!EZB"N1I4F"!rN#M*h5QL6GlZl5`-qbJp`f6(NL
+Tf"L68)95l&*`he++U4k6XQK(@HD"I(f9DA)AQP4lrj2V)-HraiVa-QUA*lG$V"8
+Y(MReRXj(QF89JFSB1r*jj!T3Ji&AJk9XCh,D#'L1rQ"A4)XM2#4@%@c04FMiI8Y
+LIGf9aRdYY0+`D&c*XLSAiM9mDFVf)b0#RX`3Cm-0G!fI+rUl[9r!'KJ,qU+1d%L
++eiXIrakF8RjN%X$$QFTBNNhE)Q0dp-H,Al+jD*,63ZNdE9Tb&*H,8-R@'$T0"mV
+qTm9DB9"+m49*lkhIaq)r[fkX+BHLqP5'['$R2qekC1Y1'Dj'%kK0%1aPa,E`d*Y
+NRBJmH1HbbL3$L@Mqd#F[qQPq-k",)SdqmX!Mp0F!-FBLmH'TMXUUS&$YQa9Dbla
+erKq'FR)iR!%cTm!IbQCYIl8[UreXUT5q#j4*p8E[@r!600ADb+"klb&10THB1UC
+)h["SXK%A2J`N"0k0GiR3*G+l+Yr3h6%V9YP%p4LjM35mQKf8QV1@2QZrkeC8,+5
+)[JJPEP9#@)T2ql14m6KZYhjhk#XKZMQ5Nj[PL$[M2K6jSqlZ0XmEd#pb$RQJ``%
+-qpMcApZH-Bq(jGSfTV3add)Tb!G)YT!!4)MIbG+p1X&UQPi$+PDj3G#Ld2#'h65
+a8SRQmJb)#[H`2Ce5$k'DY4928%#D@cZm'J!`XqZjGIkr+1IfhP8qNZjmmrqm*@r
+!D-f`6)`iKpAP6iGqF2hT,`62$h81R+`0S4GG*ALKmJ"dB%&`U'ai4`3a9ZZN)iM
+mEL3fFZrjUJ55*j(Ncjf9HkN2"kCa`k9b8)UN8GdREcXqmVl8c&IX)UKY6jVYXFF
+"N[NYbDHVhH-CKd0$K4ZCB1GDQchp10TMM@AQY`N[3cb8XTUN#-0dPRh'+f$lB&#
+Mc+19K@fjXGMeJZX4!++#9Amq#iidq3XBN6b"@cT*``dPjUaQ'%F$`)jXLpKKl$"
+PP9C&U%Sb&m@6P*-F3HD[+PVJqKD50LiS("HGD5#3!,Je&FR)a36prcTG-8@IU&S
+9-99Q9,(14ccL&FF@%P*ZV5Qb#Z1Up50Eec+D2bifAe4meHJ0YQN'j95p`C%0afm
+'%!EXKMJeq$6m[%!VGHqpArb2ZX5Q,Bhi2BYc8F%l+H`@ec[J[5B4UlNT4)m[A`m
+IhhVlV[4C"$i(9&ECmm),5blVQ[8dA#R%e+*$4`AB5C(iqSJY@*6*qV5jf)+L%()
+XFhlD3*8h&"C!mPU#Z4j#R6+RB)kSF9"T!3Qb#cV%flGr1kLlPiG-3VU9(F!Qq(a
+arVJfE%)pE`22lBYT1d3k!DffBXXPVrpiUSM32LbP&NT@Ade-C5@%+,dF5`d63bl
+'rCY*5[&YNEK5*1bQ*Xq4,IrpQlq@3CC"TlLEaL[QlhYjVC9!J01HIr(@AX2hr2R
+jjFm)EX2a+3&dQ%6PU4S-elVQhjVfi,,"HSa5Uc2)J9S"5!@)b$+L6@&4cDbX`k,
+E8jJ(N8b[1c22M$!GVr&E5S9G*PjIbmL4#[&LcN$ILZEmAFjL1PSRRe9BRP["0(*
+2XTE68(G[hfpUm+46@QID)L5c@l0#12B[fGJbdXK-*$H+H1M"GB3@"9'j#`pYhAV
+dmjXDCb4QBIj&mA)M#e*%9Z6&bML-#Y53!"3Mr*-$ACSlcQ"22-Nq+)%jT['E+hP
+h2kKb*)hMDIlNQ6rb'NC9eVRc[hPi@5eD-&CJC8'`dN#TY'HFjff"'bNG24Bf'Q)
+q3bQD6H1$q"EX)bEE'-eCb3`3UL!)p2$AAHGpdj!!C*'p83BBabi,XDhp'X)6-hI
+-mhmGlA5`(,!bc#H[E+G6f+SY!3C(Z`cVE$S2M,p&Ib[H"S%"D`!3`$YIXF[SILr
+HRbXZN!!A1mjj2`m"#R18qabJdk*8T1*`jkNE+VPhDI)*!'4TZUH`J,#(d22d0i+
+V-JU)K#l3FeB+1Lde`1,8S(jA9@ka(P*NBadB'U8d"2D,aEYa"&k9PhH+Gh3QEH-
+JEBh#BG6FJJ&)#jA9X0IQLm))I04dCp*#S2!X'I$XVHA0T'r1M)GV5lReND8KK*V
+%QR$@E*lR)fEA8B'!NaB4&!QK4HKhbH0VAqh)cl-i(D!%c*Bkdd0#20JaGX,AbN+
+%$2C[2ZRl988fiDeZNJHGcL"hGEi9bVFKZIMZTSDM6#8R#fXh8UKJ&Fe'K91pU[9
+khb1YkYIk4#N!J)*'hMU@TVF0Km$4Fe4k`3m0q"*LFe'X0!,V#`d#jm36HjMD"4(
+MR'lc3lbP@B%H9fQr4,5T92-Xbhd#a,9cD9TbrTl"G+rNm[[f0+XPY5ZRb,rCNfB
+,iG8H@pV(8MpGraD)09(-D!*34a#@[F@'$LJ&%L@"3F$YE$NlR5!@HpQcB[0cq["
+5a+$I1`BfhBVmTjbQ6+SpQh0dA2b`Lcm!')ahCEGhK08+eA[R&Ji*ZX3f2$LiP(r
+LGH)mTX%p&2AQVP1X(hJC,bY&TJi,J,L'cH+4GJ$"SQaVXk(`jQMK,8"bK99Dh%d
+4bC-p(e953LF4MBUS4#,RiUdJ[p%qQ(TUpS6[A[R@mQZCSHC*@MU,SLj0C9%RR*V
+0S$LV0S-)fmEV[@b#9kB5fBYN4(E`H3i5rNlqhPN6U*'G2hqfA`m6ST3fU6hNc3R
+kcbBHe*l01,D-YPMkM61+Y#2Ik&fS@VJ3'9eHAiMQJ-64pr5LT#4BHhjNp[6*'(H
+$A!#d$'m6T9K1#IeCN3Ap8Fa,&,bE%-4p[AJJaAA&J"&KYLd9lS8cBBrp@aDi!Qb
+ae*&$+@$XIJDGqk+CbPcd6qJ'ec8jKG5LI+MIVcFFIj9Sbj[eP8N@$PpPkGc5,c4
+-ZmLU6`MY"F3VRK1X2p*M,CLU)c+%R+%%dI(U)0pX-5H%P`B["i"4P&#FA'"H6%H
+*l"GY9Y3Q5668P&,r!c)(ShKY3l(Mj+0kPjGq!Mr4CcUR+`31+#'Sm"9XiRA-RV(
+`)CRJMqQ829lSdpP`m12)b"Fj[!l8Th+9RJKL2M!+Hij#QRhfemF#EMfZ"("XfZT
+U`"fK*IXmUGS4HJ[i"(!EeeG$9qlG#p1%d)J3Ff[9ZbjGMcq3!0*G1AcZ6&QjIb[
+&#k1SYeX9M3fmU,H)Y#5IL[1ESXI3M!SF53RE'ip,[L4qI$ke#AVbqd[lGm+L"F)
+LI[+L+F1TSUc4-HU+hBFX(bhFX*4'pZIHF6NMLp&K@4fKcKXfU-H43@J`Y#0l%l8
+Yj@TYT)4(-EcT&2c`#TR0Q8iEdUdJUUEeeh*mNhS"kT++dlrYKQDd-PHa%b*4X6N
+5mf2PlNr1"Bd0m+PXV'm9M4IT8dB9MUi&@DVXqUpm'B93[`,A2NZjT'q%"LbBA5"
+2l-cAbR-8!M6ifU!$1q!"GF,,5c+CC`1@$!1&"mSKVS6%k@2fdDFJB*0MVQ3rQ1&
+LQKF)d!R5X2('dMDI(*0H[dpR#(qQJKZQR%9L'dZXf'L!ZSVBe4(rL$MC@06JaYP
+U0(SiYLrf3e`ZKYVmJAZ`0E$HR6[HRpS2U&AV1[C!rf[5K$3j*REQU+G6Nk0em`R
+8VNG*pXXGUl6R!BEF+A01@Ej*#aJqXJC0BT5pI)AmGk&VXkbdjNh$3qAT0qcE"h[
+UDYT)J-QXm(9D[K+Yh3cl%`Aepj!!+ZC2SkTPV$fNhRk[D42H)b+6l&QFZ1+aj@-
+frbCmAdPaE3cA@YET5V[3XIAUXGb58Q0jA)fEZ""KQG5VP9,#Qrk(Ad!IpjQd)[K
+ZrrV-9IYBa5KT%+3Ueh`,5QkdjC`3pV"2R9lkeRG9#9mXUD@&99#pAQE#Y@rra'9
+5(I*S'9)ZaT82iQN[J32erfFh,kZJY[r-Yff5[Z1f55f83CS&aPb5#R08M!Y!Bak
+8ED6%QRjhPIT[*XB4HU-L%85l`A@*"mLr'YXq9'j-q99p@fbTkCc,1[Yi-p5h9UT
+FDp-MalmI0fj4NCZGjC,d09CRCq1#,NQ,jiJqNR5Q1ZGiJJV[I-k'21SaNBr-`am
+9*Rd0MaJYK042GdL#2'Q*Pf#CAJ'hRele9DZ2,m`p5@3TFT5amI-A"AQ-+,rqXi$
+f9Df%59GXdTA"#CJqHH`8NPh1+ShB"GXdh+8[lLYeMir"6AMia51rFlTE-rXLCS%
+E&F"QPl+E%Uc`FE*jZe6[8q8+fm5J+(ekr5rM5fkSFcJ*kDaafdBlbhjZV`&N6(j
+BPR$RCJjNKXUbcEkZ8422cPhS)R9(iQh'221Ga0A4d5FS8RF9Ka!4V5,56fUr#j!
+!lZ,rE8HhGdHNDS"DEC!!+q`9XiS9cN2"*aQJL9jUhAbFmqNb'5d3i5eZ6krIY@Z
+I$-KIdd5r2*mG-q)-)X@cI%N+'e)DPGc-cU`pFp58`%NMe#P291ZL+fSH3Hbj4,+
+&dA$0VJ4PYKm[I&B3pajq)#5,AZS!hfN+Cqp,j%ai'(KQr9B5*HJS13k%XkUPA3f
+#&5QX,[`r&dh6MBE3e(VeiDaj*H61)RpRD9&JIKVMKmh1Spj##YrYblP435RdY`"
+mbmB$U,aKIZ4$YKMr8h1Bb*XJUBBNe6a'[rHH+GhRTN'1hh[GmXqTSlXCGYX)TYh
+-i-rr4QEK3LZ*,A@G-9r)i8IBT(%C&9iVD31G+4c,80hj1%5E6@YbXQ"a1mrX+5[
+UKl9lkSE*,-[f&1Y6")()F9REMBF,ci)R3Zj%j2EJD[IEGD(`Dql99c9'9r2Hq8V
+$**ArF$I8RE4qIdqX,V1N2VKK-aNBGq&LZ8r',8XldCq&$EPCQ@c`XF9LbYAm!8U
+%FDGlCh'pQfG+HbV%A`C`FCPaR9F``HGM@5jV8UQGKp0)3'Lfa34lS2+q-Z!Y!UZ
+("kbAS!X`ZBr!%S"A3@,f+)`p8E-mq!%9!QM,J"*Ej!Hi3Fd,`lTXY#IpYTep@N3
+pa-J+8R&UlQV%-"m-IUFHqBZqaH#ViqL)G6Kb,&[STb!2a#3KIrj@8*b,jNi$hef
+8,5b9RF'6K"X(fREhiS(fKcih("03dPp3G3M`!G(1+$6#8AVQiN-J-TaXqb2kI+Q
+1RTrST"E)dP'2Y$d[dq!&0DCG"[cL#FR&G,jNiL5fe%p)maa#Dr&m&CN-N!"b5GK
+V$Ar0c6K"2(da-%Ij-Dma'+*Djp"QBc$*qZ9$33UT-U%qm,p`3lX3m$2Ra'$&5VK
+LFj!!)9`8L`c6)TRB"pE-E!5BT)e8"ab")6Pk+hJYIeZG5+)!JA`)p+6&mS8QQ+R
+k90VFSTi1CBBiN8'HHS0!X,X4`i2mEfMfR1jMM+-Lah1Ic@11fqZ,5MjcL"((@T2
+UjYbh,qA#AR"imUFp`Sq00$('(Dm&#15D[hqVEPH[dCR,*k[#Y,p59$QSJCp[N`a
+I5Q#MU)QG`9R(pT!!#*!!f6"iDM8[Q9iMe"fRC9Bm1G'k@F"@3QLVlC9plBeHp!m
+p9KA'DA"3fSh4RG*@%AiFh*V6HD4DLPLV0BkA*-&XeTAh(9ck+d5*RE)a%bN3m%i
+@YMK6cma%#3GIllEM"2[[6h)ihj`SH,+AKl8)IS([mHFcUGH'INImJ8IT5RPK!G6
+Y`aQ8p@H@lUbLQ&9fU4XNR5)d&qI6,mbdf[iLM+8!bf'YPD34XHl9P0#F"PqA+J$
+4lTC5%QS4[e)IGCrdAI3Scdiiq%L3!-EKXDAZlUN%$LId"(iikBASd3[@#Urfa2Y
+6IYLEk@IU25P#HFV153)!B6ZkJV$aKX(8NQRE+0IJ*GDqe5+%@)V[F6#Bc`dq4ah
+18Sm,S!0,6Ke[8QfYfG`KR@NFea6K"N6M,!f*B+M9`CpUIS9P6"F09-,%Q-@IL-U
+hH3LFLT1[-Kr6+6E'LfM9J!Em,1&YU(6BDjAa1FBkfEGp81VJ@C[XPQkjQVHc2''
+h'@Vl#(PjpqCT8FHFZKFVa'Y[di@RE48!R&ZmbJlS(-Qr+qSXmVY9X9#q&',,'3*
+GfNi$DR-K!H2$23hHUG+lTp1VeUCb,r[)qhQkKJ6DqPLMD0QR+X-FZ)rj)!$ED1!
+NRNXSNHl4c[C04UQb*Vq%E-$jd[K4R-NI6BieCQVrE+"N$69f4mXa'S'NAqVSkp%
+BcK+afAkXXHi@TY)AeaM(2iARZN+pUF8eR&F(dhTdUXer&,aIm(G#+-i9(FA&SL@
+C'(AeldPV9MqLY6DZ!H4039EQ)UdPhf%kAQI+X'CU[9UhHrZEP+$`8K%a6'3ArmX
+(1,'hBGKG6G[A,i95aM29!-H`b(3iVd5@j#GEXSEXm)LApb[!(`$plJUMB4-P3ae
+r$0@GLccr[`$9ADF*JFQ,,*VBA%em153qdES+R@h(9YG-%8iNHVDHiS+C*jDNqcH
+1IY"0GqMY1eY1'42Nb1m'FYj1+r00V9KCE#%,adq2I)3Hrr1[5ePRDfTkBJ'+Qij
+!1SZTD8R[0l3#&QXp62!&'J#XP&e"-1Mp@IXimah$B1PXC4r'F)HHJ3qjpPH)*"(
+qfq[&DG"lQfTK!FY,4pIS)93EZ`3ZL@Jp%!0Gp#9jU8!AbEA3rb@IlU4(,GQSeG'
+[K`QM3BD$pT9JVfj#UI8hl'KBI"V$Fk-cH@63dFTG9[2*-UGVQ*!!ZTMTa05j$IL
+',,XpIUh+cRq2'3Jde@TaV8HZQK,GXh*ZHH#Z2#KR2FJGcAX+XZ-fEC00JM"dLF4
+pFYQZJHAA)bFI6pjmhIcI#hV-L-YGcTj&cZdAZ9mUI)`"lmdijT-851dD`a)0PeN
+)PXYeLAc1i(F$35#cp-NqI!p6YVq9EIX[I5eM+rC(JP'SmFPeD*F$MSi4[cA6hT*
+4Aj[[hN46VSE")L6a$XMVM9Zaa6QmUG+3!%I50h0lBFYKm$bTbHHedU[TA6Y[DFD
+GZ(B)cmPX0)VD!8TUdUZ28cLiQ"bk*lZQcNEap9VQP30el42bhc6P`,)C6S[jqL$
+'EcX-F&p0*lqP(j39Qq#F(I9qG%jd2KJ5fQ[L88T[dh8Vi$(mPja5+NfHDpM3m"-
+66k5ab1lrk1DZ[Z8$!k40ca8H#%6Fe+$`bY%!1jZPeff48TTB3T%X-k*lb"QcY8P
+Pf4Y(H9r@6HF(MD@5%l,QAmE9dU$%RU+R'l46H(dqVCBBPKTc3J243X[""I)PfAN
+$1Kd$'cjDN9-ZkiG"ZA!"H[(EX"VRM,G!6%S,qLI,mFhK1fNS,4MI9mSZG)mM#hA
+!0&G'2SJfhX@%d42cqr,bqY&(V@`Y5I)92rmML[ahSZiSYRVr!Gfi1XK`8GQ*dH+
+2-9XJPc4i5jVVNa-Dh`-%+MZ16E1M8LYa0I1pN@ldpPZr@Um2JbL!"h,MV`C!Ha4
+VeI1i``k'1M5aV+NdB&!VZS%2Q)9`Nrd5+%Bq@DRdfYTDR)qABN1YX[!AikU6X`2
+3ZK*$HB$KiX#"XiT1d-0eEPN"*f"YVMdHXd#$krYcN8cafeJEhRR,l['iZq1NZC(
+R@08Qebm*NYHZeEA0Vr-AX#6h$*E3&Yeq-1k4*rfQj-D6$-M5B2AqBi%q$ImHlJm
+32192[9l5I0T[m,+SFb`Hc$*qMk5D%!)f@K8c&)898Leip+6j'-hBcUK2@jY0dL(
+Rf*Z@AAPFh1S"T`m`S[L1'aIT'a%M0Xi8B&%FPiHp#$cpMkVG46ZRm[(1pH!"jpX
+(X-qXUVJiTbpFkM#kAM'GjhDP)p@V8SS1P-#b2Eccq0(pm84Y(ZkFq''HNN+#3[i
+i+4+M9!JR+JpSk)R&bVE8MbfiGRCJX,fI#hV(BmGCehE$ID'Sie`jmZ0B@1l8d25
+JdXClM,L1f!SD$9[CaqD29!q-aTf%c#,`RD0kNMMJh(4la[4@%FJj1U(1G%RY2+b
+e-[ZRBRQ'8BB!!p4p@[reLkBqrb*U1m931E'J*ZIH34MTGLkd"Rc5Y(%%5@hrkVq
+pdbLfeab[h-B-mqr1%$YVEh,JC*dSmT1mbkT(*r5&A0E33fKKB![!h[QXC"+jQ!d
+aHFdBf+TCT#0BG[iN(r),cJp8Zllm"!PX'&Um064rd%ZbKMS,3'NJYrYYUGbPi`T
+VcKRSH0a)Np1Q09GLSL[p!r-J8fhDfkKL2pU!0,MNhd#1A3[-d'BDm@#$Q"BLS4$
+`62UYi-p[)29!h*YIiUFJAVS`BaJTSTe8a91[C3D3!"C4b(RK8i&Nre5GS94@Vc+
+)9cPI`3@mFS*9dhm+mkGp6mEF@MIUa`Ebd"Fj(Q,1)#*c)@L0Ck[SN!#eI`"LjUS
+Jm[Qc&Zhj5c$NqbF[9*ICFMBTm,l-a45IXUTm1,iBdlZ6XA[6Id+!Y(Y0K"JDpBT
+(1EY8lCTZ0dE%mqV,(PX!`SD"AKFbl!NKXAc!G2&,V4-9[c8#95,K#kJ'G8d$@)[
+"bXbYVi`UlR`jS'1QG4G-EDHmFr0d'aEkG+i")5'r,E!*ZHMeJB!dalrF&UaP%*C
+q@,0lS1r)b4ppl,aA-$8X6)EUMbi8riajkSC-"@@Nq!jNI95N+[BekJ4&,3ecV1U
+,lXQ)p&L,f`6QV4)+rbljG#,eCEbJXD"HLh*#SY+m66RHM'-ah&6')'Q+QcaCCJ2
+bDi$%McYM8T4M8DrRi8,Z'ZVHj4j0b33X!3kSa3cr*,Y1!KEcNa&Q"Bh[T1I4%ZB
+PBQ-id`0TP"FZf60T620CPF$ZpBcTdTI[T&46p1)#6Ha2+T,+A'1%fK4mj3a!ce(
+4bFfi@GB2#XEeXXRNDT!!5DB(l%j!0+iN%2JUei5%GMcF%ZKGTCfLBR5%23r#(Sa
+hb&c1#9prN6r%*NXKqhae8MR*J9keUTA$ERH&$HG9b+KDB)YYflFN&YfCGk!cFp%
+%q2Tp(8%YREEUT"#jTZHrLf,%`"PIq)'"`@"#%S!&#hPP5E93$Bbp4,ZYH2J9R`U
+EhreJ!AUSSE8[3lbQl+hI$#A,Elj'5B*l%h$aUiKphM[Eh'SUPEX#J%0mQI$b)rJ
+2C2K&qA`er3eq4PqM8K"GZ&K0H@&JrB1Qflm*jbPFTYLQQBJH&'5)N!#H+`b!b8X
+IekE$S*b!rS#P-f2-&"@2Dm2JHN9Me1mlKSf%%$k2Mr6!-3F[3YmRqdZ8p9(X1am
+AlADV2BZSPGX'P0CI0qV`JLN["(M$41c-ETCCq+J6Vl$JCq+f[pKSIkXe"''hf9#
+X5MV!Y20E[*T%qT['cka#6PN+i$d45B%0C61KM83CpIbmPX'"k*!!BX-fM`c`hAj
+l#Q5Uf-Jl+i8`NA'0Zd1P4N2cai1J(#@S2k$X@TBG&jp#bLNTcXQmQp`%PE4+9j2
+(Ul!+L1S2M&k#GjE`aNGVNUHrISRDhMYM!1X$+K@Lpm#$+'0BPrje33m(@q#G@i9
+ZRC@9H&IQAhP6cpFPp"-!NB`%2RjE`0lm9DCUj99mP`'I8e`"-35S$`qp@B,I!Ci
+8mUS5*6*j@#CjB""dSeAFR(+FB!Q9H1Xm)H[,R$*U'DC!N5IEmmr6qY255pFlZP0
+G)C3fR,$!KUSfj$3X83pi-ErXXVKp)$4!klIedPchh-I[k%dFRRr(#F4-Ki2VD65
+PI&#!J1E',(Flr&,,)6pR[&r@$c&$cJKMP31i8Z8c[M@,lj,9j&QLG3RIV&%4'TB
+[6XT5X%V"QUTr8X"e(l)RaaI1*@r&G2#X`6&ClPkTX&aX(*8#03TQRac9rCq4Ll,
+(,8e#bRH[kc2($B3)!"C5V$dKF8mkI+DA[$'EM9IrpblS-U2c(rRr`G$'dVGLK0K
+McP`B&a8Lcj9)f+V-3Rf0P8fIp*aECD9hUR#TI`Pk6Hk(FmL'DVLX,Q,LL-E9l-%
+X*ACGR%HTI`M'&kCAkCLfXqY(e$Q[d$"Yl!RP+K(lNqU5PCr!ED'3!)0,1H+jhSG
+0#HLSj5$Vc$HBfU,1Bh)D4kA-iq2VFZ0SX!aIp*Gfh&Pa9K%6$8,0T2Y6'Zc*'RD
+"A-@0YLH#I+aFF"J(`+4TRjQe$8+@")q`(NqVLL`A[21-[-TdSYBHl-`+'c4C6YZ
+CK@h,N[RrDX-,DC-9QfS2akFV5GAHjR()Cq#AbCA#dd[)Xp'GKJaB+PHY!L`K9Fc
+FZE@iUd)[NPrhi'-eRC-R@qZCQDQN-ENJ-bC*RB58%1U0iG',K#RHq"pYMlIA&5*
+35Tqk&a8!P1bDHd221JAK*bNaq4'dF@5**E('$TZDlh@jqml9YYSH#R+fS#Y'DGk
+!'[%9G*P2'iFXHXfkY`TPcHVb,M)A@fhV%pF0f&$(-h+Lp9i0-e3,mS4`+lDhHaE
+j(BeQBU0K)iPdULXLaqj-,rmRZ`&JUAG2EJ4a42M4eTk%PVHmZ-1SK0[jc1$A51R
+rlZ@J[Pj#9%b*lChC(*X3*rB!aahi+)HE),(Q*-iYPY-Q)qh0PM@Z+9fqZXmH5PU
+&Tke8G0b6-d&%F6TS53c(k'K,H1KZDKhVJp8*3')QS3hVT$e`RX`RP0*ZppamfV9
+jlb9pUbBR*9EY&5PBJ@LPX6YqA+`4'JFkAJU*TZTXX#2&GHi5Bec,C!dN2[NP*d6
+k9F&#Z"#'%aASZG"rj!A@D6dh0UjL5i%@P66MUBPFh@Y%CGZX6Xqc+33'F6'11GN
+#iJN!ZA[5"1b46,,d8"6&E`f%FDm)TDc34JDJN!$kB''ICJ2,H@iY`@fLe@m[,48
+X+1Cb',hIUhM(HK1&A!G'[-3FSRCQbqa5hETM89NFNQId8c,$H6i8GVRQ0LmI5J%
+K%DfrCe$JIE,[rLV(@-+JLY%@+5kIIA0P!65V90+T0P%6Vf,p,Z)HQlVUHR@A4QM
+EaSbGR%,`bMG8'N5-C@#pp3rc@-55219mZb+Sl1"fhjKU-Xc63TdbN!"'0C621`i
+9Q%rjjDRGj-K1X(5Z"p`#4N,"1(#Ra@C[F-)-6DIh"f!4,acbM6qH",+DTT(GM'a
+&dbB(eq@&hj)'qj%)qKLpc0T3&3QE@A2jS%YQNIYDC#C`JR3088r@S3jP!rpmNpa
+5ZH0,cVRXI62KH)XNNI4CT0hcrJ6E(HmcU1KPDRBU2G$eViP%!L,2Kq8%0`IFh,L
+5Sl+2`rej5pV6aYYGN`M(3,0rfAkBI8+C`Yq6X6cdT)`UKQlcPJV"Z3*CDb1Qe+1
+YkELh9+Zq*a,`*UpRhZGC#0P4(c+%A%cFBReNEhBJdKhV*IXPHUD"0,-Y(,Q4C)A
+G-90Xk(SSfLT*%!(9AaXRp$#2Y-)!c&h99QjP[8[JTG'1epEj`a+"VCMI##C@8f3
++qIkB!`30"25QTmdI3*TrlAD3!2#3!24lAUABb8AXfa3aX[[00q!)ba2NX,SRNIN
+L,HY*%XjNI%Q(b@ZFfVSVU(p02d!MTH6km5PYH,R2X+B*VqVBlQKY03VUFYl$pqR
+JLBbTQ2S0TMSDlm&M*$ChbcfDY6P)FVH%RXrBR08FHkJNbN*4QIa%VT'3!20IBd0
+KQ%-LC,Vk5TFbX4J2JH"3XGRb"6eHb'Rpp)H&@&mH'H+V&jTC1l#,9NFU,qc9r2S
+,4G!AKjKfke'Xe#H3!!iU9hZlrT!!-5V2GfY+S$"1#hccMV5"MbJJHYkAVSi&0'N
+p9lj#k!G$$cE9$@d+P['K(88#VbepjMLr'jFUFX%Lkh(Bb&21'0fG!EN"RN1q'4&
+8'0[aGM$Ti++Xd"N`ULqb[V5Bd#AKp4'S#"Zq3*8P,Ph[q+5rA1QfC(DpCd&+!pA
+"%F1KESke4)+k(q+,&q+CZ3aNmQ*jMEM")[@EH2QN'K`&dVmP%lE5iYV)Xf,VHQP
+995k%KI(YT8Yd&Y`Ci*YH8mL4Gb[+4!YZT$E4-B$r#+cLJT)@5F#MD9qGHmb)3hD
+LTkQ&MjVq,(Kh8MVhqJ!0e[F'FAA3+!-LcKcf3N*,L-pf9$f)8hp,J&I3d,C#fPV
+F+66b95Sl'99YFa#62!M$6,VC1M`E6[BZ%A)3V9CJi5Vd+EemM(L9&)#,R(U'TZL
+lb&fPE9+T#fkLC*RH,cdRiVJ2%8pUD%&8!6"UM$+&@4fiRiq')[Z#F+2j45(PlJe
+TScaH3LVimbJr+[$eqb#(i[1D[6KN`'S*"l9,UQak5*VF0RcfDK'G%c,dfCq@!",
+aC[&PHV-pZFAXG8p)LS8*8Xcp$hfG)"MkeB@5+1PP#)mX3Xkf1IVe5pij1'TPCUQ
+"4Zd&2pF*+AeYAcEd2ZMbl*QmJZ$Zq%T6'SC6G@hcG361leC6!@*BPNM+3,h&YGU
+b5B2p(a63lE4q*aXpG-)cV@iF,XD,K$[8$9S9Uc&+Vaj5r1m&DC%+G3E8m-i,m!q
+Uf8rNd)+K`[*A9Mp85l@$G0`a$0UPIRXF%DC1a,Fd!"YD!*0hRHF@lZhDbI6$9fi
+)P9k$D`V3%264!F9"`8ehSDI&RbUI430(6C(dX2%-p#a[FM#*Z0J`TDrKbjiMmHr
+PkPCcaUqb6!Q)rl[*%-ZUCc[IiB9P'U-(C9#$IeaCerDblacPdj&U)iML%CE@$Uc
+SEf$q*([HkYGDGd`!#4kSAlP5f&L0Ndjd64U1llb29"S3!5j-!YHb[%XHVUXLVIL
+b6iiA+23AJJ'EjDYHIBl2[KY4k,@6*&b#1JVEm,Gd,h&2C&!Xe$RP!2V1bUlbdeS
+DT,3Gh9A4cl42fSXPcpa)P%5U'E%G%D&mCB0cK"EAH,,*D9VPmQk3!-4#3a@0418
+IBHPA$plhhe"K$#h@efDYYql@PUc9"2FlbeY3,!epkjSkL(kfA'%eh)`LQ-9(IAq
+"DAN!+&X2fC1Al9"piY4M!8MmX[Zd0f,qf-GCJ[C5%GZAIpqU6#+d`*Nbe"UA"Pl
+kiLmIpN"FN!#,b%'dLmf*ChYG`h#5%3F34)V)@lV6pCf*B)fkKi*c!F,ZU#`MlZA
+k)CjpQ59BbKYT0FX3PRGZ[ND5QrM)9c5G!Yr4kNd4,hJ93dX)R+#R+ba&!fYpAm`
+aATi+cercrF,RdE1@#6Ub(h+jh(MdT$'fhq*CAk[U845b#XPb&lNUjRh5Yp-FcN@
+'Eb+Ij9eF@`%&MG&d+Dr*'9C13a(2klZBNPHca(*9mk)G9RB"F11LVlpNMMJbGbN
+$hhr@5M(rarGq6)TmhNU[T`)!MIT"qFirh6A3J-c!P@@pE2m1XiTR5LjaiFe3&--
+U!qLNE8)69G&F!bGkkfd2!)$hfQZS1J$Eh9MijmlkJ!)6&rLhA%B8'![2X$LAZjD
+#d$HQ$fr3SY&r([r`1H2IXqUeG3bLrE8Ii#h6Iie8HIPb30E8$lKa--%e-I'mU(2
+(CKRpqZEDDN#FdX'153AjaRp@+XN'ql"c%rm6qUJ,-M3j(rkMCl[&C"M9l9H&@M!
+c'!MPQH%N5$ZjPRh("DiafjCMrf'FT(m"RUKjTfDpK9X*@N'-Y!J"S&HKhaIbfYG
+SeUMj6AMCA`AC()44CMSMlB`)4VaQVV*mDpiB*m%V0"3%FVU%$jeArd$h)#YDF*'
+`CP$38ZUc@LC3V*EmSU"R[4SU80NJ1"cD)mh(%ZZJK)CMDBV6eUF"m+,MK#idbQ#
+*3bp0VNQ'c54h"q@pBIXef213!!a!IP$,M%8)Y@bf[''H*GqTh!,2!)ER9@DV*!K
+h5Yc$IbPehU0VlckH8YkcfSAG%(&HIGI43$dpl[UcTJF+#f&$JZar)#kLXMP*1#%
+3('G45G6!8UTLRP4Uj!SLQQ#'IcD+L5daBE1R5eK3''3Z!qI$(Y`KQ3MJE*C&Aeb
+"6!$f)VZdG!ELD"Fc@f%9[C58,pcVH[L6fB6AI[l`N9Y+VT5D3M9E%CPf-mIGqpl
+8XQc6J!!Na!cM094%R&FR8`2(lk,'jUP1"EDY3Y8Sfc[C0`,eJ1R14KZ6Q%q-p13
++kX3f*E5!3fK#JN%+fhq&0E3BS2i0T3L%QAD*+@hTq&H(JCFdTDC@R8P0b[lUrd$
+%*qiHEZ3'i-cII#lfJ'*)'fG"6BGR!R"kdp6AeZ02eP9pI[ZXcIIc35RVVYK94Fr
+eZ2D'ND+YS8N,8!Y$(9#K6)JQFCLm8@*0@40$DeF,rbARl'SL,NiA`U+jiKeI,1p
+(V8ZQ8bM$h!d%#!-4AH#qe3KZakmQVi!2%iB%c@IP0mJ40ZA@)9ifibIIr!0'AA"
+!qp44))"aJDD&)k5`VQBEVB[-6@F'l[b1L`08["P&3Kf"HFqLkA@k)1#HCG3+RfL
+2c22p[QECpCXPYH&XH'CK`B+VVIed)U26*5-V5HXq*!84r1%201q*LbFIMr"K1Xb
+%-1qQU#`C!CEDj+"3LaDbRf`MRFKNq[GU`RR@q1[f4XV-U"EjRfRq98'H5Ek5Fi%
+N6YQK*1GD$IhL8"qUFTaQ@G@TB@%aRRM#@9Ud#ib*`ie$-[,TAbh$@2Ec63jLqX'
+,DFhLadkZZLM2)f$41HFNS3"XjdH`4ia-JXDp*5,!f"!brD+IhL-Pa3!qBIC*r@j
+L$&59,eh`BNFD4e2GCj(j5Te@6q8)b$+cKb-d!9TZ"0#%#@5`82XHQNN@KN"BeN[
+L4IQ2f9,cD$BZ1(+0#Yrlm)&Q#G*%82Kjl-hT"`rKiJkbJkq1Ff+hl-Cf$[IJ+!L
+N56Nc#ZC'H+T4YRHV`KqdIHchr9dlb3Z+8iKk`"S,VXJ-GE#V8aUHG5eCZdUci%%
+,I+Zrl6iZkl2"Y83ENQj0R)(kij[5T-B3TVk3!'Cfemf(J[&68(TcAA2-5%PiV4P
+RA*3ZEK&C40Ghl,T#P)elh9ir2(e4&Ch1%ZfpeDc6*d6I*`aJ&Pml&G"TSaacFkL
+Ee1E@-l16he(+ZE#"X@3[%hSi"j%4NebqlB$SX+cYE%X2BAH*2aK$2PfqkP-$*P8
+`(!SA`8hPXJN*mM*'9e`TBUF5Q)pdm0)Xa90bdG6-81KPXS,Y#qbU9qBr'A8&(ab
+Z2CIXEkZd&6iCDUQHEPlPa%e`Ca,l*TPa&E"m4SS[R!!IYN`,3VjUPRr@DKkIdVA
+1K)KI(iBUD$8#Q&4!0SS9!d[DjJ)"G1U'fd!@0Y#&kQ,VXqi!KA6ISpQ!hSd'jBR
+dHE,8,[DIRX9EB9hDF,&Pb-DTFdUkr,1J2X$NaX4jMD+9UT'#2CT#2pFCG(#Ib$5
+['`hYXe3kSCD'N3H+c`1"NAm05j1K3(Bl)Sj!d'P`c[#9ArNLq-k-QXH*c"`#"rV
+%ShrXf-LDJI"dA'XqlB#H(GCk*N6eBdh1db0,3UQ,XC!!8SrA)EFUNJJedKaTdrJ
+Vfq5#EFim!FC$+!cRcXLU&%4H"40LP'LmcHN&&T0A!29'S@Q"9U$X#[G3(IqG*iP
+U!)E"DmMZ35H6f%G+pJ#V+(*N*pTh,SH)+IX%6*`#Jje#jcc#c9rVYml[F2@0+46
+E9@NP#X"!RHPa#IU"9Ph'aYf0Z"j23!e$N[XEm4MmK92#r#HL*peMPKkG3a[j&lp
+l"ZUBapLQGAQA2Y8FS`fQbhJR6Ai$hKcH%"@4l*[&RED#bMZ*Q-Y(,T,56VQ$,qT
+RR(A2r#qF65+eafId(5r&$D@0XFKYRJXFA*2A[EX,9,!$-Ed,U*Gj)2RkRSBe-F3
+HeMcR-!P1mAGb4Q,+IAT$2!M0S,$l$[rT-5A4mF0LR&"pSd4aB'p!bAJ(Q+Bm`jc
+f5#2!19'DU0Jf,2D+b+-39a6(d"a4Td8!UK6HDL(kBa(bq6jZLpM6H&4$@#YmU#3
+H2d#Z(`i5XEXXGKYeD`DHGfKT4YHYe#G4@qS"AbC'kr!Mf9jA94`iiKM@88l[`B6
+ZBmE6Ta#Lilqf"9!1[[l!L6VZ01U*SkTV*Y,[FYJi58[bZU)q,5GX306qrE#l&*9
+mYj*6"(ZFih)F)1E(BlcqHbhap00U[0EGcjRrRpAk#QQ&(*L1%ND#)Ijh5p3*JiX
+,M1rGXPUb[XG+q1cUMaJf++[,V&hQ&"*XL#6hA&diSI8R43q4EQP)3D9lq1KYPa,
+EpVGI#$Bd)a[B#6f%G!-8"a5dBT0h4Ei2(2iUk+f98q)4UcPdHZA2&fE+pkMifZ3
+Sq$'MFimpZ!&hEjjrd+Hp9R#pL2DmU94kY%c4Xp`9IN@IpHZ'X'3Mmd`&E#N-CLT
+-TR[JIp(*aFY"Y&,(+YIDa9`+B)pf+-"E@l*m9YBm3b96jm9*E92j4S[UTjr6H,1
+8L94LQj1Y4+dKKr*$F)V6V4a-dmM1$dA)#qBdYNFiZkXCZJ$+AG+JV2G"LT8iqR3
+YKVk'XNB+q!Aj3#AB,M#B1h+4FN(Q5ldb$mjKRSH'CE$bl%(f),m0kkDV-(Q2@6*
+e5mDh1q@8-h)M9%&+!'1Q8P[IQLF0rGJ*!8r[FEiIm+AR,Sd-lDCf*E4'R-XUSCB
+Uar4dr#TVVE5+ApYq4SE9j8$NelqT#jLU)qilTe-liZZMIB6@KSHpRb-TlJ"2HM'
+A[CPBi+m-8VZ&*lJb0IQGjk`&NjJ(Z(bB'!FckPSi(!bL,Y@&Ip!Z@ffGS6q6amd
+Q!a1$,V8b&lK[Y4aF3"[Q3SR1cfd34Bl0cE--cT6lIQVS)J-&kaK*+()NM[%V@iA
+&',)(LRm09(M9"9(TAeC#jB2r"FT,UEEJB+"FpiT5PhG3kKPi@GpDZIi06TD%38r
+qDdY2*Pq25r(E+Up'TVKmF([hRX*R'EkIVNr@2%R,KYP"E2qTJpmRI&i"cKZH2@a
+(5'eGQa`AU3M)X&16`!D`&G*[MmkYlS$pN!$VqG2Gj(!EMHc8[j&FaS`03dU-8e6
+rQ#aUY-QjC4Nr3Ap0b,FX6#+`qK,`CV*NC!6jk+CdPYZA!EdX"!EfC'-d@PTpB$)
+3TIlr[b,PGX&*k*Peha"S3`0%B4Ba+4JbDdiMCHRaL',N1D[[XNaM9R@1L4[`*eJ
+a[NlNC"DIXLUQrBeFJ[(Sc0Rq(VEJAe!Nl'lD,P@4QbP$)1QSZU1emi@Uq'1K4hD
+!rdMjIC8BFid%h0AVIK9@lDPr0'@k&H2B3b9N0N&2"X+KM$"JSH23ZDfDPieb#,k
+(`V55,Yi&d$$h[MQ'#2kX#3NBZX$M4NNBA*Cl@L#r&96PD``INVEY-Mf-eU#(S%&
+b4TBSB$lX@#flJHFFd4)1@D-b"Xi!DeU3!#lYC+5Vj-YAi"%"2KP[#+D!f!i0e[a
+BEXUR9[!c[f`DMR%-"*NEX!CXjK2"6CaQf3YHI!MUG2N4XN0[eeY)KHJaN800dkr
+M0iBi03-[@BFA)[XRHVC"`Qr"DHJ"1TJd89X"'%DIB+Xq0K9i!i,d4q%I5bY4Z+%
+`Zb2B*K1QMLhqEe[IV@MN8Vb0NcSm"pU14k4@3QlT@)$5HRHHUV!b'Ak,"YI(mc2
+,EfU9,iTbCa*I5-$G[HCAZY1GiaaC-m-[C*N55*`qmqN(X#h%48PN&NkD0d93C,b
+(,Si-h"ErlQeFG4#Tml$chdkCf%%Q!hcSUm)8XAGF)DbSMXF5e4!2G*EU2rQM8F9
+C$QLRE&Id3fh%RIZq2Nc19!"S5LDG(),a&QfCSre(9ESHAV3V1*h6%Kl$CUZScFI
+dPGZ*6-[8NHV#T8eF3Hr1UERJ(K'm1cVi[j!!S%"5Qr5e%**DJK'-M`3-R8f&m@H
+6pfT,eZX52LUdIHiYMHF[LEqpZ0Rid4L'0Kmc*Z[610[PAJ&c6GF@-(rm,Pa-%($
++R88!mCQUR'fjar9J[)PGC9a)5fQcCj+Y09VQi'[%dr)&V"A59GfM,"QXUN)Nfa!
+'l0J6,48j[P-j#*)j(+[fD!"#A),HSEk$VL&Acl&ec$Kb)q2#jL3)Nm8&Vc-FCl&
+G8Skf#c4V9Q'8jcj*$eKUXfCN+qh`4UA-GHKF9`9QVCA2JpBSkh69A,0X[)80#S1
+'#U-R(Kb%&q9)&Fp1+)#*ZFcZM5pU&X!N1YimNabQ$+KdZ!-Km1VCFKBcR@k@(PJ
+'%kUT13q$5Bpe+VMqmDpcLaA+G1HAmi+--DHE"LFH'm2eZhd"9N)Z0N!ATV@4ijq
+mN!"[Sa4eqHqm#X+A!ad3dplL6B`+%8G,#K23'rb0DVU@4abL5@Rdaaa2j*JLXR`
+$p-AmJja'I`6aa'kFc(A++XSSN!"356'@,!iMia(3M[T)9i3c1,S#6pkZR(Q`,%8
+USjr$LC`6XRqZPAKeT@8ATC&J+%B!54lY+j!!Q,9FK"CG&jU+"e--AJV6+5l6XR*
+e-#&G5NQP26kNR(TE551bGm`jmH(MJBGR5@AJDCS#Ei4Yl-TM-H)(BUKcFQ!Qbi6
+9!Yb'06PZA4ae'1Z1P5MkaB#)9KNl!mb*d@B&1NX)8R@p,fE81P!c,!qP5J&8$qM
+FkB+U9C4H(Fj[rieVqCUiISjD@AdkNr,b**UKZCVbXdlf(8kSP-#jkSB*8EP'KYH
+K+d(+GaBCFa&Rj65GmUJ%F-E5$d)G"-*p[fIF8#CXFbdRl2bJF3$1ma`'Hae!84[
+"T[Lc-C8FJ(cMKZaKFfkkEb2XmLU+j1K(i2[Tih@i,d0G)e!m`TLQRUXLrm"X09F
+fkh!VQG+I[HTU09*-c@)a[RK-$-fPlBj4U%1h8l#Q+"QBLDqNb@0B-iHed'p-cH)
+0iGrRHcHX$%p!3e($'&8C2@CJ!HHN1-!F)RFS9r`*`p*CfF*C(f&F#DD9#cmS*@F
+I5AHB9,A%`Bdb88$pZD@3!)cLmN10[0E'-1[DNj(mQRU`Z[!G'92BLE$5d5Ir2)&
+HDQLphjPqqjAfJ5LiH(hIafDe&4UlC'e-9)M[6"(19LE9QCqK-ql0a$0,Hb(jfFI
+YfD!8lTfJ*F[l)@Ihf8A-L,iAMqX)N4!#X`$4`p)Ik38kV&MVUX([1rJB(!"J-3#
+SS"k@MaaI3*!!4B#Y'ML0%*%3UBb%NkpYej0*T&`+f"10XXKqi[Uh0e2@NR6cpYl
+-SYVP685jk3FqPDq4Lb)HhVC0qEA["1hDUU)h0Bi2[C)Uc6FV4ILB)G2&rK@akK1
+44NRfFZAEPQ*3*K8#QYbKE+35Eb9##%*dY+4$eaF06LG9BK&"2ef5D+&)2AHhGll
+!Rq"%0,pheC)[!"Gh'b%3bSq*+&(qpCMNr&i*qDU"P[%`N!$qi9jD1`CKal)+qR5
+V1)N"l3SkM&-N6&4lbk)Ib'5b$-bU%N43Sc12m,(b%HXmXK`1R"Xc5HbfiAU'Dpk
+TdM*fAE#YCm`L(A@2!b[UXB2T0Z3'fS5+rD@hZVLEIeqDX51$*U5p`mUSZb(QjD9
+`I#P,'*Cm4T3FZMSYSR!5A'kKmfih&rQFLZZi%9%+r38paH2l+mSYcBpQI1pqfZK
+IVb9KAG*F'&!'DfpIrE%*3dQUDXNGFBe5hrM4fi,KaBmT#,R-L+P&YGM$RPT[#Ef
+6Rk3UH1"Ueir9qlF%6Hkq-3SbVl`VP+(2PlccqhUMhpkR2&["8&V@PPdKAlUAXJ&
+lRA*D#0*e'L)arZRFS8fD$GRp%(!9Z@k!J*Z0bNbKb8CbSPR!"q55&[q@6*XQ%36
+$'IlpTY15FdTlbYV9ceXLPhHqLZMBUH"kRrB9lpD@5fm+"l#L#SN6imE'JAXjZqr
+qL8M#iQ5L8AYGJE5Ll2QjD'qSHNL&ZH5KA'`,bdY3!lLLTY!+P"'(@T8,c#eb6KX
+GerBNDrFR@a2jpE",r$+m[e4PNa&Ir0jip[3cB&hcRIX89K1,@kDZddEAqV3TK4F
+@p!bP'0JTM)5YJ2)dX8VCLRXcZ+0Ye3DUk8$pjPjkq$#QVM!4+rr5kGNE@fK9I`F
+Zq,TiMh4LeV0d0G'r$""j,HQ`&QPBB0ch[eJF*CHJ#cUU2YRTF#PQCMB)fILH81Y
+(j5%p[5k3!+"S)DDE"5'!db4hS-BT'+e"Q8,'2QHq0iUlGQVhB%#%N8*Kp3(T53*
+9YbIZf!Ad1h[4l1lcG@pY25G9ApRe5FmCAMK-[G#GI[VeG-+h%[b5Jp!ei1kZZf5
+GKD[5CG-UKm["da!-#!Upi`c0F83m53RNXj6HcKiYfbmq[br,%Z6f$#0+SX[j[L5
+0XX&r`5b6N6I,N!!UICh)qAe)N!$85BG3*JKJFFqD-)L(@-%ijCdNC#Zk39F'PB(
+m@bTL(I$P(9SZ!3GBT1e(RC4"YC[[XS4cLUIfpkV!j(qlf1+("&A1qhb*q`Kl%QX
+60a`-L'CXGNSd$d5AGC[*S3S[EMMA3a`GiSG!m2hKjAfEdfDp`q#LD08)acjdfb-
+qiMbLZCeN990dp*8"i0+(UHZ#!eZ#YRf,a[V8e+jE*fNEG8b2D$$Afd8rbMKQ'c*
+'Y&KYAaM,8b2YZP3#`8U8p4q#qXcT42(m&!lA8MQ3!#%CUUB4H6,V3*RG@q9kc#+
+LC3TXj(m#cThGYh4&!R6Tpa#VR[!!bj*!T&%X,3P'JEBdf&QZqKZ+(BmIBh3'BI(
+(!NBaZS1',m9(&TES8+N0Y"k0DdrDcNPGp@YQ&[1,Hq(Xm%0hTVBbSB)EYAQP3K(
+*A`f13i2FG@$%lS+((2Z-'f&Vl0`8&0'XB9dJIA%6MDFcmU[T[YAKd0E4PaUTN80
+*VhD3!!X,Fq*)$BF`+eE&qU(`"IE,@`1JKjNeN!!UC1rqX*m[bcQ*CpJIB3[10E%
+9`,XJP1f"h"(khjk,,2,4#8q)bep83N0LEJ2Hr9rmEq-YUq6+[AhG4)!l)"aM-#B
+AcBTV9QNHYFU`@#1l$Q9XL'X3Q*j6F*Lm!lKL6HV!TG[+*[EQ'AYU`'`$$%iMUU*
+IP"T$YapHPr@0@4q0FIa35$d%FR420VqS$DTV%MfEThY"CD6mMVFj`KIh9Q'#b1p
+KLFH++$``DT6-8M4cG50PBScXT'Gqj$Bb0lMBQ*MeS%c6'*A2R,X+HE%JdE-M'N@
+d0i[---Ti8Z8$3"#@ARY*1*d81K,5jHr$Rf$(G2@(6Tpad9&dV%J,fH$)!@Jkrmf
+e194$1+rR&+T&$1MGJRfh$+#F09[3q$e"M839[$P4V5F!YkHqiL1p49-GhQBSHb5
+!XIrdNLeMSJ10HP"#R@P,B[)FQ#q)&R!54ZBcRfS(b!8+Tm-2e4-"&(&('U31*pZ
+CZcUMji'GJPh8`3$b5!N@CZ63p)qcEH1Q0`!R-2G5$+'3!2S,h[,JPRN*m&e[YY9
+1,VY80'VNjb-3p)IDrVGP&I`&JCrF9qEH&*F6!BUKMb3Sc$+6h8Y8`8,%I)bdr&8
+%%9,Y90TqF`TCX50)M9&B"j4rA`[I!lY1L6&r3)'elU3kV"FRIHhe42abL[F6T0`
+-)DCH'U`Y0&*3%MK'b%q(b#)-8pTK1XYGS9Cp&!dH3[mIl6KA2jY@*kU`hb[ha9&
+[jh!G(31+)D`92FU+6#`46[(N391I$hRj2ehVKX#L48Qrj%VCNU&ZK@*))*p#`*(
+5DU[M8i'6Fr93PAhr9+G1a*@4j6RUc5'$%M"!kamCp0k)N!"K1"D)id-$dJ5)AD+
+PEK@e&jJ(G@VV-0b!D*q`QN[&kHVaUhqkYrMdb95@0Eq&kLU+hm!K[[ZTL6E)f#M
+T59[P'bCSBD(D!l9&90qXp*@JhffD33``@R"J1MFi$)epY4B+081Sq!#bRT2Mkf8
+'Sp+()RZcqUM+0HHjDXG58!V@U4)c2"IVhKZSMK((Dl[4CCij6#j,j),KT3I0eNL
+L9dNLGeP'$dEMe6!F'hIdJc@!`"-qITaHB+UlUa-DANq!"!X!k#+`mMFNEUh!!e*
+9el3ddZpMNd@L5[S4D5Z[C%V000l[$1)#HLai*283"DHUl!EQL`Z+$BE*D)PIjNI
+eEq2`N[ZqNNGPB"[Y3Adc5Ud-U@IjLZfcA14*62p9-0d)K*+DHlUNNjfI0Dl64Hc
+Gdp3ecqB0%3"fa0e2L-JlY,r3Yr*fHXpq3mp[ei1$@-G'D'mh`A3&Z2&m329TAV[
+[9%m($LK&BZd38KGCQ"NVj"%!H(Zbe,!X@f#K*mN[Gh%(,NpLLcS2PcNdIj6$3D[
+m+SiNdl62Z8qdCXcB3([q5-0QCG`)pAdC-NKrG@ba&i$mQ2Z*+YLM$$e!&PC2L!(
+r)N52AIIG8q(h2c*YL[,A+Fp@[EfZ1,1,0dCBQ"(Y1&-"R@&apF"!cQ!aeV[&qBi
+Xh$dB2!!E"'80lAI#[@m0cc@GTZ8P*N(Ek32G25Mq55[f%aV0pB2c4T4`qmjUrQR
+U'PS)iJ3''cM!&PA4PPiVkq4kXNFBjImX6MmHRA*V+BkY-GV@(fS$kNZSh'bbph-
+dY%iFppL!1+-+0kB6KAJiZVMK$FBj9[p#NQD24H'Cd5&&d8UXp5+&FlrE"iIGh99
+fZQ4apBE$UIccG&e!0hmFrJ!)+"6CPZi4)NHjCKRqRJ!2CZJFKP!pMhq3!*!!DG1
++X%l%Kccf[Hfh)#K&VMbqqa$UT'5%G*6-hT0c0-Ji)NbI`NANpGNp!`dbm&5#fUG
+kJ&5(,,6p'5XCVb,R9X6H@B*KHDLC3m'0@mI939rEQ#0(0EIV$!QLI'd-KUfLCj4
+T9,Mp-+$$lkM4NKl-clG8m0-[miIkZ#pY(i#m@VcC0YTZ3!PYa"-2C"PSK+A,Aq1
+5cXGh5"Zq#j'B-KpBN!!(,QJ$Y2bhqHaL(MFFB'cqr29`++dG!dIVR4&k**ac+1S
+Y[VXAk2JN*4cS*hfPpFZKI"h2Re'GH,L#6PFVldlfkbTSciCJHXHjVBMf'IkSe)+
+)GP(2jej&GKCr630-5&Kh#E$LpVQPFN0!R*QPAQHh4##GqPd2GNc*CqJK,H"K9c$
+MGAS48mSQID1K-`2QZ1[cVFLrprp%b"Z`4G2'4P2lr,k(&VXPLi!H-E%&HFJi#Ja
+j,80q2#MpVSRa&2f!j3GdeI!4G[ADkYZ"MBDElXF,,,NJ#VD"SfqY[fXF%mp8+Yc
+%J0rb6&Mld,HT5e6fS0M0UfC"ZEFaPr&$1cF(53@[&1)P0)iT3B$8-ef$Ah9MGh`
+K[!V9PP(k4(,F$T!!T8N,fpQBkP6S66@hB$1A2CY0IL$Ab'pfmXT*&X*HhHm3N!#
+X6Y"C8Y3D(SGK+M"[eCNe4`U6kDN4Q6DUIQLClNf53b2MLPd+dipR8V'F%4*d$E4
+V*G%E6,&!4BRm09&Lfj5l"q)R[a+b84GU%`9E9#h(@`%B'[FMKUZ%qlXdBBHi[3E
+338ehqXC5E9P+e19q4I0mJPhhX9fY'YVG&HGQ5%NZA%@J(#QI3#-jDf0Nfr[iJKL
+i0riBB5"$khFVJVp-'2iYf"lQQ6bpp8RKMi-SSMec+#K-*)1B2@FK"REaGQF&GHB
+h#GjZM*'EECihhrfSHbm`)@08AB5TJ%*e"*TiJU2JAZ8eE2QDBR)IB,GH2"CP-,'
+qZ*lT3Y+ThhNaPhKeJ@9peq&'rIGXM!*K&KU#JdCeXk$BP4!RaF,jqqV0ac`)c@H
+JZ*A&2YKf&2FD$i'Bl@Dd))F%,56+Na4k!fQVd@[Vd4M-MIrhUH`K4PM5",m%6*d
+2(VMGZqNEe`ZS+p1IU22D%HlpJd48+V4mNXGrI$md@pj69DSrE3DeL'a""1%FZF!
+rAL8jfdL(D@2E@R!U@kP1+*jj`J6R"Ncl9c0Yik"I#`L0fmR)hK(PM#4q`+"mNmX
+hdKTHZ*6X%3Hh)3@mN!#1)965+f$2#RGNE'1ipibPY9(e0JEEKF"Ar2r`9piX26K
+TBQ'iqpm,)$3$R[V!+S1@6j(Xr4J"NMm#j(P33jANM-HVTPVC1"A1XlL0RL%Y#SE
+3AMXje#'5-mRa6KSK-LPQ@VB[i,Pe5)$KjGBhC-5&%1h6,V+mGM#lX3#+&$f%L3G
+`$ZaF9B5#bY9a5&+bUcY-KLP(-,Alb0%e5SULpYM0Z@!BC+a,m*RaM,M!d,ipGV0
+f2mSbAN"HahZU"3jVfb,QHFA#Rj*fFRc+YXQUJ*YdISb!L(CbP`5CG*D#9b#J`,1
+EYSNpDfAPq1k5Y8V-9JJESlf2T,mNSCBP,ZGh&l(B*VXrE1m$B5'1a&1Gbp!S-SH
+SR,F"+*d9C)a1'YVf&PdDQK,*)!3rNlAkh&&L,GLFjKd"phT#i9$hlPfe#-YR+M'
+DmV3Bf*QXATAIBd"S+hhD-62%$PX+1eq8h&@4KYSLBr@!D%YV8k(#iP"Mb3kHR0,
+"0&8kQ9J"(1bZr,8R($(`q8MZJUkHU-XJR&409(HBF(T26I)cLN461cA"X'qPRNF
+')i'5!VQ6+aCL52dq-B)$F1c%5GirIMl[qa'6[8VjA,*C9(KJI%6kKmmQjAM@dYR
+$LrA#q#e$jj*fSke@9RJ6M#S1-9P[#rM@hJ(qdEG1kK6&D1*kq6lF"0RH330Ybe6
+$#5ZRTU6YITRQ*j'`H"h09+,*JC)0M5mD4GNeK*(&QE`aSRJ5)b$IkN0BXFP4TQ@
+e"G+'9RI5"CpQ&LN!@a[6)Z['la3Be`TABR9ld(HCK$UEq*Pp+EA5IIIRA+*2BMI
+G-dp$,aG9)VcMMQ+2QCirSV`jHRk8U$)i6@,!&M-A0"ZafB"i)*U[B4hdP%!*KSY
+D+9@%rBjC$3*Z493"5E+Mma8"[Rq@05PhY-0C[HTQji&BZ8Ji5CimdP5q24X(bHk
+b"mF`p85Aq-9lMHYVl4BL`CE31)A#KQGGXH5#!(kp`TCF*5ZI0(0[P"hS8r%5H"*
+SfD,)3!%TDbqZ%LGlU-J2f5P#!Dd,!,"@[IjiD"Bd-ebHq%3,mf$j8h$pCBGcrLk
+#Vh-IMDZHADMJhVERq+,pAj1aQB0Cjdpi&#"dK&rfSlC6LMCG4!p3B($&ReE)SVf
+(UYRF8hP8E%*JkA%AaK!crV&Dq1BR-*)EN5EaYhPG4'PApc&-pG@aTf'A!k+2pm'
+mX-[Mba-!M#cQ*ma%FbZlbC0G&SlX3!QfHa6"hbAR4h,ASNjYFME$rffpAqd!,PT
+%i3B,Y!Ic4PKiY"a*hi$cb5"Ve5U2*T!!A4Nj[JfP#U2Y+'*LB4AL@2J$RU3qM(2
+D0ShqUR&@daV*Q%IqAE+ZG$SZ*53$m)8!EbPHGSTY(!5NZbZS*mp&EJNVMqdZNq0
+FfPC`3kS$*U1*29B'r)1*ThmPHk1FLT!!8ek8"Mm16MJl$E8cLidlTaT60f*@PR%
+q"0)!8SQdcZA,PdfMH3$K0lrrX)PX@j!!Tmq$QTK#KHaIK,6lb9MfV$6D,-ZiK(!
+!D-e8K98,U$"%%kUAiJAJp#ch&D!KGk91'rcheN49h@GJHL@!aSkHj('5XR`@!1F
+8BX(!c0!L+H,FD0AG#+LP944Fp*U&(2M53H3&qLYUYhlSacN0N3R5m)b-Y'ejrA9
+aadHIXB4F[ND1ZCHbJbCdU,G32Tm@Md%41J[i$DS@bQ'[NfLl1%,VNRAFQ9Tm!c"
+i,L(#UmNb5l!NN3&M4!FA5IF9&k-SNfkXIFSC@NL3!1EKMD3NI#0YBiL,@AGfCKi
+k5'Z,j8-"I4*r%3!R'53A388$FfM3mS9FED)(6`DSDEPB"AVlM(#pp$4KT&fb,k%
+`VZEqqUc)frMeLeR&D!5#Sk-VYRB0Z'*K@!!LE-'FMh0J`aNV`KXfEMd!+Lph(L5
+9rVMf%mcS*)l%Al6PFXj,(q)8*cM#A+L5)q!"5(J,UVhZ'eIKBH08d2VVJQ6TNC%
+3h'IeMEMRTb8Qh1[4(+6Jd88S*#+S5eGk3'ZHJMCJd!$b!&Dd+VD'plV@jK!XABD
+-MD&'-A0b12hmT0LBCAT4)I*cVKZG*K$Bp8YR)MSm)pZKqUD&HFZ*lYmI@0hkX4U
+,'IL"S40F8Q@ql%mNY1J$BI$Jp1cJc3NiV83SL!p-2eZF1Tif$h46SL'#Y@N@")m
+d$hdqYj!!$XVaHLi!KC,fBi,!#NiTmGE@AlC$'YM$5*SH$p'6P-Y+SZ93kH!h#5)
+[Trd%r82h5+m#,8%pG4i@rJ#bT@[EM#)@fm8kC*bbCHMEF@0GNL*,*c#K)9$RNl5
+J3SE!Zd2bY9flDd@-lFQCMLEjk2h9p01(YBl)Dr3Thb+dIV`GLd(j)1m(kVV(#3F
+q5)5ElF9ITr6GE6,##0`h6ifq8iiKAf&@bT@,9r&JkXr&NLTM%mQ+Q2+NRp(b"3N
+-$+%MiRVJ#i!B"S5I$2!E@h0XJ,SmQp0RL``&d)'4!#l3RYNF`468di2-q&ejDiT
+8e%*'Rb5-8)CDYV,M0AXLB8"kml@2#Dq(e#L1rR,14mANrr62TrljeFj*lLDYC2Y
+hB&ZR1-BG6aZp`bHL5ED1XP)rfbrUchQN!Dh,AdaZ$HDfLfNYCl2S6UKS!m@QUcM
+8XfrHm@*LJM#&al$9j,h#9MQeDa!r@qk+5%kXk[ijlUii-2N`KdG86+0m4D0Xc6@
+9"(MIHc@M"EeCTTe"UTJ-@j,H6r(BPJQkF9E15eG!X1ZD4&ScE@NaCYK,a1d8&Zk
+UlPf@mM0GM@QaeB0Kck82dH$Y'NRd%Hpf2lZd1B(f3SlH0RkEd#(`5iAYi+$rdq,
+ER5U"-j1,C"SK,l8!j[rVUR2M#Al1JqR!e$D(DIfYa0mU#S22RjU4XfDMiAT1Ph1
+5rS4(5j&bkAR2qRVp5d(bEB-rdP9G#cfMT3jekd"a#2QclD8EB*+-'EK"jHf`3,C
+SrLV-BH"hZF3GB1+Y))6J(AXNm[`@A$rNLP+**%SUJiKTJUS9@QcCS9%Yr"h`636
+8RYCRA9TC+QI(p`dp&5i+Jr9d!84Me00rHM6bRpqTkGbAdI"`UI@MCNJ'X`'L%P3
+(0)b&P$*6@Ec&JrKPB3c2V0Z$'YdI#0MQ&#"&$59[Qlk(Af%[kBGIbp#5qYk8+$6
+cJL`C%NGFX4H'5q"(KZRCCcc$6ZiZ[HUU`UV,M,GefRAmFj,bII&-#Pdbh%*f1[$
+U&ecG$c'Z%k-lNY@5b-R3Q[G"fjqL2&#8licG8ElV["UdLqc"rbEIpPELrbd)2!B
+TiKq-DYK',!lUcqB`rLiVe)e*H#NjaLjPHJ"PPYp"#%Y!I28KZ%RTd@ZjLm59F,Y
+2Dl4EjV[2q*+!*PN6EU'`aI+HZk2#dMTFIGjCSiYT8Qe`U(+!@Id-DI0P1k[#&EM
+I005$#11B4MVQj*fZM@!&bN"cE4,`@J1PaFZJ-2Rc'rIep)4)5m[+e@#*pp0-$(5
+!DS0Z&RE3RE)TUSiX4$B2QKa-"i'(8l9h8)3@EFk&dBQpT`AS[+KlN6IZ20%jNk2
+Qi5eiQVQaNe*,fr9DkD[$6cSNQ"ZiibqiE,k-SFeaqUbL9iDR`CHEi#G+$AfLlZ(
+hhbj2*d)C5&H5B@+&#M[dHf[&RFT9@C*'&"c3C-N[!&4'Vh#d"ID@qjL[L'rbq!"
+%MX!0TRMb"mT*hTM&)'V9BmLUT4&dBM$c#34qU2F9V`IImqjYd"Q-LKHFQ,EA0bh
+$0h4C[1Z9F2B4AcB@$S-qEK0Yq%*j$i!(49eNK[kJ+JbK[*Bd2aNRR,UeD9lZ`lH
+TkrQ(Mr-j'"-A9Je$Hf&9HU,FEJi*GEM5f%#64#4hpiqclQ$mJF'Ie@EbqQL[&BM
+*P4921JhHN`6HB9+F!aN3QipdB)8JiiFY-a1Z0j+N#k&qp'CIfEHi9dK64D`d#02
+9XeA$fRJB%ACq0CmJfClB6-f6*jD,9SK4'#11*+XHBS2CTab4bV&TiBmiVme!VUm
++lVT#FP#--Pb)MqIQXV%9ITb8$mJBpj@`'eZ5MkQe%lmQfZ@UfeK1S8'MPe10[Qf
+XqNTC+D%a8!$UV+Y`!dmXAPpZ'qSB0UiX$[p@eXiSD#06!#T6R@a"'B4mHe)3#a&
+rfI8&YDkF9Uh&IEU,&HBhja*+rH"p,B,M#dQ!PK6)JN("[,D-[r-SB#A36D5$2SA
+931F6'eqbSV*CDQ@bk!PXb'le([3d#5Y"1,bl,-HP*qpRl"&PR)&M1Kf-KlJ9b'b
+DRe5l4M([h*m-'ALH*CRDGS2f8ISdZ*0A$FS`(eE5D(Ce&PZf+HPmp[6r'iF@EH"
+Hj-U*lK9c4LD'Z6-HkDG2%bcM%(2f,*!!8qAdPSi8F(MI3SIi-C6ierlK1NIji2l
+0kq1hLN@r06Y2`RcPle4X1i%VE$a#%ZN["200Nd`6*`,-%MLBM6IqdB%+$h%65XS
+$qkaA#hP-TJl0FF1)ZZD"0),kJiLQKY@BNp4pf+cKZd8AY+HI-Q-T`"Z"%5-E5r6
+XX,c%BEiHd#ZR!Lr%U[#LaH)ARliFpBqDp%i-a)KC!)aL1$PfR5@cpmiki8'[4Eb
+j1laYb@bEe+pba&*lhbm",bmh"D2$-el,YN8jcY[$GefTBaX@bmQP2X"fI[X-DZ6
+X(!2bf-46AlSE6%GVP(iZ4h,(e"Z6(Vr&H[H%rca09GJVMQj#B-j'3mcVBc"l*ef
+K[$HrCZi64jB9IhlZQkB2Cc%&$A3EEdic2J$LA,&+LIDViai(h+rb1!Prr'R`[FP
+[4`U4,#Tmr*1NEaYQ1)V0%+)QkRq6m9M0[!TjiTQ6F%d[+[`BJSb&Bk"TqG$PJH6
+iK6fJ!e84'1'j()2'NFmP&U%E6f1Z6q)C9ci)L+bNrdEh9X',N@,ZAMYEBPL&#)*
+30d'im@"*R2$QMrrMcjLPBqB!fjMFQ$eLqH2'3j'N-"FFEM1[+Y@0K"ZBZCkpBZV
+K,cflSEC!pJdU[@h$*I1G[X!-Yq(#SIK"mr5T9@(PMJc5+MCh($K&4HMG6HFY&3m
++hFmaKTH1cl)rK#Z-Vli(dcKd'Ef&A2!+%CekdXA6ZIpa30iV49Jldce)KYI3-aD
+&&'lSUX)CK(#Xf%LMrZeL3J02a@NFIX*I4+pKdFKd4krcc2m##km@I)2VQM$((!M
+eSfST&XL9#-8EADX2Y5*4Vih4'DFH*D9#+5q5hDKX"*VailB&S-#,!Z,ITV%"65,
+afm[(9Y$3fblZC-j)HfmJ-IU(B`8eN!"IkD0#0Ll%YrjbUD#&*#%MlMp*m!5@FU%
++a[cd8'XpRj4-r))66X6)lV%1Kkfc!KG1k,0B9AhT@Qh2*irQjP*Xf"1SIYiR[G@
+Zh(@mP"TJFb+N4jZc-UGm6b#FrSST4!8Ih0MRa[C-#)3ELdDM5"mhlI'`$`UENYS
+@Q1HFVmq5XkZVf3P#18,N+'c"DE'*Z91G9Yf'NR8Q!*(6c1%[p(D0c'RH!hJ-%Z'
+5CNQKZT!!c,KSaE'!PjUEa"5KlUm`@L-(+D88Pe@M')*22ir#(UQe'i2(qr9rd0'
+2J[i(SiN(ca(FdI'FP@9-LPdNP$[A6rm2aL[9q!LM!*hU*Me'bE@Ri6`+5)h56rl
+U53H6d&5P'X4Tb`"RZ'BKc(1MYSh3`2DU`k%T1-q(SX2)!G65b+p-!IraL)*ip#a
+3`ici@+R*)&2+V1EBKSKMD(dH'kR43Qfh3M*NDVd1SG0qf1ZPI8C1a"R0BJCCp1I
+-5#-P2JfHV4&0YJe&P8Y*mMi)pb"-iEK@4i(L$UA%AU9Y54Ze(aV,je6ADphhemj
+ENf9*ci[b#p+F'Z9a$E1aRQEU#26fBmU4Q%!JLGAJSkGX"GqI)1PLSZpmB4bj+CD
+jH5%#Hb@Xq8R$iakiiI0#R)ZaV3)eSp)bG%pjlbpjrF&k5XI6)qNhI9bbA&A,b`&
+rk"[iXVd`IfXc&*!!,dl"Q)p*F$ZN&3KAIKq@M6RF[ijl819XPZjrAX-f4pq*UIQ
+%k+5(0rABT,'!j'(RSK2b8BeJ8pFV5SZ!@CKT40GJ!T4d#h9548VQ[KqpqCqXrNa
+P8!Aka))k+BBBl1Z3!+ILP`U-aEmHQcf##)2T2Ae`U@Q!f-#`55Y(e3f0PAYVN!$
+T6D`H&SH)dpRV!UYLUJJEmBaqaGEQHjP8#X&qNU`RcVRY+qkk6Nr5i!c+S632c[T
+FYpG"(fD%k[H&d(C&ki`Eh2H*Yk6HKR4("2[M4m0#MNad8J2ZdLN1JpBXZSjGMk6
+!4qraPl'P-L(5(%KJlC6h*[61I2dXia&rK2K',Yqk-K&kY`eV4(h8qB%%-SV)@(m
+RmlRT$apFJ$,"i$(0qG(HkBKk4V%F1!mVhRMX6dfLMECfrF1RTf1KiQXkZeB+qb@
+!)EiY(NZ#Zm5E)$D95Kqr)`Y,T+9idQJ#ke@a*jb!'+(Ci%LPqMq5i,UclJdYY4%
+&bkB0L3K1$qAZ&er@i+9Dcq"C!@blMBIaA-",31rPH'D-8ZUC6QX4`3kKKCQh!Z!
+SKm0Id0PECPGbqfQPR@E#k51SVTPfrcM0fSMM%Tbr(!KBcK%84YR@KlD-"m4!6A3
+"iVMP"Nc)LUF[bZY5BPrLiJqGq*4lUNZfRr*KeNfZ!MGkq55lI#5hG1R2p%p*qNZ
+pCk$504Za8[)$fhHZX4V#FNd,1CP#+T`HmXC"2k,X#qhc@#4*cGqPeTI9X@VqDqc
+FUl2U0E8',ppB6824b)Kb%0#3!&N6AU'G24&!V%*V%I9AF%8Fb#-0%[iF[hT%30'
+%5$mRp+jJ2cmd0lNjJ-j-64!+q0FJk-)!q2JSi')2bYl3KC!!p#9KTX*5dh-"(Xm
+N$6!(lEYTdY-@Ka-9RC!!j"Em$Jb3!&4'jdT$rS&Gm'mQFI[D#J@qUkrFI$h#4'i
+XpH$&*1Xk@fbfJrrrlDG``U"PiEJXb`)GBVjDXeh,-EiQX#d"Pi!8TrG'"4`kD#N
+@a0X-4'`[!mD-KT&jMi,lShIS9fkHM$RHrrjAF$c@D8SqE*%4DP@QkcY-ciM&V%!
+riL*KZJZUY"jBU(CkCQlCDbTc`&,fem#rf@VM3KCXZdJJF!PG&+TmKD[qD$*NAbM
+U"T2Jfm)%kEKLPG#Yh!fc&J&QBMAZ2PP[Xp0&BiRi8k,c'(lD20[&d(l%FL6il)k
+NI[634!`'BT@86rEDlc,ZqIhVSre*XG1Iq#*BhJH#ak("[+#--DDcZ!fM'&&bN!!
+!,6rDH*Tj+pMUk'YA8,'(fe[q@0k'Vi&J4T!!GqCH,Rae&j864,!IF6@4FBV&3A1
+*(4pDSA#6X96e1AqK`U[PX!UDd@U9Cm,r(DF4T9+8Am%cB41iR3XVRL'5&,l9A+V
+fJ3qp0R",S6BFP3iCrHX@5K3*$hQl$%FLT9CUCQjAe-*PaJrN%hQJK0UH#4pLD!d
+EY29@i!V!%hNZ0H"RGS!LV8[pIb(,2RK',R"P%38E1maRRCY44[&$A&G#hT,i`H'
+-Q9TX&5IGE%V1"mD@LA3ZYm%6%fXr5A!GZ8L)33($FU@%h6hQpam0VV(B),i-!b)
+da30q)S2-IQ[NKi$%4RK!Rl(J"IrcJfVDQ*U)5l3iT$al)&frifK$eiGMm[9)%$c
+Gk4U3!(k95T5B*pYHQim53,Lr+l%SQCU[h9(8H`K3TXm"#ClB@&AJ,2pd9JV*NBd
+JlI(4E(HQ'6K@T1T*iDCc0qHdF`m2[Pm!fbPCjHTpUTlki#9e)iMp8e*V+FNMhXb
+jQ6IE218$EDb1qq5mTEiC(rfBTD5AX$@GS,L(N!#DlJM4')%MNEZ(m`*%"UN(ZTB
+[$Rq1kr8!Qe8af[MAQX@H@kHBjJXdf(5Te)D!jFi@@6"$+q0l)NZpGViad'VN+bi
+4D,q6Ndi!AN,H)`Uf(2A(5Jh89q0$0MeDD@ajqm9(61b2!jee!66-C1RV`#J($-d
+LB6%$)3cQY#IN4)aBl*Ne6dPFRp+R9(*3ePim-@!ZhC`+T5XIKjd)S8beSl+E4ia
+@a-fZ,!EmB+S4%EJl+P&)AlU81IhHld*62`#e-Df4X%i5Ecb"S-(dSUfDjFh9D[I
+MKLmePh!+@Bke1,"#%M4!"dXl8i9bX)H1`qI+5CX[HE2q6R3BBLfEVhq-)Cq+iR`
+5E#[4F#CFI%Z5$qqji"UL4bqAk@l!EcaD3"iN)-S3)VGII0P`[4Yl6CSVdII$DJ4
+KNL2+&r%8V35$VI!8Z15pl`'hMkHI$#0!$%$#*Fm8[R`&@C43jSdL-q&0j9F"BdP
+-0TL6jAJYE(K*RF9VpT[qTqYH5Q2T-qf4i3pCP"+9l,CLC4hL$*CF`ekTC$*NCI"
+"eIi0+hBIM))d1I8U"N4Kq1Lp2558T3b#'QRGF(XCQL$'4)KrjcZcrA#VQH#Z9pp
+dH-#@+[DV['6rpLRMXJaE(`J@XZ4CL$Y`+BI-jc#9YE-QE+@SdRNVeSY1pk35S(S
+EEJ&SPeV`H1H5XiB`XL9K`0bUimhM(@4mYK1'L"Te[ITj"X5XA+"GI1k4BeZ!UGX
+GaiaTKYY+l1QA)3*dED"45Irc`M95lhKelGB+IJ5((UQ'ke1G3jZpAC5C056ii)%
+cQ4[+EN,%m*`RleY%RmHY&JVD9!,PCa4$bNS#AQ2A3#Frje)&'K@FH$3kD36q&Xd
+-K5k6#j5cEaX-+&Klp3mY`V@JEJXi%d$NfJ-4'DLh6RN6PbbaXLN4L-cp2re82fA
+%0jRbPkq-'iI1VPp8*d[M)62JUrXKHCS4f#QYa1KN60fV-pfqZ*bJ)(Jd8')e'(a
+fDbfS%HK[0CPI$*P(L&("N!#ID+QGS*c"P(mi+kNqP"G'd+GQi'R42d15[SRrEUE
+!)fE+9fNP&)(6C&'I6mfTT9Y[B(+qP"PcSqr8#fJ[N!"[*S)L%3K[QmG(Tc9m*+8
+6X4A65XA,&C`8b")`&1brDG6Ki"S*iG0)@RJ[,GTD0X'0CVB4em&29jI2C(&JX(C
+k!RXQ-$DJd%cHkSdSVAHl(Nl!dET-+KdN1p1QUcrfKEC%Kp%m3MlX(JmI&",9Tc!
+c[j-C1kCE,be&,%YCGQ['mii&T&%lj*K)j[4b4004Ip&h,UFU'ZfYbAU1e&'B2i!
+5Z@'3!#%Pe3"!YC60+'T0iq2*&Pq1pF`bJLi#Ahr9+hbDdZMpU1dK31q$K&P9"4)
+SM31jp6CJp!3jb)b3!(6BE`f'f`hi'8j2N!!Y-($A9GIL%cTLCI@2*@GpUY!*#fS
+!'J91)l`8mhZ'QG#Tlp06Y0Tb*j6(PN*"SQ!pq$99-&'M$l3GE(bVHQ2RjjDp8J+
+pk3#TiHREpD)aEH68XYhHY3G6S%[j'-BY,Qc-U4bib51qY*C&adR!K2&2(#$%c$V
+$'G5"L8F9hiCINR@T4JTaJRTkmdD'3)qYeDk-J"$[GV89lAAX8C!!a-A3Xla40-E
+H["f"FGpe%Jlrk$ar@1j9DpIcDJLca(%09h183R5m#@*[GGbI+@DXiY53!-(16'&
+hf"cSGqhETH&3*J@q`(Hc5I-M,-F5UH2(JPJ+Rjl@"kaPkepr#',b[F*(PDAF6cV
+))K9pX-J!Eb-8#e`8G3m$m$1aILCR(&FfThF0)Q[G[5!bjPJ693RPiBE5Bq(`1)B
+h@#S`Frir0a!T3L)hRYFPN!!rr[f1k3Brj6XRH*Vhe,8!dQ4X039-qbF`&ZJVkc4
+Geb#[-'1dc"ZE0T48`Ni6Pe)3p62&`KCa*$)*a3q#mpH@MGlD644aqDrBMB4,e#f
+)U!NpkA"&53%X#f,QMl[$ACK'lRjd%kV&fE[jLHUKH2[T(8U0PLVG4lUV6GqL,l@
+L$BrB`+B*1[IS)jabb4qd'pi9U"c"&mD4[Fl5TeN5ljA!RG6-)e)fFYdjmGZKjr&
+(V"m5S2J((fL5ljAL$GA9P(F`c[(Mk9-eCC%b@$T$IZ5+!1$XBMfM9d-"`fI(kd(
+E*(@"["TFV$8rkV)%F9LmZhhb0$453Z6MHfd%UaqK!)RjS"m!FjJMTbIAq(%#KVV
+'&2-f5I*$qmjh1a(-b,G)$8Q3!+NC8$9['S2VEbm*P(V"BD`jKH,lNI-FZr+&55D
+dFLC'[mV-&GapEV,!fiIXKb4G4cl@fSH$'TEUm#ZZ&lUa46iEBfKD"5hlJ)A,dJ0
+BA5V+Pbq&CElDJ[UHR'hbP'$8Ec,c`FB*b3SDlKLLL"YY9j'%2!VpAQm#96TI"Xh
+2"22BllhZBHFa5+&X&UP$6pcVGYR)SGVZTQK*N8$9bR69+Kb4HX[cT2I#9q4G(1P
+m"b6TJfk&M4qHQ#&,,T+G24eGmmTd!C`$i*e6rHc!Sk6(dkpM$dUKR!e@-Hq(#9U
+VNCfSSL0MX)Ba4&j8[0)hkMN'QD99afLBYK!i("d0e"8cX!SafBSqck`l4A4+Bk)
+HVS5Bp2[5SmJ9"HG@'mlZS[((Ud9DUZTlfNH`qGm5FS+B`KiFQ3"#c3PG*0cJ0`@
+)4!T'e0ZQYZ)5fD8NUGr3iDL%U49F421X(r-fDD3D!liM!hd+@34V8[j19er+Q)0
+FG5#2#G3!2lcmiFE"C@5S&I#Dm'mLX@j%$#LZ%$Lk4(0Pl!H'KrpKGR*%cf5mT+%
+SEPB150ZHP$V5VidLbS[H-bY-S%Zk,K(S!BE6Gk@QjAEkcrB*CVUG"p$dScQ[PV$
+A#BQRrb25k8ZUI5hdmq8m2f3S(q9`+S#$5$dhap*`X5`iXUm3c#,9IPkE@)SC#bl
+qGYZh[AB`L'*jSfI#p%'CGldUcjr4T9`&4f&E&QQC$2Z[6G&TchfmracqE[,%c!M
+$#KS0)3c`LklJNHRUhK[SIi6,EF'J8Pph,J9iaX,)'0!md"N`9U5)If4JRNI!!bH
+3!#Vf4*NL[TpJ&Q`%'TC4"1iETG!e5Y2IKAj5KGh!Llh&'ViGb-Mr3dKH2rf3!+m
+DTa1KPi8"k@i&kV%Q`0Q0YeaAcQS"#'idQrC+`Ul-haZ[%0Md8*4haVJfS&fAk``
+@Vj`1q(Vq,KlM`H(G-Yi%S@KAJfk)X03dp*)6A*CCQN1*daqGHL0USla&D')1hXk
+0[)8ek%4(iTk)@"M81erdmZaT-G,B`1SYT&a0Gim8Y5BZifr%36"b6P+'10eMRIl
+P-NU!C`8NUaCZ$NL2h@XG`&2"ArL+&'[r1c1GiGq$hViRV@P,'4#MB![1Z6i$X,l
+i6R+qTMNR5Dc4UfAK@F6M`@jU2dpkEpV"X9TE5XM%%LQ6SG&Cc60#dlZ*[42LMNV
+1%Z8(4,6q&p)jM*C[%IKJFM6V[%4M4AhBC3*06,Phkj2K!HcM#bKi,Y2eK*deQ[V
+(aFD6"E(TfVI3Z6U"BK,Ki!mG4YU4#*eaAdRFM')e&!9#ESFH)R3jFHSFeG5H4iB
+m'LAQSYjYadH*jlk1&5rIU[MkH-D##FLSVkR`ZraJCp-V(&cKG@6N[J*q%%T(@H9
+a4m+QeUG3%SY#RlBP[Sf&Jb,j!P!12aP1pKC%)(#AZ9$fY(kfck`!lr9M0%T5i`'
+8bTD&ThShiQMh`aP`A+!Mq"ADhZH9b6E6bDlYAl`jm&-KH"RNJJCf,dmM2S!EZh[
+P!HBfrmA%DpSL,lXGQP``m@CIm1NDkaIIRXHkU(F,ACT@'pJL@b1b6cK0lV25IM-
+lA!I-amJr2XpcDleB#kc-R4I,9cjeXK21f9IBIqZI[!m#iCXjLH[(L@Fb+(pUSa2
+GcVFPThPka%2i@XP%#Ij%22J[rj%VkdYjS($@[-P`32mPa2D3!+f'aSpI9@aL4DB
+'cMlBKD#*$A1b+EheIAC(qifb`I$ZdFTL)fV*Se`XX9Y%`[5CNQG2Ei'h!"jJDA[
+8#SQCH,5Em%-(k4&-)JZ-1VpdbD3-N!$KiQC)p%KiLP2DmG(A4P)Ke[,fEGSK#I%
+8k135bKRX*A5U$HrrBiHZVF@r+#%+B8MmS&)F+$"6@Sl2"@C0h[aXIm"A,Y[BB*%
+Xpm5F"ePZ*J*eqTCFX-F@hLVe,2FHBM)6k+#qGmVZ#DiP1F$bfkCRQ[E''E8D3`R
+*+IN(FCKD)JffhB86SpI3%9mBm08d%'d09HTJ#2Xf%qlL!d)%eRRVHBIUcA*Z8UU
+MIb!NjNBAViU*S+NiSh)b1E0Hm&$lc5hc[L4,'Q$2P(#`2PMiUJ"!)5i*6pNkAIR
+mp[ABB"Z)[IAp"UZ0a$Ki$R,Hk$9Z5Cm&[)28$j0iHpKlVdGj,hf4JSVP@YPeL2B
+bp)cm*Gq"al#(DEeG2[S)cXJ6hfb"9#Z),*pa,fIef[SASaC,K[3ZI21iJ@Q-F4c
+56%DXB*3F&K!Y0*!!P8@MH0lF!8"J*eEerZ(i9Fe,*1@S&03UNXGVBQ4E")))5Gq
+KfX0j(35'hBYk8(rVm"EV"$YhK$UHp@bC9CYL@r5Si2M"kT6+liFiJ',-!eq*RLF
+T`[l&S9"85Ye#Z),dD,#hA6#*G0pHV#N,3UN))Nah`G-8,2[[B&ZHh&k(ZSXEpE`
+48jE"eZ!ZAB$[h@1R&6%m4iDFX#P-FG*(lBKZ--ZCEPi'fTN8LF6MQemM`Ja+T`V
+I)CL)aKcUqSmKd,R)aN%1*Q6-(06j%#cB!hki6&2JH%8%U-h$FfhR[`MT&b"V16#
+!UhAdeULhKFK[IkICYU[LH'mKZ%"akqSk#5NNpbkYaf05'S#car(FT4c#*)R+VfP
+@KUB@H+MdM)9qbSb'Uip9DP-8rb4Vr1ST+8p-TPNlEQ1VeP'8&-T8LT4K&&YSAmr
+[B&3DkGA5E`VZ'HlH9FHk2*EIC!(P,$GXFB$lK$YqrXbEpPaL0iaE5lA!,2pAC0e
+R4TliV[)dpB8kf%Gk#,flG-aX4[Xh,09dd'I33*&IJT[e&kBQIdQR5!jUNpPPQ0P
+1TU)3d@)'jAKDh3LMQ2@@N[fX*+r,iMrFAEE,h`QP(2`q[N%8Ge5e%([(bF5E-mH
+rc'CdddGl0,9J)QkmPHNh6'KI4FS$X,q,Y6@N+LpMS$a)0cp3QhR5*%Gfe(0p`54
+A!VI2J#CF4k@LM6)$39Xed%Hd$AH5E$P-a[cBm2iUd#8NYrU*T*I4hj!!X&1KYfF
+f+@0!ER$,,d'3!'q#@J8`Jk*,)bEc%DP9Y`-e`kQhm0@GPFDj,KP#"XZ%9Q,0V$P
+q'$r-'ihjJ,LfeHDLFYY5@PDL6LJMldBV8LKj-F)00+deE-@1(8H(065qjll$++[
+(N@f`)`pZ6kR+BBrf'MGK(KFAjab&J,8K$rq'YIihl*9[e))(4#3&pE(I5E($q[p
+G8Ur#J%qem*SIrHhMa@BSRh1+K0HpSI(Ne(Rcr`EY9Y2q9%[B%2+HQpqXpiL!rZf
+QQ##KH,2,4HJ"%Hie$Sd8L5jB51pd$4(#")kM54Dm[lEaiMjP@0+!*@T*'pb(@$U
+)S@'4p5amBjDh8m*0edL[cib'#VC%H+%Y8B*aNIhQ$(iRX3*5%+Z$)a9!9jd"SK&
+5b1Nm@rAX40aif9-DPP#qRXJdP**@d@NR9eC82PNM+[L!1b'X$,LD$a$+'kK$MSH
+,Ra6%l3M-mRSAk+!YRkrjirCRpdIl99$*4U2E8[[Mp!PANq*H(6el'DCd!%UFMPZ
+3!%D4l"Y1RZ%-Sr,)fGQq&eUbE20Uf@*[6d(j'@CbTUD'T"MhAm0MDbjme0B8"-V
+,02!iYlFhY#2#`3L1GLAQ'el+Li,'J1k1X$cV5'C!m#H@mI%fJY@&-RalEj'HHPS
+"[L3YCKqYi2cmq'LCJ[KQ8``%c,BSK"(L@!@TM%96$Me-RbA3K&"jV2HE5NGmJa&
+kkpqEikVmXB4Br+%bP'Z)23KeB4KUEEp%(Q%*XD#cE%ihKZ6@5YS(Ta[T-lM)*0m
+kl"'6kL(BNV2'(qG$MINeiH,rBD15DG+Lr%rG@K1f6khiI8F1-cP)*cB2L6XBpJ#
+SeE@Yall6c$eG22Y(N3Yp2$ARaB+l2HA@I(`Ver99(09,5f[GVDhBh0)QmQ%%4,Y
+0fEB--Kj@1f("Q'5eVU0UpL-@feY#+5jj9f,*Ya@)cbPjLE@%m43ZS5J@MHLlM)X
+Mj"IfKKM8QkZV(Z(+&bMl)+q'lIQm"BNhJ!'EFp)k&,PU%krKE(Z%EhPPfm@2$f,
+Fh(rC[qMKql!LXB03L`T`d@cl#d5C$B,-TD"60IAqRd[(3a25k5+Ck'`%KSd'r$)
+`E(V*A#%-@ZbkMUEK"YFCX+SVfMD&R9c'em'`DJ#-599q2fm3!JBhZVE"@LEX!cf
+P$mA`C%cQcI`m)0(5XQcSVm-@iNaG([8"E`cK2"N,h36e+#K3PEiY3MS)4LS,GHc
+)A#KmrSY-a+Dl0*3TG5X1hTHE-E`dJ(B2-@`TBpC"!HiKcpX)k)8XT)TJhk1biY2
+#$I1j81%Gr+`qSd"UheVM+F*JqibJT"lq[8(Ee94K)b*X($b5&kN@ICdm!&UN6r-
+k8YQYi)CaB2K9(BADpHSiSARAJ(d8D#9VhKDi`jUJcmfPTeM+-dKD9B@M%,#LMTa
+5e8aB))-1(fQLjCe2l+XBXSrq")k,'QeV@D8'cAcVZd5-4p5qF6qYG9Lc'%ae45Z
+,iqc`,IJQ-X2+p&Rdi@Bdm%MhrrlN6MaM$d0EC"'kTYXlCBP3rSKC1DXZ4EKRF[c
+Ye-(J#jeT1BF*q`"XeEDU!!Zh&FLq$"GpqRfVKF%-TMeVdZ,Q&UJi9$fd`T&$JrC
+!+YCQBE()q+lYmmJYM&@BrS,J-RLHP*Q"8*fRQC("q@1ERq9RQq,1l4[hhJdZ1@e
+)SRaf2SfE1#Mm40MdHUeM06XE9&d*FqC@ZKB+","m1VG5D2ALSQ396E`bphA+Eh0
+IY8FD2elC)h-9QeL42elFKF#0RKNfD&2I[LlUd*Fm0Gm``l+r@&QkIE5k+B%B4)+
+-2#Y'@%"TLqjMc0jbkX8#+YLr%ImE'AU+NmKYqM3&KIlA4dB2l+49K[f@8QUjira
+BVd'Np1a&62Uh'4Ih3h5MAFe1[TA3'%dil%*3%bNTUmVl3jJT4(*I`5B+++#ND2e
+BSV(4cdR0q*j9A-&N'hSI`lP[6jSC$LYILcS%pQ6p(DEfIcPabYj8aJ&R(,$5FHZ
+Bl2T6AThPYF%AM[&VFl![VPE&TDcbiJYV6%3Ad(aLXq'JkiRVJBiL%UaJQcEcA*X
+(Z$bZerl6`N`h9c8I-#@JM1d!(V2RKZLkb2UY!R&m)c@pS*D@*EPC,f@JM!-48bM
+IJFP1-+4(YT%q+hfIq%aZPE+QkH+'3+hNF&i#EFM$9#,,%@0BAVMl6+,N'(FQbKN
+Q1SEf$RJ1dmPCp45e95#cVZ-PTkU$MBdfd!ZN[lD&h,)ci#HMpa0&FVVS,!akEqJ
+9pMqYmLkJqh8NH4)eY,$-ai,BUR8k(Hp3CrCH%mbGM[FDL"X3dLVUm96!AF"*`KY
+KNi5,CYX@-JcYD5a"D%#-8F3hm+b!dhI#6r0c*3(LCPQ+FR'&"e99EkR`A-6UKar
+Ie-+EM2ESlQ,086(9AfkE$"aDdGR('2CJ@@@XSFUkFeqYpbmPUk&$rH,R9KLGXYE
+XaXh*132+K$+['S&ri"eDfJmFV)cYL9ZMB1(9`!@@`P0lS[J(NmRqYV6VZ5DeJ1Z
+CIdp-!pX(j-a(90DlrY2l`(H1HGJ"%4"Q1Ej"bG&-TbNpl[)"N!!)qA$3$FENN!!
+m1&[N'MZF$Ak'[@q4NPbVDE+`SrF&UIUUPR,efBBfM1XEc9edTf9(R6CQ"dpadR!
+C,M4,D&)*mK*'UNSGceU*5H4J2G*"SF(B#brTX13qa&e*h@3bc*Ml$J95%6YZR0Z
+%J3aZIpPDGTB#faQ5SU-1`BD`3"qk"9"HI9MPYH)ZicG6'BNDPYYTB)@$JCRIX9#
+TDZ%3,ae!L$VGpRC)dFFlpRecAPL(XQbKm8pFCUY9b&BADXRVK,)PY53kirhKdC,
+ap9(k-CCLaG'-'IaPlrLe515JhS%RIC-!'iVQKH2"Z"-8F$rllrMc`2L5a9$Kb0T
+V$T6`Q"qQi$q)YMX08U1A2Ua9NBHZibb6HqD+jkXUT,BhZIhrJ@!Zp(r1el%!q#a
+dkMHiqe9SD!FCJ(bQ5Tje,qV`!D+bp'+iF#X,A"2Hak1UBeZ#)qcDTYCPAV!Q[hU
+1dHMjDYShdpd#a8C',+DYrc4+4i*CEkG)'pJ@fp#-ER#A*[F'c'#%NXY019VN1M'
+JjcaEQM`qa(q+[[-"'&X-3f*X'DqBDS2VL5k#hE*pS$ECSUIU(dJYJ@+X#%Lc8GN
+#AV'YF,ke+`qL15'N*KPNM`PQQ4[[PI$$V[fI"Re(-F1$hhIX3Y6bAqaPB,%r8(k
+VqkS9BC!!(r6%!lI8lIb96fkYp"9XiVk"Hc5p@r$HqjM-(q1b"D@`pka,Q%I*cQa
+I"Z*(bLhijc-4i5D8)Kh`p@idDL@RC(61i8(mi59TqFFp3QRTV1TpH9ZAm"0(U)a
+6aLp`HPc,PB"!,'8LhjDde@"mQLJH"6-pjhPlVBGqmq,C9'`ja+T-%MbBdL)d,LB
+L,6%k#m5k@!"fcH08YN0LSBCq#P`U,#P(jU6YrNF5d`0c9(`SVp80ab[,p#aR*E@
+2KfGk@Ja5FkAree*ZV5aEAVS(E6J28CRl3NU@f$[L'hhfGG8h'RSjQp+alR@Cb%m
+a)f,RFS`ZGQVhILi!MmM+Zm@%L@iaG)##C[P%fM,N3IAPm(RE[b[+l(*%Z(r)-R*
+T#ZYSTP12+GMHL@HT3eD-RYAB"5KAQL@1dQp())a(2dXj0!rE+RKGfFcG&5-q0c-
+APiVT'S2hk&[04-Qmj`APUdJMS3i[KCKC`PhPE6Amm!%*$$[10FH$@ZCL[phUL3Q
+SkiA)Si8LF#Fe`CMCJrS[cULRfcHKHFbcKG(aKmbRC&(c"iZhEqGq3m*m,25MlVP
+1,bJJ*DLXR6MNQeFZ3[ePZ%"3TVcJUjHKUQ+#DbI*kc&[KPT-(Y#eV#bLN!#d)3i
+fTaeC@pc9kdZrmdQld,G'5&0bZRVT"HN0NLfFS4EYcTRSii-)m&*cP&m8&2SS[2h
+)ErJZU21eqR13!!@UM&'hZ6E#kL3-T96H"+D%pR*Y!SHc'*([1$1L#%Qkjh3QCpd
+"2Z#DMfq(`EbL"$3*B("P*6Hk5"`ZCPFbPJArD4&qB-Y0K*MH(2kPLApiE2%3'cL
+T4BPVAD`UkS%p"9c[CqI-)LcBTKe,A28YRVeB,$%)1L'C@2lh,k!PQ3"U4)IcY0r
+ZXFLeSRdFZG$Z@Hi85aIf[04R`,2@10cNPj!!*E#2KTB)[KZV2qSP4HmEmH"%%8E
+f009DSKYNDGbr`UU99cNL@am`eDrV1a$BCZHDY!ECMHjPH@b&0$XZSXd9E@YN0YB
+iH"1`GZY@*RYrbe,`[YNE8H1Y5KUj8#8#6"fQFRl%B%,VA2"IfGLZ2FZDV'-pD"8
+)I-%SET3J12a%pF,,5Mm%JC6j(%4kGTSVkDG)[CFG#`kZfDh0c"Xbl&(&`FlHHd2
+biA5F+E'VmbNlY-h(XpqpEpjp[$Y8A(SLqS(l`4#fF@'BmB!,"ebpDNf,8b&qN!"
+m%38QBNpi)8i*0Kl#Q!D-bkKHD!C`!kE0ac[P!,YM%`elfY0a48r$r#cTepI(TZq
+@lfQ,"[Sb1kR!#KT'C()'3'il3L"JSqjTKVpXLZ"Vf`!X8icA+-iBXNrZ&MCULrT
+4ZXj,DE@"5r!F[ES6qUCQPl[6Kk&1J5b&dRU#U2SXj5c5TlXK!8e%FY)&83XI0Vc
+-c0D%R%%@eUS+jkk)XejR$`+-f)8UA4K"hh6ILKPMd52GZZhdG+Yme'`'+"#jVUT
+cV-&h"8bN8jmd+b4pa(@26+bHGNSXhmdKL'9YKC`l+NPY%qrX@m'*R!SX%Aj*MRN
+ZXYI*$'-U+NA3LGD(d$a2JbCh'0DLc(b3!&KYLd!XlA$5KaHKqV*d&ShE"j!!50j
+JeX[qMR!eHBiT(9[dA&jIXG*hba"dHPX*jkL$fa)ZHdDDMb8F8UVj(1A3Vq%A2Xm
+3f$8-p1k+@M,h'cBH,eMpZmTX+p!#UT!!CTm#Yq4iG04[*CGTB#Tae*ES!,S*$K+
+IMYU#dSmRB28b#FM'i6[3q&mlSbNXBJY%(kilJc*fFRL!Q+8,Dm5ejd'p&c1GTp$
+VBU0&$kpI+qe2S1-*(["hJQ81K0lTeIGd+$6ZdAlV4d'86&HB#RYVJ"Ur55Zj`d3
+Zr(1cfNIT93d3FYXBr[9NL@e'8%,2TZjJkfai1Mcle-CBZl'DJ%8$c(P8F%,kr$J
+iX6FfbS2d2P0(0Yam+JX95JIiJb!199rGUD-8cU9&JF`hqXlZBNeHTNr%DD#@,V)
+f@pL%MP$%ZSH!I3r[HJU$95,MGF,),4`A)*,8@[PJi5,'"Z!b*il-h($&pfPbk8A
+DK(eFJ'!Ea!@J1(A,qhNK3F`EB5#@)CC@q9"L-0QYfeI)aiP&fd41jFKpPAI8"ji
+6+Rhb8fP*GE1@-*a![[B('3TELEM9YKEP4eG4KqmId#2d[TLYcLG%SXPba5+!BbZ
+kZKHBla3!5'-*bALR)-ZYICpR5k9Z9lMm+N'$p(M4pam#6RBa6RD$"T,qRTJl,'9
+mI#FIc,q3!)bJpXQNGX[1%lKeCAeh+0m8""X,k+1eQZq@cVYp@qUX[QT*IGr"G4i
+IN!"ENh+`S9X*UBF@#aqQDHerPm$9b-iZ#29FSY4kR#[kTcUjP$*%VkjQUE,b$V&
+iPB8d*E,Pfbci1-IEXGYTp!k`Hbk-JGCN%Tm)`dRY$T1$Bm-Na"V`q1''(9faSF'
+&1-r)eGk48bb9bQ@Hj3h[N!!bi)[AJ!j4KBeYaH0m-()*r!d`F2I#[YE-VEY0lDf
+1T6,a3J&S)i*69)f'Qq"cUjhq,`!XU*`J*E*YG%*)kD`9RbRAaiq5X6pMI)LD#C!
+!jNJl`JAN5k4"Q#[62)cRAC!!clVc#D0Cjpf$[$BhFmG@$!HKQVH-@pIYf0&QrK)
+`VQV29HR9KEhZPZJU2N*0QDfbr3cJ'$f-'frZKB)XNS9Rb@$#V(j80)(P9jU1G"$
+E@Q0'5pfhJqpSD&)hX'G$YYGa2&20T@"h515!8c)R[C`K2m-9GMjRDJRS$fUVa-N
+*-eFCN!!Y6A4U$mrJ8*AM2$U,1$RkeeiR#Q3,1)pq&*ZaRfE"H9(b@U1Q*$BViBf
+ic41"@a+5ldA8QQ[AmETmGBcKQmCph+09Q2S0YYT2"Pra@dXJeiG9Q5q&YAZ9Fk!
+TYlB,S9`[aE[M@mR5E3,PVjLH@U#I9A'V6F5E5$XDGSV3L2id5RMB,S*IP&2K8((
+,F@0R"K"bpaa+rm$#jJ&!AQjh*9m41Hmi54G,KN468E-RH+%)D#UCI%#C18BdI%)
+Pk(SI(4bGVIJkCXKPf&,AiJ$!KASjq8JlqbJ2N!!-kaUaKAd'&cR#L"5X)faReA@
+S4k"0l0&Ufr'Hpr&l'[(4[p*9Zp`Am*e"kN1E+YN4d4-[ePB5GmbZ1iF5@Tq1*9e
+(A5h$"qUjUR4h&!9CE+Z5fPqEI(IT(I%Q!QLr9l)q8-Iq%mT*#m6T4Q**(b0+`![
+eG(mB8mf4#Zl#-S`jG'Pcr2KrHmijk6h2)ZFi*qZqEXX,0He@'[EJl3QifC!!#5Q
+FLJemD"hb$8"Y2k`[+CE$KRrpJ)r(9k$p(IN@"#1Q"@CjiZa1fGA@Y+5p3aFSH#I
+(iPEe3aK"j#Mh0lVl4m#9d)bfDUe)mUdQ8CUq"4NmX"CZM46iVeL+&j*@85qmL+f
+8QH&Xl!YC1[Y)622PKh+-Ek4MNqPbGqGH`3[h(ZLjTepNL-B0BU`@LDD"TbbYB9f
+F6CD5@R0YrQrf&D[T0h61d*&3YMX8cUXLXpT+r*aJ-DYD"D6h3F)AF1X6PFQ(3E6
+4FlA1CYU+9VEaPZ6r[4r*F3MlVEaCXDc4Pqi#L(jJlDIrQD"@ZVNmXFA'Nf`KIMT
+pP963@C2ZmG%3M,c4-P&qS9Ca+-*!#YQ+$FQbqP-5S*ramIP4Y"4!TD-TdXKCkPR
+q6ZmR9,XA%T!!1"16-Ca@R1h5CAj%3EF9"k$BS0aTTX"(3kN$d&[4[`djQ&THG*U
+2LR!)b1Z3!+5BfZS"&5j0#qZ--(c[YXb0-G4JAPd)5,2(jaP'32e"%fj)-CFH0#Q
+6VmDQ@d%Kq`$f2FAh,l8PqmdFjUhY5dYAeSX1RRm1[VHb3rQi31f6L[U85Bi1-af
+R$AriDEJ`82f1jX3#"Z+kfQ-1f3lRbeaG))-*5l3#!F,15"B0h&9RcQqP&Il(&+V
+jfk#p-,9`5mjF@f@QNc8`"&,eYa!+(YhM-`H8*QCNR*!!L3CP+jN'9M[alG`-LdV
+C-b$EG1k9%`8JC5@XK,6q0+[D(GZ5C@@b1dd(X*k5*M1,2X6)hN#0fRhjD-GSY5'
+P(c5JE@p#AVb64IT!5Z8d0b8+(X+1!A0NGP'C29#q,dULT9BSH4eG'Np4*bFGKSL
+[($$'0J"MdTERNK)#[,#8SdjZ'[eM)N5$D8$h8@cG(N'UP&fQP(+[J2#Qh)Cq9Mm
+Pjk0YQQTl#!,R,5MUl"i"mY9`+8&&`9)&j'A%[lTdcRT4fVLI0JB(GV&LBY-1(UY
+iaeh4aeApS#b-BVIj+jk)e-Y@5I82-k3Nm*erV9PIJ6i@U1K1YIGRkUd"TVJ*H%S
+05#Gr4&'XHP8VMF*955ZaaU-Ifp'pB*c%Y'6M+ijhAL-hmA8m3,I,@#d*4HMS+"d
+'rKb*+ZpN,4h,QT94+SHF)FYra9f#DGQZ&jCdT!08A'3aUXGPT,m`9`5d(Pb9Y&Y
+#fSa+d2C@[@SpY5Q+i1Ff!JLJ03iZqZM3q)5cD(*ppX&PiVPqE!'GpEU&9GC"N9A
+'!01!6Jr(2XXQYjqS)T@qT!4(fATcS'*9Ue98GkSV(2jpqff4lfAFHd5-JRFIB*S
+l&ei1$AK$IXR&a(XUEcVYU9qiQP38j(-"4IeA9l!#2icrUd9YH+(HiX9m'H&AKZl
+YeEZcU)JK9&D#fLNaI)ldKK&5VV!!1`1Sp@q(eY-Le*9bQq*)paC9E!hLQdICl6-
+mlC6DN!!RCPYJSA)9BR'@K&DjRiSA2j&"T"#FTp,D`2qRlk),KMV`S2KQXY%blGJ
+6&epUIrhB)jj3NDS8LaV@2hX@hXb&[8ddJe4$'CQm@))1b#2(J9iKkd*qhjXQA0"
+#jQe1,la!JA"%p8(-%MU@QD+#"rGPR)f5583pYAf1)jfBlYZD$H&kk+$3F6Y[#QX
+RGSMMZ4UG``#B[YfGcRfidAaUXf2LHpVa8h*%4(kN'@dLQJ#LLf+FVV[KchH10)(
+USbmjEiJ*9E[MU&6CC!%NC0f0R&RpAS3Q)@NaJ"8$HK2JQ!%[FSl0(9`pDY(,hF(
+NF6i,V4$-`e%&UV#1+U1(@rj+%NfrK$P`d4KekU8q+c%fi+(j,HE`e"3(#R2N4%2
+Th0NFQ"30JT3-ef-BQ2aHF%m5!Mr"$B-)iSVkFBA2LMf1SEN*[3dP$+m&IQl04aX
+EcZ@#QlE)ACZ-XDN0CZ(KMd10`G&N[LN1+T-l-*5FZ92-%#P*&XiUlpATRf0%+A9
+EJ-Te4YGKkB1I!UKl'k0ibC4'ki,'!9&39[dNm$c[4T'VhFC1(-ITAVe44EIHqbG
+$Xi6*-[*BMFYG[@E#ZJiIS&G%p(#HiA1Bk0)d%lZ%(h'(YN'&qS%@F**-i3jqBIb
+*!lk@8$AY"LAD`0D$6%+P'UQCIHT8p"#E-CQApKJ#D6SfkdhFS662&3,PL15[CI2
+)PGTqa5!0mHjMf3aE3$FDENaaU%2Pf%(aH9+8D+Gc'fIR`c1r*GR0ZDpbcZSTH8[
+'Yd30#&qFHaXlTMAp#iMm3+pCeb-VS&88l-c3I[(AL9CJc`jf)qac)Z@%bX5@T$X
+4D9YRmY8j3`+#dEG+4GmQNRV3ZB0R'Zm1Rqpp#9!EjpNGX94I8+q1qr3rHFYdSVX
+YSh$YrVmA8*Ebp#38NeeTXj0CQr5HIb'$L'$h6b[J*FFhD(DJkTp(J@!"rcaQGC0
+@dEGFESkLQ4PUG+jQ[)U(bV4II5jS"dPH6FdB+Y&TFP(rApd&I*D@hYl(%pdVeSf
+SjCQKK3YIA'hYb+)QG,'5rcTKN!"M+ZNTQjqIJ`S+j"8pYDEVS'dH,f(-Vr&Cr5f
+#FK%"h8kMQ,rNI#PUFB@Q#I8h"iFrdI*,%pYQKr[A$m'J%R)e%JdEM5i@(c*-pIL
+9P@,Z$cl-hr)ThmMNcH0p4&e$S0*jrR$Nq6mN"aZ9ZJ@rl%F1@UY)`#mUlU56aKS
+hR3(eR&m[b*LFAjdKad$&GVV1PHFp(U`I(AJ8f1c@T(i9ic,[64++KL0b2GUHNQQ
+BJ9V66SZSe2ZR`!-+cQjVFK%@0lGK4Y!AKFAPG8d9%PUd6X(LUq$BZ[J"0%1q+Ff
+!PkVj9F'Bd$8q#d+i+bPYV"HKj4(RT,ZD6pqTSK5Fq5L,VZJmrZj&i!lR*DGKMSI
+3"e$PjkL`hJNmf+,GcL'`D*IP0[VC+2+Y[qc6&TBZf-q6Y%8cd$Gh0&93MfrN,H'
+fE[r&QraTp#X%NKVbq(DS#p6Z"IrU"j4U&*,E'0hA@$KRF%+$i$TMU!3brQm!J#r
+0%`(C!J9%`(Hi[#"aUV'FVLR859L@p04"EKpRMVVG!9Ge3Xi0h3Bd31*04*6j$L+
+fb@M44qkEkH!0UI`aN5R*Km%kF4e)fF1![B,9SCE#)&aT(h5*9r+bYK&P'1[+lEE
+AZU&+!lEd1DXhELV,dPKMU6J+65B1p$D@P3FMCIkN'QlQa$a-Qr(Lkfc$[S6L9L#
+Qa'4D20QYbNqEV"[[@TlJRLjdT`*H&qC,dMKM9%DCjZI!p03-irmD+(3&3'2rrB*
+UBA(&rbVe6(FBHScYrbP%@4jLhT+5rkk-b"G!A%6(@*!!,-9H9JCESLVC$$0CU*Q
+S!A!f"!A'UCEG%%6"c6Kq8,jGq-*Nc46qJeDFeVXp9mTE+0kBLM!BdbBFFSCD!h-
+aQTl$VB#I'a69Ib&fmbGFD9i#03KXSR#)k'EQS-j@,B8E!Cf(3N,A5IjKUbhQ-d(
+ba3-pF9Ec%%-L+&P'B9M18-QGEkp`C*Sa5pI-8k29TBJiNLST02@(QN1EQp"1%Rh
+`Y-*%FKK1FCFeF1pEPa#0,Z(ihrC!HGX4eaL'qMZJ(3m+HSZd1VcXS)XPecHAST8
+k$ZMNjGQf,b4@FrTB1bYTYS&Y%"d!(c%F+!lB-Pl#!dj-l4EjFSP00NRSR(1-1*)
+J2642PRf'&-(kEJ&YJeXKFecramGf-qY6C[SD'142ikXYhlIYXM"'#qrGZb8%%9Y
+L&"X#*`F6LA-B9Nj3ZBL#RmqDcSC69kT#0#[NK%CjqfJ#1i-c3iIMVTc1$#ASNdS
+KeRK-l$Ckh5cF#%ZS*`ibY'IMfG(GmeclqK8I&Db#r&0bFFGq%+j063q9!hX6Pmk
+YSJ4G40RST0pN0G&k5j-LKAI+99jq!m,6hAdI4MPE[#hrmmL*P0e`eip'LQkKl4"
+H[18([pRX&'bmN!#mbNIBI,)AKaJ"-$jcNULfXBipGH'DjjVVm(YA&mJ(-!$4Xcl
++1BdV*-V)D9p02Pd1([$Ipl4Pke9PKN1'$JCQP)C@pMH0lFR'#`ClX`)0l2KB)NF
+*E$&9KF0Q['*`[4B43KrlrX@pYY)8(Bei[hCL*QKTYX&M3Cq8hJR6A9ceD!kbR,P
+%!0k"3UYbaSD8[!k6eD!E5b(H4I9jrc29b,"5DhZ2f,ANcRdi[EJl[FN2%T5&2@G
+q+%*KPkKJ*L`X0-Jq0`UXS2JI2iHM"dTpU1$9ViBQpUY9GJXJb9d6!mM0@V@GPFc
+'mpNl)idTYaI,m#B3!R0#R-8*QAfY+rKDjm,'`Eckhm[TNMRRhDV3i,%2fX[*d&r
+A2K3#'-,(pk`1&PQMddB"FVI2U@"U$bl[A-2P$m[G)E0()jS#)K9+FcXf*&HJfJp
+'UP)JE4-bKdFk!($B2EFS6URErT!!!9kMI0(%VQZb'9e*e#Q8i$QR#p2,6(['b))
+09j)rjp6F"P@NFIr)i(CR&5dchQIfQN&f2+FPU[l)BLp`#b6!%EANNa`E8aL5pqK
+&hC1NLV4cS@H2-I1Gf%Y5A&3-@H4Jm)hMe0r,K4SPm2LrCT!!ii''BLlI0`M!4r5
+hUp30qj!!#Y$$feE8*NjbkS#$JLdFQ)YmSmVY)(dQG%4&i9LE)lAS+N!YA[9PmX8
+RAGh9Y`Phd99(9M@jLK(A#(N"d,@1lpdpmC+"@05L5iL'LGT,@6G'JpJ&+$D[lT1
+D,kePR[CQS4Z@%ASfFlVa"$@qhq6CC)5Mm!8MB5hD"&$!422Al,0I,C4@G"BD+85
+dcK0D'H(1(BC4c#Q9*!VD1B`JrK8`"j'dFJ,8("6+P[LL0SIp[46eA,,'*qcP%!c
+k0eVR4VKmXTlhH3J2Cp'"pI%r-HkLSLp88Q94caeT5A0N&c(B$D!Pm0'dUT3-jb`
+Pj!"l2)f8qr`iF3@6dIiYiD*AchPkr@EB'XU8Tq"%4AF&Y8*)AbXA3IY,N!$Ni,&
+&*EqH%MH(I99+69XB-0hePFCq,dF1BSb!p#ph@HI+-TYT'E8K+Q"6b!@Le23-#Q2
+5h)XMq+MX#&!ChE-FhqXj(SVh)a)EPH8YK4@N9qbQER&i8rJr2iSJ,2APGU@Tpm)
+"Pal%F'MZ55i"(!Lj)qcKFr5!0aM'9M%BNq[i*'a'"CiZSV#-L(q8H,(mc4CKIbD
+fD3QRAM6kdj!!-2[p3qC3-Y'1q65ZTR*KXTZX85($0*i6c(V8C'EdF"LEGmi*Ll!
+qp[(I&X3I!P-&Rc'3!%`j+j@FhmI-b%k9qNdb4kZeKeC(EU-'TIGdIr1-8Z)$dPp
+A(6AqeZKFPRFT2@h-qFXl'(C59bNb!f9BGqHi4pXXiUrQCXlidA#H-CT`66I2,i1
+b5CLXfFeNDZD%"BM8iSpEIc-Ihk#I+`C+qCf1Ei8XK,l@TUdS[bNFV+l!64GRrY)
+Ub8'LYac@L$+f9F@Y5C1kQ+"rXDQ&PSX2"-AV41YGK4c0AXT*0rY9*2XUif4eTq0
+$eKrHD)j*Y9Z[crJT'QThJHIRC")*&-'2m`p2`Fa'E`9r)+66T35QArc8C&HZ8M(
+&&&i@F60!UJZmi)kdp"D8mKq3!%ijdIQpa$["@eVRlLe16"PmrNK%efF`'RVm9+-
+lS`(R&DLM@5A@ACRQ@Mf0#!3eJ6d-Z#b0SQ@,Ke0Up(c1DFmil8pFU-H3!&TPVb$
+BSq9eULhd,Le4Z,ABJ!NC9k1U+fDC[bF9-X3$MLZj&6X86dCAIJJimlc'6UiPX"4
+S*kUla5(GfcL2VrF[c[kID)mbRhlP+DYEClYPAUMJNk$EN6bdMCbcLUBSjp'6E`3
+VUqJ,K20A8EVk9TkK1IR4YHVMH+Fi6hddJ[0kk0'G)d!rq'R`V2DK43JKB`34UpB
+KldrDm4ETDF&PjcLf!a%VlTaMRFeL$R4ViMmbqN%#`#G1K(djHLlV'5-d2a4Zb@a
+Y@30hN!"D9YcLfS06lj-!BpVRPL6Ic"mA1%'%d'AcjKYVCfN2k)XN!rB&4MZP'@,
+EFTLbm'fYi$ikAj8*cB%+bT@-m@p@$i+F&0ZThpE&LYKVf0%4`Z)[!pA@%%3ET+k
+`(l!Gb+4Zp#!U4qJ-K*&-TX8S1(2e$Y8r(VBX"8X8Q*p[arl-eS#4J,9d+1EG!qh
+C3"rC2Z6+Z5NQ#A'm[BkVAR%R)c[Ka,qqG!&+jjSda)B1j$elYbprf-0r)NmRpaj
+LiTTM-(b90UTVfXcC!SfQ*9"qFh%e'5J%UFhD50&Z@@`BMqCrJZ%MY&'k)8@9X1D
+"#p49TDf8L@DVSCi(R-irGMh1[3eJ69BK)6YRbhp$N!#eC`4R0IHN5V9Ge)Q-TZ,
+%f",!DG,YK9-ffdh"5(1UT0@dZRXbfMZUi0"D*V1eTp8X$U3BQX!-rjZ5qHq*,4N
+2X3h!Z%B4KS(je6)Sh8k6ic2kNfUN!,I*Y*A-a0$"S)FGJ3mf&2SB8(C2*f5AZM4
+8e4'$1*)L3*PRZ`N@S)-hjDqUlF1jQCRb&Upmc#(cp`R4B8%aIBe&KheG'LQpG9d
+UCFlI'PJq0!2k3I%(2T26YVN@UU1%[Bm@D,'A2)5Q0%r*qBcNCd)D@FKj!MP8BeY
+Vr%L3!+)JU*-[GqLAYHJP1BmLfP"b`V)h)V(%)'Rmp"Y)Y2cjIiV2phL%b+-Fc%%
+pb!(,4,a6%Zi!4(*r2A)6XUcEDd[)$UDibcKM#+!H[3Iph$iR0[[IeZMPTB4@TB,
+14%TeSMiKIaY,4hq+d)M%6flY2h$E83cjT$(S64EMpeI))(2@-*dRN!!ETPll[M'
+-+d9d'HBLk#rlS`hM8-dcEAcN@"6j#542J#LJe-I8HVIXE[K%"cC"X8TShR+hJiY
+d423MI#Q(LCD6"CQh,MbU+JpM8+hp`JEA&&a6[U8#TUfcTlM'"2fHQ#R*VSVR*`,
+5(N#j[T'i8pk-IhEqr,B,2Xk(1b,UKe$`I3SkTH$dIS+-'r"`2`U$-U+#e$paF+m
+&RMlCB9T-KD(k(`EV*JhXH"5&cH6AD5c15&kmUqKR4LNI)"5eZ"%)$Z1R)PX6hmH
+FPbCaV%#Dkq9SrecF@FCX@CF%N!!@9mI36&V[aL6MV@LdJ!TZ,0dE+c[H002l(NC
+,$$NV*2F`4cK5+V1&[GU!bl4U#+p"BH8)&rL$BGE*kPXiE`4IpJ,ER)mYLf9SHB0
+(XeP%%c%VRQqY2K-G55d3$ame1SHqQm'K4GT23DERl#T`mCCBf&A"qr6FkBN#3j9
+iYfcT1Sh[N!!FkjdY9-V[YqVif,iJqiFAN!"E'-XSrD`C612YrVPmB$Pp'@&9!Y)
+'F$m'8hX#L,hA(5[HGpRRYc`2L)UTfG"+!V"VrUIjpdCT&b[(a'94,DiTAf6Q3r1
+&1&aUK(LSf'HE'i3T`3*&XL1#!4ECVefFcRFFmJqiJX(r"i)6j,',AZGd54KZSIN
+R(1#@jHC1RIIET*)b5dZ3!0-cPS-qYJd+)MRL[+Q!j*l#bK64Ghh1qi%'h#$Sekq
+herCHJCl&QJ&NUrbAXqC+UD4UV*eB9Hl[a4r%pGT+SLHLKe$K4f0hEP4Fp850,rL
+F2mcVbS"q&IR3G`B`rM[(%N0(BIep5h#,'Bmb1AG8STkCG[hdZImRN86Cq6heH9C
+pkYd308(V$rDXHlV4+-26$`6f89ajSCQp@pC[!I,'r!DAr,#&6*HbXI4p-EFCG$h
+kd*!!FUJ8SNkU8jbIE#"aBKR08$GiGH*0RI',dXdiBB$r,'e#'U#-DE!hA,j3MaP
+*Z8RJJa8VCk9T!A(#8$-j'Xb&KNaScAlIM-5d9K'PhHLTre!NUGN,I!Kl@XVMU[P
+!RYi[6+pLA2&IQ&XK@i9ZGIXPTbVr'bJ2fVl9+*Gi%ESlX8&b@C`FBHL(Z-30X`B
+rHhcjL(VHp90pIMDi@XM"Sa#-l9e!`QHNXKi!KCX"k[bpSr([&,*mT#Y9!T8%26a
+p'MhJM&dQiNmK%I$$V#c$D[B$CJ@Tr-Nb3'@EmeefF`rJ6G33ZH2f#ED%b%3,a"d
+kS'q%lMFb(G05G-!D9R!L1CS@A%Jq3A`@88iMF8ab2l2CD`P3(e6`NkfeZ!1*Sd"
+NpqdNZ1iQbNq2C4i&!`e8IH69NYH9Ie1A2j1,U8E)DN5hUr(ET&DP%#Y3Fb(jXQa
+63dRrR"r[q"P2TKeQXE)B2l@qJXB3cBT,qR'2GcbJ-S3qB9KM(aMj(*N))rNUJc!
+8kZed&mC(KK,+5GM[J8ZlF")j5G#PQQ'eB#rJ+TZ##iZ$#R9Mp)hhbBLmc0b!Hh)
+eNar1MN`*mX5H(d8HeDSK(ZI$*B!el+HeN`QqVd)SFEemmS,ErCZ!flRdD#!TaZb
+[UDT+KD-'UL$@2MJkNqAjT3rZbhrcl!mLi"$Bl)dH8YU1fYXjKf`IL-qZE@JFZ3I
+hI6,A,m5bBp%[h8d4l3YpTS8b#$8Y@r#BHafkcY9T-p-c'&&Bi0,[!)iA*@6Vemh
+Lb"KjimDKhLmh)T46mh#VjQdrDR3kMJm+@[)*@ZjYAHYcbd2dN!!-U8Vd6'U!%c!
+VH&Sa@Zbi55Ba%Ef6LHiN*e%4p2+aDcpRVSlbCqFbPKfk8GKQMd,#Tpl#kAM-$*D
+[q2EkZf2VF`UhVC!$'Q3QJSR&jQ1X6M[Y#2MjKk`p,eVfSCNd@(Nk8YrB-@fVE22
+f$RCZa%II`AM692I"4k-C`0))Tm!f2L64VA`VXLCZCBRQT@!8,*dRXd(LI&D5)-T
+qlL9-pRrPQi4APmmI2UQ29q!5f)ZqhQN[eI,HhbM0Kd"`Y!`f3ch6mHFZ6l,FeZV
+E()cNMdXi5PD61`'61LY8@qJ(Q,Ud55j`JGY&EV)[D2FY9F8dKPdacUE'$I#i`@B
+3!H1NGIJRerBf[r3EpP+ijShE,dU'H%cM6dAMdF&EX!XrF&kLCXXVQiM4MI(qFj(
+Y+Ab6b*!!1&0c@5H)r*d*LNHJ!,!8GKAh`Sl@IdA-dfLf(KjFUVGVI2f5k3*dJdB
+CF'RaL2*p$I,f)(1fZekjA"p4b$#U4id[fMercDHK@laM@dlp3*-TEqPN@SGXF2d
++IBKK@5KpL@cMYZ$-#1RTkZD5cFNb5XLS%#RQNZ1Eccf28A,Uk33F`ml*E*!!GVJ
+U,QBCl(c`kRrqJ%bAVepprhN'"p5aCl+IMLDEr01qJH'[8%LXNZRTbQ+A"%Ed-+Q
+4BpC'd0eH*QLff(3q0bH$kLS9F-6PEq4SX*h2pPUlA'ZDPXVLlJq9p&)VU1B'i&P
+2GY$5f*!!6'kUY%EfDHQX4e-`d'+QZK4P)Q*B1j)2!Y0%rZ((,+X0'ZT#"rY-cD`
+VL$!9'hPYd1TM0cfNA+AbMUDUabekC2TbRVVS)rX`Y,6f5ePQM$`)Y&c+*hVRpcT
+*N!#IecjB9"5MDL'Q&EPaqNffl,je%'NqH$@lBd9XqTpI'qM"a6hRkE4D*()e*59
+,[XH'+%%#pbN$$jQ3!2VN8#b"Tj*%K0QYd85&U1ref9R!64RRA)mQbCe+I9+QQCQ
+cD$DH9(c3i2[0$rkETrArCYKME-hDcaqbmmkEc"JLl@K$T3YP5J#mN!$qEVJKIdZ
+BpZ9SB-T1mC@2d$*AK$0r-DeL1*pR4N*ChK@-39lT""[jGGGXGXYY+8B1c,FXV0X
+#`%445iLm"`1%MrfKI'*#qU+'Sp6Z0GaHj1X6`GQ+c9Q&ZET&8Kb#52ZMmJ30"AZ
+8`&9m3N[eEq9+YDE-REU4,Yhc+8C))lCSRrQ2[C!!GcVKdd3Pc)Qe14IZG"(kYJd
+YAVrf"X*T)30G+""f6b!aX+62eY%4*hGe)!i*5URR2"%m4bT(k3`f5NNieHcBCUh
+Ze!"Fd#hCH!6hlM"pqf"Tda+qNiclT',TqbI##hk"FBaFmBArN6U5"f*MB25`,mD
+q(030Q2AQBT52EbeJL4dV[#2(%Ui`KDPAQG5d3YZ+med(P&f-,QZY(82-Hm(cZ(@
+Mmqkha[4I*m566G!"#CdQ0lLA3'9qQk`kDXa)d!kpf,`fdX&2YV%"0L((@N9I`C!
+!KAI+jR*-a5eh4TU4q4pU#@%VKX@*##D3!2,pDmEjYD#T,&p#SXHHkCDpSMQ'0qD
+eTlVNq)qdXb6#V$G8"hedGTQbrAf*0LbIimVVrQ8P%BAChHR',j!!j#31E4*AqI1
+LI@iGG@,m*TJhKpE%ZrPrpThK'`8rl00M-h[2rI8Z!CHf`X'[4h"VJURm%)9P1i5
+$#V+$[T0D#j9M2m%3@6N*[ZIi)h8T"YUf$4GPh`r(PEFHQNeVKdqX(L6NZAm30),
+@lAVY#&5jG0I0f4ihe`DcT5V-1[Zb3AG8Er4HaYpAHRXJ)R2re)KUrjbN,Cc,LK4
+$@ef2KJ0!L*CBFULS4&)(ek3'#j2#Ak,%mSb&kdicl46@bk*+J!"b&YRQG10q&cq
+F4m"l-H(+ZCf'pS&ENXU'"hb$12H3!2cHP$8jf!6'MEYPI[qG##i'Gh1L'9XiBc,
+M'rS(NHcV)!c'9%eS32KL`hN*hkjA)C963['C-1hNEA%9P'1(X+c('fbl`VPbhNN
+#Kr4JXNPQ94LAQ5PcqKTGj%I"b#pkSSB9l(Vcdi8+rdplX%`Sl[*H!P3qiU"DlN)
+ZLfMqp68Xh@0ihm&4E!j"UjGHVBX#KEIEI$ZMqEB#r2MJShTH$H-&9Z*jS6)R2EV
+2mQ3b#`)A`q`+q"X-43,TC0`G13@c0@eUhTBi)iFP`V3aDq5$[*4'9Af(hfaUU1b
+SP)S3M,I&kk#[Y3@+j8V[jJFdq%,jJ(LQHL0VI[$PHI$pLlej8Vaq3MjkF!d+dP8
+94FRYX2hAS4ET"fG@+d%%md!e!'Km9Pr-q%eIQ'q+#iG[cA,R$0VTQpE$F$I9iXX
+cZ[YY9I'B9rH%ldHeqZZlf"9ZGB#k@e3L$l"LC@%&I+!I0rpSK5Hj#*MPbV*AbRM
+mkAM"VCU4qANYfFa5&j!!f-SK$h-[BFXUYSEkNE(34A4X9CD`SlHLhR--k%YGDmr
+m+$$TYVQB$"pRG&kc1,M-ChC59D1&!ZSRC&2Ia6)-QqAi&@Q@A(idl#R0kMV`ED4
+m2Tiq4QrC9NE9"5((&Hj4#N4A9p@K#$JDaUC9#Sbq%$RE```#+U``l8BM9dK@#fZ
+Y'b0J(j(3EB(FLjlqNY"6V(+Rc%SNj)c4%6@V6N1lJYp!B1Li$C,!`Xq%6)f-VLA
+aFl125JYF[h"A5-C&[fdG$U#Um)JrSlJJ`Sf&NFLl$rP#IhGR6qQ9d*4jB,(!6@0
+29UKZ[N6NRbFK+r%KJ5"8`fV&9&e+f86YVbAPmAdmQmr!qf@HU@apeD3U&pKSb&F
+MdhDBPP*TqF'b"Srb8(8#m#RDdXULMKqP"ckKlr9B2BX*d80KeMDjhHH3!1H5'!J
+r[EmJV0e#ac*2ZNDKi3%DX3,)R0)FC*aFa(dLa4"VIMG,i@SaJ`$&iCeBDL(4Ce9
+42(@Rk5+##bLq0-AI3UB0P28i,d+4&ZIYB[("NY[4m11Cm[kYTfASr0VGQ5(F!P5
+NN!!jFaBeGlE6N!"pe*lG@X6EN8)2%(i4bL!R'$5Cf"!fF!Vd'jRbd(D!0+1+Sl0
+UXB`9QeN`ar,%'*,D-`)HCYGSJB%UjB1Q#646I[e"L2-M*'DaDe%5rjbSYCXH%IG
+!6Gh1Rm41PM*SMaabQ8dBE+#j&mreXJ[b%,c0LD-%PV&$%cIT''J4KJV$3C,`h2X
+F)E!J-I[%!*hDMCi*bJDN4F`+JT,KS@"KrTC#,BSUekY6*J10qR`@8jl"+eb9CiD
+92p9jl$P5@5cHraXk)$Da+TNVK4NB(CY&6$DmU%Z&%aSpkN6e%(J%VFKm$Qi&idr
+5,Z*lS"kCNj,F"6Em2)UMe['ba!)S2')c48YB"3KI1938$'hY46l8r$"@VJcK,Zc
+5+1iADq#2%F*J9dR0U`JhQ*,Bp(F#&RkL!f8FYC&ciMl4Kkr(XG[i[Uqb*aj#TLH
+hQkM@-E0`$KQjQ$T+eNj22kGr[@p0KdYC618E8QF)q"p-#GHJ[eT*J)1BpT!!k+r
+(j3(XX2r('J1ITrY[4#b(4YjCaHd5"3h@ALREDEFZA!'TENBD6%BX)F3bh)VkAZN
+h4mY(XFM'q9Krf5ZYZAk9*SVkJ36YKG$!c&Y#)Erlilh%eq&B5Ei+-CPD46RJE88
+24@apaBqIYR13!#[b'$K#VI`a&VkIi93I+X9HNl1e@4JP"[AdV#,h&JLBN!!#@DH
+m[)G4reT-+Tla3-hfh0-#f$!!QMpiA*1lGrA4D+,9dE"piaa@5Vq2@3fI!Ddcb&9
+%N!$9qANSbi@)-942TbVBLS`X)-3jXY9Vdh,$LqPLQ2P!*,hY!*JK+3RKCT5i-E4
+3S9,'12")*$Zj#S5!)h)cX*8LD5Sk$q"hkc`pbB@a6q$k306$Zl@N&LF4$idrkFU
+3!%$IFFDMCq@'UZHmK%RbG&PpPFT!Sc1#@c-kc8@'D1YZDN)RESY5RkdNHV$i'4P
+8pPN%YM[q6%ZfZUjI1k,k4ZL0RhU91#k4h,G-E"VFj`cml+YRmbl-8bp-pKRR3,T
+@j*054(bbiPTTT0!#kaPl185!VlQUAErdJ%l%@5c[lfHkci!$*Ga4T!3UH`*'EDh
+b(%TU5S3[Jfi%C,H@`ECK,Z21S"Zl'Pp(hm0%l&Db&Pj6$$9k#ZX*3&YEE"Lm"DI
+@0h*ZCr["mrhh+R!T(GRT*49"%l*3kBAbI1M`8N"9DEL9Ql-dSNV3AG4A)cZ662b
+(2AS`2"m2TFI6QFL-LP!AQKALecGZ)T5(P$3eeA*r01ibU38BiFC#q1&K2mE*`ak
+kc@,CNlrC-kk1XC%G0*S4kCYhSI"M2i801YQBALMjMjG-aId$Sl"e0r"2SC!!'R$
+iA(2)KTD$2EHQqELD1#&cUrYF[iY+Ni2P2lhV0mc4)fQmC'(rPib-IEEEBiHphc2
+)3)0RRHKm95P'0#fri5'e'$)RTB,j(1`YkPXZV4$iULfYJEcA4FJIB2R[a+KBrYi
+P6lj@PLDf&d-(34SEI8C10hN5ALDT+ar6U494B60QXQed0iM20`84UG#FUkq3!2M
+E"fNRHm!XB%b85Dm@Y$2jk[Fl8*[ACe`PUeT`MRF-cJbTkLL@R&lJqJ'I%TmRdqm
+dq05HldB8+%ipH0cX9)QG+rr%'ca!j1hXcN8N4S[X34-J4U50Sj8%-9#@KmVl,#!
+"*k6!4qJQ(,RCHFM629(9TA[*2J+6b#`l"D`J-HNa4LfaJ-2X0kYB+iEH*%DlFXm
+SUJ9eQX(!EaP!1YQ68BriEbi-[Sh#8-XpC'j$d9Z8X#3r0M8)I86KiHPHEqTbLEr
+(XjpD3$')AG8CIpV,jVD[$'G4TKND#!EYH0YMc2!YU+Km!m35)FV-@J*hkf2R82d
+3-bG`jA0I`"-B11eQ-TPe*Q`FeD"YHFHimQMieh@4e#B"GE)TDQB)XYKcr,cAiSp
+C4QYGp@`-EYB-818M%"&iZ6!JHh)jm'6!ahLr5S1Pc3(2)0(G!aq4[M(5B#*p[33
+j6"PER9[S!ki3(F9eRkeYeCmiJ39ZKRPlXU6pXKeASkBSADV%-hm6Di88LaNhImV
+X(@j-1$aM@!!S!Hp"!Edfj3Cej9*VRBr3&Zk5V"L`B%(#Mjqk*UGY"X5Q`PAmkaJ
+Ca[l(NCSl#&Zr+kA0lZUidZN6kjL8r-kXXDb$cXKA@)'aIjSA'8(X1l@#kEiVTaQ
+4pj-cD&$eeafhUiM0!BCZXZ#m"T%[@&)ca4I$I%)'P))4FNiR6Rc$XN3X4NKiX`a
+BkYV`)USfbZR%dNG"+8h%J["@39RA!XjRDq+mRYYrT6kmZP4kY8'4pGDLf#,125U
+Emj)i!2+fhrN!,iF%f)`Jkd@%!G1F#G-hEq'XZYQfZ(#UVXFNJpJ2d0aDl61MLRD
+l6S3j+GPB3eSk@KB@q4VB%pbH&,"A[k%&ZZ+59GJ)aX5NR,SKMrYV&LGDe-i$[4E
+-XXVF9lRk2!PVX50qhVACM5-b1#qqca1JIb@6r(rZdhr8"*BVB#`p@p+5G%krZ@c
+A&4qG90r)B"[[Y#)*$k8me)RchUE6!`b"'iqbAc3X2H'Va8&!Q1S%)KQ%ZNmeJ5$
+1+j)5qP1JajBEJ8*Ydr$AIalkR8hkC"l,C3-0k)M88-*[qYlDC8L8D,aeeHqYZe'
+Acr+Lj%2VERjQ9'PYG[FHbC!!ad0XEjlD+SR)2mD"4-@MXl'Hq1I9P5G0*6Qh,0r
+b,"3ca!b8#[JhZeS1449bC'LM9(PG66k(f6bK'fY1[Se*iPQ+'Lp[EhRG)iHqaf,
+36'kblXG8%`hp(iXbJJ1h2Z'A5-#cG,f!-QRbr%PrId8$U0J6f18*fh91Z2Tc,Ji
+BV&qR-80-H@NR!,Y*Vjp6"cLJFSeZ3e2a`Q("!1mPYQi!!E4F*K#1@R'U"R[lFqh
+q'p"'Gr)jYj2$`jb1c0ZUYl*ZXJ'j*l030Zl#-Tlp+h0L%JdM!YrL#lQ`&k4SQRA
+TTrbdkGL-"fPkYb!6P"!qUhcA-%N$"PX[!U$91dHL*VHrI9!4m'LZiA($[`@lSbJ
+B5i(m#@6,3CckLp54q`3[4kCl`6@6Uf`@4&r&-,Z6mmY%42k%MZ8,k[lrT5F"2Zr
+4Y(f+AbUHFB)$5[`#%UbLrEEb)'l@eSqFhh85h-a1U4V9ZN1(+faLb&kR!N1Qcp"
+j2B%h2*XCA`0*G,Vme*SR9P1D9JT1@IpK&cdaj13BAQTVj'j8N!!e12'#p,IdkGH
+RhNQFJZ5(R'pLmG!'Q+Q1[@pN[&IXGU`@Z%a$0T96CXjQ5@`R&HjUPmLk"Y-(46,
+*$mK834G3Rie,`"p#L8qXm*apfKipH'p6R8@K@+c'&hSD#-D'33Q3!-X-C&X*k#h
+S9#"HSAhcb!8$mFC0DfR+3PkllSk4H,pVGXMi#`Z8%[ReSL+e&@@PT2CV$)@LB+)
+YF#qbM*'"p#V#0Y[f3hjLFdG'8'NXf5b13mJSAMbl,S$Z43I"AkmDj9#SabRC,UA
+8m$2"$@J!BSZH$pIQemhX2--@rr)TeKP*T1D[Il`i'Q-2&40h@M!8`N6fQHD(!NM
+,88mC3-$T#"!&)[,4r&4V5qKi6qH9M&EX%J*$Xlp1,$f2f$l,h0R%QkDFN!#EC3'
+h4K&SJ&(5X%FEd!la'6)A!j!!UDS0QJ)5M8ldH["q43q*SH+mD9iLHCkmTF*3*bG
++V1a'D[a![l9)26J$T"%d&T%qe6(pDBMN")%IJJ,Y*5%rmkq4BCmrYiXJ1i9$ckK
+d)f86VhTi)QGVYcG5`dL0lm3dD[UAf+1cqVQ2RACe"6H(44,miU[HKJqh(rk2G$`
+6-(B`Cj@jC9+-ma&2LSD'kE)bPhZpV-!33+$G+C(cCEf&qcd@2i'i#!G5&XpTUBZ
+Lr#baEj+T*C8ViU,B+ia1QD%QJM)FQ-U!EVR@a4$*ZQ+HC'I)piY1-A#$!Z+I"40
+-(1)ai4XalH*"[0+3!2PDUS`)AfhGdbb)c""c$!QAafXYaX1KS%Rc[ehLMUQEHpI
+6IJ1&U%Apm5j-""YEVcA3%M)eHp9jZ1$prIqCkdP+Q@AaN!"D8b1%+MmIReSeGE'
+aLc#-rVPrqaj@aTSN2-"K,BaBfNda`B-Z2!!$-+HF$e4(bc*SCF5hEr1jD&53!!"
+PZJ'JQRE"UDbVQRYqDm+[*G'FdU)(9'Dq5&dG`DSi+Ijr&,m&5LLF8Nq8aPV@b+,
+p@IqQT&CVR#Hp%b#[&$3aA8eRE2$8KS8RmU-J98qm"l`HYq[1UC[plaD3!2TbN!#
+"3[CR'ai,r*9Xh*,$+EM+2jR%XQKFj@0(HVBb)3@%h98Fm8)D"[h[M61*-$q%00H
+Q'N+6!$$+FC'IN4JiaJqi9JSaXkSD+eSa%!hDNpkr6H06UkK24C)cGDG'6Z[Ei%V
+Q,8C"IG5*)!L4dh,Jr2Q`mSBTKK*J-CA18QKbP4mE&l(+&1a%@3cl*jZ8(XI!)D!
+mcdI`B9PfkdkCb1IJ'k1UP,HSII@PeXfPkTB8A$c"#"2C+d!YYdAfrVH6YUC'H+b
+`CD%mZNk#*'l!T0BNGG`+5%j0@U'QS--GdQ!6fYEprN[(BL(fV#VmM$q4TaUPbpe
+B0eDQ1$EkM8bFU9U"c-Z4akZe`Q"QS!ack*0XA69-jZ'V&*CcR)@RLk1C8La&4(U
+r!kl"-+B#BbX1hm2qDd9+"Pdj#Chp-cb'65P```KPQ6Xl6Z&faJ&qZJ3+ihE+Dl%
+aD13J3pLE2UXK9I)iV2[Q#-6r&f64d$8p4CIM@l[-38AAXf8L+B3F9ik&fED$-9I
+I68+'#hSL#TSAM5HRm(*HrDDdR#H,2eFE1IFF'e*iafLF[RY0Yf@SiP03r#LC@"L
+*d4,pTi(C!*VE+E(Z'#NZK2pDrTF+Kq)"VCd6*deVe6*[eS!q0C6$fG2MMU@"a,p
+'MHZS#@SAiI[fA0'*ZALcL1`I5#ZKR%C"4ih5"""C4Ya`H,J$&e,BXq2[Y'J1)c)
+hpAHa@-Y%-#'+dI8UNHkUmSI8`G,j0V&9'D'h@MMm8lZCX@-Xa,c8S#P2-i),'#Q
+9Z-J+e#`H&pS`5XfcV1hEQf'pi8I(9&mID`AH!Kkqp0Fq10DX&6(qX#$A3*P*!mX
+UCPBCf$qb)(c@a%0@2qKHMf4JTahm`Uid`50cJl4P-EPJ96UI,60,X#3H(4RQi4Y
+S(@R%$8,Cmh[QLpm#K`lK0P)CBHY'NSi%5&Le`5PV0"kKJL1k18BM"m"ZJ)ZMSf3
+STEU$'ZDK)aJR10mk!YfmKZB5+bmYM2j@cbj8$8DmVk3,LDfe+mXE,b0C*p)-fkG
+3`BT9!qmhK&C"3i2VA-rbHR[l+3P2i+I%@"ml&i[AX0hiNH4Q4S1H&%NKTZ[&64P
+DN!$Fa0*f)h%Gf-QbYM'Tah"(#XMUE8Zrr`VirN5jmf#NNT,ha*85TYfJkkiqSJl
+Ql4Ufm!d`()Uq3$dHhk9r5h[IHFLrkqQ[pNBASf)eSPThkFj)+(#bNrQb)%T1UN)
+C0%HVbND6i5&9Mffi&+h,2+UBAN9A+raIJ@kh+k*H8#5fq1Cl8eXrabjZ$,6U`3K
+)qHQlQhIrMeLlTK1C3TR33qIhL1NVeI2U33MB5Ef8h+@4PM%,Vl)LXBEp%JQ4!i%
+ESG4J3l%*1r39A)K#6X2!NX5Ua`p%0ESEc#cEK@RJq'ERXDNL1hr@j'1cG%f2SXe
+1!jF$TlAbb$Y`'h--Y%SqD6UGNqmUXGX12`FPbEj)(b'J+#-L0VV#D0[PZGCAmX@
+B68Q9A&A$k`-(RlPj)LNK4UJh20[SHi5lqBKI%)k$Y(U!4D$5UrTjd29X6X@VIeD
+Si6hG6[-Fer6V3AEQ#lDp2k+0ZKq'jlbFdPeUpE1B5mf9DG2@Qr-25ldmS(IUa![
+ki2iJ0%HaKl-(JN@*6PBpP"05Q'VmaDQC(9Z,5qVX"%N+`fSmc`2MD4mh,i0SIRU
+pMPlPFZ0GDLJD2*QL%bZiCA24de@r+Y"5pFmVS1k*b3p9K&'dj)q*LLJZeNlC+&@
+$XHc%N!"EAL*XI4hJUS1H9LHqj,%4k#Nde$"J#abZQl[0SU(@Sa49fiDSk')E+p(
+bh(-6R-b8ZKHqL@#jice@DHScH3+$CefVr96!r'Flap[K3GN"Q'c6V*Kq,-H6FmN
+KMrAVQCh4GdE3NGLa`km(kr%!N!"4NhM9eTU4mL4ST&HYDdF!,'pd*"(NN!"Bf2&
+I6q,qQ#VYVreC&pMHN!!&HmE*rq&ql`ei#hlmGVUCeKV'3pTAd2D8ETUL$3F(("m
+'e2b1p42FLhpp+C!!Nh3p*3k%N!$dBF,SjM)S#))pfUh89G*[fA&HUY9&9a1"NBl
+2&5!+XAf,N4*LXZT-0'4L9%HX$5rKN!#LK0IC-Z9'rkq`qilU0FKL1-NGKP!F[rS
+#KRh6%c$'kicQ(66rQ`JUchT4`b4MD9J)F1F@k2&HpibX,cEZp0a0UCjVKLcY%Hq
+Fq$qcHSK@6+b&TiN3DrHlK@e!B(THp*r[dh*l4GBaSS,h[cZ%80Q9fR3,m05"#4f
+6YZaG5)CGmdUAMID'Chq@6j*f#'McN!$PQ$$M+qSpK4k2T2)(FYDjEB*i@c%&LP'
+ePK5!U5Edf@#hadfE48SJE""cL&HUd0MTAmMJ@%3eRh3If+@#1DH%TkmQZdaqT"L
+Jk,`+'IF4#cr6bp2+2*kdZJKB4LM*q1+96l+cR)[Sqp9DFQSRirUDad'b*&MLFqT
+EK,8[Z@(FpE24q+dpD6IU$'dVeX`r5"B4jL'a!MHbY"Yc-B3Ai$SiGfq0IKAX+b`
+FmaE#SE%Jk([+E0&aIPD4&,CN-2A(eYUjSqVl"TA`b+i#-(QA8ZLdDdUIfl5AlL'
+Q[GTpV&*BpH@PVR[GTGh91Xc"2Y[&hAZep-)J0,ZB6kd$M3PT3P30rCR5-Gjh-%[
+V`NBh(H&h6'E[LY'-bRfU`CKIJ%j*%cd*PQT6eifHTem-i5QYY$-QS054pQ8L4Z&
+jdNej#il95N&D$k6-DiM`0ZjfbiTPk3maeKYC#M'2rb1RN@#Xj!VTr[9I12mZp1L
+,B!apdrFr6ZCcNb%F6bQ$[SkLYV1(HpiE@1[E,`ID"P5X[%Sk+F2"NQKRD8rJQJQ
+$Xd[&C9*$#p[&!%qBfmE&l[hj`FK1"Z[lI6RrUkPbB-Ykf23m8$QjU85fIQ`1rf0
+l")@2$YlpD+QmMkhSQA"['AMMTD#r&%fE&a+N[FZ3!+88qF*6eGL@C(cU8dD,1)'
+VP-&8&9*m63#%f'*V[Y5(JYH)6djQN8k*82153AmQ6r4FS85LikZSP$+F#PNi5f1
+qS+`YK0M`bX1&X@0D2lR#NZc6clV$abl2m33S,DPYCLm@%6TBP$30e8Z#"J,9Rf8
+"'-20IR-)GCG"ME@N9c+E2hAC+)GB)RYHE%31q-ZqJ'5X`r"Dj+@iXl8$%LlAZl$
+8Ik@e4*b0*Ie`[8Dk`+6,'Y,fEfBL'U9JJ)rfm'5%brm(V#A$KfKHj5q3!)#5a9e
+@ihpDM1`rANS&SC0rUkiGbFXm!Bee['GRJ6'M9HT5XR%6lh&kkbHL5hZh4,&*PAS
+H!'pihM4p"Sf0(i!SXeN[8i&(c2)pMZKR642'hcVB&K9aL[UR*#V5A,jQN!"EFrq
+@I)Qc3!m5$(Z,k3eeeSe1L"blJb25+Zik&eH3!-A5(*&XP8)A0e,FaZhML4Y-@J,
+e4caq%!6Zp"Tll!V2L*H83+`pr51c-H9'@*GL(%633[eqIkbaeQ#U54*GqQET!"i
+Q9j4E"6H0i[EDa9+cQ0$@f6S3AC!!`E5R,4#T)A!(JajM%2f3!0%XC&jDBMABk5$
+)2pj%%4STiIJ&"T%H$NikY5PhPq'5ZSVV!X'kA`DBbkl(Bi*)Qi)4$Xe-mbZj,Yk
+d),f8T,VF3JQ#RK,ZI(E@H(iM29U'$mSG#6%bQ3DTKp&[brh2YEE2GC8`LQ,,LFZ
+2#d$[5dNcFTTRaG@`V%eBq%,*!prGH&mS*Sh'@1Jik"QVi!+*RiMZ#3"lA0%K')5
+1@fYT"%hd&`@mmQ13!2,j5S1S[mAJG&Ljiq#TdJadr%0SIF$(PT!!`kHi,Jr+jjB
+iVYb`iHm++d-MS8q'A$K-Y3,DR+dMpBBAcd&4HP[D2aGJSq`i"MiGJX#rC"3c1p*
+C6[VU8mkZ(Z$Kppr1*m!%NDjRSVMNCd1f)EU'6Jm&p[iDTF!!K$Q00J1)J,GGhVU
+0)S!E!A4Cm1)b#X"9rqV0bHm9PEG!ZMM`8b3N@&T3Irmq(%1c2XImTBSlj-06NMi
+D`!KUMKrpqHR1c3,6[V2bF[J`qUpc($Z#'p"PH)e083hZA!Vp*BqdhR6hFc*rH-A
+&f8J#MB2lXZfI%B(4`Ua(jTBLiH(qqZaDL3AfrVZDNAR)%GE&$Y!DY2TU&pFf+(D
+CX+ldc!BC8fjkBrKLK[X081k(Ta(Cj(DP[I)8SDh@J$$')Fq`$NM6LqTGi3#8BrT
+D[AeF-eX4eJI,pFSDE1jH)iACN!$hNGTGDFYe[QeeqQNraqX(pFIh0C3,i"p[[Fl
+pH-)PdV6"[3S)lrlRfLGX%Sr*r[CB'cB)[A%ar0mJ%P-Nrf!T`eN2CkA!r+*Vbdj
+LFS',mR$8k4*YjD3LR@kmpJik!@iHeKT&VPZad[('a#Cr(mme9qG@rjIZKj2f+MU
+k9G"bJbULclF@9,ja(,8U41F%CrbjTG4QC8X+HV6-Jc3950FHJ2,KpGAEjrPYIqj
+kcH+Sr-BV!6XSdd1l38GqX(VR84khAZbfIe8Q2qECrYYmQMP2,VB1(@F8ZQ5hGlq
+'m-FE,JJ#&1*%9$&lLi)Hj--!HVpPRp-p-@3K@GYaim2RMP6HT$LFGf84B"4Ui@3
+NLf9C`HBEjZJcI-@a9,P2V5UQX-p9LfXa*mN6VjI)jVEbL[L-r@d#!G5qV$jp'TE
+F6bLS$K!8N!"c9E0$1jC1$MU9@9$TITTTITLP3FB#LhI(8"a2d@QUG&Eq6I"RBKq
+11@b8M#i*APbJ"*1Ur&)b6kT9pe+)2mrac3Z@3QFD25ZEQGICd$Bi&!5jGB-D4!X
+L`(qQj#G&`bKD%*k'@rjAjSeQBDUN+"eQK-de-+VKFr2@qfMGkS,"6bbUE)%!3i@
+Rr--+IZ'f3+j'qLJ5-E@Ad452i!dY`TXG1QHAU&cf6X,8c,mF%!m@bUDAD3M2`Z@
+BjTq$(dpbV#DC!`DV3f3+rc-cZ,XM2Y4UHbjD0[Gr$f+!qM*h-rF%96pbh-!6%S8
+DY&CF%1AU"&TN3Pb$$@)4&`Jr1Cq"8rka`R@[rAK[,%YfheT"a`G0Zb4eF5)$N!$
+YR!D0+maUVeiL3id&!!r21mk#UIG@q$AU0iYPllMaiEQhHCMK'("'%Jp@106+3pm
+,ki-AqTJ*MDmc$1SNllbQITcqT&5U,Xh@al3HU31`UMP+PP*6jj9IRV23IKbG3bB
+A$AF4@&c02H0*V$DX68ppGZ@1!5REf`F)-4@&c(m%(''T2)S*TK,h$6A9c[PAEfr
+*[9U5"eS'Ar$EUf*(!SHY[9&Qa-*-AY)[8,5IVAL&qKjDG5beUSHReC!!#61YT2@
+HjEXaZ'#18GYPC3`MASVffeQXfhHC@dKfK00#E#h#P0-1bf++NG@V@M-UM")#`ji
+S0V%Fak5+5ThIDch)HpZ"NF9)h(NcB1-YKD8BEaESpVl#GF0*'SJF8cBF2Y++*"0
+61Uf52BpH54jUZNI%(6FK`ZE'B*0UKSGbP6dRS2H,%mT1MN1R#HMbhNl`DE!3L!U
+LCP)S(6Q&LceH1FZTF3+DkJ3J[Gf61NIcr"+k,C4cER)"h2)4TdPrlX$LZK[bbLk
+c(N@D-[@`q13H*l&8Er9"kcKp'*B@5c)1p6Sm@6eQ0V)Y-b`8CTM60YHJAh'-lGG
+V9,&4ZH3Lrlk[X!'SV@S+pE`0GBZcTT`P@(Yq33k8E@)pFI0l2[ER[EQT''dGQ&K
+NPVrEEZGaAM+c-MRY'lEr$HN9[NH8%,c68lBUrEr3M*SqXM%YFPHbZ$3B68k*!6X
+rZLCiYbRRhiB!8H!,h"`l(mQ@4TZ,T`$Qdl*Q(p+c5509UmUc*[#86f3q@aU6hd1
+IaThaNLGHQ0H-""YN+,M,T2C&c$`c#56NlAp&FA9,9Si%UD6`m1qK8l9lGfMHMp'
+KC,V4$N$S@ad$9%Npe@!prEHTEM@L1DjpVFe+Re`AJRkQ5#,a1Ap#h`-9QYV2Q9J
+6&PFZAB'jpE['@l*fJKeVXS0[5R%(jXjR)3F,2FM-NGHfQ9I&J$j61!d0hiNAH'k
+D$HLD+fm(N!"S[mT,IP"DL*Gk9+c%@HV%@9$lZk+2I$GfiBNGd9*c[DcXY0R2,VC
+-dNI0l@l%`qmX'MYAC8'qQ6@jBVRN4QCYhSMQ0(KI4[EC&d)re(&%eQ&((rq0bV2
+GUDB`&N&"BR@82q[qQ4ZkFpe[V3f[rVd#EMMIS,m0Vq'`A[5P23C'U98lp(R`dKq
+bEa#B0ll6K)@CRl8bM'N45`NRLEZP'kpC3E9*r"Y))r(dU'1jM46q-DAUkidYReR
+T*BPVdeR[PM%TQG2D5CNQ,D3Hl+`*2Z0AA@)8G$j'Qepf&5BfDQrBL*NY[@`F'jJ
+Uc@T`$R[D8G#)2lQq4r&TGlHIG*94!Dik$$iUA(aII[eN4h#Z#m`*Q'h49Qd-lHh
+A*Z&qEcN-&ffjD6D[RQr+'SZHp&hD[,ZKTEd9a44JH+ki$pXLrSf1miK3f'cHCNr
+T0hUa4pUkMlmMJlVea4AKMAF%FdNN`5H$EYAZd%QQNLI052GZbBl%Y$`+!E8Ea"e
+VZR!-VmDMIQCjqKLap*'j$hA$NrD%4U69ML-XUJB1m6#2d295!T!!JUCm!1JFjh#
+L5T!!BVDQ0G#L3QA9kf4c@FqN`Yh)jlK!'d!3%J-d,YF6QpV$b6%LZ"N62@qihlr
+&6jKXN9qqM-Q&Dp#RZ5+Y*KRTCAChTjhYlYM$`%qUL8&M%Q"fd5G"9[15RI%86!d
+p[fSNqCPX+&Q')pXImcaEZL4HDAa$`@L*2rJ6j$PVl,@jU"!J%Q&CG!pabCQ6$%k
+*ee%2r#k2TLNI'983lNAr'DXU"S[[8#5e)8(`1fHV8!(cd5'"kDh+d%YV'iEJMe%
+P!pQAAh6B)-"%(h6G`m'G0R`Q!Pc2Ep4VIP(XXm-*!9'(K)F*9P#4BQ"'a&KRN8E
+`jf$'+N6V9lIc$3Y8@4EF(mQ'cZiYUM,Z+*m-XHi3l'"E'@f9H5qb)AR92jjI@VP
+Z`f@6li#8IS%LMAGe*hK3PM,)(X&r"F$)446d@5d9C`pBREcY[-mL`qlh0f3r+d*
+*)-,RXpD6(5'&D"l4C85lj`Kr"B@Kfm36Z&FpMQA('p8Sme5Y!iFMfap5dR[q#"$
+CV-dpB4CDc-jlLiVKM6qrpeH(*lS%'AKfmCPa$"9'f3h@2lVdfm"ZSXM&56p%&1l
+I,cR(Pbm39EqS*69KpKkTeT'ZR&9)!3,$aS8)"GFj(CLd)Tq'1'krGh1qZm)l[8`
+T9-r#X9eh-f"V"5G$qYc'F09M#8PD8N"PhNU+'kBbDJZ@'Gpd-,85He2%CE2q#0R
+jN@q*9kmC&e`f!5#Pi0EQdPSCZ#%8$6@3!(3F"5iCe+$#N[(h%HITj"D+ZZH+rM'
+C`iXkaH1ZcZGQ`F1PkdAQ2QN&j'95X%RhZ#l4hQE@Y+$dZa)L8T,[)6JDV20@AXS
+'H&RA(A0J4Y*'mm6X``@3!#LjiB$HF8[d$mG(qV98BmTr,pNV!p$H,*'%`*p@j)[
+0T&kSQHXFe*pSS$KhNA`@%-E,`BLRQ"Fj'%c2f@r3T"KH8X2h"!d,qa,#-r8jTE&
+qk%25d`3pd)DU)D#1lPmee1c[E9XTPR`Uh%8MSDbfV,RerpJ`MmKmI[+!FmCY@$(
+`D,Z@MNC9PT'Fm6Qj*6V5D%+8UTEjHPreG3$S"NbD'2(lqVQDPI`b+2K6X@T!84L
+X&Mm,3Xr4BCbYB$1QMcI0bTD6D33p[+c-9MSeG0hLcKN@JcB00Hr*B'8iXRL#d$C
+T@FVRfqTd%LMc0&9X-emL2S6ccr@Xj)BMCrGbY)C8HZR(f$)")jc*)VNABe3+4"5
+IH4fG'dBr(666%f`'K-[&iJ-AJ,"2HU6mjK31&BDiq"BAG$+%)TJFGjQFqY(e#P!
+YLQ*)1dpK40"qa@aKXAH5$"F2q3-dmG$G'DP9&LYT09$Z8NMGchANN8q6eShGdYU
+IBrekPV51!80Z&`1qr$F[f)mYIUKJ`)RBALcC")[rQqII@Tj!CaIqX!(-9bV4iqj
+[BVHb`m(PkI$X!jq'm$jJX(UJdZ)IF[,*l&(feRbdPIDQPa-"J*!!eh&c@rD+Y-L
+[j8(&%9qDTq3IK`N%HSDC-LcbUpri8U@3!!&86Md4V*i139@9GMJV@j5qFmj&*K6
+&@qB'2T8$++MVJPTUMidAC&8%QIph9D$i3V@*`-9A&&!`@k1S!c0cV!ab)$DfU6m
+q39*jFGUT9CENqr$h##aN8d$H41P$(d`RT[bGS(5FJHRZBVP2"%U@8GhCd6EkUCM
+6*i'4#m#Q,1HB1PbFGbl2'CUR65qQ3&kV6EpMFlq`qrFcU6mQKr0)dZUBfXZ%c@Z
+(fN@UZ`1EV[c!H%kT-c5aD8rHdVPqKd,@0%l&qh"jGVD$+edMCCT!bR!)19&-RC,
+D6al*1KXVKX'alb[#K`)fR3)1a82LM@3YA-dVEq2F8F`$9eVJr!bm9V+jl30+k['
+b'2Rd'r,2'4dm3b98FNpFdlDTK#"QG5),#kc49U2Cj+mk*LB6E41YE'AD98#pLh*
+'D3j0@`hX)X!a$Up+Z[`r&R4!AMkSFQ&QfTh+9L5'KqpqkimY-L(aC#V*'#'8'6E
+[P6P'h$9r&KKa'*9"T[GihLF,[EVeM#Li-Mj&q8IDrJaGFf$Mi-FTIThaMK&H8S'
+GfAIN)'j*-F0AcDiqQE30b!d4Q0bX1HdX1l-KNb&*$Nr4(Ji$*M*q@1Ma2(jpH8r
+piC!!YrKa)&$F)S!ZET(J`Y2q$E8(hCTeRZl&16QMBrNERmjm,ZE9E4kT)Xp05d1
+N%cD-LSUCQMkmP$TmIL8ma1Nb0L,+ZQ1`SfLp6cYJPP[S34Hi%@'D$0VdAPR0`Ak
+)8YDF*Y2dVh)1@948,3TD0A[`2R2R0m%D+NVYKU#k-`R,2Nm9E",Xc*9a[EkiJl9
+8"*c!a3jYAMqNJVr@&$bdP+Z1Rd#QJ%G1EMSUjk`r6'DAJMR@5RN$Kc`)lm[A,RB
+S&m#j'rj6jFTIGbc`0j)8('9"ZU*$fXY@%$IPcSq6lChLqQ6Sa,qF*KL*Ek5!a%X
+cM65`mp1#D`'PC8lF,1$pFf4Q,BXf,J35PXcaQ*`B+JpTN8qcB*Rj!kVV0VLJcc,
+)1SmaNMNT"Nq6!UFrS`+9bZXPBZ5PMi`9rI8#9Cqd&6rb9$"d8Z*H'Ij@XVqN2Db
+1'b,1H8c#L1a@K54Mqd#2rdB1NqNqKJcLBRP#[h*55[AB`5G'$$Kjp1QQBq'9"IQ
+%dXcbbpdk'KJ[QD&Qk1%3fB2BDTdF55lI`)h$@8Yim9@d!LmSP[`TXIm-VJ[d-3V
+i38X!h"aPK#)Im5pGDh0$C!RIqd@&H6cm54-Arfqer6qfTK,#ehb1q(qT`Q6J,Cp
+""pKHHd(IZ[De(9RrA544P"16@'0!Ih*VXc0r!T!!!flE#BTj$GFQYV`@9((IdlF
+aLYr`k),)f"((NbDKMQf5'drpL+*p3&!bQMJSFI#3!26-"JXerfp[,J&ABid,a!"
+3H-,a(XfpC)!FPcBXme,-,*SPbQRN0jHY("8!kGU@3CU4aF,L83#6J-VUIhKDBfU
+3!2iGH)E82k#Cl)HPX9"C&+qT#RMeEkK4T"J4NIG-*,3E1k0@4iV5M#*Aj%e@$fK
+9h@G2NSUN"R9NF8KL&m5l#m`jTI!"--fY[$J)UYE5IrF%ILSBE2bTmpYrjjA6QFR
+$[8(2LCa4j`!&j4U1c[jIlfb$0e+#ZaYdY*RJl@ZH$eS#kQF*4T3a6e1h(dJ$jaR
+TI2MD$L*`YRMpX*Z@[M(A',5[qb`@kBSm"9kK3E(,Fe4lbpc[$I6'2E1MQC-$Gjb
+X[9mf4"2`*9a$*$QriM!B@E[G3@9P2*(36X4d"[!H0"H$C3K@9DLp@1(!'Yp4JDa
+!R!)-DN3TdId-@+JMRlP*hm4lNU(1,k+!B*U`1E)RA9`[bcD8dP"T5apRil)rhYG
+RU0+mRbV6"V&Zmd@4JG2`IN45XYdUGMr$mZUPN4#ES[E0b'@+@04bja`$*Lrd%Ti
+6LIGCJmGY4B$j#2A#'52[j16-LIkI$QqA4+6k@U6DTmEqYI9`(&99!$b-(-4AB#i
+K6b(#e4rJXIdbZ`rC2ZGmI(&aIKQ5LNNjh-+6Z5Tq'!ibCUGDd4(IIp!98`*hC%@
+RV345S"R9*BN8H"48YcI"[q`fi!02fk+8FaPk9Rmc,%!9SLbALQTS,&cEEUE#4ql
+5!Q6r`V`bhV)*Z"BL48fEKE+&fD1fBr1LeGm5aLPKLl#8%!4Kjd+F-@X9#bb49"(
+JSY,jmPkc@9b8%XEUH*+%A+feI9N2)8q4I!)9%(M*6X"R,CIp8eNXM!Bj`jcbX%K
+5!Pdce4`QRl6H&*Ujep**0NaAPTk&!3(8'GDX9Sh+fq&$(B3ZepULD2AI38[FSia
+VDaD!E1Qq4-MUD5DS-cS*+ceH'"cjlKP$%SA''MqY9k)UQ%VDk9ID'PrANdAX,0Y
+f(5a9a0ci(PqqS&p*dK8qV5X6Z2[!RSmKKFl"Q+k#Qi!Fl&cq5a8+pUVmhB09b,1
+pFKbN"e)PXmRLXZr`rQ4DrE(ppirQ3G56hI)Le6m'KG8&ddZE9(*`UIdm15lfVKG
+PH,86B*CfLKV1CI`!m,P-*8aM$4!jBr`3[Fa+NA-FEPl*-+r`Q[B[T51`"8*ZjC8
+M`k1"-Y1X%-Jm)FHiKPm1lC5(!1Y-L%45l9d6hGN'j44I%eNFEb[lUQMEE[4992f
+#1)*3"bK(+ElULIMc`)r#+1efQ14*%iZAGr"M#1)jmfN&qi!-SrilZ!6JN!!,iRj
+&[h'r[YeG[D&j$B(b!QK1+V8DN!"b9AkaH6M`R2G,4cp3)#mB206*ImAHbp9`k!+
+JASe61dTVjH'C'B!BRX!ChT)N%XA#[H3maM)3H`%h9k@4,mN2fk-+E)erU+J9d8E
+DZP63#9H-TM)@P1$IJa-EQ8+mR4b0m3*X`FZq9QJqbT,j0Xq,*i&If1bV"@P@Kk2
+c+3M'&X3mjr-&&1,pAS@EK--qlJp2ep5(EpK2L+!RXSGG*PA$9()*r[SJAX&P'4'
+%,EG3R[jF9cE$9LBBIS$LU)Y'EY"YEi&!kf$YHF[ZEK!-IKA1XT([AZhjTNSmP(l
+1HJia2)C2a3Y9QZAC'lb`r(#Y$5"`"!`(Y!fGT(BHHJ!bG%!fSEK$rkhC`4iXPY5
+,`i6)@6*(#!(F0YKIfFia#42Y#+@Ac6+Jp+2KS*Ufh62m!UBNRAS%L@3$Up@S6ib
+k(pbf6!affE(YqKmBRhQfqU2#&&eh*N'hP&pk3mIiH2NREmXVK)@ZeIi0YiT4h8a
+,6&a[a6,6S+d*#mJ)iJ&#A!R[h*XerjcN)"p1JK2iiVj50P!I4cp"rHM&Mj(pmTN
+GP$LeH%icE0AL+5)lTjfRD(lXS3KIFbm9aCM3N`18HKET8'+[E3,B)c$FR9VKl&3
+rrJV8,b2q4Y8NVrR(cGcjrVFP1`iUcNr3J+%IaTECLKZ9-)$ZbfM(f'YIK9i9G5*
+&,BZk9ALI3ajdkXda)6,XiP&L9`r*D3UQ0GM,k+eS1p96eZ4,HZ'(rafF*He%X2M
+iY#Y"[UHr(B(`UVAb@L@V$QB+$PGMlJdIBdrqafkcP9#JAphhC1HlC21bJakZ")N
+EjQXq&*b-[j0H$lB`U4DI2@'JXSK&I9*ijqr8!'4P-)Tq8"BXJ"f-S+%MZZMLD,h
+R+PQ@QmLq#hA,mL)F6r!-ppqrkD6fjf-R5C6aj&`dQp`A#cBhR-Tq0F('(rfHjP+
+L*iPe4!Q-@K(h(rkKmLfKDhDjB$-$6HHGPZ0pBESB*'V8'LpBS84$p+,I@Mr5%He
+L`@jC1)20SDEp6j5*rQf1fEZRS+6V%!L(&V5AeCN2-HE86A)eDQUQA1'U`1c34VP
+j9rJ-kMpQREe5KbJ@bQ")UXFcY2b9ib5Jb!d"L,&PC)%!XQH,!NlhelE`F'@mClr
+e0*SQ*h-rH8USKci3IVK-a'B1%YG6im-%"@kA#EY9`'5j-q34#jjp'ff)0HP92#m
+cPlD88YcQipASDI")k"8E22J-JH&N*ec-laG)*%L"c1HkR"-CfG0HDh[LbAC3J0(
+H$CN#88R$41M9M9NUYdmBdR4kr@a&KA#AUj',rI!9#!VXbah,a)(rXSI!H-HDE)k
+r6+miS'1EcP!KX,f(PSXNPQU-Y,N!N5UQP[[C5q`JV'!-[r)!!BAcLq@*J[9qG(H
+ilbRNVi)QhF!K&fK@pEhqkpAmUYdaCqmD9,flMB&*Pk)K9B[UCFMI&Qfk!&+SGC6
+9C&lcC'NN$2YB6PYDLG+fa1IaleFET`LM6+MU+b"dMV+,-Vd#59kX+k#qCh%eXfN
+MaVIkBl6L@30c[T0JrI+rUaK,PP"*"!eDaRATT&d"bEUp5)`S1[jR(r!q8(cYr5m
+*A*1D6)6P*DL'FUf)KmaNF1`al-j[*H0cf834CZBJAB8*EHhrY+L61lRrEB[h"N1
+6(06Nh`U8&4X9)brYBNmQf`d8CMbEV9#GRe0Cl'#J94MCYBV3cDeh1-&$AS!hRi4
+pjScEepQP%$2-ZA"UFRaDaUC0c+68G'F13SSClQq&Pq@q[Mi3MIVJEc*JPa[hL`A
+!'kp6$BXVRVb2X2rCpb8&BXd!ZTC%@mFIP3'aUKB[*SGjjd3MYppLNHPP,!RMJU*
+"NhEYYiXr"dR*)8@I&QTUhX%%E#&Cp[RY59%cD5S2X),AN!!T,2*4Q)*T9f&3H`2
+c%FrGhf#eiEl3FLPEH-elF&Y9*60hjII$qjUBa*FlN!"+4[-'hb"&*jKk#!NbF3k
+r"k6fYAeCE6F35jaK`!c0cCp$'#UQ)JKSYd`,-RP5pGl!f[JSeIp&XDlUdK6QL4%
+d[e`"eQLlIp"DXl%%4P&Cdb(cIlk"qbiR0@+L5G)k4@13!,#1!Ti$-)0NU1962"P
+3&m1%d&9jfhA[VG%ZF'NH&Lq1kJQ3!-@6&HJ9[0Jjai$XjSIEl8k##F%!`QqC"e*
+#63&Fq9EK)ZQ%I"A2mApJ'&@Lq*(mS6S`hM-hpa"[VSeVm%YYUjrfB01L*cH)XUH
+5Y"VEZ*ET,a4,Bllrdjf*S$+hMF%IGUfA)pLmB0I!"Qmb(C!!I--23NbqlSIZp85
+83D0hepBS!Z'DaX"BNMDIPT[!*f'-(EiM#R%R,DNR4fCJaSa!,V&N-i#Zpb8dkf1
+p[SrkSVRp5"@)d0!PPND"rTia('iFV)eI-DALTTV*UZCrEI+I1[,1@B'X@Me!a-`
+0)G1%!rlV*&Il6k4$Paq4Y8G,K!lQP*L,h3FD@qUM1,K(SMEAJP&q`3LEI8P6GGP
+P-P)m)eM0EYhd3d'b8(B("eBPBP&!%2#DKCS2qLUF)+m&PR6BD-EZhjdJ'3+Gi%M
+6b42LiMAF(EV%"DU0SBr&h(l6A"RNSM9T!M"epR-4#qe`,*Xh''PL0$3`13Xlr'h
+ecUVVb9MRJjL$5D[q&p4!SRe2ZGdAKGZ&R+#bhq8)$F4CEb,MSk4`KcbHIf69%Z@
+YT&bI-b`U)j+)NM(Dl"18I1XP(UcBel"3,'dHe@UqiSX(&%$l-eRSH&[2qGFLaqf
+R[chLUpH3!05NeMCR18,pTS2QA*D--a[-Z%XkNa6Q`e8'%aSE&Lcf1lUI'1$39UT
+[B`-kL*EZA8KNdhL#RZfL`b+j3FpG)cJqcL9,l,KTa@L016T+B!00)pM2NmK&DR3
+mZ$3le$FVkM3%'JREa!ZJ6H#Jr#jjbRUeiYUEQ9L&!($[(K%TAD"I1J48mcallZ+
+ASE@K0NF1kTV3@('S@9dq1*d@!&F6S6lSE&1`"RhFPZe"9EkYX4dKE#*Dq*b"`hN
+bR8D%F&4mkLjmf&--1TK4GBM2%2"Tl)e-VZ3dkmQ$+FUQ#b!1A%PMZ3$82aipC6l
+JpkM'8jA""V@hEHF$UT6(6[3r&*e-9D&5,[5kr5[@cFMLXrVMX-r`ma`DkdKG!+M
+([p"$+*IjG89D!HjSNc@!hd&fF(`0GNl%e-X2hh!#$DpRS4h(2PfFK3lV#p"BrmJ
+[,)amRT2A,i*!L%U4R6&"bX"lE*LJ[ILB!UPd3ESBV3[T"SAf)N30THK(,$L*D)G
+(dm9iTk6`&k1lF6+d&-BSfI@9EGZhei@eIJ!fZ16ld1N$6pE#N[+IGaUYh39DY&H
+5imjirc&LSbBpq(6!JX)MLZfd1L,c+[&rV0U&a44"6,bTRbRh$%QiRHTQGq-CB@1
+H%e3aG!a(FUQJN@qDIGb8!Q-B)L`CA6922r4'd&AY)R'9@Sle5%+U[F@`ei(E`id
+BlpC"6Pj-VSQXT2K+3q00Rjm380TjfD$3pP`,ZUJTk9@j4CaHRkjE(!TS(#4M`!-
+Q-Xd(ZRhIA$jp8`FAld-`X2q,9K)4ACi10pp5m`jk50ib0pY5Pi#0%ki,G3"eD-d
+&AKp-UG8$kYZ8"XAfE**@jIjrcQcak"r5&`)K&L&f6hYG,DRm$c'*5)S%Y1IT#Q8
+)c"MCmpDA$q5mHEFAcT!!Tm3"J`%RIZVCU`c6BcA)ERC)[dS!DkaaCij*hI599d2
+IbKEP)K,HPjk&Qr3DZ%J)I#%'am*D%`TpYrIiYb,6)QKfiV'cSdYflR3"`r`$mV"
+rq6ffKjXS5b%HhF`N+"J,4Sk4ra0Qpc)!8MpD+8lCr[acUdr0UlPcKc1f8&CA*#a
+D2K,2,,J#IG+cG!1XFFAcerkq2$ZaSpXfr%8fmLU*#SVHRU4ZE,eNjVIEbQTS82i
+BKVjZe8a"fAK0('jP*6(mCrS)H0Z*ViV+(c26F@l9YXDB4ef0!"P`a@5fR3E13Ca
+E1FRVc9CSLlQjD5eZR*NV9XD1XE61J*CeDZ4,V18E+LHlQXZdcCPANZdED3a!`DN
+ihD8p*4JN`3m#6Gi8V)lDT1(E5!C-T[eY`3NVBK,K-[THUI4rA[XFH9KJUk![!Q0
+BEpTRb)B3EK41mD3CRqFS@,fVD&`pD-UUhpjFRSr+9`Pr(FBh8T-UY81DLF*A'MT
+&SUPQV9-1lcA-c&cEl5jRT"Sdd1MEP4*lVF+ClC(m[*r1i,M822*!$2RbCa9rCX(
+HRF$U&1Q3!-SZ+*`@V*&&0%BerLSU4q8CMAF"Ykb$F!)+`5qI4+8G0Xfa1'(X0Y4
+B!1BPEe&Y3T!!hbC2K$r1)bJj5JVL0!#G#+YV`RVa*,$i9'!kQMZ3!"4LUVTHLc'
+!BCf"CeYJ"&8fBhiLR0Qd,+JJ'4#L9Ql+*AGSQGrNj%Rd*Bc'adCp'"DFb"QMD1P
+(@9a&U+bI-Yc!Hj%GIhh%IHE'q&mpiH&eiXMJ#&B0r5BeA84m)9Gcpbr6Y2l*e6I
+iqMeI%6"@pb@AGlc!AR[cJMTX-fQbbkPJ[+&F5""Q-(I`EID2G*kL@h@%!c1r$'8
+a$2rS1$-%5FJ`$p48NdXKJ*)[XYKPke4EVKk6jleTLh0*TPjfIr$%kD$QcC35B0'
+*jApj%!UiJT@199&&hT)JkGHjNr&ek&E'@JN2,h9r`02'!Pe%EkcSE*DEB3!'+K-
+I5#*T%kG4r`'1-RAM'1'[iP8$-4Vp6`CJ[km6YGJYRFbqJKdY$8-`Ipche!MCmHA
+ZQVY+a(I9XV1Y*A)-XhaplRXM*Ld&59m6*DCEiF$9rpckh!$VU5FrPh"%rG#DP$)
+Gkfmm29Jb'Ja)SBqEDJ,pC)P#PAlGbe'6&IFSS&Kep90&MXDSTT(F`ZUk2Te$S%r
+fKE#+ZB9i3+-!RDS"AF[QNVl#%NQG&d6Ll&jTh8RJe@,GGF,*IUpMlSKLrbq$(ZU
+IbVRqefp*VjVq3$1pTRiq6LB6SlY#)$F!SR*2REa'pcB%kI[l$hj33!0Y8R@*Y*d
+!GB!Xqi8ANHqYNS%G-fL5)9P'@2RBGiKia8*XlkiJHYIqhNXG,cj&5GlpYp4!apU
+bfV8dKkCI$l2MXbXM'r)A5TB04$i'(VI*$19SkEj`qeCfaec@QS&Ae`D$!P+(B0X
+RYSiSaCkDNcZJ(Iib1i&'NI9iGld1`Cq&i5Rl%Me'[(60ib2Fd)35X'aZai!PShk
+Xar92&$k%$Tr$C4b`Hr$L$R0*SXER&YQFj9@lDdZfSZZVf@"F`L!Mki'JDP*ap2V
+#&4Q1*XdQe3C)A",Q(hMrN!"kjqkl'[,$4X*ZcUk&J4UFlflK6k'*SSmf)86X0-9
+eSbC-r-"hQqbpAl-J(BA56(+lk&rG,bNp#-F80f$Am[&k#&9E1l1[+'!krCcF2E$
+j''EG@Sd$N!!#c3Cd"$"40,RHm66Gf&,mN!!lFNe(SlTmQr8Bqr5IJQ,k!S@Y"'%
+[j!L`E-`j(cXTC-kEDV&U`8*rcNYppRDUa0)U#UhXemBLYD'+Q)#IPJbdAX2IYUp
+A3U[Y#M3cIYkaBGAriVcIQP5,"+*65NlpI)rr#ce2eh-Ne*ac6C,L,-KJI8k50Sr
+IZ%lr#a8(LDjUd1*+Rr3!`9S)UDF&bh,hfXe6f[Vm#EZ4[-Hk2a86I!L[G0H&!CH
+$+(TbPI6*KUMNc`B"U,EUlR5R[CV9d+VMYbVD4-$&Bk,$BY9KZfP!X3FpEh%&+"'
+4ldF9VmYXp(!'[p9T328C@4q)l0D!qG309Vk2[+I+(AepEhHLEic'RP$e&N'bCNS
+2m%d*f['")+['J2ML0bifRaR5[U-E1"V@a$PjeSV%[PM!4hL9!iRqbP"GPLLC@NX
+,dhr`*(1MbFmV5EIJI%)"8F,V`%MfU#pHQ(NjP0cPPm$4@6NH#&rf)r[U&A0C+Er
+4lMeRP+kNR&'RrbHSd['G09YHB+Uj+pI"Q@*r+$!ADJc'0F!(4eGFELRBQ&6G0N3
+0-HL0VlGC1!Lp`j!!,jAb!6(SPf,"B"r@S1XE,r6haTT-+cV$e*r"E2"S#ZZC9N5
+B4bBpZR)erRkHHX3lX4[fa95FYiqZjr+Pr)d'0-Rfm`mBkdL&(BQfJmd!)XMYmTa
+1%m8Y$L%-Y"CX#CFc"bL88JE0C9JFPFF6"l%p5,1[%kB-(,`0-QrVTlaV*pkA[K)
+-l6B60j4LA%@%cT4al!kd9f62#8k%8CMV`5dP))G%K"Ri'Rq[ld9D#Z!@e`q`4B&
+JFJp9`CNfBPM#eK6B!Peq@T!![iP%QY4(i3XT2*!!P&i*(p2)KaQfj-1'f4X''MA
+k'M)pcRkZj#(hG0@@'+'qVePd'CGU9Q%N3F'dhN+A9h#-UdFrapSXII[9TFdDZ"Z
+)kXY!A*dY9I6&VIURS&%BjXdMZqJqVRQ4FH!b$SYE'-3QVX`6r12-r!TSdY4C)aK
+#U2ICDB9QiP93McMr1Ai%%*dEUZk"()3iSHXA6K016c+)2iX(C'HVSc,Hc+"J+r9
+53hD[4r3L*8Cbfl@qS[8l$#qrqA(Fb4Ll8M`J)ZpUpcHjd6@F,lkiSpkmGCmfIF[
+1[&XTRpHe06I612kLp1-1b`J8%'Dd[Cj#3r)V+kT`L-H`-DC(5@$p+C,ae+DUT&8
+SBmh&EHDl'UANhJlqIEBIp[H!HkaM,"8Vd@hM$*0%#-E*Bp*P4+AhVV@m"LjdXL"
+EkTHV,&j,3+a5I8Fe&MhAAZ8ETI$&%pIXGT&qe*EA[8dI!10ATPlM')Ya(Fd,G6C
+3GDZ19*l[$B[jj00c(9SJ8mpj-BPbCh(U9#NUkCNH6b+DE#@,0CXp'JVIjHD[-LL
+[JlEA1GN#*&0GMfa%1XN*UDlA%Vkk"cJN#f#1'@l62`YVr'(bF1`9AM4S*+-3he!
+lGbdlNHcEG[PT@TIMM#C--,#ISY2jkkSLkXjmDpB`J,'D`6jSG5-KEV9I8%8S&-l
+1aD%B(PJS#k`VPXDT8$DR[@Ze(B901dY0IdkG"KrZhPRiHi(X3kjN3Qf9'kCIAZ)
+jclVf$9eZq20@6kDNT`RFP3[$HH,mYEr%E2ZMbf(NMJBhqfjbAL+-1&4pAahDlRK
+V&5A`F5H$pC*KUC,0"1`+LS0'+r@CK-m%3eqhTY)lYPq-a5eC)k5h"ep*$U`2`T!
+!K3Je4PA@T,jPZ2HR[X!fqK##N39!El-(--Bd@BX4ZPm%bcVHV,S)D@9&8XS,18Y
+3BXQk(P&ejdcUKE!hlKMXCekAR2$X9IfJ+S2dFpI&'&Z5!(I$S,+qG0M-a5YMIBN
+D@qqK`HEbTk3$iF(%J5cT`ThQZLVH'NQ'Df53!0HFFBEhbq"&((rKc`p*54XbpfL
+"9&2M$Z($8`B+!8F*jVcSc,Ih1ZAKqmQBG"'KY9J#H[J(S33'1%fe+D'[TjDZiLa
+3V-61lc8%-ZpTHa@L$QP8UJ9b+Dk6lb8QBp`)%R5fP+ieQde*3%pbcC4iV@!rdT'
+9S"Q(Z8VS,`#r![S5"lQSI+8KL[kKpTh8BPp4KZl26P%l3`2ZID#)k-cFC(k!CJU
+SB)iR0NBYK4hY&!Lb$)($pqrQ*4Z5fD[Qkj!!Y8A02,[fUj4m,3ZkXHfSbjh*[+R
+9N!"qN`rKk-GJ2D$)R3G((%T2ddr`'HbC&QpLQ-q1bhfYpE,XSG,r`[1c1h9jER1
+f46pXJaUQM8'D9BQqTd-jh`J,X8$ZkGbbp''APGD)f,%[%F0i0L%-D9Qc6pJD`4f
+6A$a(X9`$$QeE@Vd+ALPIMmAb'X2iUD(NaIfZ4@G1S[&EQVIq1qhpHCFeSI("cBE
+S11c)+-a%TbClBFbZPFX+!MHVE&CEUJiQGGE+-6qq6qJ$K8l+F[MZf62%4FHA)D6
+"jV-L`EN[@eUS+Rq`q5)0aZ!VpT)qm#Y!VR+"(39%d'+6ANPDaEREj5"jdI4!'LJ
+S!YA&@lFVYbDH(h&k(V%KZ``YNkMYD%%[0H*f)jcV)(KV2GiMh[$L"e1UBEi8UQ5
+562#mXKbjaV`NEZi,pVl15&I*!4c*1ISEbr3!H%H`,Md'69A(8!Nk"j1*RZ*k0b8
+)Lh5eiH3pkj-@4raiC'c[d-1eEXVS(r29E+51`I6*(BB5Hd+kmY$dY3VXD8B12HU
+3!2XhIJVUa&S,E`$FcAa-$TVrVlJ'IL(r@P4VIHNjVcD*TYpHp!Ycp*qNeHf[FqZ
+5&J2"G9E[XaJS8Ed6D`1KY8cm[4YkIXilr)ZZS616%dQBF[@&C$eJE5D)E8+1+IC
+8fB-@GkG![$I$J*HQFdRerF([BC+GUN2B[[C1l&$FA0e+"!R(L5KJ[QmBl'MArFP
+*F5Vf202*UG&BAG[$!GV`2(PV`,MSS@AJpdR!chNU&aD04E2'5MDqb-"'ZdB9HM`
+&hCTf%4P5Q-Mp9DRT%hNmflADVA(hI!(`QEMf9Aj`S+PRNDC"mbhV(1Xl@2iRUTT
+,[Gh@cff8NX)-*Lb01#Y8f`dZ@(NU+Lq6lp[@8maH(%+c"8"LjX5GHUiC-Dk'E4J
+(r#BSqd3c6SJqD'd)ZL$)!"P1PUQZkQ%a+%)5(me@4REV3S%03JdhcIkT!G`Qd[j
+PBiBYS3VJ!%EKqCk8JA0Xm@V&X4Zk'5Z6EYmaX6Y[FPE33[qKUiKD0Q19p9#hm'Q
+3!$@VraZ9U-lk&YN(fp-(eAbX@2a2NAPl&Pc[5K#'b525"i20HL&,KqFBaN8JJPV
+*ZLf-Y93qbMRNMddE`2hQiK6H08E(M'f`[PCp,e2`PU[b#APprq3VP9YAC6JVQM,
+KL2&ZrNfN2ICa,9#KmQC2SE&hFj)$4aZaP+rIDhKk8Cd,Fdch%*m)TamlRNP!+KX
+mPS8"m&l8#J3fRbL5iNfZ-N!X"ZQk`I[e%pU)JI@"1VBpK'f,i1`,4CrZd`R'(lm
+D68J8+&,TS$S)6j-9IpLXiT!!%8IU40"BFNjUp*FHBc&-C#4CM1Me49ZUTGEZX(D
+Uc#8d$4R,feTXX5MKZY!kj6a[R@hk&[bL-f&2",mILh$MGAMaB`I-Rj)b0%L83B$
+a8+h4NiT8H1K%(h0GC'j6`JH2hCikMQU$AF2F85lf8kkS3542k@aBKLI4j82e))R
+ZLcah-p!6$8),PpD4QqdUHNpK$rLF4E6QNhSZ@VZU+--GQ0`1hk8$krkB&IH%i-P
+fjE!BiCM4m@q3!r&UIFRlD49R,-L%V`mKeZ-CIQmQP@94TNUHA(#II%hJpQZa!jq
+5Y2#NUpLM*&+0a4r91mF(BZ+`J1Jf0NPqBeUX0lc['LQFecT"X4C[%qGKQ,a9TAb
+-BAVVPCLZ2b#GJ[$%E5B[KF1BaQ0$c-E9XJN%r3XRSfrdC9*P-%bq-D`6B*P!#r!
+NkSYjS,bc2B!D3jKI2,*Nl4Ghkp`pT!@G!m*%3RCkpr4@(Sqq%VA&4(%'pP%TDk1
+k-QrJ80f[Sd52S8-A$'6'kCiECm6$$FZ$M,fbUl'@(VrElC9Ga(J-lq&UeLX"BrV
+d$$[H8#[*fpLfXj3X&RU-a0k0&iK1ABmEhe5P[SC3M@+fCmf0fQfflN,,d[Z`j3p
+UpM-3!AdccV8L3XMC,d#84l[aMEHR!,D,k*cdcF9VMQaSdK$XFXq!!iHL2Up)mm+
+5C$Qj3[fkCA9i+Nla(T`Dd-#b2Ed(IR,5jm!64!PK909NG%[#B'X#,VMqJrpC1[3
+Yi!%*fRpr3T`@F,!IB(d"ZC+!#%aC8114F6)F,CEB6LqM1F)jFmqYe(ViDi+H$#"
+V*ZN%d[!1mqXN-HHB9XQiX64VY+-c"8*5k`$2dlP,e%XQjN%$RmJ8P&19,BSPi2q
+r1fSh)Nb`0QRZFM"%j*9jPQ00@R+-#lZP,6V8Z@VaI9'N8D9-MH'*3Ic1Up(G!AX
+F5)j2q2$ai5p*E1Sq)VKkl2%AAc#(*HVQT*DFF(iR#[$65Id#c[)rAHNKlUIF$81
+"FT9qTmP6j&CFjHfLclfEQKEFHEG)aa"l$*fKLDN2)102@2H%JaZMLlJlIr03Pq(
+NMeM2)h8lUGBG[*Jk4G%#Gk"QM0i-fMeX4YCfG#06ff9R$FAF@lD,,-Vrj@0C'F6
+bZ3!(h)m@aqik1E%'LB51%"08ENIJ4TVCeS,""QGTHc3(YE33pTphe9T5aIS)GZb
+c%300UUHCbmJ*a"HdGS[@+cqS+j`IEFPVI'#`m,"3VQAI1X3Xl0`'LV!hAIMBhIl
+`NB'(Q0PMmdA%BJih)ac(XY523hN&XG!a'KY2eJ2*E"!-RFB@fAL3!+3Yi0A[4(2
+f$VCK*'`T!0R42mXFf(-'5p[cGVb*i0I,Er+6mp4r40EDm3XkB&F#mA4,YjT9#Uk
+eCZhVZZ@SPmrA,Gd9jU)H5R,5&KU84,Tr3Gi2kp#BiTDq3k[Ef3F-A9Ym&jZcV0J
+hMqCB(mEe&@[m6ZV*SjB1RmX!G!LI%m1S'PF5L8(4C8d@dRC[I,L5`pCkRTE+"lF
+G4a5HGVhl["Ya9pe[iK-!@U1AI@LDJ@pZ5`BCcq8SCI[ePb)6KJBScF&#UB-KBDa
+PGcQcJY*BTP#8Y)ViN!!ld`l@Z""cY%)PT@VkA(ZmT89ACYZph*H4eK6TmBR`!IL
+)pJ)q9+8crjS9Zfk-DHTN3P+%h*r4*18T(XHmMU!qH2I@e+pL'IL`RICd-E!C[L0
+@fFa#NdF0rFFYI*E(DBI+bp1E"15%222"T%UM*j!!2e,9#d4V(1d#T%QR4AQ!!P'
+N#@'+9U6+SmpVQ8ND8P5[Vai)RLT%ZDZ[B*CC3!6P(d5*D1e)@(k@X"MfP%4,CFq
+N#6,rdjKlkNU@ZAS8hP0PPBF&,b&kF6a8`YBj@ZqJKajQZCfPL1XRl1Qj')$ImJI
+f5D[d*K+CcR-DK4[eB$J0ILj(XAEDP-#D&MXaL2hX`,&5b'THK`$jEMUS%0V%dXk
+"E)*DY*551fYIjJjcG`XdI)l@,pS,qrM)`IQ12$M9Jccpl3Rl@[PTDaFQ"V-0p#L
+fN!!PpH,&XTdPU9(@l1GYlr2NM3HaK$5$h4er$,k[ZY5dSVT@$JD-I9RA-C'3!lH
+V9(,9`3`6,@b,Q*CS4R`pU(q%@1D,9Q+pk3@*4#[f[GlAcfR"k@VjR%TB)k+cCE[
+$,#k@)Y2J*Sjj(00mM(liAY2`RbfcSJ9b1$RM0D"2IkHI$5p%KrK$a9Dc#T1bNqJ
+0r%M$"!3`U46eJ05&p%e!lLVZa$fT[iKYG4cG+2Q`ECpCSmp%2!#ki,QPYSYfSGR
+fa3e*9X`U5CZ*SfJ-dXPkk@,1414,@LG"QEAa`CV)Uq,Q!9FZJcY1iXhB0i9pcJ,
+A0EZ4a`'ja``Mm8#+XTlNe,LmXiVGl"UAdNSbpf%"`6)*RpN2@kbX'IAE'4LdTLX
+BfSA,$K'VIk-Z4@mc'aVPZ*l-C21eV-J5+!lp8UN21(-e1IUicB!rq-de$TYU&ai
+1CS9+QN,Gq+KeUBQ,e*C@JM$#23Jjb2##I$@H8e#(BJ`a0QlYLBqq0J"J8*661-i
+&-,VbPb2Tb!4"k!ZGd(G&Tbe5"95Y([P$DS-"QdbrDP1Q1bMD,RpN,&lhT3NM,h(
+$[23dAU+J0540`9feT`9N[2FGNl[iBLm4#Nhe5,3)LS4pqF%+Jf!3XZX&63c%-$f
+`hT2"X6SP+XiF1!X9(qJ"M)ZK5p3%T[I55ac-[[JaKh`kcLC4dQYiA0DN1[4NKjc
+GQ1*-IF'!($8BLBNZ`ZlZ+#FlfMa3NV(r#3`1E,qQ356IdQCmXKU96%BLlmG"cqf
+RCjaYN[C)ICArljbVY@p`E!8LEL,cL9#,E&)fQ!"Q0j5NMb9DqlcCXjK*@9mPMLR
+ScSG6j4FX40LeLS#5,@mC$l,3Y@,FL&I(c6a#Qeh4"P(Tl8Ip$k9hQcjRE(*Q-E"
+Sa)bd8(QH`,JIZN&cfmYJ2JQ%#1ka)RjJ9Br`aej[#Z!M&-r#B#K-$!(HIp@$JcS
+%U4hr6SDU$i1,Hf3UI+h!29*RF[U)lRT)4[%!`HR+I5)XG)Ni`CFh`LNI&653!(8
+m9'B+2cqEL"IIQ6-"b5HD#F,mF3CGU!N3Z*@YN8@,m%5*`TLZrbEAFKAIAl03BG(
+EK`IqJ,hfmmmF%K+PqHYd)IdCZj!!RlNr1r9m+&`&+GHr"2RC$heNPmZPCLaRIcL
+qmd'i6rT&6pm,d@"rcZ,-`A5U0d[bHrk*!3VSlD&[Zj+RMSl`J4+KQTe8VLQlfq"
+h5fA1!FlK1@,8j`e9F&r3L5Y6f"V++DU*5l!Phj1G%GCFHDi$BNFV"8c`dHPfNeE
+*i$$"rBURj19ac*h9dj[3%D(TaYH1`L1YCl3I!FTk`L&NSVQZY[Fj%61E1F393)G
+RmfdY&d6rL6QCPGFK[&Te[FE9B8$NU6brPGmJX2rFTf-"2AThCET6r&EhT&'"Z9$
+A82G(X-KLb,T9p(i2A!ZZAGE`@49rhRG$5Dc+qYhGYp2(#,3F+eYZdM1MF9%h&Pf
+!M2i,MZEC2R+#rHHf'm93RP2k'p0c8"S9b%b6N@1f#mZUXa3VmNjIkAkClii(q'"
+,NMb)&aQm,M3c8%"fUi&h)JCJP''T8rLkfYd-+T`!k331#5!L-(2'X)%+G9+kMUJ
+XMK+-9Z#lharp08DMeE2T3cfp&%8lQH$'#'hNcDdabG8[r1pf59pPf8hjI&DqPd"
+%)YlDMl*TSaX*5mUCL'fC5%A(NLUGcr%iRhRpG6`b*h(kdcEbBZ$&VbRk3X*D`HH
+Hm(X"EF3["DZ5%1j)+dQelE-0d)U`MJMXVPpk8&lCR#HGN[EUP'#mNI8eYd3!B%9
+(F5%E+d($bI0YZFPEX(`DITBFfpMrU*!!K,(*M4'%Tci[cFM-ejeecD5cE&H-!A@
+#F0#@1jV(XAeeS"IMeX54i[DNmBS8$N-69kjXIlVj5i#I&a0N&kX)E-i&MAcQH-!
+m4-(aHM4)[PRUG1-[Bi`d@+06ULJ0f09GfedB5XEQJ2&Xq*5Yl(&6GX2(Z#GIErU
+3!,N[F8)Y)VeeQIUr&dKL96`*`AU01Tmb56HN+HMPhpReI9f+PEjj&)jmDb%55%X
+i,epafKphGb16"%-H"qrMqqIN$4K"j'e#!9HA)VqLPLBKqfc@'ZR,UBhH,U@2ieR
+`[jA$lUm'K!MXN!"me14jQ)c%`9H1`i[YHaEEj59*lFP[ac668"MfpBRi8qVSqm$
+9caUYV1cXIbGm0c8rN!!iC1P24ZX`Nc!@Xd,(R`DfJVe6d6053+-&1"#*GU)j-mr
+UR0+#hUKYaU6"3MGbXF2mVj01f@V!(%1fY0P8"'[5NR)p$2j@F)YNZJ#XdT5K)Tj
+p1M5+c+@cNmPJ62kSPlUj)lDPeA`Z8!jMBL+(qc-+@b5Sb"$)KSLb%m[iHbZ-LJM
+r@hU1k@bSflBbIYIr+R+"djhB)Q3e(M3If8kc*@FE3jV*`e-pUBMXFjTIVU8*4`&
+`p1b+Z@`q3a`ZNIRK)[k3!#&kMFb2YeGNUTDJA1AFG`U$Gd,M[@'Fa"J!`1bVCJ(
+dCQ[JRp[2p[L*-Ae9#EpM'Nj3i04h6[FCHC9daR5S9Gk1M*rC[-)kR(8c%EkjPhe
+Lekkf(k6NrcbThZ9BAYT!)JNVBaY3)U+%MlmmS5LiLbY1RIf+CIE1fpKe*lN5bIE
+8phM)T3b8p!4Q!i#q4-Sa"(JL`k!B*F39Lbqb9E(HZDZVaAGbKh63Z`9#8[Vm-RU
+&@3%"$9J4'Za3(QXbe0U18Ud(ZIKpjcbT"pIMkf8hrcG'@BYcJK)T!0m)22R`+&T
+FUQ9%[a3jLp6KB)AJDZ!aZEITkj`XSbd!dRRK"4!MBrJkF2RbNRd9Mb66V*LS58m
+Y16*Y+baLHSV2P9bl&UmM$ERk'QF3UZ9eGP)YPdjQaQS4XP`9Y1j+9JYSK"prTS)
+i-LC!iVRcAHX2V'`hAbm'MBLB%%+CHN0`@l6`hZjVKf@ZPR`6bQ&ip1JAKC(e4)G
+G0F-DX,D6AYciMiAMcbT$FI+2-ap2*Vd"a68j3Gl%`E"6TAH-fTaM!p'k@f@dUVf
+0[JDd`N$5JK*PQaX,f94k`jXYAq)`NLBL$m3LFpV5VTkcbh,pXLkGH`98r[3`ZL,
+lHeGd9$)eiPm"m@Q)9T3#8MEi*f$Q8BiJXfb60%I4qcCNV0Q1S'6SGk38Vc$+r3b
+d1DPAbU6a@DRSqK*1HHp)N!#ec56ZhqPSFkYiA@Y#`JK4KEF&)VaXdA*5I1e'#Xj
+h-hKk+mZ[dUEQ@1#8"`Uh6S4l!Tp+1p8!8%&FadX5BLVb`#2"UQ1U$ZP8EAT,Mmk
+eB#"f)&#L20ES+i4TVcN"iT1#Kb6jK#,2k5CLI13K"*`kA-VBAY3)4S(#S``ME`+
+(1iBj)Pl+%@9X[L&pB6bS'k53!"2)c&!baqbl3N[@1#%SbR'01R0ARPL(&9eY6d0
+Y1Y[(lD8-)XdlQ)V9Z$IATS-NI8)HCi@23k'T!QT0pMI%@1p25k),bMFkpNGp2+A
+)iS,mQZmaU#$BD@2B9p9-dcBPH+a4C-TUH2A5C9K!3,@'QcIH2UDMpQMmF3ijGr(
+rS2X[PPe&Vq6el-3%85X2,ZIV+HMhDYCEPNf6+!&f$Y5Lh'KN-3HFH631D#PXf1H
+UCi+SNAYaqIpN%($B+pCaL)N(XciQT83,I-E&qK14mmj%E99[j@c9X#8UZb,k[9+
+2aMeJlK2GP2hA9M@br*L$*b`SD#)ck*6qL4BfZ*&$)5!Pp30HNQ5*6K"GE*NT2P*
+'N!!Zi1ClHF9T"PRK@B$mKBJM9-f&cqk#5!Y$j$&r"AKJ!N91)L[F($3Z4[9-2ek
+Iq`NE$+!(S3+D5M6)A'*P)khMfefhHhjbbBNUG6,&fG3kYLE)Krf!4!Tp$3kkad6
+D"R"#M&"Hr6K-*KJ-9!hKMhV(#T'lES+SfNaHiHk*X&*SLG8p'#,c538BAc"I6DA
+X48S`L),pF#VedG"#3%Re5DKRS`F,6Nj8&q)$rCdqM$K1"lr$B3E8VDHd1I"VY`[
+10FfI1lN-i,NSNGpZSHXC(fN5kHdFXT'il$)QiLc(@#Qa,VD`khQh30Ll'[I6)YR
+i&%'RcMJ[#0311"eArDFI!&cjk9`I!KkR$0pbF"J*6&+V-UARiNBmlL-&$GeP+FM
+J`F-%pIYmE*CUSQ9Ac4*D4kjpRRdd3'CE31H)K+[RSeDle+@6INTMbTjM9U"e8M1
+(Xb*LlXAMrU"hi(af$bGAd-Ul0C[!9!0@mmlb@fZ"HHDBH#&l!NpiFG+Je+FM`q%
+kASH$4C[R())[KC-GbkkSRHECHT&&J*(S"JajR'qV1`iGD@qVe,$%1bj8H4Y)r2,
+)FafG8eZ[%A+Qh,Ti*$[mTfL*8"',lA50mMqJe6hUULV4@E2M9`UHp#R0hFMAKVa
+m456!q)U-Me@3!0b6elFJhpXG!1lhFZl0Jb3$rqmddT%'!IqV3@)Pjf@qrMY@ar1
+dPBCRKFI!ffN41+!b`14ZQhS&dlplU(9Dd@)eE`"hCrIpbF0#"2!XcK!&r98(TS'
+K$M6U4#L'SIIe'CdpAp6KHT@N"P6Qmk1jKT[e)Pp%8Ka%D9MB""meG)ZYaNh[QJU
+3!'1NQ3hm`[V%b,4D`S4XG+`d[@rF+hH@CaR2lKHYTNL'3FN5Y&-U)Cj`Z,D3!1&
+rp9ra1"095RDQV0X(jpBi(!0VX-M@Nd4TCMl[,Fh'S('EP!dk9T6b5DkESD$UD+!
+XKaqH$+r#C"5*Ca-jhTB)Bi91ZNH&ATBYNV$Ja9`-A4@I&&V6cQD%(20(6,lbYG4
+@Le$'E6C-`#!hZlTfMml0N!$DTAEXV@H8l'(bPqVXVR+ChD5(15ZUF3j-hrK8MSN
+EF1Al8)mSm(Ye$fZ(TT'0CMG18-P,Fie,6Z89P&5Md)`Tc$@rPfkQb@%NH-SP"`#
+9G*FmBJK0I3L3!*1!p@Zk%5#c`KXej*9*'-!B&b2Xb2HkrTJ&hAf+#H['**cNE0a
+pRY,L'pirb1f+&lFZ6-aUmV%IIAP(5G+V'KA80FMmm9HfNih4hQK9',YSLjb&r1+
+6YX6C@QE'!kepPKUd@FAa!bUVm40D0S(CbcmQ44Y-2-S9*Tfl`Z!--5$K+6i+kE2
+6kber2[6[ddY%,G!A#SLI#EVcL$fmqEe*aXj5iq&G&P(IKM,3eI+$4jd4H9p,mpa
+6e[CdMC!!m&c',`q#`"Jp@E&)(G4GUi&$,UUp!2pK-bmIiMd%rAeAN!"DjCaS2`(
+K9*3Z!aA#fbQJ$(E0KEXp,&(52L*5kq-JFf81Ei5dH#YH)`RAERCT%ia)qITTbKB
+hl'KmAS3DPMGlFqf&FbmJrbR$crpP9-#@)$F*45,YD3I"ZG)-80)8YZ%HG++4`FH
+XGmdj%2jb3ZcBf9IQDhCral&NE@"(Z4-bRXI49C3Z#jpkT-B0cVqLRYD%e3,'Pj4
+Uke9I521SaKjaVm)K%eA1r,)#prDV'J$HMB"dk-(UVh)1K5H5VjqcE1k`4P!8S"$
+J5S!F,C!!-pKM#J+GPb,bS*rIZ3i#Xq$AS["GraR16PKpUjk0A$jSh#Md#RU3!0H
+C@h094#%KGY)c@HNT%Z'Cc-H4r&`%RD6%ZP+&+Ad$"65p2A+HI1T1E)#R1@qAc,-
+iB1hRhIPrqB1V`)dDeCl)p@$mDbiGD,RN*6+LEENiFkji%i6L%A8Yd$-SCSZa(#S
+6Y41pXe[LerRm-E,CE`&2mkbEQFJrcaSTlR[$H`)a"D-ZkTpe,4!re+cSS*G%B!U
+DkTH5U*5d6[2&33m[6rSQdNqFckrbUR#[(T%LE8[@+#65aDY6-q'%,S,V%&U$Bk2
+P@a(5k"2'NYBEUE(SE*!!S`q%DTR8V3%)q(d05*V-)Aj2E*ppjKS0i6Q-PKe@hES
+"&T+Sklh'DkPqME-+D0Ir[#MBEIThI,QbLkPqMjaVDU3k#4pT$VLZ$aJffE3,[GK
+G(k-1#6Nd,Kd2blR`S#)f*8(CU*@mhTD"Ej&ldCJM6C2jAmlSHmCpN!$q3mhCdAk
+AmSL2TLPjd&[&42AER2$MG!#XYG9-"+R4C#*3m$XGA(UYIY'eTdEq!'5UPK*Y3V`
+LEM#NJ8YD!"BD,9JDJqYa$IF-@0$HV8K*LmD6GI#('R5r[8!A"$#LB3T&(40ke"2
+b38dAb*9V`rdS3)@,3DTcEFM2XJar(NdK*)N'mNU*C5&MC[!4jJES"YX2MJkbedf
+dT&Z$)CQFdfEA42Mk)FMhG2d%E6acND%k9rfS*IG)dr061Ba924AiVI`N*jACG35
+d%E-([*1m'Qp#"+kI&!&aC6H3!(Hkq)"kN!#9bk-U%JMZeiGh+`)$XRm9Fhf0LI(
+jr)%M$e'Z9TAfb&iHQc"@3FjqLfphXlcB%Qdia)NX6M`Q%NaTr'PkdqJN4NSb[fI
+6BD[QGX+QBUp40*)[H6++QIMkqDZYAH6E%!R82BCIK*YNrljV1J[!665p3kEE,C&
+Pr#LAk3C'YVV)hY&RR`jK&q8X8dZA"E$U"9,YPcY%'5`qd9ZI+kCDEd!*LCM148b
+JEI"(JGp!Bij8BL3C!-)3lq60T-mr4ClMHm!A)D8&eGM09YU0cJ-BjR5*NTXB`DI
+d3$HT3NN5cAa,4IB%E'T9*J2%jSbDT8G%X[T2apr,+e$SSBTbqKfT!jmFSaMZpUX
+cFC,S!9,9,Sap'U!bPUU5UHS&l*j,XPZ'TN9FBUB4KQG&ZS4Y',3r!)CQq5fd''l
+iRq&iZdUdlSI@,#Uj!``j%!a#IYX'DD269M)I+9I2KYM3+FAQ,h,Al%NRN!"`e8M
+%a'URE$h'Idqf33r2`kiRTlFkhp5bG!Mbh&2Q!qENp+Vp()&(M6&UhN9!adYJ(I,
+dZ10R2-erBPLhD(fm4bhdq*BdYdFZQBDf3!Hl,AJ6Z,$!EHE[$jifb@CbqAUJMcF
+k%2SJH[,Rk"'PCNjl2A$QZhAhHd%F"a@YCAIUp0GdVdYlYHk!VDA#abiS00$8E0L
+ZJST4M9E3$,PHLC2rB,akp,$%KqcFP,%Q)'@m9qV[pe9Jl&pTc2KIUm1QmN34X+E
+JA`(r25)JQpfE2J91j5P2L1h2-P2@%G@)`aIUqKbpMFMT65,DIll@hCkK`8Q@`5N
+j[9Hr43q%3kf4h*[TPdEI(6#MJ,)`#BCbF%UL9Zjkr!5d9c3P('ScZ2E`dIR'p6G
+qdZ#h[j'*LPXSi0!N#j2GU4f-!BY59Z[R2m4P*+Fk2N@#bF*98Y2pDBEF"QK`YIF
+TU9EHMVDK+`hT,JM8@MbHFR#8dMH-Pmi)CIi@UGipR(`L1UTEL'd'fH)Pf1*[ZUe
+Z,6"D`a@f(5haI#00NiV#8l!f9+paZ-FCLSTaHLBXYb5P%GRM$lMBJ)Q$39e6hHb
+r8)qV49+KdG8(mB$6%VlLJH('&S`a-0F(#89%6F+rE8CBJMd8lGke"c25*2C[UHB
+F5ZcGQrA*j8!a4GE*`K@j*66EdQkSm&mk")4ZAfESim-M9aNX(U66![lD5T-jBTQ
+&I(0V`#G9ql6L2GZDTR8DS"Ya!"E0&k!j"[ikdrE,-,P!"Mcp%@1N*5AR-*4EX`J
+!36)pa6Qb3&JfQFj@IH!EEQ%NY6"!%iIIB#fmX)r3Yc#E(,'KrC+I8,BDH8C%#)$
+6+dX4Y@M$"@@9m$`JY2`L)jMNM)lXhbGreYI%'$@(BGVf8N28XRVH@mHH38M"cTB
+2,dU$,UN9`S5S%m4*S$)B8iMGb6Z#hB,@Rql2Z#M"B(",$[K[q@3KKJj80Y9$rBI
+c2lqp+`0IP+3Vp'Li+)Zl%J!d'8B5Pq",1H0YSlD*!*(C-1A!4i2cfr9V%DUEjSC
+kVI8,,&hNFq5h5&J0@XqLZ(qb@,1ETN`5((Z*S(VREJZGQc(pVZdPfd5JNRaN0U5
+J3069Zj&6iiMCRc66RA14kC*c1@h26A"lD5KCBJq%A(p)qJZhf`VZb$H`NCmY'2%
+J$K[lRZGQdF+l`jMNZZQ&Xr!(+eQ!$R[9[f+(X$EHPDBKUedm3EERE'i@9j*-EI3
+p39ZeXGc6fcTHD3-$hM5FS9pGq[K+S"a3%c8m)LSiGj'S@[aAj,VRGdPSF2%P)55
+I"E`T-r'Dh[D6[dmi+8pr%[V[prb-+NCTNFKk!$63Z6cl0-SqC#KFrpiJLCqqVB5
+-[bKSJV)Rh6B&I)@`h0b0rETZ&j`$q)rk1-Q1[UJC8hr1LBh8'XGMEK5h$q@1+9%
+Bd4Pc0U@3!+#Da6H3!0Q,@2eA(+38Bm'M0rT08cr3F[Ip0BX9hr6kNmmpI&1BXiC
+f(Yqm-(jNAHea[cRLMaY6+&Y3r$31[Sp&fS(H1$NkU"MKq4@B0k$r*IkBBqbMD%E
+hV!b&cTSIX2qj6Iip6FS6+(Ai`6(CaUK864qar(KNB"RVIb@6-RY"f'Jf3!')E19
+IMQ!hZ,a-ARr@f&NbP55Mdf3Ee31p"p$m&8,%+VM%Mb2A%d3A@+YNmjZ$Fa4VhMN
+1%@X(L-N6@0q)LiGk$CQ'4*I&A8(LYMSi2aj6kZVqebXTk3Eb&9$9d#+l4c-E$M9
+q5iaXj,fFE8([6iipSV(KZd[KZN3TVV!+(,hl[b9r@-VKfRiRYp!"!`#I`CYZf+i
+&D&bR2e"dj&'54#`)m*T(q*PV5+X9R%BTcA"[+YFdk$aci$c&(k+m(6BB)5M%$'H
+G*e&+RX$$-i`eDG!kVhReXqpM('Kp@Cp)l#Y['Rel3cE@$'$mH[FILifZJrEKMd2
+ih11cAfp[[e*V9Q&-rCl(VHhZXS)[eGM5@#IM1A-PA8dmV*U9&R4Qr)lBCS9Q6Cj
+%Pa2aemerQa5ZK#2H[Y5bi9ChGdfqULT$f2MX*)b,VCJSY#N%A$[#6cBeVd+D#1b
+YHb)3F#2!DGY`0eHF9lieUfF-hLdeqreJL'Dp2fVQBr%ZDkMlKMC(iIPGI"pQ!kB
+r@1S!*HGIlVPGZM`SdUmFY&GXe6dKGmMJ)pK"GbVR'VS6D%lle&2[NHbHdD"hQrj
+IDXB2Q+N)ECRF(MCTLBNUH2j8XI,e&refES$-cmAVJYGl%GI%(NJLhff,laZbh3f
+0F06bT3j0JibBZIr#6(kbD@j`Y"EdXbZll3CMJ9eCGhppY[XcBHT,3(hcX#M!fZ0
+K[p[q8iV'Hd*+!HIQH4kl2TUeflSrQ3C2&'KGX(F)UG[M0+CLe5#b+5c(%8$jZj9
+0apYaMDMi)SD5f'+XMXKf!rH(U4-8hcqljd"S'Lq-&+,fA6+*`XBEC2L!3lYGGc8
+ILSFG"+hbp,iPC5dD*Y9#Vp3a-)m3JdPM'!%UeK1MN!2F%PVa*$M1P"cU*EZRD18
+a-&[CKZ,4@8RA2&*,&%f'I'&54`Kh+)`jb+DZpYIq+Xjb9PlYNKK@fQVRI[m,h'I
+`V"U'6hH8D`*"1HTHrf3qYL9QraCQZ1TV,!1Nq[XrDq$M53)YPjM4XRGD,-bec*p
+YdN!q2%hlhF#@Y([@b*!!8RC,B8YDbNSa@,K3Y0$d`$p31ldGbZI6ZiTj"Y2dQrF
+k$FqIEFKLSGJ1X8i,3,YCUc+UIdmVBU[Nk`Y15)EJ!+[@hX$$lj&kR0[0YkN@F`4
+j6jkEVMA%5kPF0Ar$eH#b*KE2Za*-r3VTF$b$)plaU+AdT-NJC5ZLQ&qT$MJJ*cc
+I-cGpALF@lBbR3eDJY3IAAd@KSKP@2Z0f1pQ'(a&fLcU(6*!!abEGb2qE[[I2rZ`
+j#h*b4LMm8S-&-[TUCDHd6X#X5%edR4S9hPPQClZ,ZZ%T[6@GDUF#&P4'c0#F*55
+S00iE""aEIM9j3e@r5Lmm8P,iecBj9(@lI`KP$fT@MHLlBP&L5EGXDVLaUkRN1&Y
+L8h@Ti4*Q*0qAjq6MhC1(dI-b%%"H`UG(6c)UF+'D"ArFVB+kq3cR59"PK!mjPk&
+BSiT1Z86aXV[Gd!9c1dIIY2AU!hRD#55c3AD!!k#2cq,)L2T'-E#+NQ-c@T2iJ"4
+l!5hUSlC6%6N'0jC%-,)@DcMX&aF[$[&4CYJFhmpVPVDRf%aPrLUZSrRD+iM#264
+#e`4Y6pG2F19!Z*T`-ap,Lr%m`(P8#AKdVrUp%UQ#r*ikqqbd+VDqVf1'kK0(YmP
+L,YdB'*c0D$e0pd6c+Ab6B#3Q$(aHS*d)&14Gp[R8B@'V@hq(D3`Al04a%I&ShIJ
+$$2)$Z5aa4fQh+BdNQB55MC!!*V%F3+*!")Ekm`*IMmQ)kmi6mkX[[HeKLA`"[9X
+'l9,[#KKJ)#e`mh1D50%'QPE0Y'3,(I`mT!HDjR["3!hBG!#rerS6IBCl2U)I[T'
+1EPDS%NGCUUF,qLl`hq8hBPJYb9V!pl)9MNf*l%erPH[Bjp)*RDkBQMPKBaS+'$Q
+[Q!KQm`eDTGS[qrMF,,)[6kNY-4@Fk#LA"SK%d9'la*l1FTI%5J%ifqe6X,LBIF8
+Va5!G)*PLlcHdP*hlBcE!H8)+(em8468eQ@k[)CcE0""1*#iXhU+8jp%DI$C9AFH
+(+rlKXD+LU'f8X2fM1-EqY6V)lUkXBH%*hIG0mZ"5+Gi25B9IbXQJ"-11&$h($!i
+LZkT++ib&63E[VU%k$PSN2[-h&KdLJL)ErRjbc[c[jcJrI'$QY&2j8p#3!$%H%Jb
+m$[c$L5h(m,VQDRT-4bZ*H,TrRck!Gi#9Rf#r,09pijZ*dH3K*ELRr+GPp'PbH#'
+!f6-!mEebCrRf!%jf%RJ5TQ3TK"`kJU4#)pVaG+@Fkhhh#(XZh0"&L'lXKEc[VA9
+lVL"LDIaJe,XcY`r*cj8Pe5dl3@h'djKi&"VkiT!!k5V"6EMV#[9f2&,LKL+'(@$
+Jqc`)VmQ"iY(-JYNGPa+KYJ28RB&DTH!qp+[)h4$!H(40N5%JN!"+I"UplIE#4qp
+dri6[-NVJ$2eKXRYCKaZ3!1@Jcr'r@aY'$@)@!$(!TUYkZi$0[5GhfBDJ9RaS2*N
+@)K,q+r+r8KiKNCE*Ra1X&ErYa1dQFP@,*SFR--@%pirLA11AVV")dS9SJZ$,6AP
+eD,Yd8`Ee,iTiN4dP"r5a,M0!&H@!q8e!a)U$&Tq'4ZXTSBDRVTB038Ra)d'kmV0
+ceaHPVfRDV1mYNS1LDpFJ+Ej`Q'Yr$qkY%6!djr1ql3ihAqi(,d$'CmfqNk%H[RN
+*VX[ijd)96NcYNVUQPJ1*1Dij+,4B!bN"'S6"8'R4mU6Jc@'bJYEXp'R%%%kJ8TX
+DYlUPhE9"6HYdTZf$T'SZf*cVp"3PN8SbL5DR&me4X#bT$B#hEM,KRPfZibRC"'V
+KVC&F+%Ma#bPm+!)dZJklp8plS"k#HMT[Jl5QK6NF0-AjkmN)6fUHVS9AHI+R@N!
+,edQ%M0AX'S'-i@!E1$SlJILBjB"SjqGLRC'DX&3C9(*EX02p+STQ(1AH8Tk%fi'
+HjDNc'a(V%Rm2PG9mDr"*!d$$6lib&100#k[RrYq3!1TIIDdCf*!!CrlUcbK)b'4
+"dhHTU2kl!I'c)U[rlUX*Kp-@S+Ce"-fNPTD&TU+8-c``iEZkYL0rjXcU#"$DV))
+SJYKT0***$DkL`DP6CJ@bVl5l8e6FU%%!I4VF3jK93YGE[dXr!A(9-RRS(Hd,!iR
+h5pKl83jEqcaL,0+'rb+YprD9+#hb&R81#AVeZ$TCcabfMhh4HPX,GqY[JEbGNf3
+S8qE#fR+V(VLrXR`1Aef@rFq6RST@ja$UH*LqJ%ifMAbeH2`JDpEBKhBkFb$Yh,9
+#K)'P0(QNdmVkX$QdRrSmHp&2a@B(,+2aJ[*08'4[ZFB%`#6@S[*mKRPCq#k!4Rm
+,8'IdQ#QNr3DDeR6CiIRkAHpU(*BSkiFipGDpALAldZTDTZU&dlTj4UJc$H@4!m%
+flQrUU-LLmif#Xd1,G*GpX*AlhF(M1f0"r8PYeFI&kkI6SLCL%q-SaadV!"a'BqV
+N)ZDGm'+9p+NP'`qqLK&r3S%FHlVb0-9JP0D$,@BbXd[P&`h56lJMN!$@(NT"[$P
+Tdq&&Gda!IQQPX9$B&&TFk)aX(r+T-(,#rV)EXppS+Nk`#l4ZN!!MIPF64bIQj-I
+IBpL[SC8UGFJEN!$Q0&JRF"lk*hd,Xi0($&#-#aQNj!,E"ReV#Qe+,r2)XKYpEUb
+Z&"!%c(`NJep5h4X%`5c-#!(6&dXXQ65+-PJ"Q$[4K3EcQ"dLSBSicC-pI','L2T
+a1Tm+$'bZm*IAf%Z5F*8Xf'Lqe*S,TmRf4IQ@5A4qqT!!p8iQS%"LZmXVL*kR"%F
+q6+G@GXGFPQ&ZRl2CU-J53Xa4"[Fr`6-M-bCriCA(hEF8cKCTcA(d'cQ+5JCe4)!
+m)V`aUCVa!KVmdkb6paYV5HhXB2diT4rDjHN-l,+@r*kA#a3D(iXTh@pSHmqBZj!
+!FU*ZVK!31P2G9(lXm)0(Jd)YMjSXG6GC`U+mF11XeJ"FUL@BMD%)P@F'&KMVe9E
+#2E+q*I&#KDdd'kJ%$p'j,URYVMP,"9)!V9lVKJLJVf(65&*jI&emc--TI+82Em6
+3LfD3!!&XXpVMS-D"r`'%)erjJZM6Gc6Z'qV[S%SeVpYkmmV`l[I`8[M[IbM(0)P
+B+I#I%epibl#2lHf3!0#1*PD%rIe-mZd*0VUNNNT5LDIC(l-lQhK-($rIaC)A+2S
+B-(jpjm1L0V4V6F'pFe5C(X,!L3QG6G3Q"S&I@lBY9F%9ki2*$L3`&1C1jZr8+Qb
+DTM-Y,5iS!M,6Bp@H41N[!6D[$D5D"`l5Dj1cLB4IPpJT8PqQdb`XklQIbERR!6C
+'&FY`pPN)CKZ4JjKlm$hMP-D"I69&hRi)K'@h+fX6S6ChR,34V$(![CM6+F5a9$b
+&3Dd`Mdq3!&@FGK5BP,@(4-(%q+YN1MHd%-hUE8K8ql"E!0U9"TYb@*S9)"1C`!0
+m@+")QVQHbfI"fK!*5[(@DN['hd!a8DDI%lVb3`b9HIjHPh`lcdX4RM'q,GfEBj`
+&Lk1CDH11'5Z"3jbf$XdS6BBHU&&B"qaCKZ80e2*q`-231'HF(h,Br(62qq,`lZH
+!aBA*d-6C`FZGli6KUrR4hJP4D&Rj"VTAN!#SiiA#[AR%%8eX&+#G#"rk4X*r69$
+d*KGP(ePeLa8"hIG!pNJ08)@kr%"9LUCQd2f5FSLfAce-F0Lc5ZBqJpfG**Ni6f"
+eD)j6VT3!8$8`fSKVi(T8Npm"&MX*LY%!U!f*4!l$3Yl5QPLUEVZqCCRT%0F`ipP
+Qq)de'cpL2ab(pM5),fN%2[5ch-$MFj6E#h-U',"8BI6SR6e*6A5dX$8Z6A2NMh9
+*+38AkKQ%ZViCIbcNJcRbjX[+ZB2+Z5X0#11LHXPlLJ5l3HFB*LjP0CJa&3+c`+M
+1%[4)BG@"6TZ8)JC#lTGE69J6LFN5b)fF&cMVpQ2eRCP3ZC+9(V5kEp[%ZXQ9r&R
+iAd60rr180ZQFb-0L+'`[8KF-c%mXP@$P!mKi+G!6-&+!11%'3NjDD+eL6b`a4lj
+&4')*0qAmNhNGdK31fq@c2*eLhGB0ZUXclFiQ"l9[C[KQ6KqBkZp'K'S(Ap9aDT+
+DYff6TdZh9a8C`4G*%LSql((r#NAEMij3A'!5-1$(GS8$B+!9QGq(0lK',lTF8,8
+00&md@DDfVX&d,3N-q@G4hBMrH`Qqdi$+jmh![mUFR80f-HZP%ep2,"[AL9S5Cbf
+4X5b[TE"UGA2KHi*P(Zl)4J1c3IIL-#YY0MG9kbDL3VfI08R*(ekMNjkZAaQal5S
+R)G3!QE9PQ%NX@K,PRF06r`NUf'&E&qmY#b!6C-YjUKXk&Z-3*CpiK@&IkHp@eiT
+i'MJXV`R")RX&%BJ3Z#p%JEkJ$%qMmF&kPVl+8[9QhlrN%e[k2LXZK&A',l9HZVf
+9"PY-#j6Yr-NZmaIBMSXZ-L4bH#!96VM!8TA!6KTi)4+HpjTXPrBkcbC9i0@HSf!
+KXc'0EbFUc66hTZ2EfAY&XT1')dbleqmeZ+R(j9eKpBH4#+25EEXJr4Pk[@&DRRq
+j0Xdk(N5S@CCer3'[@r9,d&ITT4S-`XHQZr+a[5[+hLIE*S@1fHcVB3SbA$a$4p)
+CaY56BY-PQ!*bbPA+,KkDNCfFdA*LKHAf*@5i18AM`Q-D[&iZjZYDCM"IpKVba!8
+@`"`$TFm%pGr[)bA*$0F'!m@A,A9Tdk5r3+Q(Y%2#m[Jkh@bqmUQ-*c)b"Jk8hNX
+34dkmFLD$SYYl94B4"H-5IXXKi&N!X+!Di2J[&*iY18Z6DBF[G9aNpl%0V6(4lrh
+FLl!"81Y0qd&`[FC,*4IVGZY9mQIqcR$,,("*i6P+m0QcK#4mR)FSrYP*@@`V@4P
+A-[F4F,MN6mH%q&eIa'*E&TG33Nq6805(#Hr,*b26$(LX3fX2JhD2dR82R!%X-kF
+Vp*ZKLIAi'XH1!LmAeTE43%M-QcMA*,`G[ecKcdf&!hZ&R!PVfV"haJ*BlU@K*ei
+(,U3VG!lQ#PapJrI""AeD"G+kL+)85ampYpcE8IQUR)eR[8@0m*-Mil%LZ[&3rL8
+GU2q@Q[A,j"9A@2[,hUNKFP'XIaP-rF*1&+J"I(RrKHGK%ESTSeULTQFj)5RSp1"
+8!D"#@br@bJR#C#4NhFXp,L2m,BN-m"ah@XaFVm!cB[lH)NDdY4Ja)jchLkr$ZK$
+lk58AZhp330b(JiJ6(%cj95@a*Ra9aGk53M4Mr)-UMkp5#@V1$L1ZbNe%A2#*TaP
+GJN-'pMZ*f&QT5FYJf8dk1JI)SG920qjF2ENC*6606V!eI&*QKk9eC,jf53-fGJ`
+ri5iYJmP1eqp)K)+QY"T"9QV0)E"*[4mJHk3mp4+0I,LRMYDUSf`-$A'IfAcBUFi
+b!B'(ii`X),-j$q)CaEm$V#d0IViMf4'iLL0'G`jH3e`8b2)&rkk,2DQ6-D%fTXU
+Tf,pIXX"+9$2&Hd&!LTHSYTBMSYaQkdB(+(4MPPZL%KLm+-ri[*%*,ePf+5(rJq(
+[Z(K)jl1b[%!FKSrAL*jZq6*jhC32PC+'qKUJ2m$[pi5-)hR9rb1[Ah+',1pmL3,
+!kmCdkAX&XAFJD2M,"X#eA2HP2NMGZTV)*+XqmrYm-Q1[hfhbG('ciMS![ajLe@#
+aMK0@L3TQ$iq*+kfdJXS'8P@JGKXDM[r[Xl9+PcZ$rf84&V`d$HG4@r+$2SPBSEf
+Xb@Pl,2KhPQRI2AM#UPPT"GT`S(SD(Q"hMZTCjR(3M!&iqk$*4L,9l!)GMJG9'Am
+#B54h2)ZXH,(lJ9qZUZUmaA1*UY"XD@d&APGEh4l$l@$2YY#C&BYCUbKHl2(96$%
+r#Fa!EMm"P#e(P)A)C@arE634a8A6'!'0E!MrLHDJ`ieDb'3C@li))j!!YcAAEX%
+k'Tl[dNf,b!j!1'6q`jq2IK%-LfEE2&Ej0G9mZh$H"$QXr$l)R8C'jl#5[JH(@Pb
+dkLR-m$-@!XZ!lhKkM+(GBrTM$`J2$dI3H+2ZP'#J8fkBM1KbSk%)40LmH0Z)!HV
+r4UA5I%2FR[KZFmXC*@cN!a6U@3G@DYBf3b4-!PQ$4rh-fMCiIX1!jqNbK48##Yh
+&aSUj'qB9Y`9!LS2'!%-+M*hL6R(DVRbk*2VPEJ4d6YM%4iLBN!#l$"Bj3$N!K""
+,4a)f$hMQXh@26&`![a"m,cPIeU["4pHUFUGCPT8cQdqT(aDQ[mdG[GVDMc4HCH(
+*YeG[E(UHM1+!94hhXS8EHDE8dk%2Gd`Dpl"A*jH0C(LU4-ZDM)Hrr%(2FGaNeUK
+5l11U(!G(j+%86$L2+1N`a6NB5Z'ZI)kHM&$V&HN)[Fp$h3I9TAhq%-Pe6KI9X,9
+JAdeBEV(GcVk[Y8K(CI`0MrTh%5a[Pfd"6HPS"8![e*DJJ&eMUaiJ9$Ke'(KG4Sr
+PR)AThh(9iJ30KE*$RXC6P)SNJ-EHiRCp68)`RTmrcYSB$)FkL6*S'&k$FRCB8aN
+%66eFkLE(,D5-ci2l(YZ11'%m(`%h)eE!4L0,3C0'h#IZL-M&l"SD9*SfihjRb`3
+!I[QMeTQ#'1!V,%aHXM[Udkkc!r6I5[)i'a"&1CeGK8N"dkTVS%K'N!!MkUL[Ui[
+D9![H+I&M%3L[T,Q'iT23-BRmJ!6AKRKm!a[Cq5M'[U`Qmbkr!($HrDb5U&6m!9@
+VNLHCBX%,Z[+P0#AkEkVLFb'f+J&SIDrL6'+f0Qj3`5#3!*4`Rk-4)LNl443PdkH
+4"#c6Y&VV!F0h'33Dl6P@MTpd)LE@Ijkdq8[%*h9",#'cl#a1li9(FT,VA@VLc+$
+i$SlIa@JTL)kSEpLQrmTklPJS3#K'%kU#XmHB,EjI!L,br`hm`B(c9d&rfpq6Di&
+A)9hJG#!iSD`*NRFI--SpD#SNd,8QEJkZ0J6@MSDmY$r-kKXLSB(fX,"Y6c$E8%8
+QXEhEJD(%PB!S8-Ti#jHe$dX(Lj-km@2@f'[*r0SD"lfY(0ZQUmEmLhU8Q5c1b2p
+mR"L$!$ah`LS@1(iYH3l8a-%`Zhfb4h`STqhH[S8(66l4G3Jf,XG9D@a[fV9(3%K
+21V9@8NVFbKAD%*L$@LF$eaaJ5V*m64[VL59!)hF*V36C9mQE+e#YR,XfjhaiJ*Y
+3,"(lraBipdUB0'#bKqcq8LrSZ)CLPNhlFCb$6hBNK@!*e&L'SAH'Pa#e!rh6H9,
+%q4GHeYV0&BffJM3&(j*A`2ME%b01RNmmi(V'Jl*3eGQR+aBi-[i[DNX+0XA"(0(
+$+8"Yc1(+c)#&#3!SX1aXCqJDRk&5FXlBL!UQ[1fK$FlSSYP8P+YX3U(A(cVCk+2
+B4XEE%ZZFAFa*Fp6)QQi@$&J2KLmi1[$Yr31KeZ"pi+Rqh*`@AX+(U#("E+EeD-F
+9b$'SAR23Dk,4j@C&YMkEebrNDdf16$JrmF`Bf[9qI3EDD+jk`M0G9feY'ahX0q8
+P8p+5(j,ppNfC$Dc8(jJ@$HN!L0[pRSEH@GBM*`*1aME#hIEKm![HEa8%UiU$I8d
+Ijl8QY)$l!Kf2R%ik-3G"MhrIlpVa,A"Z@)D6Ff`'f"kaK[#r6Z(rFd%TZZiXjlL
+4iH-KD@)-%bjFXJUIdQXf38YHNil)S'bE9QX+&p5"bX+el4Qjdr8MdCZ"K'HM*Q8
+*DeL*Q6MAh4hXU%Hq4k5@D+%S0UXKk#p#0D3*QBPr,e(Q0-a*FreqPJD(paBBTC5
+BHib,,l6#91bHIT5emdHDrk#d8Kkj@YTdP-25L-Q8M!-TE@Lk%fXdCi2h*@4S`aV
+!LmK6SQhFd5c3'K0rhb2+SL4`@p[L9i`TB%5R(0bi,pV,4Cl+D8D(4cY@2CYBaUS
+B(rbGrm*P#r5a,30)pmK2Q8S%&(Lc,AX2)5SQh0p1TqTU,Y5`!*J98*0+hHQ1a@*
+1IhDVf#+(KR09r5Q#51U8*!CES*R[hriVXiZN8(V&A`,l1&Gf3@0q&L'KNACbS2c
+S(35E+m3J"EcZ+P$iq$P!qeIml-9`00h&ifLeeiPjaR!MQAXTF$"DDD!5ShSMcQb
+J1)R8Jc*h1EfF+'M!4+*hE!k@R%ml-fb&ZeSmc[GMDFj4qKNDaB$@!2N@[cN&I(i
+R5le`A(+(RPf4(p)`FJB'Kf6VID`X#H9!d#eUpU*""ACfUiR`IpCUZL'p&SR+iFJ
+TmkFHUH8+e#a@lD'N4-2r!I`2,%IMe$L25ZQ'jQ`E9BG13lRXq"b+P%AkP-[i@8)
+6lrh$USIJmSd5[aqE*'K26@0)ZjSm0$5A1G`1#R6j[Z-,am9f%8T@pj)2TP%1,B(
+5'VFmHE$`%I1-)lCjYf'1d'E@-LrG6-&GVYQ!jD4QbmN4A3Q5fRB*R%6+rmPM'9d
+qkPB8Rf38fE9j[&--Q4r)JUUABBr'dXLrN!$"1+`U(IIk9BLKDT-JIUF$B&"YiZJ
+HiShll"[f((1J@R'MjjX#pMf5`KB@B(&E)E8iZcSYTBkNm62@q)E(DRM9h,@LA89
+RPF8E&966%FSPL*URA+bCl4C,eFEacip(D38)CTeDI6@eb!E$jRApaSJf*6&dX6R
+&EJPiq6&ETk#12j!!GiRjXT2eMP+*5IjJA!SjRQjZJFZ2j0SKba4pGb!H%lLk13%
+HS6'm0Bq"5(U15K"@IeFdBmKEk,RBR95U!hm)GG[+BeBhYGXh+rdZNTLcJ08LFYj
+p+TJAMVfa8c&N,G`KGdZ+!hhfLSRR5QdPUhNZ8H6TIi@*'G(J[##i1"F#[rGZ''i
+HZG[CR3MieQem&`S%)',cFQLJJ6N(VN,p9'bJXBGLYY5pJj`63!3iSMS3eP6Gd"h
+!N!"eYdlSV`Yj@Z`MQ$*!&%#M2mUq0%[B9-$6QLae$@jQ0,NPr0Nj&-X)XUb#MJY
+I&Ja)CZH2rImT6bXZ$k2cN!#@U'TIr"IVYb!,V6rk-9N59P#cNC[3DLL``$rZRX3
+5`#N`NLDQjjGNSXQ*5fbR6CT-TPD,Zd1plc2q6)(",k2I)pMD!abA6qakMiYBcpk
+)bpR,YJf`*S(Y8qpFp8(c3ShHZI#i5!@ITJ(Dc)EC9iGU&F12apQ%5pPHccJU3L4
+pj8TQmKB,#14Id)HVF0*MDkR)[`@BIFZJfa0NhMSJTX5S)bBL)ADTX!p)$-H2&fq
+JIMQ,V-$b&Bil4KZdQ'%'`RCVNhFpEZ))I`@c28!b3M+Y%NUDQ(b"4a%HPch"RAj
+B51RMXShDG3@Vc`pI(hjBi-!GD`8Zb,5,ebd02G"K5'H"H+9DJ2k'BjK9-5eEJPe
+0ja9TTJ0[epr'b[ja!iQ&b!X1+"elT$Ar*ic`qla6'NT%eX8'1(QY$Z6)$HaeeX2
+$h%3F@p5a+B[A0P(8jl5+lP4JeEI!5T468dAKlP26f0qCL"MXE90fH"iQpK4S@LM
+`KIC6ER)P2eHIAGSh6$Rq2j@YKF[BHZ*(I1EIU94Dbb8cH$CjED$[#-3a`-,&*Ah
+QPl"$$,lV5c9cK!eiQa"J)h'T)-*JT'mVKbGe)5B2A$)4I"G24frGkR'API9ce8Y
+-ejeaSClCKh`YS3#3!1CSQ+$pBjb"%A'G+!Y[XKY+ja1VVk)iHCEF*CRDQK%5S1d
+F[D0bKaJQ&9"1JEih'!IF5`4b[VSCYbLKrYQRF3Y8PkMAe1)D"qX"q-rZ`HR14SS
+-"MZr`Q46YahcE23rbKmXI'QjJbk6E'BlebeK6JSM&%U[X6A1V'*I`5hr@bI`63N
+-Xr61QSIhB2#V06j$`qqFGbTPMe`fVhPrSQAB9*!!a+J34m[AVCFGF,BGf5"I,B+
+Qq)TbeN41-3-8P,*,G#i+r$JDqkE@D-r0VPrSihAkhJ6pT6jTV5`C@Fa!+SQS1+9
+GcSE,cDc%%'+K%!5M0h[N6UlK!``4BP8Y[k4q!90,dV`%+6LR,,2jFi9%j5h,XFd
+"&-6cl1J%T)DTB&#@,Ufr%c+L[F%$Bc%8*4mj,Ir4!+hYGdSp,iXKMEb$SYD-NCR
+,S&Ze)(!i"I,#BI%NrAdp!Fm8XiM*ib$HV31rBB'4qT+*efl5UG01eE'EYdmGG&Z
+RJ40R5@$dZFLY"G[q9H%e82%"33a5,fmi`rRqS$,d*2dGAqV@EPCVTVHBCl5ASl)
+E@ZS@P4r0BfIMh9'"feXH+c-l$pq*PZIIT1CHELELmViAcC-P!c[J+peqKiR9Khd
+RRh"9`eEJdTUE"bJ68b3hVESh3PXUqZ@rVGB'*&RcQHebJUq*SH3%*#Pm0,V5#q)
+Di'DXU[HS$QjR(aV2m0`(-lKFBh`Pb*D1SL[Ric+SmKT90eFGIKEpFHQ&jK1kkF2
+3eaS-G5)1m&BZ%k'"(ZLVd!`Y+qF'aM+E[KhVYbGZR%F-Di$&88EKb&"*-$%&23f
+A3EeUCTb[2jmbfqh*3G+M&-pCL+TBh$T%UA!F8XB#Z9#'Qeq+5LI+K8U0ciaQ-Ca
+KT)`k*Le[N!"KXM1+I@Lh(V'l#r4qa5P%[!)BHJl+82GeLA*S"#qc4BQemG9dMQB
+VSVp8lp%mI1fZ!$+9%BVS5#X%[HYZELl)T11-$c"mmmVZjm0(TME0VP+8bEmdE$4
+CTAMaT&"RB*)E9Qd)'C!!"!"f2rA4kXq%q@eqSRhRd%jpM2[HR)[l0[IYqb[ccPp
+eIM'ch,'%0TM9&[63bhD)2N1lYQ8"&YhdjfG!61mkNhDYrVA)kBGJC@$F9(b6JmR
+"GQH9YqcXD@c9erSK!3Cq+bH#4m'fHcUG0C69CUf3!19H"p9kUPH&HhLPhZ0ZC%'
+E#lbl!+SNA@1fZEqYC&rHAJf@jjFmkYFI+Cch-*12eQ(0qlB('A5f2*Hq[P9`EhT
+jH[6d%(FLXEq*9M,k4p)12r(3l"0qA4%#'P-FS#`Je6#!dlCXpGH[[5LqcS&UNNL
+DXp$B(qZCeKD(HYQ%SIPRmkX)h)U`dTUaKV1F0b9CBS,Q5-YPBJ1#Gr`9SqcR%#b
+F9)([GR3aIFClH[(iPX0a$J-4R45[ARMrT(-Vi%TVV5k8,k(cB%X9SMHfP#GXV4F
+9kL`CK6Pk4H,+X4KCS'!"D'*fKAA!lhAqF'MTV#QD@kfk5N!1d01CD+pjC3VVFl,
+X#'fSeY!DP*PHiFd,LJYl0CG"pID$TcEc#pPBbG6JK%TYAa%X0Ue5d8IP,CAHZL0
+YJ#+RIreG8A)JMa-`%8``*S+d02Rci!-f*U1Q01H[jF5FHYK,0VPT[XjrYe!E6#j
+A#l$`fdZFETSG6C,Vq#(9hlShLf)DX'K0mT&`#'c3r+'L5"INLRpkq%-kNV)%SdA
+M2(F#(e1B*X`YrZ%8,TPrXDVGfR,@L`,)V['YMUKBBkU[CZpiDZdG+f,)Ydc3B3)
+)`$l3bJc4Q936j1`23C!!iF!rVl[-GZp8*V1M&C6XbIi(5'*KJ(bG@I5aQ1Z@%9D
+T488mPT6#!8k663%,ViV!Dc*3C&FHrDGi(IqjM[I2"MR!F!4pR!lklV0NbZIXi2f
+(fjKa%$(,&i#iABj5hX+hMN5F&1[aN!#lAk@[55ZNb[a!--5jY5+,*5Zc@NJp[kk
+ETdJ(LAd2R,*'+"2))6h@`!&rIla0#p5S4F`10jh&&V+ISqUP!k#hqq`L6%+N,Sj
+`4pH@)`DkVA[-1NfZV&6E)A(%UkRR8E#qDqG-iGaMeaE$3SkU!p4P,!IVaP!pX8q
+"FT&iN!"I-EjlMr%efK,FIS@Q@S)28YE9U(KQVT5#+bc3h$6IIl[6hl$JS)35$q(
+Am)XpZ-L-f3([+CAd%96#QQecRL*H`ha$DJJI%+1QiN+V8Gd(XTUc$(%4&0kN5rU
+"Ta$JdfP4Zq0L,Jl+8QL*,b6&mMTe!iAV,k9LJLZldX"24jZ9aj(V`#$pKMHZ%9X
+dJKm('m6a0QQIrk(PM'i)miD2CQEV"J(%i+fmNT[mSc4Y&rdX*&c6pJS)FqM)8UR
+dVrm@cc,Q%UiMK5FN$mfX0DJ-LX-XA3YPrpYfCYq$5j2kjmLG'V#Y)8ip(E'-mqB
+%8lTk4'X6Td2mB$XT4`1(eai!jhmdP%T5(l8dhB*h2c2&!)Xe%!b&HI,)851J%FS
+rZXeY,Z#BSFVUZebXHUQ#q1-(!V5Ub1-3!bqP)k4mPPqEa*MTU'NeiS[J'@JdJe+
+N2'EBpFFKVcD1Tr(RHr#Nl,pbTiJd&'SR"r2C)i,[a#+"`CGKEC9RIA')!Iih1-B
++9FDh4cdliYY1Fi)RX#SY0qi'K%f'qNM0J6rT3lfihG*k$c58UjLlaZ4%(5pi`!4
+J99XLaEf21Sc0iS'rq)5UHk!Rdh,JNa--KU5KJjQe9a0JZN6aE@(686#kaSlS39`
+3ZD5m3TdPeM5'Apk3!1!G*9JcF9"kYHCdT""5%JkVMXUGNcBb36qilmr2Bi'-&$e
+!kacY%AmH28bQrBU8`a5XRPlNa,B10EPm&m'bCTbm0RVj69P12(%lU$Y46M21(C'
+h)U*M`GeP6,pHm5SNYN[3)XR58GcXZ3(jRd4)MHh'J8d$qXD&C+AV[&feE$&RXLa
+e@I0+53iN+RQhf65VlM!#SIXZ3mc8CDT%EENLCSR3hi(PkJT2'2S[fK4R1j2Qj2h
+LERr*1@&'@K40(rHcXpqN+SIb8cl+*YHRU(e3N!$RVliKkq4AqmD(LdcaA%Z9,hH
+4`)De4!Il(-Am,01dllIkrKHN1TH[!RCGLIRDbL@QKT@dSQ4RrV"caAXJBm@0HbD
+H"K88#r9i[mYUA6(h1Q2FRTMqD+TM&fAZA4k@jbq8IR-j6CXi`Iq3!#"J)!5(kRA
+DmhRqq@[&(BP#KMLX@L1mK[lF`$26ccAYcpK1#HfYU*h6*44DEXEe@TG)f'l9i0q
+265d&F`YKGbH8SF'#!1)bkYD2Tc[51[k&JGl(G82J4[C6l``V,bPia[q$(h9!@TD
+A)ld2FISQT)RTab$JHX2kQ,j!1ZHVTNpI9bb+T[)%0ED+4(rTZmEm#(fU$-q52P*
+L4+-8#DPpR@9&V96[X$B[1NAXQJ09dRr9q8r4eeQ8VC,()IEL3SY(dMSd5T41I-b
++c2M91)U'AT62jh$QXImFq5Xl,lI+6@CP)N`UJQB#([hl-C!!"Aa!)IXr-@Jk%!(
+,B[Ae[5EM6"LLF8`Bei3a@I[q6+`Q25mCCm,Qlc9cN!!EP"UTp8p,60@4G2+iii"
+ZfHDAYaf'jBR6'k'P@Sl44)H(Y%La@VhLra8j)RRK[&6Ye2dLA%EmM"k`@ciV'V0
+*,N5R+dMiHi)%0MVY4k(VjhD&QREQCc!hPeb8EC)lkJJ4N!"c9$Q'$)aqcka5YBX
+$'9r$-HR[16A"[()Rf1)-JIUlMk%(TV2KqC!!C6A,em(eN!$KabeHii(p!q29l*V
+ENrEr@Y39RGhZe*!!K6BRM`hrKCR!q!rpS5NY@8`'k15%69liBk6rSM,LN!!Frem
+$fIa&+8hYqHrC$F68-Y)JK5&Pe*("mD)$4S!MJ$E&$8IG[+p&#"LrSi&CE&j[%c3
+-5[3lK#%%ce`SmChYLKj,YV1R'*hEK$*mH0EHVbBZfBM6HF4%Ga#BEdU10Y!YIhC
+NZ-ek%XSB`(Vj@aYT1-bP0XVL%MjB(e35JR!$%D,99*LR$C`MhSe1XVeJ[XbdS!N
+)"eq9rN+&5&TU%Xe3%b#C3R3%hNLfKUCZrk4DS"*rXc+iMc0%(0q83'ECMqdh159
+-4Y!L!Yp1&6VUSk@FP)"flZppc2QSIMF!Xb94HRLY[Ele"i"hE5iPUAN-CR5fRF+
+ih8NmDF&f,Sh`qM9$-IdVj0bJR#a+69XD"TQ*@LS#V%9M,Md'#D`pHmThkETbqY)
+$MP-"k1phcD4F8j6)$8q5'"hra%SUPHr8'JbCX,iQNI#Z0!S!SI+""NfUIQ&q`KR
+NjBK3M%lD@ch'"dFNQEb0a&NI!I9!,iJQ[Y[2Chib*X[(K-D3!*Pj45$2805kVXB
+34685hK3!eAXIMN48&f#9-,ElqdpXfPGM2DR'Th[LapU@Z"R2a8XNl6llTd4BMpS
+a,Xf-+,NS&8#!%j!!A+RcHRLj`VmS%kipJL6NcTmSH#2XN3I*hMEBJjQ3!*f9MEa
+Fke@94'#)i)bpc!KX8ZHUACTQ#5'6BKBU8#YGCK[H(VdE%mmaPJ02$+hX*CD)c)l
+HQBmI4E2Bea)2Db)iL`H&%Z*"@H$!(#X3fbB@'8BJDS2Ije0kC)8FYje[!L"06jS
+JAeD'*l-iQ-"8e*f'QHBN,03k86ZQ,ZJ6VJ`UXmpi"Df2DXEjUI2(#Y2$EI-CD"i
+@ba[j6iL*44,*[fi%h(QJ65(F,i(l(jNJ!81mpHCI()(HlRD!ij%a0jGMVm2a8GL
+ZXG'-C&bjAjmK&+[jhRZU)FVKIJV%D86@#!#*L!4UKi0$K!9EAl$QAG65qG0VQfi
+UV(5VPI%j-JEFGU-CdJNDfm(H8`1fMb2K2J#5)Zb`jAaBL%FFe9#X1SQkiq3d@95
+-TGTe`kkC!PcDHGYpG*hBmlTbGTUp++X[j%UNrR8UL961ehqd0Gd(X@C2L`mP3+[
+LYa(UXik$)C'6Bk[M%I-U-BE[1jY#JRZK8j9!TUDG%KPl5YQd@C-`,M6[j+N6ech
+f8%qb@j',km5S&*!!QMK2[DX8Xm`r!2X*MkNK[RqZqMeejlmkdA58@8#&`P-hl*+
+AYjR*SJ8Q8c)cQV&LVXd@X(H54$DMJCE[+)d+m*fcjLEDS!*ZQ$(khhj!X&V&@+0
+JB0eR!Z8c$KVl2Xm45-$1X+pXd9F[kQ'4"&fR[c1STM(PXCJmYKmr4M38*Se$iZB
+X*IVakd1!9%`A[&`1ljQSm`AU2M%RB'3%KH9EFh@J#q6Z#AK!6MZ$FKe,4G,Q0D%
+PFj!!DpP!@HTdFp4@Z-QA%+aD[p*UAdGkIkVKU2i$Gl,CLU(rhp,#NCCUK'H-21p
+[E$Ccl#)"M,QJ)Lh(ETS&ZC3KMYah5b5I+0,#3%IQh+V)NUNYebcpmpJC5I8KCVl
+"'`6Eh)q2&`!,p"6SP0@$ZVV$FDP+UV,pV2*!r,6il#jR`,0%94p9J3jLFH)%*H,
+[pkKkCBPra$ZGrF6Mbc"C%l8S#2(3i%J&+5+@JMc`D,+EZ-*MIZr@(X-M$mE85+J
+1H[pK'@Z4pp%0DmG`rpFll&VF6J`8mUQfriHZ[qQ0jc+!6LB,L9KAThUc8+PF-)!
+jbff&!YGiZ-p`RPbl3hF"6ha1jR4109565[mA!@2)DSAEQ&(c&*!!arP!p8Ad1eC
+QC$LNk)U[(0Be"%-(JSlh'@"DBdF([qf"SV4E@HV,2QkT[4HR-BXacIr$`A*FA-m
+&!(UY+EehcA`h6r90UQA@,E-$6j-5$bQ[rE1i&c6CliUN9m0dLAEh9KiT)IqPX"k
+T)$c@[5Z4$+KGEBMKD@A5Up&MQq)Se-c'[Uc2TCq-(Y1ljSjqU$H1!1d(r#1jJ-`
+T1MMRd,U,-ef+K''pHLr&6mip3`RA2,Gdb5STEf,pRYS["dfeGfmLGH,4MhibRcK
+3P`MS%!+P*,f8dkS'HB6d"Fr,51Rp4r6r!"D(+d'5+!R8C#aqV2qdfke#&[#r5Ie
+S`c$ScTFU0*[Uqc588!dei6P)T24E64ScLbNbU6c3TX%,C)QD&9(+V2j%!VkT9&T
+L3!5`pbbKX9D%8!949mdHTV'cLm(5e(9-`-L'B1D,KeEBd&+epSIEX$GE!0KJUX-
+)q5P2I4+i(V,%S-"EVf%(DbrQf2e(N!#$r0G&'5@l13CrV&XX[d&hapB-`!f@+S[
+Ak2YqDEICciVjiV"BRh3T2"I`r94PR"rk2@q+,KR5,0RC3+rL9KL4YhYm`T[+5c*
+$85lKTEB2mh8Sa*[36iS%GP2XG0Dba[4BI'DV+@0GK!'iA'fq"Mp'JfNqMM+LLcp
+9!KIflJP`J4["$dGCKRD%)U%NC6KC1AbDaVFa4bd$,0l@cZ[VGJ64cK1G59KBb31
+dpReeCp%Um%XV4V%*0!fRYC-H'GJ5LAR$Sq1ZrY3JJkEXY[[A8&2mlarlmP,r$,R
+cTr[CHK$3a9V+@r,X90F`lmJ#jA*UbkkD8Nh0G!FS[#$fCA,erF'&4AZAVQ26Gl"
+U$0Jqr!HT5DeSDT(+KiVV#60f5erX#mTjG09mphQD(1kc58cRa"(F'C&MreU+R$B
+Ej2INM5d(Y8AfCApDmmM"EA8AeJl,L8RXb[ETGr@Jbh3a3EHE%QXriM'Pd`hH60d
+IRZaYClG2JfQb98-*-*a*IYlYdPh4X[DMffFC@ZQp*DkdY2cQ5lcMV&M)fQfkP,4
+RrRkRU,8!*p5a6&4P9rTC%jUH8-'2m-3"F3a8GE[Le)JLU%FclD6PCb@d5J*+6[X
+3'LM%CQDE8NRdc6"pkl8V3amTi$FIEL`ic,mAll'95k8C[kSXS)-d`!`k6$5m6Id
+U"#%4mZ@mdVJGNPR`K#$3AkRN8M'AiPH8BSmX!KMUGU3GVFG(DTMQ8##2GP&AFU8
+fa1`XGq+9I2r%6LUa,!eDrAE#Yh@6JP#D6`kl(8kdHN13!+@P0$SRQ1f"i!Tc28G
+Y)fIIIr#3!+T0C&KN@-LJMf)9aGkf*iqrMbNUT48,T!#FJGN,XiNIM8U8)KI5rFQ
+4f@*'k"E*d)[EYhR1kCM5RU03!%dH8KAlYZRlZ*PmJeai-&ZPHb&(k2(pKV)Hp9H
+[36MVl*!!jUT*G2Q*(BeLQRMA[!-%2aHLU3*E56qe#BCkN4H"DmI%IZe&@295rSG
+2!&498l4"pBc8'"JJ!2hXM5bMPHd*&I,p(bb%j-T[#0ARlh3Y--5YFb#*3Mp[c0)
+I@K'SViir&hBlTARV`d(E1"')4D)Y3+@lV4J0HNVJ"8F6r+mTX0D)L*p-[bj@1GN
+1BHMVjP5$@rCUFdifqTc%rqQFIE%*8eY#%qXkh1fd'Dr(I2j3QSZ[T5M3LlZHUIY
+CdKl@&&X38924hmV8Y,8Yri'&`4Pe&TI8NS'#*Nhp*hiJ@AQ+m'+eQ6ZDVI+%)aq
+Tm)1+CF#f"4"G8YlPHcV8VR3feJA(*-eDc!YhBJ,I"CpC1R#FaE)EqVNif)c8Tkl
++IpV&MGj*A"cMVRTR2TY8Ek8p0KJ+6eU"j28FNcA6+Slc"9JE8QJmXhmE"%%AZ8I
+XRpj1mc5*2@X"Ndkc#(NG*[J(A2`9"TJ(q@I3Y'&,'h6iM*c&#rVe-PR4Z5hpUKR
+dF&am,prRj`q#A-&c)@%SQQ((lGGQ%Xh'McZ'e@VVMQc8XDrKkBQU6,2[jEC%'@G
+`bHqDMK&9Vi'e[[q46*MlQeREm8h1E+8`RB8-GMT*%M8%k[`M)l0CLpBA8Kd[[AR
+E(6)TJ#Gl%PJCmmj0HFiqR*Aa+lRU#mG3pFZ5J`QBHXlZ0m"0TDqLMj3G$IaM40X
+rlZZEALJlS(q[%jrEkdSY+N$2bRlMV2Tq"CM`p`lU6P&LUN8laBUpNTc8'+9A3h6
+S04M+G[[,([UH`IR0rc5d5Jk@XN!,`YefKGGN(E9Ea!Tp5G,l)lEh3!6H",iHkfr
+4USN9j#pd2&k[JXG+V0p[kfS2FSFp@a5ip'+[*`4ca*h1&,9K)Tj&(a'M4qC9bR9
+l3"&S8ZJQX'jjAE2HPPbIKD@AlqlVDTiJrIPk#E(0L1ibSJXJG!eB%!EV*pVJ')b
+NKY4N6T'FkIB8M5A4N`eei8fZFd8RqN(I(qdAc)#b6@LUZ8Y'mMB)NUl$ZV(K@G#
++MNNUfZ8j2PhC2YYSNdhY@-Q8@RK"US*4AQ30*8M)"(h"Y8IDBd0%j6Eae*Fa31H
+I-hqGM&+8&6ZcTBa!TmHpFdk4N!#aNrkdG9AhmZGdpRD4AL@ifC4QqY&+2lKU#6e
+,JlIX1ZqGNQ!Z6`5bE16*4&!l*)4KLJ"e3+,`kLJJqL,C'UC4`0AB5hi1U(IaUP8
+9h!AZ#)(LTFqN('2'iHY&8R-4Vrc`r8!G!F3@D#ZUA@B"fX,ph*NEQe1r+9p*&AT
+L3eEI3"HAkQ5C@@UqZYUCe$(d@l4(jG[FYTEY6qPDDKEY@(jT'H+SiX"JF4ird-Q
+iBpVjTB`e0Xd93@[6ZDBF0VSlMe'!0$Q3!%8lIa9jKd4E",kJU*5[NXXHX"kJRX"
++bcRrT9rRmMY(EqE'8YHUEPmebpl6I5c"Q,R`+Y"JCAKmhPPer$%h0RHZd@N6m9j
+f[XI[qB$j'X04ipS@9jr1S1i84bSAJ1`-rBS#ifMP-21$qRD%80`*l,Y9G6MjjDL
+CpN9JpA,jAELB"96E'k``D-m!8*I*Jk-&S6J%*h8ASq'jUIa1%1bV'Hqp&Dd*)Hb
+3!$B#('UV(GCI``M2(`rmGj5ZIM(F5DLjS%1q@`!MQHDJQqU86XBGm(X0!I1$afJ
+4rRPR6dV*0'%@m%9+SeZjI1k82,5dfSAVfaefF4jC8)FQf1%,(PDbDJAB66p$,TU
+fcM#p'c+@*f"rYlCq9LD(d3-*&&0l5aG-lQG23UTHZYbGP8riHidUH68YLmF5K#G
+(U0k,3J08+83*5Xm@jaINa,J1!'M1NK0GahllKeaTN`)X`lpe[amMb%kiVlH[HCa
+ZB`%(V"A"YcQqkU#qphc6[!NEV[!NF)A%#$F&-lbhBZ-Tf`6#Sr*G$iX6*RAEhf9
+jch)PF",c5BNPE#if**Ud#%2*&pCf`E1L&IKHL'E2'HIA#ec$ibaY))J*5TrJeDk
+-ZBP5mdU02K0p0TZ9QChlT&X@UH6$AG4`IpQm[GQh@9-'X@EkipFeEKeCQ#bp$kj
+'D@FQF)DYCXe0EjT3a0q&liHGIR"Ta"2L!pji6MeK5,Sa69K59Idc"@d09QJR&ha
+EPEVH"Qh-jK(46adb1ZV,LH29!EG!088Tr(b+lba9(E+I%RPP84)M6!#Fb)U-6S*
+FNkG@`Q2Jdh0Y8&"HMPCa&e8JcMJcF&kLP0i*G3@#%-!0`%Jq+Pr*)bj+EqI"l8-
+2HP[e-KkBL4iFZdh0iR6kYPJ"p91qDIMCQ9H8!@QN2@pq1CNkd6DlprDKGN4TE(6
+iq6qLIN8Kk%5AY*TfB(5MP%63LAX1j6lEVp%K)LhceVb+QV,G915eQ[,HrXrl[52
+`*8B"ZQCT9RUq3UkfSApYP8M0K6C*"31b[X14ZDME-+)Mjd2(6A6fVk&#p-1L*ff
+8p+Xc2MMeeShMcf08K09[[(4MK8GG@0,c,!+`GcQ4Z'T6DkIJfJ0%KecYY23(2*!
+!a#P,#TK1D&GQKcJXRcM0aQ698!Kj56!%DlUV(jS#*(*iji8,4C9EXLP"I$%5F3B
+39)q8+YY1Qa$e2A`[J8"a1pV9BIS[B'2BAPIqYDC98)4'pFlGVX!p-"JCN!#+k$X
+a,N$N**!!@8bI&YMVZ,)3F-qI)6#MCBR6B**8p!)"b)JB1NCBPISRq(UG$fq!k3c
+3h0HP,LRr+HIUfMBi9[CL&21idFI@-LFYDG4K6pE$AXaedT%pp![K+#L8Ji0*Z!Z
+f50+Zde%J`f6YkMfjr!,f[T1qU05-UcK"1li6$,jCbXI8rXQEm)Gf3!q+H6hZXSh
+ljRp%M5F6G"#bF!)N$!DL!*D,C"EqXGDBi$p(d1K2+!CCYa8Qeh(5PM*j'6J!4!V
+K"8BT,m@Ef!0d6[rIe'B4Z'X(J!0l6RE()D0ENj!!c!#0f&XA)&H,F[K9[$Te6ch
+E$+`Dr&MN6k)cpR&G59ekl@[mV,22r`kr*kE0Qf8h8'AfA8S++eIGJ"KV,2,[qmD
+hd2U"[jJChLDE[*P%V99B&Y0c3'SdA'UmDjGDf(6(YLL`SIL(bqe#Te54IlYZh["
+m$F!N@%T4lj`YVLmQPkVXAi4409H1T3+H3affSf2kNGhPcbPD6Fr-*#a25!brN4Q
+r!1ce&Je61[Cce+LP)QHVhH`!NAK9@BBLCKYC+I28b)*UiHqi[$ia`a@$,4r8XkR
+-YKEEUS$pXdQ'J88YN6erpK4+G[CUh"(2H1ejC-+d#ij+0HG!paQSrN5&E[A4dGf
+5a)E$h#YhVSlNQCL#$D&9+UG0KpHVh%2K5)l4K*2(M0(Cf(ha3'6ip!MV2McVmF*
+FA-e3a%pcdRRMEX`TZd[lBDV'YZiBIK@K[Z)-[J(0'!e56FAhf0eUR%,E'8@bN5`
+k%$`JNmP#6NHmqm[e%$VU#SPd0c[pU6KjG*LFK'8K42SDmHC8ZJR1%Pl0-M&Lpl!
+6SGB6%BMA&'CUT$IUIqL!)1aDZ1R+aYqJNZXpJ!AFpD8qfpRLl5r'+Fe8G!L*EBc
+!D148GB'j"Vbr-Kak+V%"+q(Q!I(&qYX9pQdad5C9RE3ciE%Keee*1ki-`R3M6%F
+I4"f##J11B[G*[rRcdFDZe@[Q6pd5Q*+&$-$N*@cElBe[LHq*@4dH`MX6G0BqeUY
+qm%lqhQK,HViD&!Dq9kj93d5'Q@08*MGCfcer3IiQT)X4cDG%SKF86F6LPq1ElKD
+A#KE-er&S9H-)"-Dc)QMB"H*QN!!Dd%kV3#BHi!1kLT'HC`)Iq`$G,9mM&316YTf
+$m2)HME88MKHba0c0BRD2G!#kpq3-SVL2"Tr!0XjQi)@)1"Y%Z38i"[RGlqCTj)2
+NEK"#GHBNC2k2V-!G4L#NDJZVek(`*F&aEdR!%hG**N%aIraq*)AEc*2XjL3"N!$
+@aC,D28)@ZXk5"q1JQKDV9B%&02SP[X+S)akVX0Tf1l6"XCf9L$#*q)2'1#0B-dm
+ra,2KPXeZMSDD'Q&TQMmCPZ&8MPS%DNPIi)M)*(J'*1fc(Q2cr[9A)N18XZb5T9I
+!l6)5(*3%BPZ3!'3YG*4Q@"$f&T6AfR$##pm3HVdZYbp&4lJQpUp0PSdCjjTXb5F
+bEfT`M#D#Gd,@%FaEf2L+k#T4Ghe9A!5V)@R"M#lfbbY#"ahl$D1aGml8009dl4,
+U&MARXRj68qX-2f&F#SIp@*5Pb)-4&d`i10)j!TB2Um,h&X4K+[C&6P3$JH+jKJ6
+c3R%2@U`[cplcINFrlPG6VB58XHiqj$m'M*`6L36JqT4B$**,C`U#ak95F!)C$i`
+T!0L-%PR9mU()!fk@HcGG'K,G$ieT'%*NE&+[!&!Bf@UNkf-dSZSG9XHHGZ,U[p+
+c!N,Z8k(c&brAV'XV3"`"089'M)qlXDU(qAmq%(8mQ$haUK&L%$F@B'C-IK@D&+6
+Z#bmB5m-*TF2h-8%jVhHX5RVAKc[9$qFN*Jq*SpJT#[eULSNRP)GAJIfhkMRai06
+i4Q6H-'SfrIbR5!*Xc$*l084,ZZji4YS[&M[Ui!EcR!qXX[E)1+f)(AEbM[S1m%k
+LIZQhbbP82fIL!rJ58-PP3Bk*eSC5e2qY!5%Cl6-#SCbTA+'Fc"iqKkF*hRI$aHf
+6#fDM(Ac*jSZEGSUE-YCI)h#Bd"aA[C@JhfYZYE%%%f&-H"FRT3cIEjEPCcJ6K(M
+A'55I@QJl)E'LFRlN&CRAI8rH6#IiGN"dD45"eqle6ZER,i9)Pb-ZQS)Eh!%2db4
+8#ZKPPqKD3cSjQe2L4G#"3Xp'faE4h@&0LBV6KlZ9jlSRj,PUY@Kh%'CkJ0bElJ@
+3!"(Y,,A[V@!JLm1C-,UDD)L(Z0fLL[I6kGi,f*qYIDDUQQV3AQDqP#d+*)$dbh1
+dZkQJ!$CZ(1-48QJlXSh0H+Vipr6c!SHHdrSEIi&F3lq@N!!ac8V0$`f,Y1I4e3H
+6+p+(A0DC"MjIq6$VMeKR8Kc#%a5l+h3fG3`SX9#F!L%0$pASi*A#AA"L1#YB*Ec
+@bUhhqQDmK-KNUkp'U!elTZ4d$qN1**HXN4RClN(#i6UZK@12N!"Mhe)8,c$p"@d
+,rl5A51U!C!)$8E+UhC'MGPlGa-+PLl5mjr'A"Xm-h(p0BUaiA21#jJp1['c'`&6
+SiGDGLhaAMq"EYQQ"04cK4+ecqA-dVm-b@*-)@e#hd1C2m#Ap@Y%8RE`cHfdC0#Z
+cMV&IL68R0V!J-L42$@+1XjFr$alLj"qNK`DHkjD+Za8bVPTb&-eM)-lXM'h#3V*
+lfM8PAiSpM#l$!e##h'kIeQCZ6G`-(DV)&@Ph20)[jKP#%YeM96*f+FPfFF8NALb
+k"cdISP'%AQZI,USKl4ah#F55D9XJckhQd&YT3PDNqQc"KCGqaePV30,-Z#9d%MG
+1fQ),%Dh!)3bVX1!!(1k!A*C)AET!F6PrUHc64Qrm`8UfZ9RkAikJP[XicV"apYQ
+9-iX!lMYEpbVPi3&%8+C([dVS),kC9*h"@$"9$1M'C-dS1Vj)Ac2K`FPk19K6q,C
+$dm0[I6)C`iLk4*2@m4("8pZp0)q"UmhC-Qp'D%0039MYA5G["-L8A5V[AU!qeeN
+Hi&fKPb-AC+(I+9*ePffb0&!'43Ap-8@eACk!e'kd`X((Rd6IdMUK4%pN![HIR'U
+h2e2F(TZ%Fqb!qU,hD06kQ1+XS0@"EMf2!X,30$Q-RF9-%rEDHD48alY+CPN6)hK
+CmB@2qrD+(1EfN!"(UiGCEEPcEj346)IPF)e[JfNGGm$dF3bJ-Ij)l%)V+lqjGZm
+0"F85Mk!Qbr[`e&&F+-[c4%2)+BQihP9YI[C%Nk&UVeZDGSYZfa$I6AURk#HT9-K
+3cIA[ek%Ld+jXG,lXHX4E38r"Ne%`[rSP!(aelLKp[,)@pf4YHH`eaZ906UeZ4YV
+VR*!!GR8(`jZM+#r61'aQ"Q3&`Gi-aK2,P!mqh*-AUYeK$jF`q&a(0[XfecH!TaN
+$FMjKJ([Y)!ha4LH,6Dk#RMZlYSIjRCX9#P+eXS[C4lE29-f+b5MXXB[,5T4'F'F
+E**Pa,MUMr3Y+J1ZrR&B8i@8qEj!!q)(bY`0IHk$IGTNEbVc!d,1"Ni3SD8+(mT3
+N'aph[!c44cQN56XGbM6KJTbU8NmDea$,K+"l,)k58Z+Ma4-5b+[,`AX*QUS%'fC
+-Q1"5`N,E'!Fka"8q@m(Qr0-lKUb6KYb+M'-L,JFqTjcTKSfS%f!`K&&&#9Cb("!
+h1!V[IpmF8p`PQ&fB!5dF$9+"CXN,TqQ(-eBehH9MIVem1K'Z`6&r#i+G2b+H9*h
+J%ppCb%VpYcB96*3FPd%FCrqXd(M5X"LKDQ1ejA1FB*NB+51Y&9MYm[[Ci(-0)Xr
+hpBHDP+Kk8T!!8H30*+T,)#mX%BI%&[NYQp+0bm%Zj!YH'LB"DmGc#i*TTKrAVaB
+VZV-B@P%*[A"lBA@4fiZ8)'3b9N!q-"$5&%'+kkPRhA4X$XQG+3*QQ[bQ,*a6YC8
+BJ[dcRiPJa@l)j5Gh6cKP!JM!m2HXrTK[-+1-8U4DmKfHN!2EQZ'["mf1"G$pI*r
+CPR05a+cq`mi4)&"ahD5ADMEr$!j0CJf2ahZ**V%c5+lCF0SR4V#9VXBLE(UXVX2
+#CaXPqjLSZDR[i#r-T-rB62aGD,J$'Q!)Vp8d,[PeC$-AU3mUfHDi#a`8P#rE,eB
+r[iI,M#1#%['MLZ6(PBLEYL!MZFII+8k,Y8CBCUF),[eF8qpA4h9&G'Mq&dZU[(&
+(0hSa8-,9JVAp@#D,M'rAedM$jNDeG86flk4"['DXNaaZG5eF[c+)cRC"YfBecEV
+!G`Ab@$Q480I8'6DeT&9K-L,%"aU&F`b&60,kPbMQ2rr!j3BQJFY)VXlVaqb"aRX
+!2SD$V+D#S"D$P8B(Zf)+l1TY8&3GpE!a'PLBP*4QTHDJUZ1[FAF05eHK3(e$31H
+h+`p2rl89U5PENB[Q[q@ADZrVATBKidlRMGS#B,3!@lDYTicQkU"jSe)22`&Rk(m
+G$Iij9lRlBBkiU'R$Yhrr2V55&Q)FM%%XPYE)!4E(#ZQi`jJkDrb8bjKb*%3M!)6
+V)P,D5%$8lB*("aIa8jl'MB8+XS2qD-+N(pkRJPIDm#9+*1-V'U9I1q2B%YfX)X@
+LiJ6bcIFE1H1GIF88LpMk,AcP8+iHh5DbUH'k$C5L3pjfk&EXh!-S3V29Y4&ib4X
+i8CJRaTZfM+"'LlG(F91B$hm#$k6h1i#R%"R@M8[h$HEj,(C"8`S"SaCa@XAd%1%
+pE!hm%CPkpLDF9hTJi[)D-m*L)pDj&[aJ`!PplIZ1(a'd1%*6`adk6M`5Z`iI!j5
+4[fDcc4%k%*p96"F38Aj#&#U@bR0PqR[0#)[Q2da'fXKbbQ)kTU+SZ6U#84k[,96
+EpbSqBFZD1-H&A[$-QcHL-L*'e"('3[!3D9(e$)T[M`3cMA19JD&4YK2G!f6Mkl%
+AIHMNN9NBlb8)5%,N1Ab94-Ud2HA)T-Ne4G[A8K-rpJA'3[R*0I9,#h#ei4AcLlh
+9C@+CViVNSa@'29+8P+RBpT!!(6NR2PBl#NDD*0jEY3,CDK%M'j)l0SLKSElI'lQ
+mCq'ICj[@iG0V(NU#'5G`LU6&bDT)"ZqH016YL5`j(K$#-Ua4e'hKb'TRhM%NZd@
+N"66XR6ljZ!YS[5T*Q-&M#1QKQj0p1-"kp)4`#!,i[1AmP@[*2J&Xife'#!ZpSq8
+B5(j&a+4$PX)MF[qMT'-iiqf"3ZQYE`J-KZ'ZJk+M"`mV@hUbR`l-mSiJNeb+S(G
+HeTQNP16rq0D5D(JIe["RlTi@JbE6biaXIP1'decXh`rjNI6m*-9B"1pV*Qme48a
+Zlc@"H$*'614@fkV3*3kd0`!"L8"GR6k(l#rC5*EE"j9CZ-cl(q-pq2Y9qjp0,J9
+YQFGYF&5DH9J,BBJ'KPEl3DfARFffjE%G8VjeM%aBQP8(G@0DrGa6cUclS81GbRb
+Fr+T'[K-)+*-kch8K&1a,3ACTM5([`Ep0$4,iI'+B3$ekh1XA"QDDeYbbq$%"Na+
+@6N'q"B"T,`hI0[c`d4bHH4Rdqi(XD3Lf5%2+CrPKHfBm4jif+6`0Z+51ihE%r,j
+X,,RqbHNbKPPYM*LfkKVhQBl#4p#KK-Z*TJ'EPr**V%95Cdj-r!fd@r8NRGBq5aQ
+C4Ab@Z4%pU$1AfD[&0rmY,lZ4FcYCrbI6l2%%B48-eVrJ#K!3hX,Y#NLdVSIPaJ%
+@h@@ll[[H+mIlcqX#Rc8!+I(#mC-lJD,KH(h&q,4Jrc8C9l)kaCM-j21lK9J'FEV
+)3J2LF0QK'-KZK6Jhj9ciTZ8I`b2afLFU%CQ1L(0d(ISm4aM*6J"2e&6liV48(4Z
+[8(CU4)pVXB1&!m(fX4IQlP0P``mk9l5kA9`2'e*KNKFT!q,[Apc9LD+h!21Xm*M
+m%&6FI3AF0PYK"-bkB&iB4qbKUi1dKChTVThMM'ejK9qYIDTkB*!!ld36VN'"5qJ
+p9&+3!,@,Y*fd%pLjl1ppEYfDV#`lHG&MJ4JaVk+`30LIc"P!l&rRTd$4,-A1BF,
+mVGMRHb62p!KNNRk%*Ef$(5&F8ZqL@RX(X*!!-"F&TP#r%GHZ"6`fdcPk$YU3!$f
+A"5E+-GB)F'GhRleij4A@@XGZL&&"TYXMK)I(dY1F9X'BbXlhbFJ%,EEL5FVCE#b
+i@kk4KE2Gmq0F6MiBierdh@U9HQUVN4I)b8HYSRY(phSp['PK[NF"RX'h*90I'FT
+1"aA3&`F`@UVC5C!!QcpLl@6F[f"3BBNVe)HEb9a9%M@UP(MGT[PXr-f#pX)AUa9
+Ek8UY6+G`i*9'AYdQ62J*C+-$#9HHjUR4XlI1TR!G6Br-aT3$+``+%r&`!A)Vbi1
+@*$"'-Faa2!&,j*XMC5ZHkj+ARNVJUe8R`e'ce$1B$rae0!qJ'5J129)0FdUiSbj
+[(iSi5%$"ZB1)#pDJ,KVac6!`DLk2Tj&D5Q9'L0QaT*0F,Z1f%VjIT2G81iK8L"P
+`b2Laa$qDDNHXf29QmX9jrl,Ab,5RaDU6@F82E++'HM)bXb@aGESII0f&ReprRPE
+H-kGGS$l2j%,VZX`B8IU,Nf[FmDe!Lq+Ucl'@FmHA'BZrd2@NGCV@,0"c1jp4plE
+8*'UfLSmVS+a+brii'fj6c#9Rj2NS1XQYEj4jJ4S!,61ZFE12l+fFN!#fb1%E1)A
+k,('9hhZ#K-Lm*eC@$RmIm`T#2aI9l-ZTPdhPYKY*H1brc"CF`e5pqf,6M&`%m$@
++4r$2#A'D%TBJS'kL,e[rAAK5N!!ESV,Y&2`DQ+5E81Bjam(A30'+l&#Ik65iR59
+YI!UM*PdBG%PD@hCFUCPU3DNBR%N+Q2A",5ADA[ZNd(6B,@lLS10BM!EPIjBVC8R
+EX4eiljNU4@CkZK@)q!*#6`kl'$#1q#%FmY$LD9YNjS51iS'Nl4%`53JX&0&9aKc
+`qNl3hXQ68k844JM(@rCLQlPF+(D)j6+865a$LQjpkCR8f'@9!AEj)RS9YRMUYeC
+iFQI[LmZNZ8m@XKEMfNfLHTj$ri!&lph36!L-l%&QChjZiG-R+q0)dH%H,H"0NZ%
+8)L$F&3*Npl[([V86PHQa-cA-+1AHeKZZ-6L1D#$3)rY@p(@HZVA`BV*i,9UQNQc
+(lHk$m[$&EdF$qIePY&4k!`!lMM[JARXEM#%4pR"N$$a95#F+F%rR[Vc!KaA#YJP
+(I&f1[`,r,`GFHalXNZ"Rd"DKP)PIBRE453M-D&Aq6'iHS`D8G8CQRr"NTk-%i+r
+J%&-B(UfNU-b[Q+hi3B&d-A2ZXhHhYI$LdpMHSZ#%h"3YpMhZQZ-YLXXd*RBjMTc
+&LiPI0@*,!0%FFa(J1XE"Haea*K(C,e[6kQQHMJP8[ELX1dQ@U&FCar0cYj!!3`e
+Ze@fc*IkILjC4a4!023&Y*EiX4RhbRVckSe+YR3VPD$!h+mT5+25Vfb2Q9[e5Q6'
+#RlCj6!G'Ncd@`FqkU[DV+@5fFi0R0[AkDkm-M&CaAhA13rGl3&AA#-FC#h-h,5i
+&LkXIVrEV63UMl'TQXCe&Y1ZlmD6Pa2I+[BC45@2+#YVii8m`mV@BXIVCpCPq0X6
+`dJ9VFDjRMXPA)HJrNKBZ*HRK[-NA-5eFr5X*N`KhFqKITH$IeK!RG0UTH5D!M+E
+[!&IMpBjMbfJ0%DX2E"Z2Sp9+(U+Yaij[2`#,m6%J)bl'XSa-YK5!0l5ZA54XeUd
+*i+ckC3ImEE5eAiSFlEHBB$j95fEqSSI4Vam"2plTE-2+&G)56"Z,(D6f5eGj9`a
+CMaf'$#b4R)r#$lJMlAFU&ejYjpJF863H!J#(j4A%$2`eCAbJVU[P9[JZ68+l6)!
+`9QaJZYCT8YjX6L$*[HkB[$mk-ZGSG1*e5S2*$Ke'EePf$qM@639jf0UafqLL*Tq
+r9V%,dTIS4e([BVBbiHkG`3'e95SVGElf!I6I#FEFUEP#2@,C)[2c-NRC[14!drQ
+YpFV3D#K+#f[24J*"G!faCjE$Y9e*5Jfbq[cdC!JF8DHZmLP5FG#&XL"K@&5!k)%
+%mUpZm!&8p'G64"83"CP3-,%K-aamr%',['H4&LN)B5"I8SqSJQ[pLdhjV4b,j1X
+6Q6[1U*!!8,(AEH[2E!)mA1#*pmH2l-ppI3J`LrNG,Cf8pN!5@B2IUi[`p4a*TU4
+QCjh(aCB-,41)kXj3R9-IR1PH0)&P%dprGE`*D'XBpkJ(R"eAF0k#j('H2+YG[Q%
+G'QQQV4k&9GmTkG"fI%kH$,R!,Q*5(N2&!kPD839p3F'mf3(jQP#Ce&HXC*KjU+j
+f21qqA'!hdm8q9Pj#,)!qKTUDi"NT5AA,G#V)KaYa2kY4PRPrJ[$mBl`6*Qm!3XS
+mG5qK86f@'-jk@4F0b`DV4HZI"rPdlj8M4!`-Z+rrNpLGjq1&'M0d@DdCa648Hm$
+,[V5EQfh)IJ[rdap'@F6PRbS`(rj)!SCdRJLUh+fK$m8$9,3$UecqaM8h0Sd&"XX
+@89q4RLR3&*PRcGLcG'YTk**e,!TbfJ9!pVCjEU+MiC,MR-k!8eVjGA-d6+,SXB&
+`*Qdb0"ABiRUq"Id8HF8)LVcl#pM9SJATUm`bfi"H1YZN1ai6@SG%`$"H0lTD$lB
+c*Xi&XNUUFP42Ed"G")B3EYa$S,$hl5F%HkBpD+fPG0A!*kd83l149U#S'1[+4Z5
+L6Ll3dm"Jj)2*rFEcl,lS#E["fTY8m*RINMFdEkjJ!CC"0a(6YDDQ3HM6Ck4EXqF
+B"j0f9&-eB)))kE$hC#`(rG@*NAhpfmpI9+cC[p'F10emIr)VlR8l&FdqUM2i8M&
+RPiR@0@@a)ql"f$1FQ-"01F"G9*drJC0)1PE*TE49IF'"D5,'DkA"M$'(X3qCIS*
+"BA)jILHiZFZ+1k@I"h'XXM`4RjeNhY,NLhRZY*!!ib'#4QSpAJIVUL0E4fR&L@&
+FD@MSRqDjX(1CNmM'@T9jRm5dQZcf4[4Q`a3(U[`p'ia'N!"Z9Q`d3pjf)fMb$J!
+Q`2`-Pf`D1L9jd9qkimjfl9(p'X)c4r!@cBLKB,PFA%CC*9bIM6M5h6[H-P)#cUG
+"N@3DGLcBLZZTJEm'C`5rmC'-fE3ERFM"EDcNXbEIZ+i85&T@a"HjKVA08YDLp`Y
+QUIQZr""BXkNDpVA%ffp`fUFT3Vfkk$(*#[,F"k,[3)cMXU"1FlKG6l*Y"11P!KT
+*5jKmeF-ckG'AR`$5Y@hJSE4")"K[VC!!m!0c8JhB0VFJL"'Hp5%Rf8I$Ilj92+#
+C(hcC#d4lC4hDU!)`T,ib!B6FM%*N2IHeCpK$IaC9+F-&C"%+ME)VI6phiT(6"ZF
+!i-bBK06FK"+ETR(rSF[D&Ha0X3T$2[jai-(Hh*A%HNV%6-"U'MI"rrKRk+H4'f(
+'1T@JE+*k605d(2$X6RKaXl$b4X$hE)p2(8M4@im'FLG8ecEEH2T#*YcEmad-KZR
+iDmpfH5eH1jM+rKZ(lLmR&Xi[@0MNJLfd8,V[&l4(%[(JT3I8@94Qq'M@5PDY6a8
+h161AeDX9LF!qe9HllXScE$4VS"*pbh$phXT[,-X`+6-V(qbMkc*j$q(L)r'A$!f
+Gd2m1AJh38YamrkEKX2,C[P'G##-0fQ0GTPP$Md4BrPFEaLKkN3f`V4HNV&BEiC`
+&8SHa$UL%*JlPc2"5U'Er)P4CdGq8#[BPQ5c4hMP8,"bm(RKQ0Ibdp"[05Z5kc+U
+V9*-R"&PphZljiD!6UBi%N!$RRTeI&JBN%rZY3ScV9`Y3V6IiXSm-V3dBG'QG,&M
+i$(q6)%l4dU$9#ZL-H),,b(Y+C9&*Hlh5QU)DYLMSNN0eT8H!XQ[XNCThqNC$GHq
+jBeTiR%fAN!$*"($h04U"34Adq+cq,Tc[c-eh"GY[40Hqe+GU!NCj,#@LF(M&8TR
+1'$d4m#"ULh6HVMLSCU(RmHmGp6DQ3GLpDL+LKVpSdFq%S6%h)iFjkNCmQ+5[%d!
+eMKppM2ZVLV1!2kcQ%3Z1I,C)4-(@9J16[Tk2$&$bUA%)P6$@r)kfDd"pFm6V@h[
+"iNIQ-R'dq!4h0k9*%`0,B84c,+(4YUPQTRVEa)RiHimlY)4J!PRI"REmhQ5J'HX
+Ap6Hf0#FP5FaJX)MkH6kkc[XmFA5NZEk4'%'l)EXiH%%APUQ!"`XM[QUfCSj2BrZ
+"3"Kb$mMZbpm@cd@iIf0A4-KIH18KDl)pT*!!KYCYdUc1DqQ5@43#eCYh#L[)*V[
+i"@-5,VD4kE[I(&B#Vd9!@[GRX(LPi*,dpC%eP8$EYe+f*TS$')-C@'%VDcr$4Ch
+G4*D4lTQ-JAhI-j2NTBV*l4G$Z[33A9["cVVQT%0kD2pbB8GG1@QShViHd#5rl+@
+,S-p)MFh&D0iq'`eH8b4hQlH1!XQ0-m*aVN6Mq(V0I@2bpIBIl#H9T396-$,l$-E
+T3-'l+IMjPZ9drB`i@Y,9N6T32lE8dr,4p(0Mrh9G(bcLFTM%5A8JP)3mBQD`QSp
+1q,T[bPVSc[V"@@b'HiK"5XZNP%R9P0c1UFXdhpkrdXqj`+*"MN)qJ#8$E1j9$d4
+ThKU4'rF!13R5RBLH-AhZ%CD*%,D'ACCGRU-+-Ql(A6G%kCHGCJ2lYAU92)rK)TI
+IjIILK,6ff!%elkRRqNDBZ!@la0redEUQHd%&X0dK-Y-TZU!bSZhj,cJIZEXa*rR
+ZA`H'`8'6G+Y5B(A%+B9`KHZ)EA3N)h'lG(8%D3qqNkZ,p5Y59YQFej0h&"$U&)a
+6CarkKGkfYapZVPC0'pp$$c28Th+kJ,)&R#)Tb&SLjJ'm5K@6rUKm1V[R+$3F%de
+XI#0jj6mmb#l8q"Y1#MZ!eC5BTHTR&aU1C+kHK*mHikR*BVXTJ#hZ%e#i18jYb)B
+FS9pI&PSm&i4R!BK[65UE1f!j*YL#rKlB)Ud%eS'G4e(CkbUSScN&PU-Cim-de8`
+YQXdSj[G1qMH(cH-D-2pH$$0jaqDi(1H8+B@rBl5VBkDLG2!*3S3R539K)Q-0S)Z
+1MIY)ArXq0NQ%ZS%be9VC0mN3rU#JMESTK@@c,rBCSq9d`1D'Q1KbqH("Fd#3!28
+)fe3Ka2%'h*UrjPZYHaV45"fa("94N!!i&SMdX0UjcY##(B4$2[36h@,J2mm)rC-
+lpG6V`H)fQk4#9B-`edfNDY9AjK`)SXkFRT`hIJ+,Akj8&jN[USk'9U!VLlS09*e
+Y$@NDIbr[!HLLBclF&)$"`T3ZBq1e`d#eeV,Gc%j,KjB`qY#kl%&E*dfcX85I4qY
+!X*h`L(l6l*SJ$9H`IFjH$$A-SDK"'JC+pp4VM'318V(&8'hD2EqlVl,a[G8l-Hq
+0EJ0@mc%%2XR4A!l)*)[Zjld4HGQkJqKVKkjbIm$SC3+Ba)i(2L"I$H-X)bdMLA3
+NBZf4haP'41PpY!@M2SSd(@a'&LX(#VX)6p``JA%'PB)Scc2&"'IDRX[daUJ`fSN
+BEb@ZKVaMD5i8Y0iSL&VE,'6TP5PmYNd$F@K*TPcT34c$Nf*@9iRe#6DrY!r`*%)
+#64*&F![BMF1@%p,$+6J8m0ck4JQDhaGiDp-&,rY$Q`+Q'8K82`6Gqb5JUPQTa(J
+PJm%FYch`CTRI&LjqmV6NMrFHYMLHrjr1dl#1GT!!fRNJ0,j%!&&VmNrTAmp@(Tb
+UriRrYFfk2I@c$!!V+r"rS2SZiNY#RN+a6Na'IL#,!iD43*!!eUk)rR29EK#Re)H
+ZGF4F1H`[cQ)Sa2E*i[[SqB3$AULIU*eP3*F'0(EmCXmd,mN9hbcPAld"&c'#`Sp
+Y+61Fb$Mr(h46ZC!!V-4iiD*p3LS6$N3"jJSXD`c8*EYEFZSY$8Zi!P)QrdE6j9l
+)+TK[31heaR'2ep102Q8Z-[pd`ZZ!ikCi)dSEqDMlqbafFrL8`PdHdjb[MhV(0k,
+`PkJdG@i-Am&ahCi`hNm1Bp[@CT1*0-#MmF@)"["RRM*Nr4Hc)r"Me1HK2$5[B'5
+G4rYYEVFGcc3LH,RB+0TBa`9V`FUX,UUUl5Ve,h9FS3cX#Q*1`YPF,[DkN!#U,N#
+ir5,@8aD0QmA6Z)k!!'faT!hi-4*rcd)LhpR@K)HZA,'brl"NNa&EFXdBHdU%Hj!
+!,r1HeL[AEC81q!h-$X*2EF1jBEfjhUZAVK+@SXk4YHVceP!q4C%19l&!f#lNBjP
+&i(+peM`BbLJFCk[@0[#p5cR83p(a!je+Gdbc!LIG[N*LR)!A4Pf[fAL2L0Lp''p
+)"2Ni)MLEee2`dN+5lh0%,$@ea$*FhBR!Q6XqVH%*-Ek9G3Zm[BSJdmRqEQ%pH)2
+"PPJ8VrB1'KTQYJ2MEMU`DS5Cr`2V@fm@aeG)USD0'dUT[MC[)@GBZdL$b+K*P%S
+MSk)`(k9c1&eHP'%*1#a`VhE8c0KU6G3@&-m[TmeIY8Eb9F*eN!#51QT`i[%,0"T
+eE3@$R#34Tei'ZZ`Lk!4SCcT)QFea-&$MS&P-m%`l&K9L9CVX`i%pMRm4%ird-0Z
+"L@Za9ZXU"2!((aph(MpZG,eJqVPRm-&!UTR303pFVPS*ZF#N9'bjRe1Vrk(ZY+E
+C-2p8P0Tm)VK)NXPk3!-YX9H0H[%UYKe4G*F-,YUA(AlHkbDAdV1*Ba$*NkC1)CM
+qfY'rDGjQS9bh(UbKdP5RB*D,%8ELGUF%V&UVXL%p9Xdi9Aqe!ae8ZTQe2DDpf03
+94TYHfILA1@m[VHJ(EE0Z'9"[1h'Q4KEp6P,(a2-$28iJLJm2LQMjkSd,md%Pd9X
+C!b@0$l#hLQK,qYH,ir6-rSZ#l@B86!P0`mLhKFcJj6eMfk#Ei(b'[!lr!i*G[%%
+(4@`ecL"21Df`*P*k2[jS0q3fTSBmja4(jr4,0RdXTe!4&hb'Mf(-bjLlC&U#h"Z
+0fL+R$PCH!Z3hKN@prBJY1m`p,TAAaCaI[TZm`,)IhScG-U5Z93N4HPBi"IHap-k
+SYDDhAP5iSmkS5T0EjMI'Tf*Zm64IMXQ@dcM(Y,%HV[(B0!d01l4I28-0QbN4GNJ
+AHT(DZU36-j0fR9$AVii9bLQ!5G`0`1XKbLiJile1mN'-'BZi[Vi)i(iA1l,R*8m
+2MfNM'$Y&r2R3QNre`f-e!#Akk@i%#C3a'&c-@%L&Hi)+BH9LJ*PXAhMida%C`ZR
+aXEJ+0A$%S%9)N8*66QY#1NJX"6Ji(,'HD`QMpY!Z[j!!8N"*9!e*581l2DFQBBA
+'T82hQP2*CDdX696%#Ma(4`1j&,kT2*,V%C*fKPBG(rb'1FdC2NDVGcUlQ['-kK5
+Q"5ke3P5r),mIekPHRCL3!#2Eh6QERr9Bq8fBQ"jSJ3*p&m8-#L&e-T'TLHF1f[G
+BJ@*Z@NjZI`FiHT%Yd$@R,e$ASYSDYh'&!GkRk(3VTqIUM5+Cq3fFUMUBJf$fh@@
+*)Bb8LAdP$,`'DIDl!Ik#6b44VrM`hh@qD%cGLG[dZ83)aF0&qDb`*K5&U!dHTkJ
+U`9mC`0CVrVCI3"-fZ*!!&%NI"HabA[-jk#-mphdI$rbL@CVU%!dU00JQEe"YkEM
+UqP5-hmKREbGq'Yh*92j5r63[E31H@C)Hd[*J#+1FUm(-JrQP)22"RHKKI,#XTbJ
+Y)8,3"AQL!f8X!*8'#CBpV"hCMSM`1*SXYIB%GZb`,+NaSYQUZ4"m31929!b@I,B
+2M*i(+8e6*iEbkA`d2q"Cq2`3BeY1$jA9BeShR-8+,AK[)FR1MK#2b#Br!VMbA,c
+8FNjIp6Sp2I@Z%R'eri"Rr!%pC5"@QSq@Dqbk,"H-25k3!![de9TdB$+5Q88R,5q
+lKaZ&8)X@pD@%MYb-KMdC3Q4l$Phm@JkSqHL*53kbX-YIB6b%0Xqdk0eQXjLrK9J
+C6N##DEU58c[-X`RaXSNX8#"R-NS$EhGhrS*JYK+RC4CV'"*eUD99BL5UV'$&m6a
+i+k&d[*C2e0m@SDp2!Va%6813!)9l*V1E,Sqc2V49*V)HEcQbpm9dd@Yr#14a!V!
+a)LI#dX+9cm`fJlh0Nl&1M9Aq1iUqeBl!),M2CVeH`3T9ebL1m,-[Pr&M-L&'MFc
+*qRlX[JrP41QJ(CXFRe-bq,SYHQS)cV4qSLcG$[U)4IQ(8UY%0@*[XJ3,L@bU9bk
+dY2cVIJ6q8,e0H'Mqhjf+SpE6+B!-6UFRqa4m05PJZVH*aF@q9V(DJq@U*AK(VI,
+Q9(p)!A(aLfShq([fH%pIqGNK3Cm%dIqbQ"@ZP*5M1ljY"j9$$FqUI(G1'm1`4-h
+6q!cFTH!@h%rLSB`QNRFH[ZkpRNeHA*&5QabNk'f'"NPD*-qeX2@C*8pNeXZ)%`N
++A)6!QNVPK46#3ICQ4`13!&j1Rh-#@K"L-dq%HfCIQL`I%AZcY+1GMflL6ZdY2%M
+$QF"'%,ha[jAp0lqA-GkaQNCi!i#h8f%"-4``"$1&bqVi[H3SE$U1EK1d&D#IC8-
+e4%4dF)qV)cYSF*!!rVN5[Y0Vi#B)8AfNEmp[0$1ZC1CD[kN@Tm@RS[mCBIb8MMl
+FTZE5[*ip69dfH&2+@#iC"RT3iq6%0qHJ*VSXmLHQl)q6Lb*@$q`"pN)RK+[+!ZE
+DLK,$lJMpPiiRPE%!bmqbraPcdrSPL2[L)F&jV-0SL@*'J+'U[H-qGeLm"@PAe(K
+'Q4+0(0fC9R9+*G*f'P6cGXbUI8bR1AJTVSBb@i8)$L1bIqIAJ%,qjHj'(4kT!,J
+f'NeB9llj+LH1"&FM'b-Nf)Q9KepJ#(FI+5j6PV4"kcR-K16XZH(9!p$PZ&6!hj'
+r,%QT(*fHrSB28)@Sl!81Lh(qM+U5rPrTU$3SJaJkTCH-Z5QXS(c6L8&6C[9iKUp
+Sj9!Pa'AA&H)C9K+hD4(Nke[-cUc,UI@+GLkdj$&a@VAr*c+EZP9I+GlITE(#6MN
+DNMLBlU-mQ[K"kUR"hkEb-baAQX8K$,e2VejLKA,QK`G335`CQeL+NK(3*![PrVH
+BZiac"q+[9q%fV%$&rq[YVfqPb'Md4+%lq9X%l-jUPc6N*EZL"`Jq'-)C$Y9)`J6
+b&%ae&kIR+F@R4bYJ!ahEM&`T+YB&lm!bT2T"p9[58h8J96#&M#f``2hdr9!l9j!
+!AVIFFlMN)5I@JKB*qGmDrJbqeJhr0mYZQ++peEHe1k3M$$hb)4%'!FVUX8$Xc+Z
+GpNlGMHEl9TAUPm#c,EREaKLX)&R"AhA38*`BfikCKq%Ce+QG"i9&pTYmH*Ha'U[
+N,0M"FRdQD[a"IKQf%rA6AL1bSi86Ih,-I`[AMqqR[M'd#A,2+X4Rm,TIUDq9c`#
+5[+dJq)0cDCm'HL[(2l!aI9%2GZ$QV`H@MZ"!m!41l!bNqSc2Rc-j+&*6C@*&"&[
+*$'cMYNiRdG(L3NfHc*5M`fcYpri6iadDmXLMp&km+A&lYP*qkCk6M!NAr*)JG-I
+K6[d`p8b&#4k4$RLb-(JZ`(pHeR"cPqBGQ9k8pXAM"Y"5QAEclqr192lUp8kAAbA
+"@!BZ,feH&6j[4V12rZHMT-6D+Sd4H@GILjqZ@p95#hL%4A94EXMLmS*[m(X@F-A
+X&C,KqXABdpFGGff'**)ZmaFBD@F6ZdE'Db*F&EQ1L-@'@L1'E)aA2ZdAfmh9-8T
+EK#`jCLHG(d3kF$QGA@ijF0rL('A#S-4!`3Zmj+l-QUASYD-*A)d6T93C@C!$0k5
+Z@M!1IMcTk')ICART"i@!Idj6b5,8CJiS2A%IZN6G$P%frmIXKaMh1NaXSRSN&Ff
+Le0bkXUjdSD1X'46U&S`VBGeXjT-fHH%HZjS8ZF`$RAIpPaSrZMqdqe$'f(SU&CA
+YXmj,3,38PFDVEJ%$)EXlp`L-C"$3i)Z0`kQL1ViP@ZPC*ZmfLare`&9mLLBS$+b
+&aeDCb1I!ElQKhA0XF4@MDJ',DPH)B"Vp&R)K2(dCi!Te(HQX[j,&!bMPV1`%BQS
+mF9N#-5)LkiTM'+rjkR[@kMZELLrXG&dB[@U!5*`Z[KCSk'V0`55F`$"qN!!%i,a
+[KKA51aB)'5h(pkN!4*N+L"CQ[2L[ZL[`b&KdT,E-b@2Qq%QDLPGf(YFBC"Y%FIS
+IM)UAcUrSm&q@h1C"!l61FlmELh$j`AGdHk+6MH&Z4[c#3EAj1h6XcAa0fH+if%Y
+9T5)*-)DK6lQZSe6FTk9rZAbkH1iMJRN3TL#qRNdhc%CI0G)qQk`kR$,L*'T%GA3
+RH$e1dNr!)*AcS%i@2D6Xm)5@KhG8+FRF0J-MhG*kCIbk%-N"bReD9U-I21`pL9,
+iFhBB,F[r*fP"&%YbP"U106k%!icJVHa0%-[bk6j[bYGa,bJp[MYLTcMb,(L%!0i
+rhbA2S&A)Xlf`6LFcBMck5*R!jDL-Dk#EX-"[aJM$9rY'YE4hF[a#"hhQFQh8Mr!
+h!N$$+eTkB-'K+KGb!-`6JQ)9XJj*hAkJTS[Y`K4`C!SVhFjREX[fRfk'b[Kd8"U
+3!2aZF$*i)#J(k0[bUf@h6p&@$eb*Lf2m%%I)Ei,rL)UG*[pDQ51&I6),9e%6Er,
+[1@Mb+*3Ae)bQm,8+UFk'K[A)8J4ciqhp+*!!Ei))G+[L(aTVQ`*9R4FfU+22[-T
+@BD521TSY8dK[ri6,8rZ`rX628BE*ISMSfV+Cc+8I5SlS$4eFPEI1ILR&--*RUPk
+ZDFh0iHSN@VD2`k,VmGAIbYAETA"GG@CC%$Ba00*8V1A85aDp&3*d['f9eI6AEF!
+2VdL[21a2rBi8)jelb#U3!$lLG3XDBcKqFb`Amkp)i06)!ASU$dDpmKIT3ZKC#mY
+TE"p$D`VZjll56(&ej*2LqBrc%Y@NQQ-Yj&q%DZeFaGS@"$AQ26`+eZcfX+EI$-#
+cV2,*B'GDDdb@@jh2#kJPYR@F,GUE)k-EqLINJYIeMqUc`3LZRUDrR'Yd))miD-j
+4lZ#LkY8'*4F#TR%ZPHq#S&S331NR9!!Y"V#@&!P`1jahF[6(9A84df"%H#ae!mC
+#ImRMhfjXEfEV3M-3AQJXIlRX6(,)a#dN,ef-NIm$$jQLfS4NEbQK5N5MBkZ-G@9
+a0V4kQ!lHmS+R"8I9@!B#Xk8,%`J!&AdjVHY+S3)i,BD['U1a8KSS+r-6prf$X0!
+L!CMI!a5#X!Uq8dRBKe&H[c9YqXSe(,k"-)pP(9,SK5Y$4@%#iVMImJiDD-F3FBZ
+cSYq8dNM8!`&SD*)2`'a0Dm1bMEhbdQ$eBf+j$mkU%qL#M0Xfm"VV1XS#EGml!#[
+k8B`U0ideQ[$r%4CG0V`CXIhhqYN2YC+PBiU9$kAd*S!mD"Amj-G[1C,$ViD,Z)2
+SLSE)P4F$FbIHrdA2TUi$SHT2!YA#"I$b(6899NR!9S'E%[KZH*r$,c984IZh[2V
+Q"eqMLAY$cJlDi)NT)Ac)[EXZkAXRNIaY4",QQi0m[6FdVR#Vcb`h60mJN!!)bX2
+iM$(ke%,hcc'e2Ikm3AE1%mGVRKF[a$id,mX"Alb+G(GDMm`C@iP)bJ4@mPIR,%@
+2S(L0FH$RiThehp+(VcHA(kD5'SbmGji'(1RhIbS92Zb!9PC"CVaI!,#!)T(9CC8
+M11EfG)2jG5!5SJ1`#5G$c9da6m26,ME9E*-q&Ah)+IT&AM)KiJ*2"&L0#1Y9@2!
+E3,F@5CR#ZK`E(%RddhlRP5[L'&ZQp!XqF36L@dCc2Tk#m5eHi+CdeI8HrcI[5R2
+)p9&+Nd-dMZ`h#$h#S2a*Kf8J6HDeG0!IP`QY6kj3C2C`YP#ArhK"I[SdYiDZP,M
+j[CeHG4hJX%TN5YD5JEYc9)6LVj+HAJBD@18-ri6CaQK`"`L`Da,FcRF16ZYp%`I
+TiYSX#"bSP!GSccT@"48E`r2)CQ@B#&lbKei('HpAUq"Z#G@CdFQTf8ER!Rf(U@k
+1l8+!#Na-20Amf86@3!b%i-akXZGaM##D"'k+VUf)V`*q@FS@CN52aX2FkD[hGf"
+8bD'9CC)6dehc'K8Cir1mPGe"BdrNf`'0P)qik2430!E&U-li82S`K8$j`I!j`#q
+iZe@Jce[L)1qppEH2VFa2MQbJ6k'*J[mc`EP%acT"kEU(F#KrUliB'8hGlGFP0NP
+Nk-5L'F*@"5+dc5khU,a23GBj#I#r%3Q,d"UU6$l4c)d9a5HKEALG5dahKUq3!#(
+),C!!5U2TkfjZjr2j*Y$NLE-pmd[R,d@r#F#,G9D)I&C*dc5hC-@Uc1',Z`lTD3(
+8i0382LK!6Q[bFcmkPimmMUI%3kr)ZbX`a6QdQCNi2[*qXT-SKpEd55!h!j)KeMi
+Tk0h0!2NL#b4`jb6G&Dld-UI5q`I+q8f6C2c")2S[LEaX5#SFF6KE[9,krG-CfQA
+'0f!'e8,lpLK,fMBDDTB`CE![Mf)*%5P+"dVeEJ,SUeRMHDfFe0-2-B,J,kj1+-j
+P,0I'M0Tpr*TrfCf@)Sb)jJ9TlISUpMq4LrIY-$VcSfLdiVdLF)'@3%YbM"0rf1d
+K3#%Q"FIYPYGY@%4EIp8QD'!AF"l#!c1ba4[C+V-S'"dej$0MI&M&mF"XIBm%[LK
+`"qR,SIFVqr*d"#&9!F3IIEZ$`-M$Y$HHC+9jX,%eCb103lYNKBrRfkk6cVHUjke
+6Qppa`mb#mH#f##SJX3*NA%GKJrpDEe,C4'2AQ2[d@5UkZZ&0M%TC%6&eV'SSj&K
+k%kc'$&LD1p'hXJSHV5$4eZMXf)5q-R(Mb!m"[4KX5P*6+Vjfq#h,SG(Y14+FHT!
+!Uf8-NphTbb)I'Y`1!i'ic0D*B008!d5P8q'VJF`KNV`b#Til(,ZMB@(TQ49Y&dl
+S*$RSXZ#V`MN#b(`fRAkR%ML#cVk4b2h`ARJabF3"Ia+#h8BQq[I3f*cCpXUaJF3
+&RKGi#q4i&UT$YC!!-BEeHAr'5,[)mi`dZ1G8miDa2'1eJEhC%Re,lGK9(JEL[BK
+[mQX0j+YkaA*)c&23-Gi#%GMP&'+kbYY0VfkXmNB3qdeG,JIk'-C3*DSB9iP+*h-
+DHQ5(VF6@JV-mM3UU"Klm*@NXD-5RmkFD@@(0lD'R+3GaX,*NKaLS8N-eK3#B5Kb
+a)k&fm!6caaD+*amVISHSQkRQMmaPYm)`$9jEhA"+3pK&fbCBQLNY'ESDq`epiA)
+NLRMdDG&T&*E5BKYdMZ,9AX&eTK`T&-bUUe8aQBikK1F`pjb%Lfp0hl9lA*1d&V`
+r#%eZelLdJN@frIr-$!$3NNZ-6F6#lD'KYj@qRV%pc8+R0RrKHack0*3G59kNKMe
+A4I(FBi)P"MK4@%9M1fpr)`!RqH6LeF@1)K!Q)d9#c+lk8f&A%CdNC1Ge`A!SB2i
+@"0*BlMPPeNi@GDq4Tdk9qSV#+McRr%Db9VeRfXQU%(a-FeRfUm'RIbc25A80SpV
+@rGB*Akq%JCC02VK*'G(+#C%YeC(Xb,#PEE64BHAIUdfN@!B%%C4J5)Lah@HEJ8E
+25KE[m+PGjFc`F4,XliEph3D&M)UeR[qPE$-aSq"4#NCK4*e2F&*$)(5GIeMc'-#
+FQ5dr)Lp*dh+BRZ+"*`GfFG51ZR#c*LS0p6`lIhYErk1'DTd-NL2m"3NIq9d2Sl4
+1R`jl(DBR9f@b9)BT`4H9l#aMK92HBL)Flc'L&%S9"[3G(`[mbL!")#NcaD6,V5[
+-cM3DhJ'Ge)H*9X$NQHYFep&@pcVb1aA$I9Q2T1XFVe9@"!$!6ML&3JKUb)VF)2j
+hX$#rYHB(HF'RGEIaiDb-!b#R2ENfBEmJ3,"I6$QaD'4D2RPm29i30PU,CGep"*6
+3l*c`)H-&jLU$0-j)86F5PK'`4%2GkMjNV*M#EfqBi&+j,m[")+a&kDjUeCcp#IZ
+0I00#Xj8N"iEpN!#e(["4,%a[lHIRHI%[@`*5E%`(ZCMhiU[MVh(4lZi!K`'r8YL
+%chEI8mC10%AVJaKPKLY3VEX$+Pb@,+FR3SU,1aPjE,`GLN-p%GIGZiCP*qQ`@50
+0GbD&,fIL3*L,f&-2F`iA!lH$1`c#M8Bl+e*2Ej1Ci`Q69'k8dqT#Ej(++T4%,$(
+[lY"[9B8!D-'0$&ITULp+8QZ%+P9"[[D08&k"2X)Zqba+fchKcF50D"(&Kl%4N4Y
+id[T5-(XeCCHG$@G,##!hXlcL,SLE9FY%*A0*LiBqpQAQ"10@IV%8dP6I94,b-DR
+5$kH41D"hd%KCk5I4!cc4eUQBLE1KcGe,kQPLcN`)9CXE*id4UXA%IY@qfN'aGAe
+eCb5jPqk&Xf11&VQ'YXb+,jPEH(0JCXf"YEkGlX[pLbmIf4B3H&``J!ep%GEYJ9-
+YP!$%INUba-IU3'+R9lDeZbGF'dlie%K6-MM'rDh#CMSNQSUjY2eidV1I2&[F(Hd
+%rpKPC-E!mdYC#hk'b3cp@pJR+l#P"hC2MY16C''8Gj*5P`R*fpIH8!+CRUX-ebD
+G(01VFCM+%)9cXD4K[@8kCV,QYYNl1J0IF@lm8$AaA1MLXeFd5PZ0cm99%F4Q*hJ
+[,G*XU6h([BL#IH6T-[-CdrKVR&Acj`%,8r3RGN)"5pDTah*1*TS)1#2--!3D!&c
+&I20pc!i[iCJi#G`QA3AJh&i[$!E,)$#RJlXIUYRMBmDb)*9cheAc-TLdDe&k6*2
+l"dU#UE)6a8QQ&c3VB4ITk6#NZkL*3Z(*lF'mJQ6@36+P&%'-2'%&*[i'U@KIL@M
+$r[Kh&3b0S)(S91RN4)9)[Xf$,mdMU+r+Q0*50@QV-fKNP"VP(J,K5AE+PT&rHl*
+fh*NMSEJ2@N`BGd''Qh'[&akHrFS0T2%*1TcHqX@FFL`)q@l,%UX(bDS'rV0RcKT
+e$QYrRe)@4+8!C2[NMbTb##IKJHQ00e#-!M8+Gc0f'Yk`RS3#(JfU*K+UR)Jr&&K
+e5m@!h`Lih"GKre8,[PeQ3q0#VaBAk`0p!ih)GeGk2+fIVq2`cG"QGr&SNhNL5R3
+eXD95khNU!m@RdTDBb[1(r*EM6d[Q'HAPPF,D,Y$S)Y"KR-@`R`H+K"8iNqe82Da
+,IABqmUa4N!"@d`GP3)8,c)TL&&iT6JGfV0m'B`9QPQ[0J44V0!63kl%Tc5%A!I0
+-1Mc-aTj$5@Z)C!P&JNf9FA`jN4Bmh)ScPdYp5JFpf"JM1+80UVX$RkIqjiG)#VX
+hff`iUEkjmUY'ZT,RU2@+4cb+DlJPUaZXM#MIE,+RI2Fm'D@%84QIR`H42+1l!Hq
+T!DNE3a)!mXmi5"9Qj%e*dcIUI+-33j(K8af&2KXK-@Nk5Hq@#mHCPDVX)U(G2S@
+r)HRH@dSc0YF9Z`BJ,#-+J+`S#i*cVpc`hfS5mB3(Qc5ieGB*BQq3!+RdSc2HQFj
+A%I"R8)8cdTGqrY2rFB-T",ep"Cp'YbBdf)Im%KB6PiXCNEIe22KCqFb60j5%rJe
+bR@C%XI!lN4GaPNHa31l'&5-e,a`cEh!+R+R)jj[5+8D8B%6$'A+i3#![JmmY-mR
+EF-#5ZIQ$)Xkf,'lCKl`10ldhl!C-`cX9i$fCXaG#hF*ae`K8Hl!dR@4"lKjKE@A
+U,Fc'$#f%e@#ZSh&0rP8P[c%41[[-#1$2Z0f@h+RcXSB%b26rNPcc(2G$frk`A2k
+eS(bC4Z4(jE'(j%#8YMP)NM`F08r&#['a$R3p0i@KiXiiSpmR5*ZY#i"qFi6!-pH
+9&)[`0JU0hZUBXUDfK2f3!%FUQ(PrBFPpVIrL3+p0acDGA)JH2B'5!EIG2D(l*jN
+jBC3T9j&3(N$,EG+C%&YDFR`66CG)@Xa"Y5T36Ppfd4SEeX*,LP!FE$Y$!&Dq2Y[
+k9SKP2Q5%f#1'1[U2(6l6KMN8(2,ZMrQ(`MHd9VTiNPG*P2Hd!0HI-'$@rFF-+-Z
+V9jTIUeGBH18cr"I4KGKb6MQcFAR$EI*VpiRmI&D2hN%`mE!&&'QMFQR2eiULVJA
+#%VF!CJ3*bS`-Cr$$e'LD'4PLP`@8iF*Ar#VB)6)*X-+N@RA&X*KMcKPN--GGZ)'
+"MV4UrL1%hQ3SFJk#PrC4@(!3#GiqC`9!2idQXKE3P6%r9-iAY%kJd5TLLi4VmQ%
+E))RS(3crk5FLGD`C@VYrGD@)9'XIb,[Q+k9!b#5H0J0,MNXBq,d'aJZl%J0FG[r
+cr[&i+fI4r,@&@ETGM&pQFR#(FGM[+Ec"%h*QDali)CqAec1%PHBZqc&21BBRNF2
+rlIJ4`X[djlET0iJ(XF[rJ+SC0T*&!K6,I-23[,%3cr3S`#YaGKq,cEr)lm4V1Tp
+r5&rS!Dm0hL@JF*+(23r9TFYR6iXZ&`IYSrA'3'!IN35SNY*LA#'bU89[hJb[2Vf
+!jj5N3`)J@&&rHIRhN!"JHpYJI`d"k!@PaKLY0V&d4kF(3JXV%lH2ih"FmPlBmbb
+-b!f3!&$iK#X[5RP)lSkP)X9[NZ)%(Bj!pDV25V'V-h'Yep28D6*YHV&r0H'd*VY
+E(+RDX5@[DFr)I$efSLG$1NUdeAq20c'hbbD1fk%JUeq)k3%@+D$6-cCQLNAI$@I
+@,kmZCb+[TIA##[-!5dl,@()3jM8JM8XfaP@S9F9U#@2c&r(14[FrZFfU1A5G`SS
+Yh`YYeF0H@a5-ML0YRL8Jj(DNJ4X`J2I6QBK0c8m(N!"FiYL3!'RP5)di+AK3,C`
+QB$2+RGbRTT4a[VD04VYEYa)pfKAlKl"H6"CI4BGN"1X"GlTTHpr`#,2!0fJH)VZ
+)e`iM0EmNrfeHpmDkb"PEbUZ*3)I30STNhpmMT*-0K18-X[$T*d'lcc)F3V"E55N
+F)j&YFFK"kM+1G2%4Ya-dbpjLfckLE4jU5e*(U(ehS$r5RHAhJ&q648pLd+aCS!I
+V0M)Y(8fdjRbC5KHj#8KL[H-*ZVP!('-,r%lUab'-XH,eaLmA5)`r'"4%#`JVfK+
+Kc!*EAQ8%(@EaEXaCCG)S@1ba"21`)6!mFFQNi'X'ZY`T5)I`h8BJN82LI!3[iNQ
+fKa!NM[rLmNe#A[cPkpm9HLcNpmq&@BP1`e,m&UHL!&6-@S09$QKR,%(,ER)IEGJ
+X45ZLVEiD52$MpkG(-1ELlXaZZK@mBZ`G(kE9**E(-*'*c"m2BVT"r!bfd&pD0ie
+qadke0`kL*YV33&B-pK&%$J0@%kNe9k-IrPP5`r&rKlbq`(FGE+&j2PqPr6H)T%k
+$G2*XR3m-mYF9&ZR#hE6lEVQp+A9pMhmIfcelArYlBc%3$ceBV[L2Z@-iB%44q@G
+eS[DRlf9KVFBMGDHAC38mdIMlZZcdcE9Qhj)Li'bH3j6U-4A,64bB@6Gebp**Vd[
+%I2dpIK3Z2TYZ3P(mcfTNUp'aXFlL"jUlbFT"h2e+Sik,)YkNX*dZ"`BXb&SL,8q
+KR64hN!"1bl*M"EaVABfAP"bj4ERqmhqZ!$mbU@3NB4BiGl@[*0H#BKPh4,U,TLr
+9cFP,R,Eb#Y56+*m#,#IG&5)p'r)NEKJe1aJFr2Z8R!("M1aZC,#0)Pi01T[#YJQ
+BHGFSZB1If11iDZa8M1fQN5hA9`YR`8EM8-+i-VQN$0%"CJr+Yc1!,p'!qiKc`(X
+jE6m025ij-Rj#"5(1)hf)f-J)A6f#lMe60HMjp'60b539D2iFKrQe-DFpFI'J[@d
+S4(iYL1)'q+kRj#UeAKDNQd$Na'f65(2'daFA%a*XmTd!%kM(IT16Ye`2j#q!6-&
+M2$#)"QeM5Xb*KBXVDb9'[E&U$Lj("lX$lS"XlYV'YC[e08HXSXT$`(I6)c1hq,d
+63rh[M-a!%9,EGbkECE,qYcdY9Yc*KjXdqH0M6$pT8Z%SmP`8p6(9Ap!B"cH$PJb
+*FI%dXHrmQNmpBH,YXj9aLqYp(5-Ba#cTERN[+pUBh9c0TKfib[lAIG#Q%LSJUbD
+p4$AIk6)MLjF3P[Z8HqF!P1dP(0p)QYZ#YdcFAde4E@9b!edL+hL-mRc(E'0iS&6
+'&R9'3cXGTKGhpI`T[VB6MUS`%eI,#1e(,ekY+-$m+AEVr-YhP*bJE'-G@4&$pmd
+c[YjB!L)jVN9M`KrU0dFM!M2Mrlm'Z'0$63D3!'fQiRQ1Mq-0FcC0'%1"K@2j6Jl
+434G`NLT8%3@eEEEG%L1)6-"(ep`!$JeXrMac@pRNp#TkK3G0aPRJLb3X98aIEA5
+%iD2YfJReJGQim`6&)r01)ENDY3ifd)rk9c&dID'Vqlc8ippbZ6LHq5"C)&916bk
+IF#PHH[V8)S9rQ$HS-P5&MdYl5bP(YF"NKQSC1#Zqi$0NBANABmX%b(NQAA[**-`
+X()b["mfDkr)"1ED"ISrdXAZ4*(0`ML&)0RrmL)F4cpb0DjXD2(&U5%UD0$+0SG&
+A2cQMlUIY4ET9H6Q-D5R)hh(MH#r"VCH!(@&MckReZhUXjrPV#S&C0G`90DXVhmp
+$"akC-R%lMj@TJm**PUZ3!2EUP0JPi!d#Z1`2NUU$1MB2r)jLeYNBepPa48JP,#0
+E-dMbJDLE8k`NfL3VeAM"9Pjqck0`qpdGCRqTfXC8M"6miRjEf8D!UkU$5(P"''P
+FEj,+FF9)1-1+"%N4%#3B"RadGMS#ci1EV*B*Nd3(Tr[b@U#(c+4,29crjb0C*3$
+%3VA6B6DdE@imL'(ZU+RqSGe'm"KPD`kj[L**k$,1j2`(V"2L%A`Q%I'PX,&EHVS
+YrGrE@DTRrc,mQ,Y#(F&i@HlDD5[HRjZcI19+r11FJNiNpH1&-1aQbf`Yb"24Hca
+iI8-D&Ti%MGDFG`)E`&5$bd9ElF!ic,,9DR3Bd@m"i#$m%V,mqlj"0NBkS8cNN80
+"d*(RLQ!TNBf6f`@NUb3c%)0EEN0HDdG*+SY,eYVEHfjJXd-b[!QdSST#**5PU0P
+5('BBZBK'h16ij+%N'2IMark$D9!Vp9Vd"Z5-@@+4QF4pP!S%QM5AfI*AIeYpEeD
+XIce-8de*!XHT!r#rliadJjXBe$`1Xck,Q*&6*&chCZLeIC2fR9VK1i)H-U0)j`+
+P@`k4&iq$'VdY+`BGfGpaaK42dJXA"$GFeCMF(XKDXN'Lf8!Gdm#*Z0'Z,Q85$A3
+r6imQblfr$[DCB@Yh)Jf)LKTphK1ZEBp@c$B""M2E%Fb+b#pmb$&MGSMDiqpbAe9
+Arf'K8KA'Jl'JXr(")d+Qf4B#1LT+NGCIkP&Dph8!YXdI(EkQKKE!kAkPEmXCLq[
+dI'c1aFiJ2Xb'qkPL'dF03EU-hlS&RP`mN!"$TFGah+FMI+rcrSmH,-r4l1DX'cp
++`Ub,aZESSPLTQYA!R2*GE0Cc[)34kN,DL@,UqecCMaHE`%fSDQAb6I"Y,d#a+Uk
+6TZ8CJq+h+B&jH@T!0abfjJhRQ9REka,ADY5HL+$YFaP`+a`5!I8R(M#BdU28[q)
+680SY30SHCKiFLT)c*LR"JRUD1+0ar2VKIrl4E'@Y$UklIR9@AN0P2Y5T#U)hM*-
+#0hIVbC!!p)MJFRleKKq'8RC"2h"GMM*8FBeH`R114ZhCHqE`F!c50NV2Bmq9f+$
+2qQcCjXcai3!F[,VI[!"'`[EMNLFNE[r5cLDFGbZ!i99DBXimI6dr'Pm)e92,kZ(
+Gf00%Jm(A8YjqJNB#jm#N4Z9a-jJF6%Mq1QfjCY$'&eXqGqAb1b$0HBLNhP,qKH+
+b($3-lqrd@T-La5AA)L%IV0$S$dFD*0HRAh(!pJD3!0!NMqB6p5-E5&B&CU(110i
+FJ%!3Qmqq3,MEY9E'V9A6r"R@18,m)5+8"M5Y5#NVakQ!LmiCf@PERP'XSN'bqM[
+MKQIj&V'EipBIF)Kq5B4-b3RQbq%[Q5S8AFdIfq2S-ZpIN6HcilYD9((aL3TTGE3
+HiQljMhKIGlVfa`TE1aXHmH,LLcHET%2Eji`fRk#Q4T8e[J[kX3A6Q"I`YLQLE(Q
+$Ic4ci)Q"PDN,cq3c"iiahrXaaNS8-3!'$"m8!Hr(2MeD9"Y+#EhKeDDY23&Ic,q
+ch'q,&!a%%iXE5kKhNRhG'-ZMD6TMQG0(*#U&4U(E!r9d6MZh(R!8+GH,Xl8%`$9
+TUBe`6VjbKT0*"lqbffpLDFSY1hBe%cE@+$*69HN'GEeFkT5$kH1`PHDj#`0DfRd
+l,5l%h$-#5k9P3r3IhmP)TFhBFNZ!KQ[8NL0lBB6LUiVJpU'%jHVeUU2p"cR9-Cq
+-KaG+KGZ%XB835jp81Sk$$bB@1S)MfFdq`3%MH&6D[pDFb1VXKHU2q(JJLP[T9*4
+I)AIIka43h'ik%d1qCF9RNZT1B",Z@NKId5p%Aa)&JqaG0L*eH&c+,[qC'CfEHC@
+H+UU*-1a62&4I5!C!lFeTKMGBeR!e(%X-NmKp)UBTM)1TfHp*N!#jbXB@&"0,6De
+hL@"pdBjIqL'N%C9b@-a)VrMY2Z9jB(Na3aJVY4FM0"PecZGmLrph*6PqIf0JS)%
+lL`cLm@T!(f(FYc!2'f8@NNBTaA1A)JE'fY[Hrr*43U'2mQ%!++Jl+BGl)DaTG%A
+A*0#K)m*FUcCK*Hi[T2lmXCV--VmYcSXJJT+q2qiYU5&J%181I3b8#A!S1p-QqVi
+h,@TCp,cRiFprYfRd2ZkSRDdr3HNYdQ2eP)*#3MP5*-dqEI)(,,E$eh6QM3E8rA(
+QP,U4,Ch@0k,LBCd6Y,`Z0K2qMZPpbp0$@*`8e82TbB"(%iU)fSZr6acUGIh"$h&
+T96NZJCTd!kKJNJ!XJq#,6$S1MjXXhETC%MPMe3emJ*I"&%0)&GXBahGXN!$$JX-
+G4%hKN3(qBGc4K4CdD3PfZDRa!B-"FXAUUZjk[fSE,AEYdEJ&N!!EDV'#pqj#DZU
+CVQcRN!!KTLM"Kp2h(XYANDP-4[*BBarLL[l%`G1S[#eccNKdh-Y3jlK&piGVI18
+YIAa("Pq6S"&2*XDT[C4(-33dXC3F1S@Vii[#Z48jh[N"C-pTp9+XE$rqN!#c$59
+[Ki81L$JT0EHNF)PY4ME"2q)V2pk9),01hQ)m13H0(XJ&5$D`HM2jEFeJ$@0U8@Q
+FjCVM4j!!I)Ac%,2qU#$US`+1r!ah%dXFIM+b#5SS6KjqNH%1+6V9!HT1D$Ji80-
+bLVKC-bPRY6H##f2TlI`N*f'RA*T!pJ)0ibi(YI6EdqKdkE#1T6rJ&E0L#bm4(eG
+f0HKak+p-YEpkYBbhR(2LI8jkpa2qIKC0bM-F#*HS9R95QRL*e5HJrA+PZCKDYf0
+q2i#%lSRk-RA'4DXC`#*HN`#QEDI+fP,0BJE0$l9"80Vc"#JSc)8![SFDSLXi"EN
+dXm1i0+R)a%4QZFJ[JB(R,22Ui)JibmQ4l#4Z+6r&TrGQ*+BidUDCQCDSVNK00jT
+SS!J&`pMUb"HPB1X$JVP2YAeBZLIHiRG1qP(8e6Eq$U&"rAR$4IId,J`5kErbbh)
+#Zie`8mR)&$"LM2c$V%`,4E&idB-iV`lQSp3LJX+-JcTkG,P2+SGKc(V&-[qUT4M
+'*GPpB&Ie8"*VBL,`eP@XBhVh*jJTa%4S%hrjcZ"LJZ60FjriL0Tlc9-c0HYB4Lp
+JpVBf+B&Y,PkrU4I*JX[!HERq4Yj6eM!))N+BIShYM*8J4k4@cVXLPj64SC,Z(hP
+Q-Y"Qj+6#l"qkMa4!mGYSCfZrMc1"d22$`!*RC9jH9a!SlG54TcD!Xi'a(cXhIE#
+1"A('4L1d"Ha)THbSR`V2(!pcm,iZhcRf(+L,-cPNeTB0BZ%(05BRDGPUTTFF#L,
+LaZMcS0QHVD@6LJpH'),q#'"f#8eMra#Al)5Mk`L+VF4'BfJ#kV+1dakJ)(qMPBY
+GGB2q6)l'6XkBpjQ)P90$iB)AYbd`c`EN4[%bZBKZ0[H@bK-N)iT[e)QXVI+lHQ[
+M2db8E4dAbMbi"i(PT,&5!elalIp&Fa%lIhm)-[Nk$a6-BJfpI6&P6DhQ&cI"N!$
+K$G&&20%Me$-8HY+(fLD2r80pb%)hMkH*C5eL`ALJpDq1jR3IR0X[+KIA0e0TKBl
+R4MF"jpPZGIIQ,hMhT!DrV1AheN2Vq+MJYG)h8&X8B+3ApAL+"[c%`B,RL8#KeVS
+i[N8i2Rfm"Mr)J#hF)1Y)UeGUVJqX6qCf093TS5NIYhRpJR*YL![DT6%K!dmVM0[
+eP1,+mre2fR*#[)bdjVN'f$[ZCbB5aE`,j'P21F9eNCFkVX1pAB&M4Y$EXP3EYfZ
+a(3-pJB'YA"J%KYLI1jBKHfKC+,(3I"Bq&MfJ$c$V5Si-+cU%Zi+6fiY3qqQENbP
+`ZG0V91!rF3MkVN8H#D3Ep,ca#"rMK@B)[&j-6a81SEr-+GmM@Bjea$4)P'i2ar*
+Q69Dr0FhqQXdr"`XSk"B@2hkAe0@dV6P@[Q$YCIE[S%1CFTEPZ#,GX1(HP6b82Bi
+K$I+%GhDEITpb4(Pb)FF`Nh,0MHZG-4UFpM58R5"Hd1DHe#I*fF0hM1cQ+mk!-ql
+"6E(m%F5Tj*efFC&B[L,(UPjU",DZaq[CM9YI[V"kUNiXq$m0c#LjI(SX62rcB!j
+Nj"D,#TrF"4VjeN"q2@&&lE*'EZ@)-jGU1@Uq4d(*HMhTH#%QqAiLSK6l)D5LR[G
+EKZ0AN!#%Ae!eD**MbMY26C58SZ$3E[3f`)ff%2cK+&Li&a-Z+E[cKkl5$2[$[XY
+Fh9Y$NFPa9K`%Cpd3V6'DcjrkFBG3Ae,#%5TB$f9T)r9[blr"KJcN9+6#c!J41lQ
+(&TE(S3+p@!H'c26Dejp4b+qCVcI0&aM@2(`rjj8RJc*R(L!G24f,lN,r9$iGkbL
+[S6PTJaR8AK,m6D[Y)RY3VB3ER@1jZ1JV89&"ChF!6e+8rUX&qfK49C`ifILX'4Z
+$N4(,K(pp0B%H594&fd-@*P""XJ-+-QM1T'`e+&4l8@ZQ9lZjE!emB`%ZLdkVcm&
+mXC35"YCm9DU+2*`@-Ijcr[6!(md*fAjGk"")fFJBENQ!Q,aL3QGf@`4M6Jd%(cV
++P6j%q-GHe(eG[dB!m8UFVLC,F5h0J+H'CL*c*rQr2IclB"hp$)KIq(@,k,R+a+N
+NZG%RVZ5H2B05h2qqb3Aki+*@2Xcdbhimh*mPfhbr5Ac##+%,pr*L9YM!QX-ie&l
+qPP#q4rFJK@f65##E%#[j0Q0YJr5#I"Gr2h*i&Yd#E5h(pPhr0KCH5!rIN!"X%YG
+F%A1DYell)p4TZ*%10q@q&UB["EE[AM2fX"l#4pC3ih`,+L3r)DfJRil@f$T2FDi
+'YkQ64KqY)GDj$JJlABCCX)8I$@,e-M*86$J4KbCkqN45b*RHBQpmA0IUR$ejQXS
+)r2TTVQP3Rh,qQ`"0dbSVH4LTN[GejeAjM+#GEeb(G*Xp-"X,r'K+(G9rELX4Y8B
+8%b[TMZ1S#GR$4aM1EqrG#!93a6$@4DG3e+)&QSq*fY'fc3F'Kja[E0R%p06L2DR
+TkYP',-VB!rBP0Jr,qhPHNKMkr,XFqEeerkd'L&6iPk!X%Qp9%,ccL*QM`P03c66
+2%Pp@CY'&e&`P46"NK"G'B+r0BXXqTJR&rNUa+h`'1dbMKiVEk[1mfl(1AHHQ(#3
+Y#eD%XJ!`&MIV#fE,Xm[lDR0JPmf!AmX*l`%edN3B-hVXd&-B414#cqfS$E%54GA
+`Z6&hfZN!!,(#i!9@6-Cr+T(d%l9&H&,5r#NrNKq%--!10R18'Vqjm((Jfj(,`HZ
+mAMD+(FMG@YGF`M3&%T!!E'!c!k9"MN)B,INmb!DN-l(K*h0S0p@-ijDD`p#[G#R
+(3i56QM0XSCGDV%3D3-2`"pYlB`JSj!mrfB6$ZUV2XUCC)`Ra[paMeIA$Xa-1a)4
+GFIh#H&"#Uh1`f0E3c4aP!P3%KR%QK8-+c8k0bc#,!K05BI2-`'ER'U9IGpCTYAK
+M9I-60P35je4!T#MFSBS%)'q5&F(5h&F`)04S@#m"kJISAKQ2X#eid#PipH-k-SN
+V,MLEe`8%Y`4NJN[1qJjHXj%C3Rr%`hQTj`J5"lmBD8[@iErlMR!%8kc&!YNT!kY
+LT[9(G,KI8rQ3!260Trh-#6R5dM9'VkjG5Ka5(+l$'@H0iE@e&2B9#PTfAmVQr+U
+bcPmhB2'I[,R`eNdj6eFpU15Z[&iVJE2rb!6c6I5C#F1D5q-Dh-12dlE!UfF2REJ
+"9"m8&jNc!aR$Z8G(E2R*H)aLm3iqLXIC[cb0FY2U-5dmJfhCA08I#b,Z*CFFGGj
+)rC@4N@5@@&-GAA+Y)Y+646'c2hF&4TNRi6M@RT%[b%Q%3`$Y*,"))5feRVSlMGI
+GBZa(S0GKfTfD))I5lr%c)jmTJB3$'DfY%hR$4$"r15A96DKf)1H"Mh8pB)(j+&C
+#ZY*SlCBF5r'&1hI`jD'%ZFfQHfdHK(H6V!-1'QeiLlK+AmF%A0FmqFB&p"#[#T0
+1,8$H"%h,rK$1iEb@**di3*iN32,856C%QA&aHEYC*#Y!TG0SH,FI3p)3p"rKhVC
+#3T)fDdH+cJ)djKj%',NB#5JB!frViQm(BUDB+'Ki)11K#8-#@+"3K5pH)!U0'H%
+D9ifp%N%CIfAMlq)dMX68cV)0b(b@r'#J*NN8CM"aQlYqJA+JBDf"(VBR6!F6--T
+0A2-RVkbUDarDFK3H%2fP#r%J'"GG)X006lI$9e5cR0,Z@#mZ-q-f&k$JKp`'hUH
+5(iSIa"(c[ai2"8&FCIiYFra4Q1TqQHm9e3+h)1&G8j9q*%b8mZM-a9XpN!#aN!$
+B2`@i6Xe8c,jL*p,"ZbBHS*RPJYK`hMZ8I8mZd,5ikNU"J*&mQ*3#E$d,$-`RmP,
+&-EBbZh"f-qC)&H@iH)-BI)#!(42r1pK[%m%$SrGX#$Q"YA5J-Fp'C1SUCCRm(Z3
+`JkBa"U!B5#4)d2#J!Ml5NI+)Ha%6K6[KFJ)T,AH14p(6rhj*&"eE[h)Ikhkc%#a
+$Dh53!)f0K[cG1EIYM!aJ!@VdF5)*-ZdHY)U'Ke3f$aJ"!@)VLZV&'-YPMeXUPPZ
+'5F5ZfhZAj(XP`C')PphA$@K@`h33Jf6`NBGlLlqeAiTKT0-6T`k3!%)!M2'(kX!
+LG!Ne&RRlrXHP[$`5$HGFSAF'dP*bb3@GVM!jYc$CLFrC9'CJiC-hR%!ZK2&QX-+
+T6ULp)&T%)2H*cN+'Ca$e,#9Mli85m-(98)qXiA20(aX9YV&40Pmma%,SB!N`4YV
+M6&abciqDEU",fi-Qh%[cNXX)"mX3#1-ZZ#L"Xhklla#F!k,KiNU+f4$JG*k,mVB
+p+)@8kIGSJ6MH@pj!!mMbbHiI`K!ZQ)@f*@qS%d24ALMNRD!-LD$R#AUDL1hil-V
+HllbFJRca5Yq%l`Z#TE20I`[6pBH&5NpZ0*RkiK!eN!$35fGa9L9+e-9Q!K`U&1(
+Q%iZ8eGT6,[1cHrDZM$ENr98%rLD0VU1Pr!piQX34jk%hIhEF%!L*N!#rRPj!P-5
++j%'d$-$TYk40D08,[aa9`SClHr`-X#H2Aq6#C'2hIIqY1!bI@6lZR`if"AU08CJ
+Q*(MqTqPfD1fIp8qL80HF4$5L$`F!C18rrB"!-qcN(+'k0V5j3@4p`6(eUX"$3%I
+-#M6+i%NA6fEm8D(Zd+G`CHYj%*&Ye&!RL8lkZ3,EMd@2jY-`M+Pp!,c8Ah$"fG4
+I`h@!)h',EUpl$)JdcI"VELMK)dIf,#HJh"!#iVZ1%&L3!+Y9m@SeID9EDr$eBkr
+EC2)aXG32%S2YNh*L+46MecHAQe(Y+`+GGFG[1mQCK`q%BQpjDIaXdNSVJchYd&j
+C@EX%9`FL$3D9Gf4Qr6-NEE4TH$5jLjp@rrRf5i!822AEf34'08L3!!2d6!H`X,6
+M)fZXZ"(Z6A02G$F9H&Y0R"Y#$0kEK)(AVI*T0TGS6fbF!B!TlG)RF@LfF9H6eD$
+KT8P[,X#bR"TP@Zc%`dMPkkIa02,')60a@l0C12cI$DJiKrA!iX16Y,LP0M(4+ck
+*kYcNh3BHD*dJk)SFjBr@M#MEMXZLBkX!#BQCmCAA8EMQ6P-)[R@YH(!"$)'Nh`q
+ZfP8&MmlFXKPMQX8R(b`[Z'mdbai4Sr#GSYBp+[H,TGIaIH*il'mE5S&Pc%P@1#`
+rAf1`rZe%Fb)Md1aJNGh5T!akj0PEe1AYkRdkX'L)Yi3BTm,B++2U`D"G(M1D6iJ
+@I#a,A6D&HL$*h"q-A3Sem))2fcpQ(VBNT!ZYcCCZDhJ1"m*a`*!!0QTj6%PH)%m
+b0NTic5aM3!K%IES)'0[T*`Uh!&``ApI9Ua'60LCAaFV6r5`m'"&l,q8N!BQ''i`
+eaApJ3X4Xc-aEpMUm5l0p2N9TSbh8U(%Tj0jm,+Z5FG6-A'R5m!F98+Fk&)pZNdS
+Zc-e$jFRVVQhk0!3*fXeb-'GH*6+HbBT$PPNX&1UjYI,lcd9[ce@`0$2R'mIScbp
+&q(-QB,h'#6H!m)CTV&Vlrm)NiDLZl1k,'!ANCfR$!aMeEYKV11+5#+aUa1p0md5
+KF+5kG@HmLRr$'+'PQ!k0e4VP"Y2((SXNk&ap''J'#k-ZUE9JhXLBK*Vp*D00-%)
+M#G%8a'[`K#K@'CbI4a81!aN92PXLK9NqYSqAj&`j+8VKr4SV3eKTCJATAG56XDj
+jAXd@eBhp5dLc+fUZKXc9j-eG6EM,&8IL,6d-m2Gf1)ZpEmQ!mhQhH6)5&MKC)G8
++8a[Q5+B,X*hj)J-MmCJ5Z`Pb4KdRrpHehk,mUc0h#2k1-(N@4&mkaP[M(YT)T*8
+mHI4fG"3pG6H%Y'jm0Q+2pUf)#hLUr*IUa2@d5+)qb5MTq21Jb-S2Mq8U"RCKBbT
+A8[Qrbi'%r+lDa5EPcB%1XPSM1Z1$V@EKF'Y&SPh'a--9h3-m[m[0EXrDA9b"5[r
+k+H9q$&RLeM4kep61eP"5QHbEkZlUKhke-0l"+UJV)(+1K#p)$1Sj-d)Y19mMJDd
+[@1K6Ra"1%eUS%0,(rKL$ereVRB4bqCqb8P5V4j6eVUjQe`cjki68PfXFqeYZGfb
+PK453!#DA2*,KSRk-YLU!9YRD[$1iAV`e[1K$G85bc9j-V`m!Cb$K$!X'A4D!lf`
+QkLXVJdpPj+Zr0KAc!8l3kJT-1(,ppfe&VBDSl0&EX%99`G$d4-Y"[DRDmPqq"li
+[mND(amCF`VdUTTj2Y2YemYRHbP'["HFS[I)1!2YRqra@e0$8P3M*8P6X*1q#$hH
+9e-6TA1'*#&RbMhSTZ$`J[bfLm)Z@+UQqlf9K3CC[K0,m%aLc(HEBBdTe2a@YL'X
+)b%KBB*FpS1"[NrQ%Lkp8Ph18cMQ+EZ%M,Pi`6J-J5c+6H!GJ0AYAa&U--*T)H1m
+mC&#HmKr@8U0Q+UH3!-`JYBEf&-`B+2kc8AdrU,!UhT!!R8l3d4J&*&'cNBaJ+UP
+%k[Sf(i+ACl@JD-IkllhhK'aq0SPc!LpNQcNch&ra+mepL``C-rRZ!pPIA%*Y`9@
++r*a@)eHX!4DE!3bS#,&&%Z`5#%*MKM9!'J-@!f'4G0-%HmFkMce0dM(h*mp)NL0
+'1Bc)%U5KkHP[6D@J9(c[dB$R"T9f$I1aHmM&V**BLF3(JqaJ@hrH6DqG4r(Ih#I
+aH`RNQcpcCq"KMVZ[[J"hYE'h)f[(938jj"QEIeUem*0*PhNSZi&U(He9UTIR&6k
+m$*KarqZlbb4pZ[3))L'6#'l&bpjmCTrI&"KNTE%H5hEAr,@UpfcqSVENc%pU3X2
+0FVD)K,BM1M1#RG!F4!SPd#+*qCCa1U-kaeRFX8`JRc9rfP(qV!8micPG&qR1*V-
+0ppcU#!HfBM[B%RrPJTb$p!CMBpk8qr`@!Eh*Mm")l&cB[ja@qlfEDN[(pKJQUEe
+GB%KPDN-2KPiI"Rq92N`[H+$01pIk6f`#$d@&`XEUZGA8"fTKbkeL1H+hcmTaiQh
+L$RS@RpQ$`CQ9&#kc2m%M[8RHdrCP10@%ijh+3TdMflfZ*$XGpYdqrjVS$C3*kG%
+V*EaiAVfdEflVGHGfFf9Z$LPk#ke1Q`"AQ@H[JX)3Z%IHlP-0cS)KEU9irX#P&T5
+TF`)$!$"2YbQ*B[ZTaTGZQAdmiI)-@NA'DV,*P!%3[DY)$bHh6Re0[-X'"Z&UGLH
+'VlqdQVH%@EjLC[YBAZ,VeXjR@"6,`&eMe,HIppfQELcNqbB6DNEPh&)'*&hhYcF
+Yhb+I5T*Z3q,5!fdfS&JAS"NV350[!N-pEPS@%kGM,1qaN!$S)'3hNkq%51Qkaj!
+!"!S58Qqp"8fG$Mc%dk35'(fe(F[A)B#&AJHLQ+!41(qArZ1m@Dj2`BlT*lGmd2Y
+M"r"SU"S3hF1R9Z+bkXr"NJXfqJR$V1cY0,prj2,R,lAN@"h2KSND+qa1jT[cVHX
+F@j5SrP[NDk9l$5jjAEILeP"82Rd)TS6Bcpp5l,NCqS"VRYC!eUGV8bi)#c$A@VN
+NrrXU-`j5,#XpN!#-4a@*TfC*EhekZ2%V0Y$lK0[bedC*R83b-YGe4(a4ErB*+9F
+NXI!YHiKH",X1P[6qGCSl@"MGdbTpJjRcj9mfV+IL"G$pL2&q36Y`VNkffZ0b5dk
+-eM&Km!Y!VIDY1R@"1L4JPT9!FL-llUN18"Q+-*jRSlZL@+Zk@+r"CaUR8"U8DrS
+ar!EN'IBrH)RBaJQSV$,Um"N,'9&ADI)%TaJ1SSZZfrJ3rmGk%Fe(Jq1[-iRH2i#
+'BQ%AZQ,+i1p$AikAmHKH!&JKPfh$X!9BP03X`Z(PQTrqVAXThIB+3[1$eG$abHR
+4mQ&(["A$VmJkMU2U)[kYT1[TmdP#2K95qUZLl+kYSC3r0pQ&d,2H0S(8*[m0X$S
+Nd"EbNlpk6IUm@q8DbJCcL6m+HU2A9&')RNCTPjmAH[m2lfGkSM$rafV',(-BRaN
+NEBKd2H3`HZQ-1)'V-4T&dhRhjp[%0f2T3mfb@'9RaLK*,,cAXq[[T5jHDVeJ"NA
+-D&("066`50p(Sap%DF+PX`!+EIS8lcA5UCEb'03D*["LENEN1-R`"`l()qEA3fD
+!,6'6SC!!HpZVkEe-j!"QAm@2K1`j2@Y6dXcKiXKC,iC-1aT6G'hJ$HYKr[5#BS+
+%H`"e[dH6"'BJACJSh%#`9Vp!IqMI[iAE-#bqp!30B&5Vp6Rjc)`5$Y@&CQ-fjDI
+rSl&$T'5*RAeFh8qki)DhYKE'HcVGMq8[kJ"#%P&4N!!hTjDL,fpkm*!!r@lN2XT
+qH188EA*L41LkbmZ"YLS8R,iBJbi)`[bDC,S#8J+M19bmjG`G0m"l9EUN@9$68iJ
+0G%Zr("BRAX,50Z5RA%(@VMbpTbf!@[P#bMX%eYbSkdbPl,#DlIV!PkZfh0'E*Vm
+rhCckcKe8k4Upi,M49V-p6m`*[iJ@!1VPF(0SQ+'V(('MhqHK,9-%i*C16K5BL(6
+ia@2BH,LJ4$S$&*X4h$T(4*eR3E(ll5*fR$Xldl8,l5U"6Vam[BF"-mVHS`KrCLD
+mAblK-NpQ1h6N-&h2!q@r`jrRF8EGAbPfd`)HpIKH5M$!N!#)&r-1#jhZqM$VG6Z
+deh9l8(QDqR@mBU`b5'EG03iq3V3LAl&%KRqJR0bjQ--K)Y@ej[clX4f0fhhi#A&
+HG`qHdFA0S$U%!MKKNiM%!Lh$pjN3UV3jT5e'hC&@pm1&4e1hjHNP+Tda2MX480E
+aTSjR-R)(QSF)aS5Y!)3IfkMdICKDQ#NE-qMXd[)1QfM$&rZLL&$%)I%eDE@h1(i
+`FLdL2[$64G[GTT!!RI*SKc'Dp8FceX',HfaL%M+)FSM1rmU[-SJFbr1N'bh"#!Q
+$i9'U0Q,'(UF5G0T8AKl8eSaU*H*+K,"2$[ZJjrL`hX*N4EJUr2@Yf48*,cAh9`"
+NBE&LEhHXH%3,hN551V`%+jc[eLmShaSZ[0p)S2`bG+F$N@jl!jATQY6a$HH'AJ8
+("kZlf4j9@"VljLX%iSrfhdJ281$Z+`S&h2kN`3fE#CHkC2lPQX-rQ6YheVcS)d0
+)VTBU`VA`GDeLA(mEYZ-)LEl9!)ih+26950iCfMLTZ$AYVSp,J1id#RDS3PFlVed
+E,"T1)DQ$2aehc"J+6I4h$hbM5"AEkAf&SkKZN!$Xb1PX,Xr'j3ECkf2'9X35akN
+,%Ma#!Ipa,XLmlla'qFIm0HDIqLVecrEQDilr3!PI3,i1Xc9XJh6*[D"'ir@XpDG
+R54m)NMi)2VfkkBl)SG$S(a@9PPM)#ZYqfdm%"HIPh8VJiL[5a+ESfMq5h#hl,%X
+!0CV$m-Ui@-CU!86QC0ZDCFX(!@iL[jP'NB*bS@)3%4%9[+KA*MlA6TP(ee8mAC5
+Nc(EdG&FfekUGke!U8RI[Qa2cVThdbANMJI3UqrVjP'h'F@#'%pH#(r4Mbc2H%b&
+E%(aBe8AL`1DkN!!MT8JDR6ADlL[E2NV8JIf!Km@+6F1F!Zdjmd0eMh!M-(-8irZ
+BZCabTAiApRQ5h2A`[SP3)E$2`k[dNjAdilF-8Jfc&Z+PijIi*'2UcA[Ibc["Z)F
+k#BiXC$jqd`'kTriTMCj,[C(-lU`f&V1a3FepHEXFjCpP13-r%&)rQEa!Y06X6VQ
+aD-h(4J!JJQpkhIP8RYl4N5INa%iV4Zq(rhKUmpPqj3@FL-fm889'`i9N)-fDk02
+[h9JDLS+jZfV`)d*[#Rc"HdTjqB0Fd#+&++P2ZTK-@ch@'D03I*c*f36M1C-paSq
+eB"&E!R099jR'ba(!E6m%%[M-e'LS%93BV+l`lpfT9I`jKFFh,I%rrjF`+hVZlRh
+,GA5!#Xfh(KPGGA'VbFc$E6&chFZTBdU+,[F8D[pYTk1h"SN*ErKUMGX`V4bSi+K
+!aEDcEU&)TZ$T,ZlNLZbEBp2aiD9dYI)frQEb@RmUjCTYfl$ebrXL%hphiGh!U$r
+Ek$Y8%mjCkbfL2&e5M#UHGTbY"%C@-G-rEFNkS6*dKK,3890,"h'%P"YdK"f665P
+`$FZ9`l,!2JQVX2#+P#BINSkSXdXcAG1L)&ck90T`kiRE4*J#V3caa!HXP*l2LNX
+NQ@DC)iEGT30QcEhFrq,N9m'fQBhR4-YF-$"-h)pVANGp,M%Y1[(S16ar8l-ZRK3
+PjpF2@iKG5+-DbSQlf[dDl@'FH#BT4rRSbYhcj2dqc9JkL-iLpjKCP+(TcbHbNPJ
+@APklep$3eiIi*(rUqdbk+PL#hPH-+C4XSlJi1cCfSBmKJ'mq3e$5AA#0mp+b#l9
+V-@UCe9cd5U0eE(p*X#)AYUlCaFqZVd'GeH@VhC-"V#GD+lXUkh%6Grk4480VfZ$
++Z@#F[H+lefRqNZSMh(0IUZj,CB0939H2qE))+l&ceck!%V#A'jU#)"lEi&@MlV)
+k6p"R(J@Lr0TA%b'JmQ()h(9[3d#R-TS'2"4#l-Yk!1+H1hD-VT9NJ4VJPa)TqY`
+Cb(S5d[iX)jd2UYXkf3A@99%VDSqCbjcjaUmfHGL2,`4Lb21PDD(Jc9hX2Ca+#S0
+eq-A9,T'Y4H"fSQ`9PBDr"QjN$mMfKh@EpANJ)Y4LEY6BIXJUKr8)U4'l1bp,S0*
+6%1(A)Y5"K52daU369P$%5U@`RU4"E$!Ml(L"Y3B34L-E#`,ji(T3#SLpEP0bdRJ
+L&*4a95ZiP$c)Dj!!@"V)bKb%`,V&J+DQ8#VJ((@)G$PVSf"GNbK1-(2k(T8(QMP
+a-mZRb!M`VHRqKk09G&1`)A'&'21aHaEIhPI32QD2A$(Ii#$5cYmAP8DFUm3N68X
+S5`2Hcq-6K'!Al&F0!@k2mi%ZPCA-4r`,68Z%J(aZjNp[830BFb5B'Qf9@(adFHY
+VV0mNe1Gk6(cX%BYqddl#&R(9k35D[&C)-(ccl*YQHQYN"%MMl8jB!!Q!(I*bBqm
+2(5I[EARhhcjGQM#)N6[V)HkJrC9@kmTHMNQ$VqI3!UHd11H4B@20ICZBh0MIY5q
+%L6"EY&TiQXX([9je!XBeCN&@'V39ViLV4k9@MBDJ'NZZ6qE%M+!(i694Cqlb%ZK
+%6eBp)"c,F[9'4A)pYEFb2G2J,-3Zp&`Q,i,%DbYU'HSh0,G%KLkbq[%%#ApPC+"
+8#2IlEReDCR,cedcM-&aAfh8,CI8BHT9,hf0'2qV5XD05N5Hd-9FQqrlT'EBC),q
+@L@HmNRdBaYY4q2M4HcGN!TbbSa098[(cDb#0f$NjQPE0+9dHrE1Y3Q$+drQ5RJH
+5F5h+fDd6+f%kC!20A3'G`XYeSQf&T18`(mKqUHa$A,FN#'C5Ed92HHAcA)1L!(*
+B4,*``1UA'4#5GA0FBD69UBGKXJR3[K5"XS3VKIB'hZKDQDA-i[%hJ2GPJib485U
+fJY@Xam0AQHi,(500ldD`if+Bi"9ekZiqDP6X#68ifd9pYi))mTM-,"r"CG%LdH[
+QN!!K*hrm-83e(EbdDR8fJ3NbK0`1XPl5i,V9cUK!F99$rFYqGM@-pASD52cN'*T
+$Bj(e`2dJ@3H0ciJ3Y#6MFL2[NX&kX!6cA3H!0a`4I`UHZKh,@BE$K-(UIjS6P61
+VaVkj*J)N%Z*ADf@(A[2!20ECGeV,!Q)&LNcdZ#j8%+,6pcb0'Xe)FNF'Ei0F99G
+FKkc9$i4`X(U((6&KUMSqS*pG`3hMa4Hm`)Nbi,SP93T86K'8%Q(IeXlEBJeQ26N
+J#TX)b+kdJZV3!!&$Vlaf*SlGUMIYe3P6b%P%PDm#4JmGBqjFGjVeIDPAh3%NDR&
+[cQ@80Ac[h#CS(IJhY[3l&X5,RSmLj9`HBiDZ8qPFJ0UA(&da!-iJldXSS#M9DV-
+FJ@Kh'JEmSCIUVY2,e0i!rlVdC8lMq6@J4)Ia0Q$rqkQ'[5k[C#e$`Yl+YL#N50X
+h@[M@9P5hDd%mBXp88EH4jLjKXXPK$4fYJ!"BZMm6Npc8c8VE&&AX'a*%A#+H0$N
+!R+AcRF6Jf%@al5[(,lDd88VfP((GRGPl9QXQi264DpRSbZp0K[eZAq25qRY&fe,
+0Tl1jDTr$Sda0,0jRb$-D1SmQQJ85b$jr!,HS(9-GIPEFLm(Hjh5pSSf#bYjA,%'
+X[C[AJkaHITD$1X*43&p*'YE-BM9#(SU&![!9a"r8b(J)Up0KER*bb0S0dm"L%Fe
+Ii3NdN4Z',m%3(%TeHUViU(p`a9Y(RM!)@G5aV)kl9(mBeQr8G6IGl"Ip,SmXTJ(
+9SIjL!-5L)I$HV#jTe,128[31j5CVMaXk9q8TYYb%Mi*'%lPN&"X4BBP),9fY#NM
+,HTmR!9+H2dIIDFAIi$5i1#4lj1Y&q&Gf8[#J3YfS%DFe$3!S!$+4&j1V$#[dLi%
+Hd&BpVcJDhLLliEH2[l(GK9M$$`K-F&#V"91LiFHTeD+d-Ej)kCSq(N-,FT!!TG[
+I+q"ep&,BLASr6$[-hm5`SrYD'"pL&(lk`02d8,)Dp)GGl[*cm6)A2FfEJi5H"Fi
+D9iDIYEq["!-8kjf'HGVAa8`EL9jkA@CY@cbekSBDeFPDU4qG#HVm!3C%Eb#,*E-
+bY2#hIZUS3BHI)E#[6GK(*9P&92Bf-X[p50iKf`j'aRm-Y#$#L15V'X*3SqY3(#,
+H@VJ$Z4X68TjF5FEQ92eiX&*iR'14(3HjA+&8*f'[2Sk"1&5*bE)J#YP,IDcCJ2I
+,Li88lKK9-KJF$k86LlRGhDTkmdI$qF(LVpIaD[Ymi4a'9Hr4!D'p5@Pjq+,rRK4
+"l+#I@[pb-G3eT&jH4bFG3QK-mQT$*J*HhTd(hAD%'f(Pp6%X#J5)dN#U0B95ekm
+9r"%hJiahc,XMVkDb8IS#GH!KeRY@0H&riZG)aYcIS18A+QTmqckj""ZBNe41$&V
+-i6Be20-"+iCRLe1jTTT3d+,3a0ep(qHKjalAHQiEAlFASS1m94jBe&0#9Tc$Gfj
+(Q'53!%YN1B-6Bc`CQN-rd#1ZSr$J9@@Yr$[E5E@3!!aGKe!eaN-l%3elBeS)Rfa
+)G[c%FF[NYL5HR$i"C`60P*!!+memI$i`KepcYqV6H-60b5D3!$EcR-EjDZj$f'm
+AC)N$KPfr5#VXTPhM2c3HeDF3dZeVADjqXIV#,GpCY[P,MDmcj"#hA!YF3*j@Cpj
+AKlfSFT,qcRHSC'R!R(9L*lT3JT)YNCSeD-08N!!IJeNTVh6i5SAFD"mD),-"2d6
+pfX"!&16rC&8d(qq%@HJ#Q03[pHrHCA0cR%)6d(!iP$kj'B54Yh9GLQ6J2EK"bJ5
+M'&b"1SlC-D`-T-VB&%FNKiLEi+DUDU@c*TD)2!U'Pr-6S8)#IEjML%-XQHXPf16
+%)XaV@&8U3Z@kVBNQF6&#b$L-"3clFQhUrF3TJ(Qc@61i"VSI,NLYM%"X20(Cb0+
+XSp1m@!2Ec1aBQEj#01)3GMa,eJB*#jY@kNR0)5#CbmflN!$1c+j'C$G$9'CZj,(
+qX&@Zl-D$m)4$&1qUMK!BPFdR[*!!LmEcd5fh6D-P[2Y6DMQ`#16j-dGD9`TQZah
+$Y*P1M0h*Bph`f4eUHQ#Ff0UPe$&0q4U4Y[Qd4jm342"(8q8H@N1e#4#r&Hq-[3%
+cqlC8LA#bZFC16`I%1'0X9d'NE8pH53MBb4b"NPlrj$2S2mc5&e(EqR'aQD9eZcj
+"FA5`BIaH)aC`&KpXrD-rFcX2[GqT!aRY,LjIY$HjQd0QeB![XkZB1lrK)*UTS,Q
+C#f20VjkL0BpFX4+$66j&KbGI[MZGKh00Zr[c0Q9B"VXBJQcP4!6Ae-d,@q*-&U%
+QZR4ZVb3`-"'lTGlX"r'j"A9!C1#N4kaM)+92b%ZXSYpaY#QBLaSDY$JJT2Nj!QP
+88UY%5!,4Q91reCDK)33GQHZ23Ar8FQ2p51FDT&AMS$pG8X'l`34caMp52-aQUl2
+JLcZKEa*C'&$q9rUe%GZD6MUC6d&m4fmf`AfrH-q+'(F2LQVKpp&`02P,cT++prA
+XricNeC*'(-$0,)UPDjRB&'$B[b1riiNYG)hp$#&B6IFN64fIpadhQ"P(4dS-35C
+3&YI-'c&-L%VDhQQ-ibVP*(amYA(e)TIqU%DFmZNqVCACYY4qCJ8(6ZiD,8'fA6Y
+90e8JCZD9LTd!3'mZ*'L-1aGaZTh(`S3h02V!PL8@AUf&AFYZ5dX'3"K"E2,S-BP
+6Df,%b80CRr)C,9DH2f@!`-cD,@ZG#jr,&[kYU8Vk[k0D6`4H(q+&26hPmhdJD5q
+CQJ`eC2#TAk3DE2XNYHGkYYKKK$DPRKN2`B2@BVp,CV#e&eeBC@*la-e-QN,[YBU
+[0#(qlp5P38"CeRS1&1X2CqbjU6)&TcHAUmr*MGBpM*p83D4rYD,qidb&$3cRD"b
+cHMK`hPP-Ke3K3pJU%#9Zc*X3EE$rKUqh%Yr6l,pA1UeLH0p3kfJY`I-"6li"-E'
+KPA'2r'PE19cK&0URKXDV8UBTmM'i&X+G@iM8F1#)m-@I(fb9[35CZc405J*0`ma
+VEl@T`R28k8'0G,'%rZR&S+018b2bZVUdl'miSFH488E*X0p%TbbmH"6j52[jcU(
+l-5C"qQ1SFE%(HMN5dk9-R[reDcH2RREQTLJ@H#qd1P6Z2ee%+4`D5Bb)Sr3)XkF
+eaZS,NYG)"@Y'+ZmaH5bJXrN6A0E-bp3,Pm0E1R+lAa9R*S"N3M%I8EC(q-SfFMi
+c01%jI"X-ZABTc"PrdlRKpF@%R,lXbDcC2)YK+aqaYSUj#NS3#LL(1)'SM%DJad+
+@&9#'!VC@EhFUh0T'*bI+Q*FH!VIVV22F9A*!f@`2,Pq"[Pi%!3)YD8rZdC9bh31
+S8#IHiQ6c33-!&SY@KCecq@!6MEeb+2i-ikF%EijC[LcX&Zb*!4'Na[r`XYH[rUE
+KCA@SYpiZ6Ck*8Qi@8K9QcU3'Z-!SUaeDHpPXV2j(qE9%1GLY$UAA%"ZHL6q6E'+
+&q2@SKH4+0&lV1RTD)'IdK-`U9Mr(%A6Udr'-1a&A"rqD%5DQ3aI5ihf0$YaEY#)
+0-e&H)MRIjT)mpmYI(,GFFFEJl&BXX1`j5GTZ*M[Ja(Kj%9k5fpcpXFiR9hECH[I
+r@JLZT))TMFeemql)eXFl3Y9AKrLqG,fGc-e,UKX@c(9V@jr&5qGPNbhq09XFGdD
+YIhSkH0PJR'aB6F*+VE1Ul'#D9Ne"U&jm%D"D@djI[f1@MMlZ44GQ-S2%952$,&E
+8%c",'G4&dNNXF40h-j9'#cj8CbR+d-@kG!6C3MA,*#8ZKT3CTPLe`hr*J#pJ4C)
+4JdjZ'Cej*#q)`LVrEKcm(X%)!9%Sm[)(e!0GFP#5"l8GS4a#I%[EC5[YYPhJ2a5
+p)Jk`e6+Bk%SA%INcPACSGX6B-1TNTGCKX6S1XKP'9Z,Xl0YDQL0,'R0rPGbX"FK
+&Rj`I5#'DhV"D!HlZ5jFC#jML2k[lm&FZ*FE"N!!V(iYlQ"#6)4fVF4Y1#CiIID,
+#`fk&ka-J&X0YPT3UP-liEEFT`9GTCL8FQ,)JNQ68L,Mli)'KH2NXE"'V5QXeB4T
+rVYFAJXT0-rE"Jh[P+&j$&3f(G$[KQ2'ACdiM2*'(em@cPNq$Q1`A-h!F44Y$(qb
+r'1'r2rJ([[!&!&#kcDi+Nd$eLe'dbfTVZQDH[&90R!lNRkcLK(D"%CB@3)"`pjk
+8b%Qk$aT$'C!!qDak6M9IE@8&NIhqEJHalbbJ6kB2rT!!j3'KQTNFU$hS&eC99JB
+PE@'jGGi63D9YI+Y[SZr1&6FrAA#@1+S0BTB(-jJ"ThPd6dkS'a[,d"f1-)-Yp`N
+dM!13!)-T@&CPdaI0S0c84c%LX)F(X,h#$U"r4EPddi%E5XM2Tr"hYFIrqSRkj3N
+f%jS9+hR$ar&B'HaSMI!G'%IVIHL'l38ZC)3F2[6D2'[GDPbYDh6$!aU@fpaX"3E
+1096'(3Q!60EeFD9*$4qMZb0T)aeN1HecPfHVj[jNFSLZ8c6$2#p1T)G`6e6lB*V
+"@@X#PqbpmM*&mbS0ULA!RAkdDQhcC-$$KbY5PcPi[&j,@`CkfeQ*`Bb%V$ZF`5T
+5ElTLlrN'M5d-JHeKGBPkHUq!QjVU!9kI3BmhK8e!jDa&Vip%jSqLKe*Ml5j0S9G
+3VJa*iD1)hm3Y)Sk[hAbDi[0[NjV)Ar!K(db@li+"k63C)KJ[bEIfSjUqPKbD$jT
+I4+X5$G6@)(*Ii[[62lfjFlPPk-qIUEVQpU04NJi[#Q`(bG8-c`&,i#LCep14ffA
+pIe0bfaJ+5fqQIq4K!SmDkCbSTDMEpAB`ip8p-i0P3El#SN22N6pjl*hXNJj&EZk
+0b3c5#AXKG0T9mTf0RqV[-8b3!-'8XXAUbNJ,Q,5iKN(LU*UGSP+kjGd9"64P55(
+SCA[hU,'RqR)HA"&+@U@))N80*&ek1ipNGYTCi+[q+4FE@DPG,Z8cF5pN9p*C,'-
+@FHjhBPJ!MP,*BGh,q-1iF`51-NJ'K5SH6Qeb`hkQ!MC*,V'DVR-ZE2H4TdL8G*C
+jE$m5Zd"A,&H%HS-$qM`0cHCYGKcidGY8hZ(l'%Qe3NXRQ(Cii%#INN*m43RCcrR
+a`UGIc"[8d$XUpB%*q,JD!*DLkh-lAiDaJkL1!H60aj!!,!K58$@djSX6DSHGJTC
+J)HFf1kT*(GYmcABq62H$bfhpj*-%hflK3Up0*%+3!*XV#KYG$Q%25YcIB)hCVHS
+V214kHIiY'IKe+mrHEYU&iS+bG*8JkmYGA1#dJN#bG#`C0$2ZTh3ekqD0HPaY'b9
+"j+0fV)j,d&GL(kjfD4$MQeq+Jk`Hq[8%H0m0XiEih#JZQ6p,Fh(50&Fpe$rQ$Kr
+QpSAZ#","IS(f+TmPapNR[U+4keX`ArFiQ4%5kJ*C*hZL)0NRDTYQk09B'PdCPUa
+`'pBiY1ec,eX(+2GBiiNKM!19fl)*NV1qY[F%"1j&6"k`GjHhZS8#SYqiHe!cH40
+82H[B&0c`Uf$&pNEp880%UZ8GlYm&M%(XVGPeQ3Tc5lA$rR`@FC1l!ldEDQ`-34h
+(Cc0)XCJ2!iGKIYp1PTCXJKF2AaA&0VX$IpDb3,#fA3&$R0K@@cK+14ce&9Vc")G
+48jj23Y@-'5KP%lP31c!bIH5KLDf&F!B$IBU15kUbZGP&1H$,4`FYZ)$q[I2K5$a
+83R!U+"kXNS[r2H-ZbEcVMJVQFL0H%ZSPV!Alaff3!(SMXBq%(baUpF(TKHk%4MG
+N3A8R*)%0EYYjHdQEC$kYl3K%ZdkF@r1H)J"kSJZB)XRL@!#Me)0K05(calGB4+J
+Yi,,F'Y-0L5`Yd"kjiF*(CHT`he*)BUbI1&-2X`GXeSKPFZK-#[pP'eKCZRT66h,
+9j!T@eG3)[H"'2'hkId%`lK**B"'V8mkcEQm`aZ3qU2KIN!#"'S,kSQE%-e8%eFh
+'"9R6IF!jNV%h+1X8NKZ#JY[*5)d%lX$T*pQ*IULUUc5i`f3lRXkK-Cj"`J(!E55
+TK-@&GCpMmAb0lZ*hGrHdpe&[,FN*)4[Mm,MYK6X-9#@dkfT%$AF1LFVCaE5MMEF
+ZM0QlVLl$2$DfN!#i92[`Ha4hSpNVHGT#4drq&Lf+4[G#kD10D$PdbJcPpb,f8`Z
+2EkP&XeS9l*LcdN"Fd,a1fEbT8@1qM(@NCkNjcBVcRQ-TKal0,V[1,a4Ib'cZ*qQ
+UqZ[MeS-#fkhm,IaEmFAhGbQeQb'k&5UT$+q0H9MhFmdeL5D%E)SY3GAi0[MRN5F
+*DYc-kfX-L)aF'q-5-Y"dqbhrdKG'FP06G[JDN6DpQe+d"V&lZ4EQ0$HC00*G9Fl
+fEKPf%K`DA!h+B[k*0QDG0cZrUf3T5ReaQ[dYR"K(09#Qr1[$KfN,!k2TIk'E`Ke
+FClNXdU[Y9l-"-AE0pd*Vh8Q1pXCfr6R(EKPFdd-&i@%SYiSLTUYS91INQj`09)2
+FA6FbmV1K(aYSEQDM3Hc0dA+R"Pj2lR6(G+C9k2[X"9GiCjSdMQ60)b@rYbC-ICq
+Bbc,`LaZm&`XU6)&Xb%JFM[#N$0Gl6-`h"V2p%)@$maYfJQh(1Q#C2N,@ckJXLP(
+#Y!@kmkDe4qHEjSGDMCajJCc5A9*2jeNDrK)KKc4NDNj`STh6[emcpV3'DJ4qLNr
+I-Y$HCr`)L82PN!#RUC2NAV8BV['bESUrJPGjUli(1e90hJ)&UTBJr39@C*4fKVr
+9!pbr[YmjCLL("JPdp-QcpZb#dY"8#hb6q"BH&%'C@5b`dhp3Yk0ee0C4K&lPThU
+*rJ6+C+$E8b)h""lBkB(eeZLcRPdF22*ZRaNLE,K@kH)B2@""5&d[[T3Dbm,eTrK
+3EEil&bd2L#-U[9"5kl"%R3ZQ$X32+qBSDL(HX,J4Q5!D2cl3$l'U6rGU"X6CLE#
+br+-I"jAFMFYAded[Hr$`[$-k68NEZVT*[f[CajTaS%r3J4Ai83pN9T!!a#8$E*L
+0$8!ImCc&Ip,6AR3H+3'IKRR(4*,*9aK4J,Le4)pNJ@br4l,Gd9&J[XFfr%`hKd6
+N1EF0V&9@5Qa6#1[P[T5VrFI&mZESp2*lqYNMKHKNT$63M1[DF56*iMXj#G#J$3-
+SMmSq&,82A`lb51Xk6qZ"NFPAi('[QlHe#!`(pRP24-,UDT8DXfYY,3jEH5CiLQi
+d2[TN$mkT563D"c#jSd+kr&ZAEUAdGIqf)cNE-1(MRM9i2hQP`U8mcPmjFa9SVK1
+(mD5e65S2d*qf#6iDDFeSH%3dEeYAj))[-['E2GCLbqVVHD%i(*ESYXa0#2rV)dU
+c@RZZaJIhQaDJbJQBm0Rkk5K2A'QLG8ldibYPU%2b,i@(VK%1-*95J-LeQUdArb5
+i6P"12rAKp-SQQ#,4e"D-B928mjBZIX*rZeib(NMThGV'p%,4rM9TZ9GT[NU)#94
+)Y4f5!XQ`Jcqc0H[kjY9*#lVNJrj+bUZDH0Dj8r#&-X)`ipi)0fKTYcPfQ-H,Kfa
+rBqQDh,VdCJ(bpI8Y`T1!!l&MXDP1fE2-pBbK$bR0mqDi9J#)NqCNd%p(IT0+`"-
+VSBe@'56dRc&`$92j@cS'd[ZB-436UqF(Ulq!)3ZG`%mhYp6q&(iXZ5b#KNNE'c[
+E+&m%J@j#4@VI*ZXE&LE%SG2FhPm&'BEJ"kKMd"+mISbD@1JBm(dd"82,(p'CH%9
+BJ5C6TXSM3DQiP[LQCYQE4a,03kAh!UUTRDNF8cSF0V8M5f(C,`mFBX+@$"UP#r(
+q6L+hXfVN#drAY3"&mI)ZDNUQ&B&ldbShI&LcQZ#A$%eSK0a,KkH!mYdme@a4KS&
+hh2A&c&`&+)phkeb1XAkqJ[96YBC6L5%3X@k+A9+ch5lTmrKrV(l82LbB#VJb43&
+@812BFpLTL*jEbFYEa3N,15,AB(A*UHX(%V0peZQR8CT*Sbj-*@AiRB+6EG[lH!j
+ECKHirUPV1FEiBQ6qY)@(EHCFJ0Lj+5*ZSBk1ar#[IF0BQIZlP9(mC%S9X*&fCEG
+i,`-8Z1%c2Y&meA5cG265(QdmGHKTN!$SS&A#5I@,aI'c%2Nk%6aqm6ima3e1'Y'
+Ber9djV6GaYfLUU@TP,E[RCN9dU9lVHle"CS&Xp-j![aG`lL6&1QLISFmhGL[f6p
+mkafUpQFl1C5LKA+q#'91b'+%(,UEBJp!F#T,pBfDDah-dPRhCF,Eh2dMQZS64-b
+(VZ,H8Yq5p,Jp5L!LY60YRXM1Y#Urp48dVeUGCa#I$@8j#bNej!MN8J6#[6'E%2l
+G!UBHG[,U&5m"`+1*$[IbIS%V8V(fN[Y+kp(-SUj)FX-"2EQ5$@,95@#3!20XCY4
+k8b+cbq9A80+3!$8!B,KUjq!dkc6Z$15K0cK@`m%@3PRkTPD"A[[KrY0NGH05`L"
+UaH#d"I"9fITMSpPa"%'A#@cA#S0ER)"3T,)`DRHKk6hU!V@2$M4FfXF(DTHTY3%
+52XMcp%H4'hB3`*1r6q#lr,JeS(FPR8AVU$V@rD*8,I`[XFaCLjN,k[M'raE%`28
+#C&Z'a&MFm!SeC1#8jPCqN!#Rb2,)[0)"F8dkil[QJJNP!&,Vl)LTq#c+pldA'f-
+",CNbY,SUQad('JY44-Y(&!!,SZbH-9jc9B2a58%8#D1MepD9N!!%$AIB)9A1d%p
+U,bSM+*kkDJb'fChRmMp5Y[TS"Im6+JKjbfbp#LAATCUGi`2f(E6MlQkeZjM$S(e
+8Y[VRHEPV@GmQQ!P(Q519b'Np"U9N#U!Z@@)Kd@9#"5AU21d!mJmT@lUe-(+4Q46
+AE%4eADU,,0X*YpcSL8E*a($H`fL"X54TSN[1ZS2f)H)Ji-qafm51J%q$@A-+2Hl
+ZYSIJ*6"+Z623pDCf@KHLTFI2J+G8X'[a8pPkk'3Q+I$b,)eX#PK$G'&rZl(VKik
+a%,S0P&+G&33VX%Mk`$XhEdQc!,1aBrJ$EX442BhUEl5ZRpBU45*$JpGhQcE"3%X
+DRGh@"JGRDM%$q`l&IYDMhiqSQ&GFC0r184+fFj((&DBrH`mI243P-Z3I*Zm[GH"
+dpZm2q6c66QBkD25LMfCX5GGE86Pa#e)M6hR$IGNr$"GBE!r1BabXX2b#QG32+,+
+Um&4%*'`SlKE2qMU+Aa,GVT-b$d1U3r&`Hp)aSQiKM9j%$J@qEAi[(hTb3p`kQI$
+YDaN%JGeq(pT[G[YhC*kH(8USh@3p08"J4-MhaR`GJ*e9@KYT9M&6(6kQIj)K@)(
+L+G"BZ4YS1',h(YLa#NQ(D8)a6V-SI'JmUEj)38*,+KP5##F"R0+qM&Tkm1qKhd2
+1CEDPNjqZ9H)'TL9B*2dqKHl3c1U#CikN3"Ef,GJdm)i&[X"%K*!!GSh3'FbPcE$
+ATaU18@XcDT@PJfIH5eA""3EDV$lU+1d9I,[$LU"*"IrJ8hk1h'k81m2!*4k5AU,
+-U2qAa[c$Xkdp'rLDJbF16-%QEJh-G+2`r`Ui`5d8(@d&TZ2TT@&PTkGb`*9GNlm
+!i29GqP`%B1PL%i+$4i$"*-h(#Z"f9Z%djYEE9#kBk3irGC,q8*XF[M1$h6@CcB8
+eF`#Y#mi&*&hI#L9"SFArTDES1Pb*@8(1LJ-'AdGl[05f*$ZI`E@G'iUEI8,FUfK
+,@5EL1[ceE+'@5f%c`m9X*4LD@NNpTEbIcX09V30p,T@80VG"hM3XJ&0rKr(ND$N
+FIem4ERkeU!'Nk8YqiYPj3&[X,8!KGE[,Rf$T,MK#+eCDMAN+'C56pY%,2X#Xq4,
+`@FS!!p2bj(A'D1&LbMmULqjNF'[I@PebVY!A,LfbCkjF-V1TcPVbj$2Jrl$-(G3
+Jj2JMD*e#bhSPb*Z)9Vd((*!!$B#J*H'@f@0HDLlh('hI8PCT(A8K-X4S$rIZU,X
+'i'j-a[%dpSIMN!"6BmMk%8$(35ajHG0H+Q2r4k`hVGC8+8T)JJ+H%md'B6H%L0$
+4A*LfkLLl(JNZ+bZSKfQSUYm"fB@!+hGDl$p%TCHK(p-5Y*%!bMBek`J8)da)UEA
+iJ*+MVBm2*(UH*F$Q&()(m&NX-XEF)U-'jHMH"A%RrGa4%8L8Gfd%9&5Jppe%ME)
+S+AEe*4P5AGA%I8*8(cl)Q)k@i0$8K3R%8f@+!"3L2pF2689#HdF,e*4h%pAGl1(
+BT-8fdk1rplrIX-q`fXbi&F6Hf%VFb6&hAm`Z2XNfZd6FV@k3!-6XB043!f,CB&r
+5Ie6FhPC)RY)l&cP#iel+5$r*1$IGaG*TE#0aRh*01Ia6L@Bab`cXa"G*"'QB2IQ
+Ah928bZ4FT[0%8!Y1ie)XiTY'M+U$CP3UE4@Tp@5XJ*Z,#aFCE['2Xq12f*(UDal
+*#)R`X`31d[He"frm62lXDQ$rl"&`K`p+ZC%46T044kqfa,#NK2q%acP8B[8HV5d
+br*LFZk%'HacUhiJbebGN05UGAG'k1Sh!cNBA5,i0TBKeN5%'GN$FhBq*Xj8dak#
+Q#3'291e["U#@`[@RK&+YHQcr'JL'p!JfeNcXDj6Z&JJDIQeQMfV!H&3)PUPr*3l
+p#+J04"bUp)KBpKA#!T55RiY0Uc2JDbL$!dQ'!Z6(j1'F9cd-LCTRaY9CZ'h[ibe
+3"Jq#HV"NRI!82J88!GQF20KSX"3T0`J'*Z@l1RA(F!eMNB*%reFprQNmGaRG@`V
+bSe8NSR-UbhJ2HJ3'Naq@9,JV$$[V9G0S0lm*&(&li,mh%+C6F#qCYQZ$VKhUh%$
+Cbpe!!RE"8(J&q3PaHh!k%$T)dGERV&3A$!fEG!aYRTlRU1dFmdGe@N`S8Fc6LDA
+M#@N(L)H'6jEFkTY'eE4G*mJ"hF(UVI)%P0TYe&%pfJ*aMUc'8`%LXS5RE-'EL$`
+C"Rh(P3'elC!!,60,Ji$UIf45Xh*hafdPMd$CSblHIKVkbA(bUMmN([IY,Gjhf&5
+)mJA"b+!a)aP$@$hjdDi!RIUTJ1`RTcISJ9j)$8TPi2J$8'Y(66qY1p*qIVNjEPa
+(e[9mHm4,0(UiCkQYFAB0#V'&$JHEdi*Te$`L$KZc``f+DM!5`Lfk`S(I3h8bb0e
+L!dY'mZ!0%fpRD1a!M0#KM+qR(TUd'3HL2Hd8!!L`%#&ID6eCc6ME(48RaJq%3C!
+!Sd8L+RE'i9QeHl`mQNVRa%J6Uq%4A,DRNdlLa`(0KP)ejhH4-L1`Vl-P1Q12iac
+@-eDrAN)!a!00#ah9cc*'fPb(iU,Z"M)RQZdjm(PQpG&$VSjbEKaqSILB9S-&UX%
+M0l'fAd3CVQ&GCh2NaQ+132B1&#!*LaX#@HV*rXiSXDmbm+LqMU0hS,K1T%U"H'(
+E#IdC,lNNq)8CAbPJpDhFNT!!JhLSm2`i(662GdPc-6Xcc8hj",1UpN!TF1#"Aem
+XkhX(D)J&qBf%G3,h(U@836kZqTk8'J-@5k,aml[c-3RVFbhF%e5,ZLZk0aUpb$[
+"%LbIri`6akU0UA#e+[&HL43he2rIk$BCYE!")d@fjqq-9Y%iKRT2M8BMU(HJpJ-
+P3V"Y9@Yk'e"1mKYSSU,VG6I4DDJ[cE4-*Z3prAL&Z[p5f&9j0I&k&(S%CH-[9[%
+jI-RYrD[`81E0qY)mMHALrBV89r,r54Y&@ceFjEL`PLJpdRe+#kaVQpqN[TYhek8
+,VaN"SbZP#Xi5q*i``JLaj)CN@9hcQ2)#V3f&[LD(fLEL4b(3135hGD`J&i2eYD!
+UH,!q!eEYb8E0HD69pCR(H+%+8!1QB1r'hFKa[I#G5hR"5b!!KS6D1*TjAPaG"2A
+EZ+$-`4#GRF#J6QGHE,f[0PFF[clU,Kq'E`d-hr"(!Xpq0[RFHX"kVkM28%pd(+S
+[l*G8[*Xh%T1&UZh%fTG&r5E1p``[TS555MY"DJ&19dC0elS$ZAGAT"'f2DjDk-j
+E1VQ&Sl06YZd2UR4*QN`Lq-XR%RK*h&"@4US&FdUd'#53!%AbqVS*N!"F-jfClU@
+%pVj$T#qk*c#2*PC28qG5dHi!B`!-h(DX$Uj"&%*@$q%%$05"3R)Qe9eXQ+iK,l,
+T&Epk91L)3QQSdV[Qbfi3"4Tf&-b%TUfLeIhVSp-14dp9%ber3fj%[iN2p'+5Ebr
+*U0Fj0ZZCTkieQhS822I[KElqX%Hb1C8*f6`UccE%'*9-2$AcmaEdNKbUbqlE149
+f31kp[)+LLDDp'SDQMBrLhkH(E)M$MR!QL2JE2,GKFLVD%c#&i3hk3KbXTqrL(h+
+UY(KKHH!Ak1"NN!#[kKdYS3'dA%#$LFXarKEU5N3$jAH[h!CQP+@'lSBX08,Q'Gk
+808)`@d8+am`!HMMAe,C&e18*blb"kL6mXc@Hc9NM+"jc!3h$1-daV3b(rQ-9CQl
+jeCMV60*%3ecHCf56T+%'U4#aZkUHmdqK[6P@MA0#6SVYPU(-mp9B8LKXjB%JZd'
+FTqjE+G,m2!Uc5+cA8[3E#"QkNrbk4iF1+V,LNmd"jeB`56N@3&Z%jH@!p#@C[#0
+hpkE!Dk*-IDQ#AbV5AJ2$)NES6L)+lr9*UpK65A0j3F-`2MjV#a&cZ8YX@EhUHcG
+kHX-2VBNlJfq`Jh*)6!JUF6XQk*+`%fQ,$H@M&TAAFdGN9mIF'4HP+5H1E%80U`X
+[j&DeiB&IF91A+lL%*lZ--5REkb2G-MdHkX3kK1@jf4)i*E+IIcdF)M+&EfR+EiU
+GIrUST+N+r$HpK'690kqJ&2NDFeQk%3f9TGf4c4[66+PViS4pF#+TZG&rIK0+$a5
+BV!3aq(d6-,KT,'N(Y6kr0066&i##kJqbT'K`AeT*8)dDYDC+"T*()9Q8)"GLY"1
+5$L0)2adf'iELe"Lp[(V%HKlIMG@4E)T"A4H"483Ah%P8-5&'j*jd8*V6hjpGp4k
+q(qaGe[pG!"bQAkXhKS'*eCALKYB'9,5DSK-PRG4QiqHpj"bVZ!@S&'bqB93)Y'b
+,%rd9X#+iccRfYGk89"*"5dci5k0VZ4&bQ'GC4M[$,5IS4am4,k+fP'a#I0ZpHMi
+-q$)L)IIGc1*`%bj&Qh$4TUJE3LFfhYAXPlmK+V'AYm4r4jJh&),Al4KBTbiSHA9
+1KXr&!mS2,dAHcI*`(9P*5J)*2cY(Z*!!+,9pN!"!Ve+[jMC(T1*qR!H`206LNDQ
++0XS!mFDjKZ*-1l-hd*hA-RrbD2ic$FZFQG3IdJ+SicQDGEEj[MT4b')'jd1J,9D
+L&i+#-A-E*"$F[kc,K1N5!0*ki)CM&@6Yha,ZDaTCieNSGje)R65I"--!D$N6ACk
+mZNT3rmc,([L,Xp%+!8A%HdE)F"jA$L6)ReSiP@9kCr`%`46XPU4(5H)$Yf1MeN!
+cCJ6M@kL'0$LAh4#b(Gq'(I'E33#-)jpJBAG(6YAe"X",4,XI483DY2[,6mVEkN0
+8D[q4`qqU1J!Z3URHaYCFGbp!%8[4Z9Rm!H2p$K0p'@2%rLX1VRI5B'@aLMrJbV!
+m6MrMmHTl#FP$F8T$IM21NT,X'rcUKlY4V3YPJ"DPZIam@kdV`KcYVaMrh!)C40#
+B$p3!+4X$B-@B8D"PVql15dG+"0@CER`MJNL0%NEY(3qIr!Hdk@6Z'McKm`"dfU@
+*Q5)Il)09$KC#J%`UFKHZFA%b14C(5Fj0%FP%afYTldKT@NmDI%*T["[F--&%Qbj
+r`f8e4pD[E9'LPZFlEX1b%F#40*dHke,ZS$NHS%dkJ89,-36@-+Y$#+&AmER&ch3
+"FJlpEKi"QjEdc`@"Fq3p@M0BjVii,1'iJJ$4Y9S$k$[V2Mq(J(eH-Zm'PSEY`UB
+BMjDVJ!r(Jm,DeR6Se6UGAUQ(dM5V689hha9+cRSK#YflZ'#p$fHK"@p!qhkZ+DR
+3cq1CX@`UZ5"05(p3V[LeZLddUbKB+r6Y9#GNQkNcfSeT$(rb)ZT00Q%[6#GQaiV
+QR"TXXVPp6DDi1"TE`h&@2-pHG6XePFBaGRQe13)ISQiE#$9BJ(MYDC``aGbcBB)
+!G"6FQ9YM)Lr5)d4EQ4VXk4KT8ZHSiCY`YR`)9I6j+KVm"MA3iV"@UXJDQ4CUCFC
+0TTlkq689+)qLC20&I[[`G-`DF*e2Zla$2,m@EJLFmkp&cq'PT5eYGbqdPl'HIq(
+#mAdFrQG%2dLk3TmmaG$M-K0h'N"S!epQj-G8EGdD@(kpHh*,'CIR1,NEIACpf@[
+RJQHljaB!bqe,PP*YDXR%Z&ml52+B$+4TE!EcYSDJVK%AiMYMX'%%T@[i&P9SY+4
+`B%6))CX@q"fl&+m4+2&4-YF%T1#J'h&G-!0[irjm`,dc-`qhdBB&k-m0GrAp$)r
+UcUY2""ZcN!$0*e#ZTKZcT1VI[el4@cUP($L9M2R!RM2Nhh$4Jap%`*j%lCAC)B%
+%Upq,`L(ZC&N9hAe[9URLC@3S-`r+@Jc8"DL)K,6eFcIPike(-2EY0C(6rDNe8a2
+F*1[Gk&Y!efC3NZV$8kUXddfTmSCrqiiiL4B`ei1$#DdP$E$[F0XFS+0CjJ0(J4[
+AGeYTe)EI"%$3qZSNe#8)qkmJfiE53mF53B5U!$3YVfKqX@$*@CD[j,dfhf!)PCM
+lq!aCVl')6c0%-"MF)TC'p1mHKRIe``9qChHJF)@8Q$e1)3&f2*IL5,Ci4YIE)XM
+VP1AMPhPR%aZRVYYHa)N`C%,JP%(c3f6'i+1#)!IdD#Glq,A6,Ll@c!fFSpl4!a0
+pR*5ZBh4ZrZMr0P-LN!$,l@Y')!q`c![iZi6M)Hh"Ge5Ke4JB44,h![5a2fM%5$H
+#CB&1l'T[jj8c9@Uliq,*PB[$P$SF!9c)-cZNYF8CbDXk(B!V13$YLZ6#eq(VcDa
+*-`$@afabR")H!C,M4UdQZEDVTD`Lm&`rDTi6LZQr5&aG4J$*)pjhMPiE,-i5)K'
+EN[2VrqjD(r-[q+A4qm(dE$Gql85E33EEN9ANNMRp3(DkTX)Q5[RSRY"UVlUb$9a
+f4eD3!*VL,#qQhfD4&6`iPhKGrCAl*e`S8@8EG-!0TE3BYX)IeM+I-JK90-EAi[Z
++UfMV6I,1XF2+IS(pAZ1j5Klp33eB*Q5dCA+MlDa`20lMPE@05k9[lY&(%`cI&kI
+aFJ6k$'F&8klP+mq3!)$1X6!3)&peih8VB1Nd#`f[+d4G[55$L`X2*aBR*hP*b#e
+aTD'ePlQlZ`CfTkf[T8DAqb-b18NeF,Z4[S"'DN)'3dr&dBHcfX5P"*B(L*14['2
+ZAe4D%0I9qFJd*pUF*HJkcPIh$#iqbUG)Up"K4NVLeaZbUQUT")8*!Sj*6kek+LV
+l+D2X(8i#h3C@ZZCJDS9a9B8k*)-1G*QMkDBCh5b)eYG#&r,F3Y9R)ib1)NHCNK,
+QcLN)SDNPfIh[fNN#Yl3RN!"9J3H2HQfl0f9)e)C%P@AVHpaC*jk0dq3B9D@d$Yp
+D*[8HA5VF0,6GV$C*H1qJJIRJ8Xhra"SH5b0P9T5Bbl2$q06K8'H-E)4pffbmSQD
+Xak!0GlS#qX@'pb3H$bY&KEa2C"$-4`Gp!A1,kV5h+aH!RK['U2iDY[96S!He`6)
+LT#K#hA%-q3QD*!8F!G(cjHd-@PXRC2,!SMS[B,DF[qSZ+KJ(lXX2NkH5`q""qIU
+j0X4+345ZQ1NUHmP"9BD3!0c@+V(@Qi0iCjMYp&HTVkpJEK#66eKT`dUP1G,0q'S
+9-48be!*[&103DpQUiL"Tii)[Y3mCS9B[&pqbR,c!kFVqBfUDGN62N!"ZYTdh1a4
+rrJ2*LLZ0)a&2XT!!bppa2F)Qq1DCaV4RIaq*IQ1(N42YD!M9YL&bIr61C9'YGaf
+`R9J!NQreqQ6ULS)LSk`*V23SK5*e%0*pYJ,NFMkNIk!!*Hc5BXSdFq,Y,1(h(cN
+kcJrEd1PF1KfJ2#RPSYX+G&i"mPc6&QHG+ZMF'TYpiVH*Gi"AVrp!!hHm`j1HSQL
+f&!,qHS+hI@Qh0Q*!3*K'T38XB$AMk*!!9HpbqMEF@TjHhUbm1h%Ij1FYB0VM`'r
+VJQUH,iHFFe)i#DdXr5VN*#5LddQ+"M1VZH3khjl6GkG[9RKITk(qc(G#K"#60&8
+TYUG`59#9%e,Q%3U#Nf!bXC+TV$K`6@Q`$rR6X+V`#eDSMTR46[epPLRMAP*i!Qm
+8rXj0"3D-6+Q01picSV,l#6CI#8IMm2I"09maQAmR[)m5T)p)Bd#qC%(8a6Pf-5,
+Na)L[kT3P&Q6*X*Fa`#&i(&`ArM[Q@1b#!lGYMbLr$Y"$23R($)8qdQ*aMYfJhEb
+d)2q'Rf+@PY2B&J5%@Lj+&fCdMYb*N!"&q8MXVrJT)K[m-5f#9IfFVJL'MMLR5Tj
+HiilmeVTXMN@R4HbrL)#B-jpfZ"4'1EqTYZMIV($98d44$TL(-DF2H'RTNV!Z(Nh
+,SVl1jNXJ#iCHZJT)[B5"VZIHif8HqkVZ`E)GKGYZ+'Bm['"8MVp`q`G`q)&"RHi
+i5"*dKj1#hXMM"H%[h9MqeME[UIE-%dRrUD"lr3d3XdGb1%M!B%QeTde3)Dq,[!@
++&31eRX+$,lf$ffXdVN+Vi65rT-9!`&PY`2,Q9A,m5cl')'ekQK*"kk0-kFC5A*4
+lH1'dHEH6MpV1p3l)iMJ411#!c1BL)qi(lAS%i$@N-*HQmFUScP8%",Q(2(r3*e1
+QLATGN!#T9*eU-dS`&AI($!A'AQi9#%heH2NBB8DfG@a$JRcE!cVV8TN-L-Q*V3H
+%KHM2acRVf*rP)HfHl9mVlF33b)(pYEMI@@bU!)*5d#XrJ)UXd2DT`LlXeADlD@F
++V-'$#`TP#N5&SSf%K&+05UY[%9HSLVZMTNlF[0eCbB4$$lL"",8LV(mbYKa+R*b
+8r%"EU$P8@F5a!K"T,Y8ETVM+XF!@6j,)P(iTcKq1rU2BkidXC,Uf1cYFFPaMkMR
+iiJ-r0kN!c[@(2V3(bNEN55"b)S9$""Je%E&Y$c[*VPi-l[S@3+jm4a)"-qi&G'N
+Y!q[L8q*eTdabdiVLNKaZPB6Slq)-EL!&$+I5%l@'@F0m'K1'!Ka+qP`(5Il@ZDF
+ZQR+LPre149@ImmrrQ`I(''bKPeL54RZTCePJ*9FrHN1C+G%Kd1-E92&r)S`kHA9
+04!+'ZK(S$djS$%L%Y(#pMC%'F"-FGSQM4aKmJbV)Qeef+XrYfY1jJf3*6e6C0jV
+UHq,,qLmJKh0Mk@NjNCT`D2FmCk$Q39RA,PkpJ6e1',LVIU$85beLd1QJR6a$M*[
+mbrYq`$#Ir2NUi*!!aiC#B49bp`,TM3#Ed8@MXY1MUF(1AFI&aar#!KFH&BQ6[*'
+)(-rj!2hCLe)Q#*NKKNe$ajEVlbHH&'E[6Sc#qXNJ96@h2*19HB$+Lc4+S6`[P@%
+[aET8@A`NS[e"0pUiXB,mTpYpac+IIamNJjTi,VGHFaCBeH"2X0PfCaZ$MRjF*2b
+3!+`109!9VaY+hFXiiDFkDR+dkM2pK5[M"4#1B,mUA@0NN5N2DV)62p!%iSSGfNk
+[$eX[,5KR)c6$F1P$4PS&lMqULQe1TXm*+VZD96DB46@b',$SjB3MNFr'@a9`GR0
+j,6e8ZV"HD3@TUE63`+I,!kb!U[XdS9+*IE0'8&$E6#eMacA#LQFT[$L#9E!ip5'
+#E&HjcI2S&!iL6JJYT&V9JQ0`dr+DY$Y548RYFm+[SMB&ST!!HD-b9B,D`j!!aMS
+I,MfZ3a+*X[-pLrQTSb@1!6RpbZZRRiCX+C4B"SGlY$-VJR,M9c3aKMa1jdG#FLf
+06q6"IFhlUeZ(KNC-p,SVCe2JVVf)B[)q3b*#S,6GBQ0'ZC300M'CERdCG8(+!4$
+Qc%RCV12`de0%U4Jkqq%@19abalce2cr)-f462hNBlYV-93qE6L!VrhZLcBp!5"@
+#G)[aTf8bNIdV,QldcNH&'hIAfjmSeik"hr@)f&*iCMm[R%`ij(2$d%9,B'A`mVX
+#me8)jcH+qXjNiM)"q%BI!cfEf6*4CRG,T-dQ9-QQV`fld0kcZCLEjmpK[S$3Mp4
+`(MXeHFh0hI(Sp0@FZrr`Ra43)H$!qeKqIRa),8RiQF+%M%(X4`$9cbB0h2Bf##S
+T6r`'H@h1L6**K510F%2-BYBUDM5G-#&X9fPB3e%h,Cr"D%hCZPcP&&QAf+dM04l
+0'TQ`'8Tmb'699J%G@)L%QEpdDp3H-+jDbK,2"KYKam*rG%%EQ5deJ6)K1JR%p65
+,8T(l)ArCTLq[ZDKSmc5CRP[#haYaXdV+33%d4hXj(epCDp0RI&Y&"irh(kmjBmf
+l"@qSlapPIDd5@CTRmhIGMU$ca8TUJ@bEEfmrKm$DYkSMA%%%jh3lB!AmVe`P3Nj
+iHF0K90F5V"r[$U2#4SJX('b8Bqf5cB0qfFe(V9cdS[FFa5%SD6mj@[IrJ3"%qQ!
+hEF4FhpR!#a$',h)rQ%a1DkBM0*f"0i&Qlb*4i`IEK0HSX8$lbL1[HZQA6$aU4`!
+68r)UEANMl#JV)6&dVV'C*YdP%i+VJZeXH)B!0)liMJ4DP,(6CkD5KXY9Q%d,qdb
+k6UQj)ceQlh[98CTKXYih"LMmF&R&NVKBqS)YZjI$XMMEEqM-p&5ZNm2rZ@qL8dr
+R9q@3!2J,22*aPjQ)0A&FJH[aDj+Mqki[j2F%*iiH8*)mE#p8)B58)0k#KL54#rc
+@ZE1SrA[`)A[JB&*$&'0%l)LJei55iRKHDYS)h,VMNBEEahhV6!3q2r3%2*Q()Kh
+H-HC@h9VNXP,9G)ceaT-QpHXQm[qRKPSL!m)PGLQ6&a6HYcjKhNic*S@'f6(q)*E
+(1bVm12GCmGY9Y&F+[%KD+LmDq8mc!,eUZ&#pIGK2,TLVQBMM%#c9B#erD3iGYDh
+&+j5MK2L3!1[EBJ9hP$QEQAm'P+'NEA@p'jLG)Tdb!b5GZk,%YbQE!6LNm[%R6N4
+B00Q!Rd0mXCEq9'a+i#*MYR03R8$CbQ8+0*4S(B-eXHpKcp+E`&VA8SrqZ)hL-!D
+i9FkAmM2`CYNJP"9D4K8E+5UeG`bR18&@8[aG+b@@hZfjPR#XMl5mJb@F@G!4KaG
+&TN59qhq`#d6L4SF3J53H"ZkYNekcMhLq`*[KRq%1GljMrlB5FL+r8VGi4IXm&`$
+@3HqKLHYfejMR[')UGj5kAUbfUArfme%#Yi%XqfU#%6HS!H0k6f6q3SjbBUYcN!"
+i+UEe#0JK[LV*86EZVeE1,IE#!%VXZI6l6GRBREFKb4446-58rpGUZ2Vq%P1HbUV
+X3N%L11k3!&iHLek###f[d5G(P-Km1MQpJH8L1,J)-T0A3JSRf$hdC6j*Pi%)1%q
+U`T154B!I1Q*YQ&XXFH9ZZ,Tpd8E1(hkaGe1$#cIch)'Dj!63mLrZ+jDQRPN8eSh
+ma@0fm3N(GaSm*EB9IEQae[c'L+f,C6Cl5'ZIk@$H1[GYL"L$BpefZ(83lE5m4+Q
+ULD)JXV*9NJ8L96Sq8rC!0!fLE"bM(%Ec5iL$pDe-F3$%$,T(3BZ$*"'5+mR)AZ(
+jUNQTYeTrZK8YPaB&dZ5DH$dmYI$LDD,k"H%`l3NqL"ZFNY`N86a#jAiiS2c0X[&
+Mim-Q'V[CXeVY$"#)lh$8HVK14RQ0*2C!XDRUl0CFiP+#cH[eieIdZZr'VhPaGIB
+q+b9KF#V42'U5"rIl8lYZHRhc806jrC3,bNkJDA($Ga*p6BE19SaPBrVCLClk,9h
+`&*JJMX,03AK%XYA`cd'3!(UfBSFhD@FaV)UeTNP`jF[BG$"C3%f`d%#2mZjpd4&
++JQ+da@!(m@H3!-6cNPGBV3XpY0NZm5ckFB5HR8E+,df#@Lr)aqCX,4Pr2#S+FNF
+KYMf,@0N#$K6ppBRf`G2k#,BV[1$9PPq!LT)PACIGBe(0ZcCaIQH+U["5Hl"GJQ(
+XM`48&)'Ie8B([5ebRb9Tr8J"[HP&`'Q2)iGQQEHLfaFl+E+T"@EqL"b$BTBJM`#
+NTUmQe80*Se)P1`rIi@(Fd"+GRIY'5GK55a1jS@m61'0dp9E!DQ&5q6$e&q$H,jd
+*kJ22JJk"FeCqcTZ#dqY2GhFTpdAE5crdc(9d`D$3F,iir#Cpf%0%(V[GkRTICGX
+#i48!$S1JZ[500"US*'rC[pl,NYheV[@ed3MCr'pXF5IlG'9bT`"SCPN%pAGX3,Z
+r#B%d'-%UYc-pk!0+KYB%V#8p!aM!5kT*DJj4X3q!+k"Ci`-'iMS)E4)-'FQ"a42
+G(1N,h3[eL[[9(Ai5DNC[U#5&N!#YiY0p#3ZV%@JBLC1f0*!!91M"S@A"@YYJE9V
+HYQTdk!*`RD0[U#c)2qa+AK("6KQ$[[*VSU8X3`26!J5%+Ue4LJEd@1$&V)@Rp'm
+dSZ4Ib,c&19*c"C'1H"C`h3CiMBS1e*[L'dCEp%I$PF[`DK'Y(2Y1,qN*4GiaIT!
+!53@d1pMNHA`GHjE5PTXE#PpD@eJ[TSM&1bLaKmFEYMkdl$TK9@"TD[UaJrELj6`
+8635kG*Z6hNciYcm3#QrUK41HR1eaBp$-MFdkr)BlcR3J5cL,AZj+Rp+C-IaI%!m
+e8bQh*8'PL4XUbp[Z+pBZ5P&l++8bRbBj!JRqmQKJGBYbL@5UGLND(pEY*eYIM4X
+EbFj"lR+kl,L"q%+)Lie@cq+S`RY3qSSj4[3BX,,0(P'&8a2Y$a,PJr5"GXk,,,&
+MMi,ep45eX0,68a6-V)LX"bdil5YUkma9bAfLQdY8jr8P4Yf2G2ecULJcaRherGp
+c@NILDA(03['PJ'XH-9djB%!03E1Q`hA3`@'3!(Bm#K64J)@F$@B'#-9HpT*08B+
+HRq3LkZ92%+NU8p1p,#S-dMi+"RR&6J6YVTie$&JXG)AejCTm9c0%EaBL@qRRFl,
+XJTM&h5YUdQ+46GU(ZKk((f82ijj&)(L66`X'L1+'[1l*(Fi2``(i6P,6$X5UR1q
+aES5c"U)`Y-C"r%3#"Rq"MAVIcACND#4X@2b""6LKY,%UK@HG9,af,4l5Y!RZP)E
+3XZEMPkIQc$JM2Akbk1G9d[C1lDCG4YTf126E10A8kC'McbU4(jAK4JNZ8Y6d-Ad
+'$daD*B!Pb*@RDd'#k`rLV"2icefe1hcGQH6HcrHN-Pdc&cNkLMc24Q*A"[&aLCC
+R2fAK6E3Ej)+,P8kUJ'6Z-#YhIG#Kf[-5d*X(02Tbq!'"qRdUX$cQ3EqUY+lEMbY
+dVG8Ic5bJ3GfDA&UCc56lmBC[1N8cS"FZEkhR#%S1Zcf[CDSAS4dHHR6jVU1p,"e
+M2X218GI2j-QKIhbIHjCjGpbBL63cVMiPe40-@a[i11Ba#Em-8qJ,ZV"2+McCQ9%
+(ppj+&2!@eC0'+G@hm"F'$QLI)!C4064BU`S9GAIYRCU3!14Z3#d)d9jQUiSh6Ej
+B$*GL"HEZ64*GcFi%4@"HMrK'R*lDI3CpLUc%IN,X!Up8+G0AUT8B3Umk0C!!Q'h
+D"A60FHcM)b2$0T,l10Mk@S$22bC0RQ)'RUTRNhm6UNk'pZ[V*1REj8"CU9qa0"*
+$Z4qqifYAKqP65CHfRP(UMl%limb+Jm2P%j@3!-f&e+)i)!%KAFU1[[Pr+iVE-4D
+4rTJ8T"aha+!l'Y*hYk!UrN%ic'INS`p`b3RAHR*1lqLSLY!N[frpApc5A$GPH[q
+hEE!I&dkC2C5N'U6XZB&"8EB4Q,$,@Y!ibaN+!T2mi8SV&DQQhlM2+NTdRTQRTJL
+@%JZV'$ZPEMIMk,rGeQA)CK!&RJ320J@*lYil$6SVbK,Th)8f8&rI@p*fD$'C3Uh
+X`JE9dpq[VrD%d9'Y,lc)eD+aKe9cDKDlPjqMB5ZkZ+b[D%q1[8D@-"f#(V%i#0X
+`+aZTZ-Z,lX'Zb1R#k[(SMlX+(q#`+pqe'qRV`k$2iBCqD5cZe&+Kd8KiN!!$$Se
+E[i,-K"IKSdk,Qd@3!-$kR`a4Gl,E)p-@"hi+'2(S%#HrbADpEhCUBajD'ATQF[1
+kk)(f0L8idj@0%H[L8"L04GrV-bAb`,#&rj3D3&CNjp(#K5'Dd%IRb!kAIq4hCp4
+*d6k&6!p'h1b%e9lEr99FTS)&XbS1QHH2Tkb8DiVlphU+T0m`Gj0Ljl#pkSe-G!M
+R(6EPZ8(X1Ke48bT5)T!![PdJiGQ4iqK`N9r!$pVa*r,Rad(N+USD*dCAk@D9ApY
+6)H4mRC50K3qbMiIGCJ%lR6@)AM3XpF-Sp+I62%!qqM*K9M,HSiXeA(@DbS+e!2*
+"Q,U1ZPD8Y%Y(kGaGZXS1r,Zr`fF3HlKa!&%SES6l$TMk[-P@a)9AG(&J8'&VYQc
+SUd+1G'q-f!6E+SHr*JbcEX$4"D5EXN%$N[1bI%QJ[G1C2#LNJh&NT#U6dNIbhPR
++ZqZb@IhlJaI1V22q#5hqFV(393eHS5)C&jYGbL0FJ86qb1b&J6aP#c)@`(Gf("0
+5Y#B!dS[b'%UK110'9Drec1*J(BiD80M--p1'V*c6,Q-EGq[MZH@iV,SLN!!pCV`
+Dq6RdJjm$ph*L(CI03C4@%kCQeLeT#4GR*&h[PI0RL%IC5UL%,8'1dTJk1-Q0E(h
+!rX2ZUmcKfbS3)d1%R[kMA8meFkhdM,D#X)2(T+r+9S+BPR42bMd,*IkqJH[CJNR
+&JPl04c'2Al[aGp0f@9QI6UiYh032IhhieiB$1"mIF#lef+4&`Z`IX0P,,'5aI,4
+0QV3eP6@#SH@T4QV"p[ZFI#@-P@8SH42-jpb6+HlMqPQae(e"JVdVGZe"9%Uej3Q
+`J[dLdC+!E*@-0#UeTcQHNq'ae4S'@)@-Y1BQq2-T`I*!H[bi,4b(bVHRRG)+*AA
+,q+6a@"jd35")HEI`&L*"6%SBa,mDS(Im[H*AY*XA`j&LGi`%@hKaK2JVVEe%&6d
+cQiCp)rPfbXGY@%RPe3"CBKBU-"1)H$P[jHA`NdT5++KA)rkJlI3$l`,45X@3!-&
+Ei[E4Vr3Rm31"fHJD29&RY!!eZF*@@Yc'GJEeBfr%Nla*3hka2'Z!!!lXHbNeT5'
+8rAFD+UpF3$)IU`(-!G0)UiG&ArFqRN)[,Rr13(PfJ,SP+K'1*d6"LZebrLGd8$f
+cQSjBcREaB@K-`)XDhNX2f,jaBKVBG[BA0IC%91QfE)Za8rHc#!)9G9Tk83ceXkC
+Q[5JmHhGJ%d0QfYMbpQ"[PVmca59#qqm$TP1q5B09j%+1TYQ9G!aEcd*@,Hq$Yi8
+&)H[Z[Z[PQ*SGSSdecV+Q$*1,+43TR1G3C6B3-XhS*%GrlDXMHjjp5D$ck8M@JPG
+N,m2S"K(Kr1ql0J+Vc(&1UE5GLRCVEp9[RlpiiXVU@kcAERFb[N*rNZ)pFUL3!'S
+k9Z1j$hHFe(22lP`clZT$6"))$(9-p8XST3iB#bF#XlGDcU)3Rkr*NQS+BiaP$P"
+89FbN(%B3V#,G5GZlFli5cfD&j`Qb5qRZ2'i("ed&bc+cNlimAaVcBBcUqP")'f[
+S13H4-+DPiVc#+l5SX-X(G-Z+)P)iS0"p1,G%eR8R*k)bS)fPIeq1&jL3!-Ee+j5
+'`8C)@#%e)peYU00LiAJlZYpiGUQ"%#AdZZUpfmQ"i*($#RpI!S-a[DibkpTIFAr
+@UBTYjX)Yp-[2cfq%Ta&qC,+E%V+$lihR'@d6bLkQZZ)4HVd6N[,6T@G6'IJLDPP
+r&92Q+3*V6cSNEm`f`G1HB0R21,*@jpEZlXcKUf2'C5SE8TqUq4DcHFjm+J)(1dI
+rNpNVE4kD+KZTjPFjBRJT0@Tb@@G)K)M#ZH5Mq!"6J1b'MSBbG+"Yd0,T[3TphJF
+*L$#Z)hkPQ1KBlLUU%V@pjLPI@1*(KhqiG)8rp1-9L9`,(Me)frJeh-RfIMUP#)k
+F9C!!0Z%I-*pe&a6H0EH3!"h['H4mT'19MRkbpGLlB+'B$D$`eEA#+j[FBYkh2h9
+aeh,aMF3%T')Q-`[Q''Y[#aMXF&$R)h+C$-CQk[Ckb*[IS#(L#168[2l1`R&!PJa
+a-N-3,Q,3V#*l)fDEPjXJ-Ep8E$c!Y4&`MF8IpSL[lpI)H4%pr@+-85,(UQU$mY$
+mYFppT,)Y`j,VJ*r(&A-pi%MFZP$'4hiM00,!5N5cMrN,FiLB(A#BRrq,PrqfeK%
+kQ%CY3#M`XVa@CU8q`XBqL89q*hH9l(J+'pYi*E45pcXj"BKc#i0jahm4*#ERQIQ
+J8X$q-C*3VA(p6N#GaIQ"p6fXDfl14D2K+0'![*V"+*&PPeG%1rRa%+*X@f8-ZcF
+fmqm%c!hI*+3[$-)CGXYD0GIFMDJjIS"hCaEc8GDIbkMNdcDDpl2$2jUIKaQKIe1
+Y+%'QV5+5dKMrcdRiKNai6MId1KY[5HFHdVapX)i&dYZP*%(erADPjJQ8Q*-hVEf
+dF!&G"P!SK5RLL!EDrbj(cqjZN[D(bL&"DIKSQlQB[`iVbB&*cUXK81fJr'Re0SX
+T'64*%HVb0qkFq&-+EQ$Gb9!d!`8c$[jMbq+i`r2mYNNIM)rAjA`$4#*,9c&mBVP
+mM+!eKVkErVS1P%0*f!bj3'aM@T6,(8RUXiU!dRcABi9HYcek!X6Gk+A1*5"h26r
+&Yd0N"rc'+*1Ma6cK8&,hPh`j2AK1EAa9*Y@XXd95*l$LCS8RZN[S$$GNZC['dR(
+Bh9lDSr@hj*`e(D-'T5+rE'rZL#QR9m`C!1l5@+@G--''+rT)2B(bX"IlMGp8SkP
+&Im"a-m#9[C93`"E!KY6FcU1T(e3,h"f)&R[rd4dkbHr(p36mK"S#0pC@Uc*'b5q
+0(BTXQCZQVfNcCred*G%qm9bbA'X99&!MQ((BD*5QjQZqA0q$3aHBKpq2bdm6#iX
+2%Y4&V%%*%-hE+FG!k&dCY$L8D$$3Ip-Mc4AHhN#jfCYUpGGSl[pKA3jIZ4A-jNM
+qD&9D#Cd)JZ'e@6G'4MbBj$m$BL6TPIGD"L&Kf$5q5Dm@EU*YRH@fE(cGa9Ylj44
+iC5U5pfm8%fahLR-8ZjB&)V+MXf1bQ`MHIPG&TC2I@2K2aY4-#RNBAVc'RKGB,%c
+4#[[fV)YJ"204YTHUikar@m-2P0*-,Cdp([DIBlT1D+3)SC'FM!"d53$&j86$BTL
+2$@T4Lje)FmXYc%h)jC8'[e3rF#U(F(cmcj[BPA`,fHDH9q3fVpCj)CaGGdpZj!#
+89%iA$bJr)Ncb"4*Qlq0(fb![5fDkb9dZXFjZq)4&R2rE14XekjVBj8frfJ+PfP#
+5j*h"i"NH3prflPCp9@0&aaqY9%pRqS!1+cZNidjMF@`2NF5iaL+k6f'Gf5iNLfU
+1cK*SP$M2qQm$%,jYQ1-`lRhRH2X9dq!&T3)2p,frTQaUUlLCiAE#@pkMd9UC55[
+lp!2M9&N5i5&"a%S52%#G%3J'9C8[[l-B3m&$eFd%M(e5U*URDpKpI#CEi-qJFSj
+R8M%[Spq9Q1[Uj2IL5NekJFi45KdQ-3`rkP&'CSiC[dj9RR@$MT&1TZQ![AVhEV[
+ZJ9KlaU4A-EXeE[NThFArj44*)16&45BU8GG`8bZGPVIZqke6cljCZS(F*ZZeV%Q
+(HB+0)pG&H@Pj8$8aU2NkF6$BrR61NaddJ[@"q`YLrcBqh(qkj%,M+@p@d`"SHjS
+'!QjL,[KXkTDrDLkElY5k[b$[ebTmB(5i9S+R#NAMD-DdL1Bh)kjj%jZZ6lA$[@E
+e'k#G[CDpLb2Fd-b5Km**"6Ri1qMM#S0&UGqB9pEQcMPIUU$hq2impICaZ`aLm*6
+dmM8jCR)LBh&")%&mA`pTi8KDB[`f4B0j5TL3!*FG"d3J'b(MBE&-((-Yih`!(3S
+C+H)a`BrC*4GUHU!qULMrRS9-Zk2IP3!Vc&PFZfj5V[a!Y!R181'6![p%[bdPVbD
+6kR&P'LI0ji,X9Jr6p$1LFM'*b8&'60)JI3"YkVMUGjRNBKRUdI6&B-afHf*R(JM
+-0'I"R)%DKCJrSM"crZS4qIAjMHDr[j+MhJJ0[IJ@`&#(Ld3#dM!Blj[Q8%cr8RY
+d3D`QT'(Alm!R3P49%5"Z5b9)!VN-6dQPT&rja*plIAdCN8cfaG%)U&VKj80qA2K
+jX5T-EV)C&YSX3U)#A(ZJC(bHj!a9Q9iHHRbqPYU!kJE)r'c)[5J2d#kSafY,BqI
+)!iJaR+Y3)TH5pL'GbGm2D9'C63j3#XEBIpC`H1A'[9B[!&`&A&TdQpZT`FCFaSN
+iK'#PQBK`#(&JKVmEEN-1*MVX,892hqAZQ6k,P3TI&KDr-@iJIrLC&5h,8*d3R@c
+'2XBGLY'Hj[VhY"+A$R5SYCPV[T0akqX&`,Y#RECl"8+93p+5Z5XEGqfB2!ml92Z
+bQXN@D8m+%H2m[[kk!LLe8VX5ICQiq3erq0fUVkINkHISGB3QlGLDTqcacrEf@&G
+pi#"+@E1NXT@E'pFmk[DHq%*kJIUfJre`UE'X("DC-`Yd%[4Vh,5f6AkQG3T@2&2
+p8`Gb1@RCi"!`B94Y%bjFkmlfl5Ve1$V(m$VdG!`NX#5FYSRaf3*+j6$D%LlC6TA
+YTa2'61r*"`6e2IUbSaLJ)"ra,)E1Z+"*M!M9dMjC51"*%HiHSCC(`qpN$LNLB&k
+V"lIqY#(1#A!cSqLDAEdjr`qK$-`U'1PpZSapXHiCrrZ",4iRMM[*Y"`FjcLfh+D
+(JT8hLM%J2,6hb2%UV'1M4rmmY39cC@GqY5DdeiaT0!SAi1XMLX'cKGFGiYar0U"
+DAUpX`kS$06ANc%%j4dq+J[[%fEhBkGPL'YZ,2#J0Y8IkQ4'Mq%r)B98119A2B*'
+L1q1'DId)#dXidP[35!Y6AFD3!&m'D-*epFQE-r%Q69SKIEQ!i)FSM4ZHe48R+NU
+)-JqdCcGASC'NDD1k,6XKm6`qhJ'!Hl1qLDN#h"P!@@'Zm"r%(qZZH'c"`SrHTm*
+amZLDRV2+J,KX[G`$pb@B*hEaN!"e24C8h%XK+LBqQ!Ke"m44-qG2+'`F6(UU[(-
+T9BbkR"rq!AQ-25c58+5h$dT2qRRRPS*pRaa,CRZPeeDI81mV5EkA"e$hUc`qX'G
+frI3Cj4[j'aYe%BTV#TIf`V+qFQ5&)MP8P&d-E[H0ePI[K@0C5Bi&Apb1bE"RUKS
+MHGDdNh!LKXQ*S(#CJ%[p"`lZIRh&%!r"I-j#q%%JiGN0)Zhah%Y#@J-C[d1iNJI
+cU2Zb*&N2DHH*rq,I$YI(D05CYq)-PdKe3R$KTZLLE5LV$c)82Z(bFT3HlUK5TGC
+)P)&0DfhEGUVllN$iISGhB!kSI`#Idd&6Qi5h4j4AL@'!B&0*qL1Q*,p(N!#E)Sq
+@5B'3!,Qm8e#fN6%T9$iFB2hcejM8(%lAICmE1$M-)ZBaScEUASIpQYr,VRZeCNT
+Jh-@[MNfim!%N$r*m+FE,rZc!Uj5PI98Pq5ZhXMMeTUQ1Ae*PS2b&+`-iMDlSXFq
+lha5!BF8DUmV5J1m1bm5mR1#T5GUZf&N2"fP!5fDqJp2r*0M@ejAMk!H93Yq)T$K
+ifNFPplRRB1#r[84bGS%2%iEjr[F&hGq8dkYf,[q@HbVJPUBG@Zh8KX!!R9ElC8I
+#NC@)#5q4-*1pacqmeYd[*F96jAVZCC1SFTlT)6XT"aV3m0"M%eq&,jJcIC!!3da
+fF50Q)aD,SQ+h(JiNdCNp@rk3!$hLTlhid+PXk@A$mBpGDkN2F$NrD"c$X&Dh$`N
+3$VRR"eS)qJ1h3jCkh4qIXJ-K9XUFK'a)&lP6q#VA2YX$`MiTTk,qUQA$IrK2jEI
+mr9RL@bPaP%q`GUe+J(Ha6LV`-C!!lXV6[hV0D6Ap#B6UUFqq8GF,M[@TZ*Z6H'j
+3mKIrI46DP`5cLA@()Cmj"ll)2V&ErC@hU4f-*FV`(&pqfS(c+rGmi6`0TQM8r(K
+Zk,23L%AQHjKqE51k''C"H[qLTN%E-V+&bNUDSJEIZIMjcT41LJ4VAZ5k$Fb8eke
+U,RMBlrI`AB0[GIIQ11)rd*3VCJRj6`c`,fD&U)1mM-)#m3q49d&EU*jLka-3f-Q
+NKh8Bp@Ki9m-`Zr&9G`K8pE8#)`*F0$RcZDLe0[D6i23PAf-H+2LZ-+pUJK8X9dB
+BLi*$Fp)(-HU8dHp$hXa!+&j)9d*dpp30h8,*CG2E,I2V#T!!XG2LUq[!fEe*Q%e
+V6CQTJq2"Q@-CY`1N)4Q61F*meqJa9A[,TXMD+SK!lEfb'LJm-YI)S0'b"*Ij1Bj
+H2$X,9K`J2&rA'8AP'+cL`JVThrm8ET)mlbrf2bj#(pCpVmj6EUJdNeBT2FSJcAP
+X6BE'Q*cJY8MLAK8lDecR1q,Q`h'!Qf5VMl42F0qD%SlUbf-1'P+Ch(L#+IZDRK4
+p,k2SXk5pd'q4j([k9E,qF'dBbIDDA9c9I9N'VDX6q0TXMJm9EYAG2'"@dFT!ah%
+pRPhplcjH`EPL["&Iq0#!IEdIpQlKkkCjkHCHFNHr'-0SKRBH4AIF"2b#Mh+)#B#
+921B1VFLI[e*1HZkq6@ThE4H54NiA@"&#'(Z&#5Y6#cDC!($J#+m@Pbp03ReMPLp
+0mpD8$Xc-Deim6$'3!%Y4"qe,ArP)kJp5,VqJhXaYIVq$BVfHpMPfGCH!20AFC&G
+1MYejQ!cI4[)XR&#mAcN@*pie#Z0K*qR3FIbEHmiXLfU#RrC6'0*B2R(TE(#)X3e
+)P#Z'C[%J*Y[PI@PlKX@+H[L6Bi%8`$E@4GbZ54eMmkFa6Xa%A([3#kYVc1lYZ&A
+XpE+f0qq+1&`(r'4L5285Rr8RYrlXQL62V!Y)AL'5NHb5bX'D[hK!B0qPk1(jHm6
+296![CFlmV3DfEj1KhmF&pGp1M`HJ35382"6mYPj*SNV[ckp2XA8M!QF(H9MCP4q
+&Ah*Q2IKU'!9lDJbmkPf*L4`+TTLq$ha1lNYYpi%G6-FC&#A93R6J6KSMXik,8Ul
+Lj85CXbG0mHXZIr*Np5IGBqXJaFHB#4B8V9'BX'GrI80"eJpLAEQ&l@%-k`a9%$B
+lhheJ6j--EeU!9536G%UX21q5Ei%V!q"(LEHKpX6dL-S,1EKG%"QD(0ZNGXi++L,
+p*"B9lRpmcPDDlIZ@C#aY"FY!ZHq8j*58DlU2,16Fm-5)'I&i3ce9fT5$Ep0&48M
+iN!#-qUHRM@'XeaGC,@hqb"PpYV@@[(Vf,R+p'@HED"J6&,QX+-K(U"[2p5HVf9&
+9l(C$REJSKR6adb8'c6R%6A20D+0LMUp@EC!!"d%hib(Va#lKjT+53fi&rG-I!l&
+,hIZ&`mf"-LpEXH,-$0G4+!B$lH2Km[5VS`Ybjl#ae[SjA)qF&2mf+*!!m`bZVjQ
+k#[QGSqiKP*fQlmH0$2H1ciRR*&a-p$QXcKaAR-S09e&SAi&LcX(H6dc!6Z`Nl,*
+[p8X(9FFr%M,R1lSlK'Y'r(,1Kr@XjSUErJm,`X8+L",A"&a&cYZEX$)"XTZ&(5#
+Zi&*NY,3M-KCe`RQPZ"01k!I3Cpe2m!PkRA[[Kh8N8aLQIHp9,GmK4-0EU!(*`'(
+f@ajm+Qh8'imD0k(1c@@%`*h445,LB%CT6RaaX9dUEl)@-"()'SXG#)54SqG,,U6
+YqkM#llii4YiA9%N-Z+SHGarh#KDdF5Z4FQ[HU[@phZ&qMGVB1&V(@J'A@PX`a5E
+DkAclK9CHJJ(lUQTr1dACGFPLX+cq,3MCUEFEIIX(LT@X!Rb#DlV'LLK6VVbP'6,
+SmIVk`+IY5PXZZ(88')"m!iPjH@Ubf[04XM#1UJTh*"3%m"G&c-9Tm3P`Jl%MpC@
+E6@`hdq3#Z8(3I[fDB8G4'3XYJhD2H3I@0rXrBZ#I4[Y!F4LpQS,MZAf+ppaK1iE
+e#5&F)Q1`h&155[mMpD1hE#9EEh9amLa8YJ4#FNFK0phYS$RXd",j8,SY('(5eNj
+DKiE8qha0e-!dX%G(V(GY8KZLjD&[E[L5GEQi2aSCGShL+50G3BP,REmLB%%rDLK
+2q38APar`PDML#1X+13#1X3miZdKX#`6F[R#XG)ZdHTdk'U(dr1LF$)$!&0X9l$#
+CXUM+dbEXrA26jkTJ@TGN92KYNa[8kY#KVI*-T"J'-&Fr#RQHiGZrrG36BGCEr9H
+Kbe&5f9P#*#GdhJSU*T4iDJjGXI%lL6EL51&p+GUL[H6C,ik+c5&*0je!"JE,2e5
+kRfS2GATHLYJCi8&j%he9I@1PJDek8a5'FfR[JLZ4+"0TL'YVA!AZPMBBN@k[VDN
+#i$,bXa@%,i$dc-m#+RB6rZNCGad3'GceE2lU0p,iI@dmkaiDA`!I4Sr"meYfMQJ
+mL@iYVD6Zm'Sf4[Vj2Q2IjZe-5G$H+SAXTcBpHeX2*Ul-8d$R@-'B"jmLD'"a(5B
+KRHYK8QHY,E$X*MpbKX`Ja!VFrMI[5Ef8qQ8EmcjmK")j*aUSP3FYd@C2L59pfmN
+#N!#k-KBKefM(G"4KT%8keMjK$L3m10b-Z0#bD5Z@K4Mh"LT!fB,Q!H8QfJ5Ca"(
+LIN*f6+Z+ldYI34TQH4VB1,!@R)3qBH5L#dp5(1fVhAQ!R9$1re@NYT5UI$#pePY
+Y644KGjahd0V[iJSBjAAGpDb!FElRbZZV#i4Q88d@d*-$T(6+e4rFA*rmX+NjKNm
+iNU*RF+6bB[eb8YdX`b,[$0"J%fqJBjSS&0cXcpG6,cV*D!bb@Qp-9YiPGQ59LD(
+"h-")%F04E*i6hAGEb)f9Sbb&eKcSa[()[AKUf6pN+H5$6-[)Y%Mm!iT!ii)qdNd
++'!+`YqfEV[k(b*mDD-%h5L9%'V8pac#el"c1d-r+CFrG*`8m6TZZPl112(!CidY
+AJMV)0fIAk5QdPPMlbGB,[)IAr1Zmf'klf5-aG5'CT+'%2J,@PQf(L)i%bDSQS$M
+-%Eaf2TQiA2HRXU'MmN5adNi#0SJ,[kkR[pK'$Fr,-0hAJZD(D`SVJF5Q29CIK)-
+8am45MmG(m'5'fEr`8pmL'#RHMXhV8ULALr#p1,9''1RC"r)('-25%6kf*R0Qei`
+2q[j5D`[NVi3VJM,YjmVE`d+HLk6)Dq+EcImSGm&6VKFB@N!ZUXL0%2(*#hJ`ej@
+5ZFV0'ifY-L#UVl[M-YS5AIh5e(+j[YQH6MK$r`m3T[TTYc`eJYiCf8J%RecV+,m
+dikSm`J"eS$G[#DZf"JMKIrm(d@@(Y+9$aHKlS'-E1GHiB9TXP0'2hR,"[T)H6P)
+5PPaeRf(P*fkj04%,,ZX#jMb)jbGDNI,)j'M@1mMH*iG-j90!6HCJPC!![*[bV)Q
+aqdD*'U[Iq98ESMR,'%(-dPmpG+S#ee#E&[2%3'pReA4'+dcH2m[2#D%@Smic-YI
+$E20`5i8M,'#ad-1d$dVL&'Q&D'*p'6aEYZYmeGi8Fmq%G"bL9b-S8,,`IkT8RaS
+Me*9fhmNp[B1PPpkIE!!AQGYcT3+8Eq(#pBPQ5rUf`XJVH+QcH6$X,M9AcM%Vp4Y
+JN8XkM*M[pqL(GAp5#i3Jm@m@lDGd(!iJL%XLQ99LQCBFl`Bc2+r%&!q'iTAP5Lk
+jGd`f5VQY[*I3I4PiiCr@em,-r48FZ!R@BJ3c,N60[TG2ZrppR`X*B-$TJi6FXQd
+#aBh)lZ!V%q56qS39G@Z9fKe[kLeNmUk@f!qHJ1H"$#!h%Q8rb),c[[2mj2VKYF1
+)a60!#[(%e3%9U#[e3k"#bG3lUK,kE!pe6qJc[bV%VeFX@T'c+pFh&f%lYUmpSmi
+@ZA2)r9@'2X4NI8H4+B6MbdfVM%lQrM#Y9S51DDl!mIGR)6$5E$q%lGR%#3-'bD2
+F,i02UTcrNV%'[iqVDCLClV5e19MM!JlL-1!HX+Kr5lZp[qL`C`[@9%YIS+JE&Bl
+YLhd62f4BLP9Vi2de4TQXj!-,)3C(`AChX4"k8mV+1LI&@bTd32'GXSQfhR)l"rG
+Q#k@qLa4-d[JXNYUP+jFRY%)TI#l!)LkLr[qN06ZIL'Z5%G)Z6hpV#%3!%0Ci)jf
+`LRGc5$DVSV1[@JD,L!Z)Nb'aK183QrcH1')PhcC-A%-''@U*b$5"1VPrFT3U0A,
+Q8r9pDL%$QY2m9mPkG@r5F4kNa0Vq(pVMjhGYX+j8fZ)+m9e5N!!ZIlIS1GT&)Ya
+3-jdkhVhJDHI'``-1H91bPKHARMTjI*Y!S46XP0I-!df3!&i`T1N*Z+Z8Dpr&p5X
+3P)Y5kpeXF[e04b6R#B%!$ea1ITCKe(rXedIQ10B`hmIZJ@PVG)i)@p[ch!FY4*j
+,$Z$pG)k@I&4Y+jIP+PPh$cGJj@91+AR@I8DJ%mZmGIJUUrrL4('E%j*,3`h9CHd
+UTppR8m&`P$'9"DJhireTCbP+AL+I8+5EK+(SL34TN[+BV#3I%V(CY&bH+%A5([q
+)%Y#MBfQ1d'c@(lXpZ)`rVkdjB[JBbZBFU6heB&H9E$IZ3ATpi#FT`cZe(%k%M)2
+BNmVML-P-%R#c*VpV"P-B&Q4K1N!4Ar%XiIK&KSGl+P2DS3UiV(#TqC`i2EppNCh
+EMcXmKL-(YP[U,3CaaER0Ae*VfN*hk[Pf*Ll5JKdmM9amAfp--2J261J8J,%-5''
+4Y3rF%Mf1U1DV`rp[-J(66Z@&5M"cr8[8T)IIX@#SFQ[!S%iTRi#I!FdmJ"kj1%+
+*$Bi)rE`"ckYf@cUpfYFc40%%"8l5dmI-p*e%[hqFJq2QZ`Fp0kUYDJ94k9RLP("
+KI[1U3+eeYIcR*AT-@Tc"*Tbm,I"c-TKB!NNjbPdr1BHPJkI%fQ(K)D8Uj%SN`$k
+e6IkIRfBRq3J4%+[c448R$2C,IUb2rl[!dp9N3D5Zh*&jp1GhCY!fJAP1dfp3qH2
+mm%E$-YS&68%1ihZq[X+MJh[Ec'Nqmk%"p1"2JTb#%hf3!+(1i%(8)hN8V!*M,6l
+qN3cQUBBV`U`Xh59C&LfH(V#RR8ER8Bb9UreiF0f9A*BSY+63)mX'V-mQDGq2bXL
+`l#2jdFN`APrB0BRAH%FK&db5`%45le!m2#bTB*K46@i"B`HY9Ki8K`jCC1B,mdh
+4B-PMHUYkjjZ2I[IeIGfSjpPQ[UGC9Nl$X0'58mP@NeV6'J6"V9k0@8kjqQ,1"13
+)QD9adjU8!10YM44ek"k,LTQBG%[[&AL0KESMkDM23S0Kh@IE'bCVJqZC)R-*lQX
+[d[c@PaY)U-2X-pP1'T'HYYH3!$r05%$8fM8C6Fji(kcYeMHa$)jhH#`cDD4bYSq
+$cGqV&ccAI9C4U1+i$5PPcXmkL@V+UGhSCHT$AD(j+e5eG926lm+UU1fKiRmKf&A
+,UT1GJPBT($ZHLbhhim3#U[e+!E3r"%Gl!FFA*DVE3"9SVPQ!KEY%9!i00T,VbXb
+PUDl+qh,I2a%BjSPJ8l-@9"p[6[ZhcPX`K`8`mNQYr!9P@HS#TAXpJQddGV-9$-+
+1ZY#GlNI'$r$`C-9AUkP5U),R%d)b`636'91@U'k2rUVZ8Dlb*+SZMH#jhH$aS1I
+K34e&C%2(GEYHQ`H%hMH'JLkM1b2$jlr0hQPKSMcBcE6c-YeJ(5M!T-KFBZH`Vk6
+h'UN+kP8(5(4X'iPr$FI1YCVJI`R(HAZJeS0hq@XAY'a`BG&NJZ(k!kpD-kF&dN)
+dki,0FP,$-UEG&iN$@dh"SJMdERYq'[a9NkhD29bSYmkU)bN(9(dkN!$4DP80cI'
+$KpaT6KZchHHJI%(fhTm4`TM,4!f1kEZq2KiDIKdRTc9QFX1ePc'9-!F)3SPLi(M
+6iH,3fRD!KpqLl6b&,1`Y388+6CHP'cLZBl5+)FUqrH0!6J0eUF@![!Y`mj2,!BB
+VqdA6[Kf#,$f[d%eV+5$L5#RMkHVT+AmNRNMfC'-NeB$eND[dUiiJYl[$KCUkjUK
+(-+'k'dK[3,!AqGbk52Fl438jZDkH*Z9ZGlNbcDXqqRYbMRi46SMN&PIR3E-)3KS
+rA0@6aU9N(bkUE+G"HY4j1()N&N`T$0@49*L3!'G`T#TheBLaH*%r`E-FQQ2MQqp
+A,CGjVC(Re%2`Z!Z"c)$+F[L%6M-aF&S"(+&XPC*XZrI@bDf116B&mhGka"[d+GZ
+hj51ff"!DmN5U%cMG@5HGh[*aa&BR3TRC[8aIXFejDN5&`2a*`b4Bq[Kp6k[HSVY
+IFCcc%mij104'5"JH%[FR`@Km[5#mFKUFA6K)5`*)8`FbjXfK(![e&DK%L,!8N5D
+)NXk$I2j,VNC4GP)(i2RAb@2YiKhdYe4kNA5aUBY$!2HJe1fmV6-Ik!Ij*cAFh,T
+S)VA$YcjTT2ad`%"-"T*+8"VV"T*)VN'GcT&qjqD3!%DK+RkKli-KlJL[QDjE$UB
+r(M6m#38PmFQhG)m6*+lLmQiPN5)KjjSfc91#+R,@0r2jefSAS*%[#$+U8"hj-5h
+GT-%@mR&CiiDDYE8AJ0IaD6+TKBq3!!85A"Z(AVl@kMSq@*lEKX*@@3ie1&2(4DN
+B6aX8Ejp&,B0dI),jLGZq(+%lR1$H-bTHD&d*B63F-$hJ0ePkm'E&Q`%l9k$#2Za
+Q2Jf95U5E6p!V%Y3-jbqh1S9Lq0S1)$9Si2I*$A`%j8pfI8eBem)2J@)Fh@SFMS5
+LYd@!"bj,ESH)Ml[CRcJQ(@+aV`K*TKV0k9'@K"j&,hd(I*fD*%c-[d@2C*(+[Np
+jj``6bm@YL3FDB$,D&DMiT3eHhl`0b!YUL4VK$f+rSL-+M"9RUS'(96Md(03"2iU
+J0ch&$$R5CYceG&)bpV86@SJ-mK#r#AS[53d`eC[[c`VQ3L8-VMCk')K0*iJP!m,
+X01Y*JV"G@ZIIqbqEC)-&+1X!a49[EPf2hUT0c9JTJXCc#c)ceqq'r,UpkBEKLiB
+@[INeGY"HVlPJ(X5C5pY6b)[[e6I'rZ0mK4rJEH#PE+&Z9pkeIB#J,k!i$li%YT@
+KiNX*Z2YI5iLb,Jk1FRh%A8rlmcA5"##m$jKP&r3DAV%eK+CF1FfbK(UTh3YTBhZ
+E2eq`GY*jMD"C%ABrUSd"$88#jUN`5kk'`URNepkihE$'d1+IT)K!Hj`[N!#8*C`
+pcqjN+'a9RC16XI+qIZBdRRrLRdfa`Fi0jf"SK-`'3GZILYR)hra61%+Der[-E9L
+$9PHerkZUBj,(P@984KMkNMUDUTfI'2R4CIrSX$+"D&-'maL1q,rmXAKl1G0Y`pL
+lS6DPHU"86DY#96c-h*)3S5ZiI-K("#p4qZ[MBDbBTmU,Ar0A&V(D5JP6`XdclH%
+(@e,-kkm,8(#!`FD-LYqHdjVa4a3C2Zk4Hq!'TLmjLeqR-YG"Q!prf*[S6F"JLNA
+&9eU)!j!!KK*T0HKH5)iIK!&"U*'KIq$fY&lSBq4MFikBBQ,@X&)!6DSqT`3dreS
+[['@TV%82piVUmdRARIF#k4R"&)e`SVcJ5R##f,$Kpf2p*DaqSNZ64PhZ&!Ck[M"
+%8BA"h,am$qMeVb[b@qcJDNLDdILqfKU!+$-rE&qMjV&m$Q&Q)CrJ+FE`rS!GGR2
+ZB0Rlqf4dY+9#cKHdcM!-d+c4Xl6RKq@d!j+ReR(N`@cZ""!Q-S1@Z!Klm'PrB&-
+J"lUiCl#)&NKp413P3+3"B!Fbq5lUhm'[9IabK64#*36iqQ!'&AT$Z$0TSN@TAIe
+kk*I01$(rRN)#K-Gkb0VFbj4lEXA$`FTq!edq+Q1am3D1I'5EMe-Bp#39@#0+l$M
+I-M1f[EKYGjcMU[6U+*JJ`*Ndj8ARD(-EPQdG`ma&+P62a+BKIUMV,9RkmLdQ6N6
+e@pa5DC!!beIe&EAM%dEUj)XRP6[rfiC#KfE'!&U#Sf9[H9&6[C*T1IUdL%'-6X[
++mTDhe4Th-U6ZM0SSTrLSiIBFKrcKT-V%4ANHf00Y#FC9&0cG!VUk+BT"hDI@Y[`
+b!JLT[l6U(IimXrI(!l&'BkDZCX6fDI*@0,KN9S(!Y+SBDD`3I&TY*qaU(d9)kkh
+PMZCb'F*PE0p*1+l,'BfqK5&@PTpi9iP8k)T,U3qq00L`UV#GJK,MIjrHZA!'(3Y
+ILdd(5Kc6e`Q,pmZrp"92lC*9&p%[k618mHE*0c0%J8'0h*G&HBYGaDhdLM)!&k8
+&KU-f@M#S&GEdDfp[3Z)V0kIG!!X$HbI`#VkCVfE+(0FLjhEkM&1X)f)NaT0"8Jf
+0'e0Z"PKDcMrDF388TG)Ehj`4rFQLVaKhSi6qB#ar5pqac[K2+fX!)FE%DJXiL'&
+%hPX2&Cc3cC([pA@pJ3&'4d84prC$VK&PBjFI%q,E+rLSkN5aNi1FNHk29eMcENB
+V2`Lcj0!%[aCThrKNLVENIPaXA11Fhkk3!'4)qPBeCM5hY+1)S-&GB-[Y$Yq4DhN
+XN!"j1Mj8@-R6Lab99EP)bIl(G,k(HJS0k)D!kJMEbH'SU2rV#9j*MKIHhYRp2ie
+PjiXf3ZHJ&f&DZE2LR8qT+1$YT46Xh*!!9eLVCak#[U90q3dlS)$L28hIX'hP5AP
+qM[p@EAYM'Kp-dUS%am(ZDHIMGXQj68q2+f9mGl(lk)![*H-h2P'AD0XJA8ZiIZ%
+Xmh9&1pXY,L+J!ZD5KYPNJZbNjUAK5SMS[&[08Sf2R%ckLcVBTERV,3,*"h+J+05
+X"bD0FmQlVl"l5F)&B'NQ53PdjE(66Lai$-0kReDlqUl0H#5YU))1@Ibq4[V+E(P
+`S@2ANeC%Bjp!'GG0J'VP,%(R"bqG&aJ-5'5"Cc$+eHS&j9f)V,*cJ!bjfiBT+V2
+p'N-9L`lSY`aHSGI00!@$)&ZQHSCQGX3UUqiD1#c5(UNdiQ8k49@I"Rq@`VpkcBa
+"&0@T8dE3M4KM$bm6Z*0H5F&2VLSY64hT&`jZ`1l(!cM,2pClT[f$q4eP!Jf[0f0
+YUrm-I2(SZKPeDm'[ZQ15SVl@cV+UMNV%H6rSS`jCPPHpT'0FdN41j$q4aNVcR1(
+!Y6-V8[J&CK2rIU[b@D'Crmp1XPKjmiKjhe0QrLZ#I%8lh2#SHFE'qQa0(KY5Xq4
+Q0$8bb8H65+G3Fh"`Z#Q!0XjV['SFYeHI$qUA#*X84TXfk0SBJ-Qdk%1Hr*81TJR
+6"j&DC(Z[k-$V9@[keY1DV[T4d,Q''35QB[25INq'SNdXDUC&B'mbd)i*cL@Hr'E
+E`MrCSARNhr&NjFm65*GC$F*IMM#F9*FT#P!QV(6$PXhMar(q8l!c1[L@dXQ-2f2
+2AfE'"8N1[0DJ+&+AlEIX1+F-(TL[FcA3hG+EFqV1fPdA5Eple%G$#*RCF06&f[G
+lK`h@1Ck$JHFI-J'f"DFf@0'HCqiJBLVr!iAY0TBcXGh@H&j4[X)-BT2iLBqP*%q
+XHKQI!HJQ&eq,mq[bej6bG[Q11,NSS,rj3)Jh#(lA%eSji#@Z%bNVMPB#(3rrLLT
+Gad),S+aplTDH$,5(dU![ERDUb[JSfbS2@!Upf1q&Bm@YCGFZ`j1+Md*(LBEEYNS
+@hNY@[B)G8U"Q'Y`a%$E8k2SAPD0`U*-e%Ne(9R&fI$#B95lAmiNUZ5$L'pEpV'B
+D6i4ha)9k1J5l"+F(V,6rBLYN2PI+S&%,r'GTSD!rH85H+QFbMZqqk5q6!C9S6Uf
+5lTH)mqb%AC@$pY48HH`3i(8GYAT*Yf$P90-K6AV2S#jN&fSi-c*1`X(H''U3!#c
+q)GPckG6,VppSDq0ZSD5pEA6V5*P+0d2RES"2pFd`#[3*Q4-QRY,KF,'EE+6AH`F
+ipVKEKBRVaB)9ZIT)f[l+BdKNI(C942h1hJ(CM!m$16I6eqb,kLad`(BiESj'D@6
+Uk,-U'LV$e,(&lQMVN!"9FVA2Q1!0RM*fKjH8!f84k88-m"(J#8QYqq)G%232EZD
+3!'QmBe%*CT1l*9PqFFa3%VTS%ajKG$i3@`&a+H`mNjG4VejMpfa#U%,N8PVG$!V
+9dJfelX,mS,VAkTEN825GI,TV!f1mXfSPeaXMrSqdPAUm%G@$Z,@h%S%PBBX(Q$e
+8@6KQPXpJlCh#FHdS1mjpP6Bk*eQ"cb'GN4Te$mffb!G4HC4QQJk[h*GQZC!!(B(
+&cm,Bb0a,#mIEce&$Dphr%B5a'DAee`qqE,ji64qmV`I%-@ZNFq)l[LpQGjHcba2
+2qk#NXdK&,3D3!%"!*ZMXmh,a2Yf%F2ik!8-[A`Ac",JZr8CV'2qH1Fj*c5-*k[Q
+fM*4#Ih2KBQP'c$SZG!a0Ii'c$aPHC&!qUp&,XHUfE*r,3EmH%J!)R$fX(48aP5D
+kdr(5'AfjC3!2jjqK#cqi'89Yh52[ZXDRm2P)i3SHM63rB(4$aRPVmeB"$Bj)!0h
+,463T$HMPjc+RYl[a4F41E@e9HmXT"eMTETCXCLG3SI#UL$c!aYkkmV`i)&bq5Y3
+k5[hl-E$4&2cK@+)P,UU8V%2c,He(AZ,($!mCjd@52*QrXeGaJ95Dp)Ia8G6(ZM@
+6"lPCplDAraHiD,F9bl-*1dDreVi43b$h6FUpjlX91hDDhErI1GMU-CB$JmN,&[5
+%#0kVp-AG*A69*3dMHcVK1LVH-#I5QT84,I)Y&im&R`SH89@@"F5J5jC'4[SR-H4
+Fr'NrXqD$k2[TTZ5a8',k+3%m`CCNjVZGd+PQ))(8D"j)Q(XLpVMm6)35@99K,`h
+-@1$A@hLKkESiPj11aZ#$IUEPF!V$S@i'E`(5``I2aSKq2+M)qAI2rF3,&m+!E[G
+&8DXamkiTaIA4kVE@rm!RbRd6X68j8'0BU,ZGceT8Xk"iTr3,Shd"S$5U1,`"%ia
+bU$3mYRmJqEAf#B1mV[1[hUeqf'bFcCShJ4(kAjbhr9(l!mZ9NZT[Y,LVH5#iD,m
+!q-%JH4di6$%'h*rp3BJq-ULAKjS2fFGPPEm1L4c3mX%iaRlcX&D)*U9Cr5MMV9*
+k%4(8$Sm#8U$CQ#Jb3U3pI3,jP694cR`BU%6dSkCH3Idb--(@i3k03&GTJ4$ab4!
+R0rB08d9'PPlY4kh6LA$(NF+,REM2FS6jdcr!2KE%k+*0M#M9AT'B2M"JAE%hY04
+IXceI$jG@!aFfmFH@1,m6c('ZDGdi-M9rB(B5I-ZJfFprTjD18EQ#,%,3LFk%d[-
+98pXZ)Kr%a!'XBl!D89IeB"A0ibQPLjh"+J0$'p'hK+qTEdkr2$'Y9al'l5TLAR1
+&DADkc6+9@6J$YE8ed05h93[N0Gf)P@Qri8b[)8%P'L(Z9Y$-bQZ5H0V1MXS$#8k
+,+a'(E[MAr(+*p"9F8fqhrLdm*Sp)l'e!+D8Z2T'l%9SZeMc8lQ*J%L&dL6,ISrm
+r8L6kGR9E&GEIerLIXr9U1U@)&HC(2`U*EKY%kQ+GQ,XJ)`hfa8(!8L1(3jGfc28
+GNLKJ+i8j,m6##fp,Ffmf'1CKpRf+hKqNV*k-(Ycr)IMGQibhLi)T#$c%SRJblp!
+DRrkm@%)GpkMPkN@8Hb'Pr1jB2*cCe5dQ,#aT@jl[&D'YpL5MR,9lpqC05rdc*1B
+aQr+m+I*@,fmMfX*Af#QZT[jZiq(@+[qX,!D)6h`SA$DNZdmEfr4,[1fGqEY$QJ,
+6(Q&qPZ`kQLU$MQK%9TJG9Am`#`S4P&Id1T3khC9!mPjDi+F+T-0[AEV"H'$!EjD
+%-,Y)J,8kjH`dV+5Q1pc5)mF9F`,,+XIpJIiG"*SX5fc*cb8hUpTPD4`41c[&205
+eQFDp)dZi-hSapZ%-$`!kEE#"([Fr+9i*Xq+MBQbb&aldf(BQm,b&G!!20Uk4Kep
+LP9K6*,fANlK+&2,F9%Q`9$a("CJ)Hk&+Hc5-YmMM4*P('GYUJhEB`8X4R)*#+4#
+9IdP)hZAb+AfiJ[MiNC@E-2VJ!bZYT#4dmjD[(b#3!"*Z9Zkj#0UT91T*,)kKR3X
+#J11$SQpRiIdf!DcF5aRNFqhS$2LEZ0k*#L%p@X+P&-R&BR3f4qd8GZA)Q+1cB2Z
+bAk8QqMSN2@1X8UQa-#5(QTZJ&[j5aqrqSi(FjJaSd+BVqc,("RAd22+,$XDINGA
+K62A6a4Sm"11f`qAAkM-1"I$UfM95Np0b0#PR0&HKpr$Dp%hV2K(TL%X'qjU!FT6
+MLjd#Z*qdYfL4b4QDXlEA"4+MjFM-e(#rhq3+dEDSj[UYX`TfFh[QMJ'C9#Jm)#R
+ZqSGFfqCKl9UXXhEU&cbLD4$1TaeE2h92aD`*hrqPSm8"X)JeUE930"4+(5XH2G(
+VEbiijqVTBT1+lbJ!e)!jar03Ei3SCqSAMSbMP052*PQ$XKDR"kZ+R#6Z14RE$V,
+0'q8#U3j5mLT1drXeNUeq2)Dr&ki"b9L'bTR5`MbS+)RP!qHkX%bXpqCeHHGcTq1
+E3XRGq%*R8jF&Gqj4UJj'2RQe-3F,BiP23f@9JFZjp,aEpJ&,#rG@)UUhKGC&rE3
+l4M4CbNRD8$I`i54R3J8%*,iT&2p[hDdTHbdX+N%BMB2Lq2+,D5ADA96@DJa(mhh
+4R@UGjm6FUr519N)ID#Dpq+J%I*!!B3'@`MD+V([6+(K[`rJZ9ZKH54J6fbZ4F02
+,5cU8k61DK,28L%dBkLmR6N)11%ilk4ESjcpVMQfU`@6&(DTaLR9YNB#R*hC0R!"
+%1)UFICf)!JS1l[kcYiU&KP$Tb[`fhcRQ&APea3Q,kG9KrYKXGb(e'aqqFHV6TbV
+r,kK4@BPX-S36JRS8#&TmY@UB*f$6rRkr4Y@a5F+)M2$M3k`F$Y`3k0MDkV0)EZ"
+rAeV59%&EV6JRah2V--m5-4K(ieqHiK4+8@qkSeJbNV&A6G%"BL'FcLHi9l51S0,
+MV6aZUlRhl4ef2*aPmK-"meGNVNbH(Paf9bJG@(Gr$cV'XVqr6!(H41N%P@rKeZ@
+"r5%iV"RDpH@D%8eQB-8CNE"qdfc(%XmKZSNM"K&iJF+AdrAJp*k-9[L"(4M@D3C
+Z*fUG&JPb#%FGp)SCEmA!RpI@&IMUBP4Z59@cZdB@A$#RUV,Da"*UBY*Rfk9i3Lq
+KHrQjP'iVm[LEVU+&0cKpkFh9rUkiLJ!6N[4E&aAakQ,X0F+aSHf3!"N29dSUVKm
+C-J,88,'EK13Z3ApmSD!c9fZ"kH[aHXe#D3K$ZccNjA23DP2hZIAPVPAd4frPEXp
+NI@-2YTHNE+c+bj0a+B!JUHmH[U8GY+@Ci0+Y3,0@3bMVj$A#QaTH5'm#iGG,a)5
+FZ%8*6Ib1Rm*p)dhceiYCCC4,ECj-bPV4A3QB#!AbKME%39bc&r%11NLZ@29je@+
+2ZbH2Gc!$%)lbG3JI86HZecV)MDjbhimTrTd0dKFi3B5@cNbeH)8F81(!LB)%Ef&
+qq"5Gmk88lBJPqrY$51`EISmfCZ&"A,Q)[*AbK+Ki@RcQR&DD!Q-2NN+)R3$6b)E
+B$"ahh53[dTh@5GG[b(Ehm$dac)P4`@m8b-irPDQ@mX#BAL(Ujb(RTYHMe9%XQkD
+,,HC8%4ZSRlFAmAFiiI4R8AFePUIiI[Ei#Y[SRQ$pH#pl-CFH3K,h06X6r'S&Khb
+9fldFa*Fp&64"L(MfYjaJdRkF8I25+"2mHel,2&2qPQp2Cq[M3X1Z3%Y%JJl9BA%
+qHlj*IeT)R@ZbZ29C36k0jNc95%H[GpS$p)NC$P&T8N@3!-#(1""jhES)8i[`[Nf
+'4Z9&IK14fHHT)aMVQLBq-IdC,C2U2T&hM1eh(Tde1rli%6G+j3e%'I#mESq&%25
+%j8r9GS9RhK&CQ4TEY6UVVk(XHh&0%2H`42DZ-fBZ!!jiihmlF'!Vh'[LM0I$Mh`
+q3&5%@'&mN!$FIi@kbY$#U`h5Nk1PV59E1$2`b1@!Q!+PB)h'f"-Pf[P)X1mN1#C
+XIJ3Maq&jUa+[KN6"68B@l&Je'46&rXH5%dfhN3+Qdpb$3fNkD"MTml*%j-QMb8U
+1m3E,aIq%&(DN5A)88b-f$A+A2jLaR53$mkd4Uh02J[,f6ld2Cd5%ce5l1LB0rSG
+N0IqGZ*%YfU@)dSH3!(hHi6IEF'RY5EDJ@I*SL+NICU+qK2+%ppIP4m82eq+#ZGk
+)',KP%f&1SJ['Qp5hl",1(L%YdC!!bQDDbIH)PFP6HckPb*Ud8&6a@AaVrL"[j!N
+%hqE0fEErf`rTqCI5XH3&"e05qE+rekCe#4ci+MNlU`S%iGE&Eei!!$R54*!!CQB
+@,0XD5Am6b0!kBmFC'Q'eBYhT(PC6e)*l(#lShXqpNf4$9hfEj(N'3"3@B#ZGEHN
+B,F%*Qi8*(`6m,$DbJINmiaZq'd*MbJb`#8URMejY,)jh6CHT5$X1ZP!B&mE-kED
+6Q[YM2[4pb@SVf$,K3jie*p$)6Xh-fi&F-"+rZZ',Jl019CV8&MDm9FS$81j`Z#"
+[A4I&9I6A!5r5FZGM%AUm`8%l2EB*i'BT"-Q5Ui#bEL'RI2,9kk&5!$0kmPCUm!G
+F$p$L&@,Rc%3V90VZdKN@2JKmQG,rIh0N`H5ZS-h1$-3%'[c31AZ[5S(VcIj3cre
+NE33k'F!M%05Ca'aE1cj5%M-"k#mAfPQr4A)pkZh[-0kfQ"$VJCe*QRbrh`Z(m!(
+k%V)`%S9@C06T61Cik+)CS4FDb&HSK8Fc9%lhK(cC1!-*bE)3ZcqcCASLF%$mirL
+XhM8JB)55"XAZ6MKa)ZAe#*@Sqq[EGXf&)`56APJ&XAG8i,FBb1QF2k*8f#MLldN
+[V&+pY(fV"ER%9JaD-e3+-S&mf"Q3!(-q#4%V(Ze@4E$p2,3fBrH&dCS!C2PRqNY
+CVEDTikHPYK@)bF`l)6kl$pXrDEDHIdjPZCUc6l4(ASUJC(pLJUC,XBhM89($5V*
+r8#P&Q4Q8VP'mBYrh`E2VIM"*@10MI1fmIS#`RP(fjl@0Jq"dN3M8!LQq3-fNeEI
+!V8$XCKF1U`V-M'8Y+cJV1&PaX&M`[Y2bYlP5Y%$ZA`Re1ZfZiM[dFkD4UI(%5R8
+U'2!4I56%4hVUkGMcl0pm[eQ#`BlDPkQSPALSMVMej!U+1)9*cX0'TC4`XFaPR,l
+,&#e8l4`mIB1p5JHMrlP-AR4j(YA3`j%(`bp2kZAqaJ4(q3b[q"G!N!#G"djjiS"
+AM)SM3(H!"AXTfeipSVAmImV#*9RC!cRQ8KNfi[mrT+b`I`IVm5)$U4G-XVYTcTb
+JhdrQSjaULS1`iU9!Y*@e99*L$De$#"#!FV#Hi6daP[)4E@ie0"$Q"ad@'Pmd[Pd
+Q2Uk["f((dAEl"-NU1VCa(3XSD%Ypl8DT8*hCYRCUra@mF1Aj235&V9fc(@Q1MCk
+Kr!K83'h@FZCI2kCp3Z#pB)rJHk"Ebb4XlKe%aE$IQ1L'M&k8ci"16&pk"(B-6@2
+("DB9p)%BC3YILUDGK"jS%+Qp)RmcQMKiCZ4lkQR$b!aSBEb9bS3jk&b4[bdmSe'
+L9KjX5[JRM@V)Dpbh1D2d!BY9LcQ+RECSjcqP006a`AX[rbp+rZZ%3"RP08`*V4U
+C[a%6j"$ldPY$#R2EKTR6R5cI8&BRYK*&pP'SFSier%RUjh%Ldee8XVQ!HNY@Y#(
+C(rl*&l&j(VMJ5086lEAX`#'L4!eUC6282&LL#1$$`qG3$PFi*"2C4&,eic0K0&Q
+HT`j'I24IU8U`cGVa0GC!&92PeB1XL&FJff4T,`HYil54DcB!rR%A@jMVQDdPTMm
+[3)BG&rV`1cc'QJA!4II"@4T"dBJ4&8P1[FF-Mjf#E-",UE(%EpblY"Fq1f))[!i
+*58(lX20!8Mp%QeeZC+qS%XNPkHB#3*!!kj1BML8+%a),mlJJ24rNc#YSTQ)*9ZJ
+ii(A1c94i4"S'45V$)E*9X3fcmP-VrZqMPS0'[8rFkC,1Q*'05&fUU$i)Q,!1`P`
+UPiB,-'e'NBCMqRB2fLZkhb[b6L0@@e44ZANMEeS8MelY"(lr6$+U!XeX"M-6PY)
+-MZ-MKf1)0U8JaiK8MqEi0*PJd$rjdGUmqr`@,Y![#2@@CcTADaG-T3C(i[),0Xp
+G'b1r+BU2Ed,ccp4*(L6`68E,DNR&@rNd,BQ,+GA8H%p369E@5d)"8-NReU'PQGZ
+SACel19MII*rY*S'UjPGl'!TfH$4r3@"Hp8MU(DLfVb'8aCCLl##[#P#*cQ9lQJR
+(9QdjKU3Im%pPffqlXf&KNp-L&"Y%%S"SdJC+4k,,q#a4lHie-jBBNI[86M314l1
+$!L!#P0&522hm4ZbIi0QAHaEBEhhfd,QTP'G5hUYS*0qF`HXaeTcEQ#k9km`H@!k
+qC3BIb2q"mq'Bh83ePD&P%32H2)S%d#[!14d,Y1d(1m$e@8GjRZqIN6I4(R-16i2
+R8B5#`YVhU,(e+hCI-1,ljaq$+64C,R@@J"$`[CEqraD#SG62BAVm%Pl#1b$!KrL
+cG4rhklejTM&+4AF6Q!R+k(YeKPhhcmjC$KH9Ae[E(3mb"fSqIYq$%pQT#"FN3eR
+DZAI&5LEAhjp"Q8G1)C%'6kK8d$*K5[+3!0AY$Y%LQ%43&Q!QYb1*pYIU@T6k2Q8
+8Fc+,RiT,e6TD8DX1Y1P@2[U#H[hrd+aG#ZlMeZpG+6&Vp@a+dKmFG$h53GVUQ0K
+'DFc03KE$p4S-fq%GeNPqIM-`Xcd`*dH1Mied1M5XV'1K(T&I)F6a9Hk[*0l!hkN
+h1+aEA*HmRPh!(RG,jCSI6fq4c-+S0N!S5,IRh22rl%rT)UP6d[q9d"GSi(C$Tbi
+m3,3@kj5N[lXUXHDNTlU3!%PY8VYI`DdHT"4F$F[d")RYZdF'LE3Pi3e-9E`0m5h
+jT*!!E4I01LqRG6iqA`Ecr@I![D[,J5A$VCiS9ba"jS"d!@(4dM"2G#j8kKbap`(
+*p(25k"N8'aEMm*)XTAjpe9K`d6b1hKTM*p,qKeAGrPU4CN2(4k5'QXH4Fm$Uk*G
+8UEALIHQK*E*0M,bHbiY,Qp1',1@f[i6#Td"GQqSja*TTijU3!(C(ER8,Q*h*X"C
+(Ce5fCYTU1KJr2990c$l&#S3a)a"6L+QbE-'T#NT"qC!!CP*6f6C9qA*F`'Jh)BM
+6)a`3RX3YjAYeEbN38f,lf#IZF4UR"YbmHYSU`XGB#"F25Ka#bAb)B,pqL#39GU`
+8!N9-D4D5a"KrlLFKG+Tmi2$MQpb,#d,!b,+4cCVbAlP@0$dKX2%H%TG%FGlrU3%
+TZcG%8fFXeqMT#'Bd!rc5#IK`(XbZejkACm)'$l2DBCZL#8X[kMlfr!h"#e00b#H
+5aE1J,m92`BGHUKjXc+IqMP-hD-P&0ch3&0N9c[!Y%0G4C")rAqXEMZ%CM%dL&YF
+piB6TjSi0iVhiIV3(P-VKFDRcir'L$6HQ+Sa4pFk0(RB)NqfZIfSl`A)QM+0F--S
+M-ca4Z'!BcqVZjIJq8*VS#Aa4`16`$q0'q+%k9Y8k#*k-b4cdUc0i4(YN!1cV'H2
+0IB5!H'kLEI'$Pe,L3MPdLNJIXhHU@02e6erV&#TdR(05%2R9p(!+e$fdC'dQ@`c
+*dFQABI$!-bM3d!"a[D*fE[-EiVMMdA$S1"F9[EAAhP0"0hjdUD*9KIZ!,"jM'Cb
+b-c9XcNTXN4YMV[YY8I6cXVULYr+b#'Qpb8)N1E,Z-2,1K"e`2FF+YEhkh4F0@@M
+(LL0[FaQIH+B'RK2qJ"3f2L)p9-lBNV(5CBRV6B%Mj'eZ$FDId,0+#ZD8kPZ0RJ$
+I"9f+91kcRGY&ZbV6p"rmI%65jrM@CT3U'HG&Nb#'[r(FXJP`RpDYPUYH'(P(Qd5
+VlZ$1[*3lVjcF+MV"$Fb$MY*&ed&-KK-l%U2C#-ideCa(JBV*6-A1e$mriB@qZFq
+H*GXmFQCTJq-%P(XV$+ea00"J1IJ&PJEABQD,#Rb+q,l%Q3hM3**jZqDA*C5ZRbR
+EYK99Jl'D&,&3a2cRXR#,pkJ0hUVb"!N9"1iXM5aR$E"6@e19P2FFA)r#'ic!$c'
+l"BmLjYS6lQRNR1*Id54DkH1QaZSrPDYU'J254PfSFk'p0J9eC'qjFTT4%EAaQ$F
+-aSb0Vf5N3Mi&,0pX+X)N3LGaX#,4FU&C$[5iM(SYGX'*me*j2fSf'S0fQQUYjAU
+`p`6YR2QE4TK3KD4MNdR!2$f+pbc3rPFB,8'a(4Ze#Q)GD-'c#l9e&J,CpQkEF[L
+#PQm,m46NC)MA3[Ve-`&(4'YDS[TpY[p1L0TiBU*kh9bG!j!!mDQ*rpDSdTf'edc
+X26L,%JZN$ehJi(b51+TiJJVNi$i%4Cbq@fYNb4&6jqkJYc6TpPdVrJUE5`imG+'
+E4&%Z+eZD(q4Nl652J3YjS,jKd@&L3'+dL%UA4YJ*abp!aM!#f25ZG(V21[U%Cb*
+L1q&ZPXh%F'0CaEbN&T-CBPY`h4RbI@UG,Nd*dZb`d5iiU0PP$m&dGjPS6b8INDf
+@ir"Yckbr@UG[VRV&V$eX+GT9NrLk-PI3GP,P#"f'i)H0q)qVCY[BE[L0Pp0[C6p
+dl)dCJfQZ8RNfj!P&Kf!Ir8mrV6"S6cBJrq-#`Tj2pb2JS4,-'6r*`i3hGPMHH'h
+I2#1a+5cbTU1mYT2cY,EJEP*mB(bprZVTMTiGTS9VH4C&4QP&R&eG!,2SUrK(Df%
+GUXY3UmbU(6Xpb)Vf6'pm8KI'S[[U`5Ac(0MIlYk$9VD$q$[#djUH1GmI0mITQ#[
+k&c(`1&f(8Tj#aj!!GjRG9kDKp5T1iS9*6BPLK,NPmjDVmYP6pY'jrDA6NK)0R60
+hN!"ieXCe&@`Gf,L3!!cIFj9Re"ed-c[1%FLdX1$hS'4KX)!RQ3mECk5#cerDr-0
+G+*6"d[A#0%PpmL4I$+MeH)D0C+bK@IUjYh6VHjKr[3-Q#e$0c'AaSm4dBC!!DF%
+Y4qC$V8$dBj3XTVHE-G,ep#j$BilT4C(I)qEe`--42b4eb)RYj$a3XTQ%qd'G`0d
+UlL%l@pJZf19JpA*U[&bQ(Ad@bJ4V$i4MdN!iaa-&**kK6aRIqlZSYhT,B*[564j
+H5p%Gc9qi1jX`hHjjAFCENkPSJ)*lL@SmD'3lS0P)3Clp8,f2bkb$l!cCE5raNh(
+bah'Nq0C6DXb%JXjFdl%9VEdJq'hbCNfKQ@Fb6BN@J"%J+SN$Lr1c4@P!T,XGBFR
+jPPe`E5YeD@Ym-5@S(0ZN-1!Gah1@-@@kVrR3RE+jND)kBR1SY80V-ra&M1N(j2A
+ADK*-#`#1Xr+DfRJ%RLif[EQ&'&cCb0#MC[Ydf5eCB+Ilf2ffUm-R3PY"3@4f0ib
+6L93fJ(J5JTdp0P9J'C9`F3&QRZ@kL$5(A-40Ib%EK%EPXr6MDC@Zjci0$!2j*$8
+R0D3U"LApRN0S&VMQ`d9f#`QB(k2Z!BV&X9eE,ib1HP&aBJ'FXMfblCDK35)32VI
+GE0F8a2B&'k5PT$d'ZPf18AbH54NL3f,hrZISVIS59)"d#RLhf66E-c+!r+LNr[P
+q91F*6mpm*aDmYZl6`hl!9f#MVHB[l%T[SCDVhKaemK0UaK1N55$%)FEB+Iq*NPS
+@kdMbE#j*q0`P3q!JiS8c(JkD`kR(@#X5BTH3!(&1bfXATX(e6r"44SKEe+SZ-db
+EUViSbqBBZU*ImDNrV@NA*`R#ED65jrN,-X2EDASNq*@2VD256@fPIYr2Q`'d6UZ
+Pe*(j-)Cq%i#AFHbTk[cQ"!jlq)+0AT2PTKlhlEc*)(90a+RcABpk&KREXF9HqTZ
+S0mrqQbjJN!!)DZ"drVdj!lp#H9c51@UmRQ4aK@GkPMm2"hJF9BTi5m0",SIXY*h
+5#21GJiISHCM&(9Zl(PljG16eMZ4N`Em6PQ81I*6E4#J#k4VDJR+Zf+R2P1#p6j!
+!V+TG&-K%J[hlbJX@`@a+*e@Ual#e[If8X@i!FfQ,m[,NmM,h`i3#fZdZM8mm@ri
+Jj[`kr&[BHT-Ph(C(IX@Z+A*b8Sp5$RiD$l"643jYAURhJFH98RH9@-cVLQDZ*M4
+U$*Z#j6ipYRm&Z+@%4jN&SZ,-+$KZmp([4%e80M*EZ%*4`lDp`MbF8KhAC#55Tab
+%6c2G#MA[XSdAa@EcB8C5Ca%'Nbmb9&6UNkiB'&c#PbF"hqVk%0fh+NITP5,16D#
+R`XEBC)[-qkPB"qM-LpaG2Yc2,E4d,9L4BT4D*HKpRkVJ$SfJB9L'SU89qpKJa4N
+$TZjDa)2X6T&D0Vqr8H`3Ee2dKLFZH56Y`5V2Y*8'0NmUB`%U$)SpI%F'bqJNm&e
+JTkZmi"mIY36q9a$HM4XMQTi`Jh@icNqmdif"SG*M$eB(f%8b5fci9G(DfCQXQ1%
+#Q+)$c#T*m(BMbRqFI)@q-B`,IeE%9P%8YLXD66Z'39)mrcE+ah$9PcR6GLpkbf6
+@A9PYEF'bDXlGcU,9XJJm+b#AkEbYamZ$+iA)&N2UhJq%H01-jM%!HF3VNTFla!G
+llD#0SSraEVl+P@Bqq,R6!!Nh#TXIZ+mc$bSENTLUf!%F3XXKRiaIhEm&2cceljK
+EGGASJ5aM,,V'+&F!q$0h6`G!Df#E5TZb&D+#%eEGjUeiR"QQ)fC5iIXR$BE[BV(
+aS$&IN!##pHiJPqF,pI86,ZV&#3fG34Nm',"ZFrcIp3KBVaHGjRAiULUB$Zfh)*%
+XSMMBClM%Z9LEceI@cLNVNEK&QNcRI-kdG8X-4%8LmrNF`3iLR'8HZh2N1KdQN!#
+ERL'#[[*LN!"*q6"%h@Zb`M%Yq3MXmaBZ5h*NGlRq3Ia$IiT$b9lfHUY$rP3iFc2
+elGAMdl5b&D'`#RU*)eM-@l)BJB(82m9%R0RNNmUk+EX,eIIQlbYab-i3G431KG6
+U8ICc#c(Lc*@DBHJ[arSq2fNC81H+5@eP%VmrbkGrP"k)*+$Q`%aSEl+c$4$`+-5
+cqL)+(+hU2ARThi!02mj!NHaMYLaM1G'*SqQTXC(p[L-SFakZFYD3!(IAFZ`C$bp
+fj!RNB3MTM@qPHXJ)C#&Q$aB1YAQ@iceeXARC*S$l3r+CY*JR"ReFFj!!aUSY-'6
+DjY*l@AAJ1H'l9ZbKPf4V4b(PrLGYd13SHIk!8H9"&@p9*fE$,[IrfbRRP+!fk1R
+6$'fFiT4CB)@Jh++E4U$aS%!')[qU@BPVN!$'MLCY)`ZhD9VYh8BXNjZZ%XrBR5H
+#a2H`YNl`!qq-X,EGf8cXKC),J&1alQS[ITJJleFGf5IB&)X`96-,r%L1l6p$$HL
+l238E)Z"-13MJ")@YX+K+H+TcM&ZjmE))YU1U@c8!BL+FQ,KZ4i[IfjN@4*qL#(Q
+h``MNqChrRamGUR*eT&plldLhbfQK@,BVI3Mr*[1![B`X[Y"IIJjZ4,11mE$R3i1
+JiMLU+icc@5d@&"D0Sr9J`*)Fl"Ikpd"r0IJIC4K[k(#@i6P)Y9k5@ZTiG)!Ih&6
++l0(Dq%j#-e!m'5+49P4aAPeFNCY#Abc#F$m+@1,KUXjRihIj-Aca0D-Y1Jk&3VE
+NE,Q3!"Fh4rmE8(-r"'r[Dp@H'rU(,-,`M9Y'5"pjhFMmL"b`lUQ5CFQph!%cJ,#
+HdQ6RZD'+MlSQd`$SeCij80qG'-M1%!hFBj4)ha3M(#V$V)Yf8P+GI#N'FpPUpZ9
+rN3-VClQ6P!eK1N8P"%UkA@'qL$e-lAm"GP'G5ZHPUf8hT'I8PREU(8AA)h`(1-N
+5pBr2cAPZakRRhZ%9Yk'2HUMRKPZc9ilZBU'6R$Ac(EZiVT`rZm'mJ3FQZ@QUrfI
+&R+e-ZGP$Cp6GK1FEe5%!)@HNC`*"ISDdG+UAlk'iLj-q(&DSV,Tb'mU9DTe$%LT
+iK45kPJH#M03-k3cHFlK&NcS&JeDME6%5'iGM8l%*AaaZ%!1JZPCBQd(EI"SUQff
+5&0*Y4q+24A1V@8CdNpk&k"45dqbH`+&2@V%crZF+kl([&aXUi$4%YZ#B4SjeB$*
+4"S-J!JGk4LN`c#*B%jdfM*1q'4&lR*RY-*[0i1SCSE!ZY0mQ8fKK3Aa+-1Y#TTJ
+9![iiHNCGE8(BBrSD5XL)A"eMLFU1IrHpHYE3Xh$3G20C9!h66P$'VTY`cpX#FcH
+GLm%fUeGd9h4JfHm1aZ%L&2ULP+EQ5(!a*GkD*d-qK!ZUYji"Xqi[*HL6K)eA"rE
+IKl@H&84UkdqXB+"5hj,dfeqkde(UE+8DF*+6[4"T3EY@DrNQ&hh@"M1`R5Jq+l3
+%i2F#"k&!f!LLID6KNHL@-MMYil5B9f2Qd0'M4MJ)PCJJ3kem8++dd3[,a0%@e[E
+9bTTGYLK8YJGFbe2Zf6#pRD06b*SblaKV6&(VFrlI+A6q9m*YbK2Z[0eGZ$fhb@M
+,a`c#"EArZKImB"#R'rfF2l53!,,cl"9!c+NjqZVUm6#6"haBGhF`4l"'9'LMf#M
+P,DAU!!5EM&(D-SaFiaSX5K*+JV''6CdJYI,0E#'MJ98Bi%bPXeeEqp+m-[rdhFY
+"[QTZh'G`rbSD6X5LK9,UXF+EXB,'RA`%&*6JYP%kaJ[Lm%GVDD1bTMLb!"Q-2AS
+D@Vjl)N`fd,L80jr3Z)X9MUI5HT[1A6Q5l!mk@2"hSf'-FB8US1YQqe9F4&dXHPF
+e'LDd!M4P!(2&S$2aQ[!LYI`E#erP*`9fjRXF49PTH%e$L*!!*$'*6JSf8L,$J"q
+dA8a`AZqI*ZX+kcBSJC,BRUSlE$(h#XlB-h2+UYVhS(X6!%0Kl3lcq5*G6pkGlaP
+)f'Bhc&GN0m&a)D0,AdLc6(9,,`GLe5aeVZ-LFQ4ZHY6RDV9*VpU5J49MTT*3@Ea
+S,aU@X&SM'SjRK"'Q(&PKpTXA)Lb$MKPCXT'NHUIbZRCaS*HfrEcH[,-'fXM,bK!
+8A04h,1UiG!J,,h-8!Pc4h8+FdZ`BVddIXd2`F,bCq%RjkqY1$eAi$Jh$4ebYYC1
+6mET*)T'*cmbq3+m'$$2K9+MVGC3,h8hXA5Tb-AVK6+FH0`@*VclURI8S42d%`5C
+%,l8MLaJIk+J#Q5e$b&`5ARi,q)F1bG8lT(YlPC%"ZCA)c[ifaF60lm%E'hkG3!V
+#$J$AUdaFalFThbh5Yid6NpAIaR'mdZSVRJqrDP&%&3LAPm49S6`k&0FBFUmc*L5
+pBJIi$8&I+Iec%e#SHR16brFI$86#ReKkfl4M#D[!FG0'VH0cmP"K,!fp#UAC"N2
+Lq6&NGd"+F*iQ8m-mJdKf4T(KjaKbGaqH$lJHR`XriapkRmc5MdpIjY`N+)R&V-$
+[b&$f5GU+5Z1+[9VkF1hG#&ik)D!Z[cM5-eceB@h"aQRC6FV$D#lqj'@V5j)iaJl
+GpGV9VZ0@KPA)kT2&%`h&e%j&!mNd$(+2$`h-cC,'BYGA1J9'hH"K-rX3r9H8@'h
+#J@@YZjG!XKe'('ZLX)1Uq&&*QSrYeYJ#q%TZ0269XR0UMr[KFmIhrX0Z1"AD5k0
+*$qQ`a!BKXeQ&a3GLMEHlj3"0Dq#!'1CmTpp2da[ijY$6P+'lRMa%JM$6k48B#VT
+b*5k+jfZMLjB'0m1IB+JNAcTm+f4EM'(8&eGkD'$1M1[2E9IDkA#TQ2DY2VT`Z#,
+jG@-$#ZmY+C1S[L)5h)&[Uhr#)bTPHq'U*aM6@rF1[kM%JARq"Z2Mb'YPQKpLMY8
+"'c-"266#5T9F"bJRFTY+JZqB#`%i5IS&%"Llp94&-d4+0DhKC&+RjMVld[9iaND
+Q`3,NVar,C4kV)jd$mb,,L&Pc,J9-RMGqAqZlMQP&9DH5PBEAS1G6,e-e0fAXk5I
+XMG82TT2QpqNCEMG+h84-l`,U$)QTMLBJ,mE@Zdh+"iNBJ0p`DU6IM`'5'R-S'K2
+ZhHP,LXPTE8lfHYfI9a)HiGmH'pe#)9@9,F-&eCG,bl#)Sa)edj0`2PbhGq&cF@+
+4[ZQi'P)KF@SK9G,(mDm+R[c'mZc+#+T`4G3MPih4[*%e1Db0Bqle,B`A)9[%a*!
+!LN)-8a*31r5*4[+,L[R(FS5PG59PAH!E@*S3AF,VS3Kd&q0S1%$i3i*(AB+`IX4
+If@AmEA,l4CNe(+&HSH$e5A&,mbkJ2(848rp'e*!!KM+5R19@*A*PQj6ePRZqT6e
+X4Shq`L$)'V+V-9[&3ihVZ5[B$$%A4F,[+YaTp4m(6mKq6+SQ),Q1hVmAi"e1*r+
+i+[JlZ(p6U+#cei!DLD4!b)jpN!$QimUBCB!+"F8GriPr`-%',r8h%+*VGNpp[N"
+-&BeITj-AcRRQf5%fmTFLJEL@3J8[+jbE3N3C$SlD9*+SB8pqM'3PI53qGh0C-@Q
+(m4R[5GM,TT!!LS'pq*+*1H88[AGdhHUjXpeT@Gp!!Hj@@HFIE$Md)mlj*$dmYqI
+pKAdC$E"dcPDeqjNNA'L5J5eJQ8T3Aq!@8`1Y0*f$ZM+(d*b`(ji&-S"H)2q*N[*
+,f@L'5GECSHmkR2Q*#@iU"I'I!VM8NDMr`aB)ijm+j-hAdCqEkXj!XPS*@-H3!+D
+'E1)Ff%[M'02ZQ`eKhhdj+`2"TLL8F-M+Depr"@3"G5aGLRkfRCFG4+SNI`(cYY"
+)QZc38P!"-DjTe)1iZ+jhF*Se&G%cBMI0+Jha6X)M`5beipEd#4-A9&jJ`9iN4&%
+N1`JCM6iQ!JRCGbTh66YaRE@r4qBH1qB3CArcGGK`LrAY*"[%%'19h"hS0AI6"PI
+X@eXpdZ+M31)Cd9YKU6M%09AC"p[1eNU*'fN,J'mBa6'bc`mIHMi`QS96(pL%1VU
+UEl@9aF2E%dr(LZA4(hi6HRKmQRdpEYYIFdT`LS"19d2"2T,jHlLjq4LhCpMKfT!
+!""D'YUm1[)ZP))*RM`,NcJaFQLqJ59Q&G!L)A9r6*$lL,PaQ-,5I1hSQ$ZckGdQ
+Si2IScd,'T3'-MN!!HlMT2ERalG6f'DLd%)b%BLPF4kmY2kU2LQ`Sk+$F#UA8TZ+
+N0"L3!*h65+%,fU"K%$T[LJU(kim[)e9mU%NE8!99P`04%j-C'&"+!#B4E0h@BUY
+c&$434PY5UE*@HkClZE*bPPN!`-idmV)8C6rfES4Bm$hd4RQ&88,m%6HlKJbNGkh
+mV`!V10DR&[MC+(V#4b@)%3,icfJ$P9%YQdl9F,qdjSbPVbN)Jh6,#H*[3*V1Z8G
+rN["l@lM[SkRBT-E(YeI,2[TNc(bpI5`GBpc8JfXEPQ*)GjVfe,q%-mcXj%6e@Er
+,rIEkEHa[458Z'Zm*BjC%8NLm#2A,1JIDaR80FcRMLmdb!2P61fXY-P"A8RC)1Hq
+,V#lQ*(&2REKGSV1+Lf0+U#Lf@-"`9FZ[Z1Kl)kSb*qN3qCjVJ6UH!j0T-$Mk(*A
+2RbBd56Z5qd`SMdXEaH4EE5(aQ#IcN[XA@QpE5V+Df$`8(qM2Qi)'J4PM)el)JP9
+M0j+IG`CZ$6prPC!!!V0EF6q`9'3QYh*M'M+I`*XIm)1!IPI,2JC%&kD+"p&hK,l
+p)-[e%VNDI2lJQeje,,ef9+l%INi&dikCYl4Q,R3%!Z,GZ9XI3$,[dkX89%"@a@N
+EYI+"aHkVC0`)2*-`28Q2LPK0R+Ap2rbrG3q``e'VI-4*9QkFIDX*#cM@#cD@(B+
+Ml6`b$05N9E8ma3aATpY*TLZ@l[(HMm6fd'4U3QH9Tf*c5E*21Q%Z)&d$[C6[!q4
+hGAeLJGUDed18q![aSpKBmN1#1X+'YdAMBE[5Y+5*@fN&4AUcFLr-@*VPX*i,((%
+L-mArHDQ-Y[RNqMf,F(mU$Ab(j,hE"($bqUhmA'h!SEmD2Dk!q&30AkFAPQVP6@k
+rBl*K5iNfY0k)(@j,%6p%JfQ#GhbA@ir)+T&d8eAUr0bPI+9F"NA24EfNQ64KE@!
+3j!"JqT2@qJJNRHrmaDU!Dh(8,0ie6V([58-0@LVfU)q9)q#AbIT86!-#01!`Ma$
+CaY41mFQc,Cq)eU2L5R4,#1c@P0BmN!!UG8KAfM!Eaq+c6V#S`5q#&+H*ia4b1P)
+Zd1Ibb$d@D-m'k485JA`,N!!jGc!S[!9Br*p&IZ!&a!REbVaad6`JS&i3F@"$1,m
+8fIH@T9rEIaiGGDmmKiR[I!6Gd@6MHhjJAl#MK)%`Cpd0diqRrd`4e1jNhkai+98
+pXI`EB`A%5TDkIhFRqehl0NalA-!&Yrl0k,jVm&PE#EIp#ESY')6rEAK4I)Z+*D3
+bG,8hFmDZk+q!dC!!YP'lr@A,096!cp,9qV5#iI(AF!+D[H@ce@)MQmBF0@%Kji!
+QI50mbaj,+3"kcm'Ip*c2VeVcHXP(j9lMjd[@$1M'Y1%3*a3%imCaXDIL*9Nfhp%
+5RXJacLrI"J#18lX&m6ST[i@-*d#)$r9-CrVUZN%cIqDVBMq9P*(2i!2M@LYAm8S
+j-f"Llbe9mZfBrZG6XmbXd(qP1)`!UUqbJ&Dp[M'badUD1BY"cKD2U)dk9AIa+%6
+4B*hBJj-2eKrm`BfJN!$MZKfe,4J#1@)YNhjIPEL-)1b4EJ'eL5,P3JP)X4P!G[L
+,+RD5Pa*6l@-'ZQTef4EbE2f8r'ImDN9L%h4KqI#a)X"8b&Jc3'fP-QT4kRCdYXT
+3lEilq8(l-G+q1#j8,2)@0-"e6P3F[mbCLPA%k`SY$$AVqGTdmH3@VX&i1+*8ESN
+KiIX8'"L-'5pM@c'V#@aemDa3Pa(3STh@c,S!kYJFLMmF4VG5lK"dV)%@[5pE6$k
+j5NLcTb[+N!$@K`RXf&-%m5HEDYq%Fl511fF!ASSa&MmJGmHI@6!"[&3@[jL93eq
+SPe#G8U,SKe!QDK2H2SE2"[9Gppqrc+-TU%f[jE*L$r#Am,!8PlRlKS$2VUcYCfY
+Cb%qbR4"!'Q12BZ434(6H$$mqi''GAKCkb+51')19)a'ALKBCmkllJ'+a&aNJ2*4
+AQQ$55S"VT(jJJJK6jYi@4FbE2lIHQ1Rp#*%kqSel*`jdU3+R(bdc*ZXFQMZcCQh
+0[8)(Pkdlm8Dq95@(GA9(AZQdHMZfjP#0(QJ*`(@Jj!&cIcFK83#iHN#YS&F[a0d
+#6L-j@Ve2,P89MBNV6fj8R%a&LV35El*'*6`H86+II#NPrdC56IT%iFm60[rD%&%
+20MLL$PCkH4p5Sch84r+JR`H+d''N$%!UECRE8pP2kB29%@i%j@N5R0c*(S8ir9&
+85J,IMPHP`C!!55G0i-15*,-r4h8c&e+-hcj[k@IehY*M-25GfRIXN!$q"[FiHZe
+(p4#VU-pAp!PpFaqVi1eEdd[$heY&H1i9mLjYGA+Kqk"aa8X$)+#k02)@d#rc1['
+'pA2RSR-bGr,9(3QqV8p4$[!HpJNhd!r9i,fU+(AB9&E2XF-DNbAVTjDa@MbV%V6
+XR6kDN!"6[eGffJY9Ad8#Md-+219p8F30BI12arjjXR2CE,8TU3"aTj5JF(iKS4j
+XTX$@mZ)G)HiSN!!q--eGH9q3!$U0-JM%99FD2m"*Dl)3U#+2cEX3KKG)&L%4$'+
+0M48%eUQmlhY,18F2L(TXhS1)63SBk+Z8i'jLKqXJ46Z1B1GS1Y61aEqmr-d,GYq
+QCeA3&"2kilIqRrT#3p`Ge($NDGF`G,ZXpBGi@9P&b+k(TY,HNrD8%(P+lHXU[VL
+feB@a2ZI(iif`FkdrHTDrp1&qMem6SVD1ZXmqc+c2e34lR(A3ZVX[jlQ`V3Q6fI#
+H(DBj,bc2PZq1!M0l6SlC&8&d0H@NaFN1Cj')(q8"prc&cJA6UVcE'2RmCb%!m$)
+(cc3+I`UKr8E(i"V)0q&`1bm!+-q+ici5V2H5,G68mk96%55!Xj3Qih,RJK$&Q$P
+("H0I9P%5p3VcpdkNPh1eD$-9TNaM)%C(JaMT"i1VMeCaj`decHi"hi&[4GP"0##
+UJar"0'3J-S!p2PEPfmqQUaC1qUYk'jQ%HDKG)`$dY3k#4[iPUZqHIZkX!`GViM#
+SeSF9ML&#`*eh(CPfP'rqqB**(&$JRGQ6M[-NVl2aq`C8`rQUj`hrTh0Ahf4F,jm
+mV#'DkaQH-JR`1V$SXLlf"AJ2-[K4JHZk9$[aQ6Pk@j*lMRC1'q%C,SA-"R`E8VH
+i9mFNJrJ[`kmbG"[hp",*SDM982,rfh`"k4IcE9b*0*2q-4IAKq$R+3Sj0PkCGh0
+C1Y%1+$Bfbr2R&42mjbilYRFeK#[55%YL+HZhh%0FTZBBX9Z90MCm`BJ-fUjXhFe
+qI&6AhV##'p)cMZaLVNM5$VBleCe5iT)%[pprEZf&%VE(XX)EV',e)%rfp--%,p2
+Dm6+r6GU`LIeAciebR,rm,6,JF5!f5"jUVbr'3+")R46qPTSL*14AAR!Fp+D"&aE
+#MqBfY*bhm1bi8H8c3Qm'VH%@NK1#Da2N#r*dPB304r%#VUF56`)AV%E`k1(Bp68
+&,'BbA3GClL*H"'L3!#jedR4ScBGV*T4$hV58$QAJUaBKU[U2V8iN9E#"d0PRT#i
+FTb,jf!AP@[)@36D1`Q!F6"a)Y%VY8XGkQSU-IbJ@+$U#'4rdTN%*@ec9&j6r!Z#
+[ZdAS82)CFjR-kd4#5a!qH2-Ki[-6UIpjHY3%L*H)JjNC+McQSA#K-'$dYlhTJ11
+N1)BXXR0rX66)b9l4@b@Q"SjRDXhAlHGf#I(hFlXeH15'rKFZDPH1T3Gr#Hrh4c1
+'RkkHb[30J#('%`0*qC&GEE[d8cqhMN)B+6cC@[SYaS%MXcB"-!H6rREKAR+1C'N
+$GMT(4P,20ja$PY)HXCLZNeVa&ZTpNB6NVU(rirS*U"`FTCmZj02H%c[Y'50#+D9
+K&JpBXLr(I1lbQ8%CRU+,j&Y4THrUU,q1b)[LmY$1$Q8l+%YJi53R5I8kDAmfJ9m
+Ai%(Sljmh1ZV($qR%!@AZPS$arXT)lpBHX!Z@#0PKl4DBqD9,KqBq#6S6jXIJl&I
+G,d`4ej!!5fDZkE@T8qecV$l+8ifSb-@hq@(j+8T"feP`34I*&)MY&9bC,T4`I3N
+D-BGR4Q(jlRG*D`+DaNZE3*f9AP,PUPN`*X[4U#LDrLfm%lG3[Bd+NIa#,@"eeD%
+I+a*42K-10i%V,4D*!J!6fc9j2Qa*lZmCB`V"C)%k'5(j!$8bf&)LIq@%G@!)a!(
+9aF"Sj3#3!%5jheJLmNH'+-b"L'RS#8VXr5Y`im)FXU"j&&15rS0$"B1[kE+TBpl
+pRm$NTre%1"#Crm3,!JUi[j-8[S*+@T!!!QNAVqRql@VYeb'Mikl@&ijBKmrf2i-
+e&`,j,T1%B3B#BkH$lIDpBcLS%Ek3!"(%4@Q"(`#01rfd`0[a`D@9dm*,65J2Fq&
+YSV`l1iBXJBP@5i[Eapre!@1B,LVk,ImQL0'H"+NQUIJBH2!$*'$E$UMaVFPrRGE
+6)DaQkIUSKea0ha8Jde!MM'80``NYB$KdlTZdBJCY22E-T4(+f!mp*Yc08Nd9irj
+CEcqiJeAd3"$C'Eeeq[%Kjq@r4V`0Im1DblX5RJ'3!!-5IKGCHKRhC6LXVUN21qA
+p$LXSA5bdPqcGSHPN+H%FXjKIZA4TMc-QIA&A2["Ah4Aq%q"aX5(1@C)+$iH`Y`k
+8qf&(YY!0hC)fZ8Ka2,M$*I$#+5BFqrSk)C!!X(G'"5l0kMhqVrLJT8I$JPDmBGG
+Nb!Fk8pNYarE965HHK)Z"a!QrXUQHT4H@(J,b+3N")[cXbKTNHrULNpBLE5#`NKK
+2UlcrQ&VMdj3`&PYFFTX@PrU[cY46C8(iGp4`%55$P#2J5AmAdDf9334$@KmeVJX
+bm(0ZQ"U1*pBd#@L1@#iZi4M6TpU"+6J11+5DF$Xe4A,Sdh8NGGiRMmr`f-&PCM-
+F[IidGK3iq%mNK-%)8FbRYcZ*F2PKE0([m%VPJK+4Kj6C,-6+)`D'3KM(Ek'eZp8
+-,L3Q6#mJp9-&cD'@MlA%Hp2I'ZREKq[!eGm@6F9V#&eA%"amG2MYTKJ'J!Jci6d
+MQTk#EGY&X93QikPhc![1`&%MQajMMcKdef14hrHRA5aSNf48QG4HlPfT'0i#TE0
+qM)[3DVCpYX5BpGHCbFefH%FTGpZX`6KkiJD1(3E)9$Y#XTND(e&b(Q6qIErAc3i
+pCF6k-I1$YB6@'D3R2[ZN#kB*JYHABl@M1#Uk#Np)XD+VJiXI@3`"3FV0VSi&HD6
+bbR&FZSRj'Xf&pZ9HS(`@2YHkUc0feaY)&5+66TTj(kHELh2X$biU%3YPQ"[Hp))
+6&LS15YMh0R&NEU'1Tp0`MAdidKDK5%++[MImHPEBYqi&XGJ"cdf3!+he[+3lYqB
+i5U(4@)eE,85i4)VlZ)P!21h`R&RpbM'QVU0SrPc[iB6@Ir"rrTbTEjp+@$Iah'L
+U[bBq0hf[jmP4CX6mHBpqd%Ce'U*@q9DrV8FLa99+GQ[0BD+Y9BejJq*$#CqmVm9
+(r"4f1RjTFrB+a`YNSLP[Y**L%)GUHI)!$Hi3Q#'aP[*HST*[L'$[cAeN3,Ea#lR
+bp&QcMY@&AfBDE(0[*0Z1dH8U+(a@"KJY3SPQZ(C')j[3fbVp%iV5cq%9pIb4)+Z
+M&#p*r+2YXKPJj&SSTf9qel&IeXEZml6jV5Hd8&K0bPLCEcF*CjKMVDD%Z``pRJq
+*VQ-'#Sddh-8*[I[QFepRXL!fI(!(116J)j!!cV8Uk8N(-ejlmHEaP35iCilP',H
+'UcZ4(fTqjCLAke&ae$$fCcIfQq'k"k1#hfC$fpjFfiR*lh(*Ce9LMddd$6Mhhmi
+HbQY8e2FL[MpT`N%-e4drL(&*2dfk2mJ49NaQ9Z*cEp,E`iI01GJX6PSFM!*Zd8Y
+"+DX3ECbJr)bfrQBacV8b&Rp6rP6Ek!ADkK9f&"BQR$pB2Z3$Ukb+$(YQFGATKe)
+6ek@2#(Ue4&%`*Z$,MQqB(6c[RJpY3,H1`dfH0!PmPd#SC"HR5[+VUdKXS4bGY4e
+MSkSm"DLEafGPr0-k+DC"'$+fLEpkjcJRV2@8YK!B@E*E$fAKDqe,Yf'NVa6GkpQ
+!m-HXqRfV%"l@`D@H1pi5'brJqX$*aUYYC&0"*JR%(i,6!q&&Yf*2eKpmIGqZjCR
+Kj$$jc'#prT9VkebISMDRfP49R)YCZ@#Tri$lR-X+'B*",!P,4Q-D&hMa)-YaYC`
+#QIAfHD[61"8`dQeXZPpl3JUXe"FDT!Af"-maY,1B(c5qr'if0@GJU`DXUq`9KR'
+$LUHU6`Yl)F0ce%Vfah&diR3N+!f%'m1&02@Jm)F1i5MbdEl6"Xf'&JAh1QZX*j9
++[6'FaJPdd,YE'b!J'UJJif5[ZIj(Up"JS-*9dKk5X`NN1"HFa,J[)F!Ua%jirVU
+PbUlDfGd`6ZVqq`8l$9pkCp!6ERrlh5TmqGZ08)ELlj[,G4@5Xleifq-K-HfSdrH
+#Mk`KC@#eLYTQk"J(0crJ338XT5[*bp)$42T6K0jb34mlLqF[Il)QKXeLQRGe4[9
+NZ*,RLpT,VmahPe@i9UMl$$UEI-9*KQc'b0+1!+I04Df8'C0eF2*Z0XbP-)UkJpr
+Zf'p5ik"3C0952F2NdGVj4F&CjN#`',#jmDe4LJ[d%HHK9eIX%!aiU@iG$#mJ`NA
+qXkbRe66(FqU)4RZ$T5%pjAH'SHkk$5pr@[f$BU"AGTr8[IqQNbD*Te"&qhi1Ul@
+4[iB!ke$`hZa52!1bNPX,!T!!$i4X26E+``E$AChT(r0[P18SZ(-r(i$BdU&[`S'
+ENVZU3Q%!PaSfp"$q"L1Qk$%#q,"k`REl,XbD1MiYmT(`jr0SPhD+k3`*qVI#!SS
+B$qMPkHXk[Hm[GKRd%$qViT4jmMQch5GRGFZ"BSpDY6Uea![)HK-lDbYBR3!r9'A
+Je2P96bUTiQFhMqaNXZ9&!,B%X5F#X2C,H-NB,Ymkhl"Y#-%G8[JpSf3b0fiK6b`
+VH`['#)hXrY'Cc20M0M)bE3k8QPS9(e`NEUm4FZ+B@p2"rjhhSd@Hrr9eVl'8&b6
+F,c(l5X9Vl6@bY(lN5Kq"H!9%QZjf*MaeBDl["b9@Vk99F`3G2&e3M@fhCbeVAa'
+0JF%)+2ZLeKjed[JUCFa9N!!'Y"MMZC@[T4e[@N#1,QqL4i@UH!hiM,DR0&CE30f
+61rP@CQ(Iq3)Fc4+%QHr)Ed%VG4cePXGL9@6`RY(@+Flk'-QY#9XU'b,FHCNFSlc
+4(bQY#D9H(B2h'jKkpS00bYT89Y-52Z&@CbT1ldebM6+iR128Raf(he["A,hGFcB
+fF+J8YIRhY4V[bRLBibV'Q4[`[Yj'F)`im$54'%9Ni!JAGQ'&%'G[pA4!9K)Cad6
+HSmqC!@r-5SD$2ra(i$k3!#$IV%#E8$+cQYZCUQBUJpJ(kF+8(`G-QkjhX-kj-TY
+`H#kjZMiCfREc`pbkcAjfH)-i*#G34Y$kJ50[m#X@TiHFX#p"1&hTbYqiZIE!(R2
+e9FpUL6l2+`b#jNR$V&e9ij6pHAmZRHDE4B@bB401@&dX8F#N*1d3`fh,*I`(28e
+!b3PIi!AD-M(NPAmbE-EBPk'qAaF+HNMde`G#DhfT#Y-Pmr6$-8ADCR3T"c89q5D
+3!26(+ClDFVC)V3afpr8id$V,$JE5+$rS$1e5Gd[bI608l"NaGad-bVBNJ[RXf`U
+6#S-,h0H%@cH8*R#QQ1,D%BUkXa6@9`2(fr&k&Ea'[N)cNcrqK0$1E'`IY*5-ab5
+bNkeE`Z!k)rB6*Z(IiBTC&IU'Y"hBrd9LF-0[bJ-YaM+jT9XB`N`&elCTq5*3fiS
+rD"9!CXH$!S,pr6d1$95ZH*eI`iBq!QZbJTpPjqTbCQUL)E9p*NcmDDHVkULDepj
+b%"$D&44$H!C*!B)C,k*Q8A0qmLdfX['B-*!!qGDMXSSRQ,U#$hG!cq0@ETC1F0F
+%mQB8AhmUQF2hDD8169@CT`V9HD&fABMTpfZN8kBQcVE%aaY'm,lrVG`19-bE-Xa
+Q'rK`!A1US[iLP*aKEYB[Se,CQ`amf9@5rdLBY&CYiB[#TME#mjLB8#eH@B5IYPT
+)RN'L-Ge(Z44L,68jRYJYSFM%52NMCHSA%&+QGHP$)4GT!eQM)fkBZeYRp2*TCA2
+Y[QhEr%-K((hZ,b[dBm9h&T4@Z+AM02m@`$QRk6XVm3j1-EfK"1LU9`Z"S$Q,9d"
+"DPLjkB9jiFI`qHh9ZQ$Ja+0&h'D43iZ)5A#'pI%Y6U%i!Q8Z+G9(3IKFS"c,kB6
+VHJj96Z9-+I%6-3APp4AFdT+BD$2r-i'p(`Y%c%&'*(6p#ETQHGQH,l-a4JGDKlC
+ca5)L9AF138aMCVkqK%rREbNpEb%$Q35+KHJT)`B+JkV@dMr`)qffJCiiJ-A9(H+
+4!jIpfQk1M6fC-ki)1D0S#f4-l'D3!&"$jaU6Z*YIPf2r-&Eemjh-HH(-A39aQQP
+T6hHA0B"28iArhU0VC``[Fmj(GV*e*FQ@%4JEH*)EX4MjbM1rZ+TZ%RfR+"V9GX-
+[qei&iIUH6UA(M',8fUPQXlpj&GYbJUe-p3TM)qm$!qcBJpFk2mk+[G4&!69'*,q
+E#B-*pah,-kmpMq*IZcjN4Q--1B+(3c9aK@%0d@V-&SUk2$)X$8@b'5kJ(AaC3-!
+be1T@4-r5YNVkM'4&c(*HAY1p)3Zm15H&)QpP5f,ZF&l#ehJQZamJNrhfU!F6*11
+A2`LL"bk4F[C,Y(pflc$l,-,%2DMEKdJ$KA34@TR"G'9"%P`NeFH,SXQD,H[e0m#
+0*GCCVVZE2J54kBD8iLA#E!%NmffCIVcSA@G0dNL&L"5bHTXjEG!hFN(EME@S-ac
+DaC2cICk*$LBJTMP(1l[Fk-RhD80H,M@@`8KaM,6V`VL-S8Q5IXDZCIU0L&9HjA&
+V06"(E@"PJU+3!+b#BP%RE1$0'F-8$-U9Lml9fpFeK2iS9DGq)`,9$%3#T6@d4Zr
+p3@&PU@hRbHh@2-a!dZP!qS#ek)+Vb+GX@[(RDP%*5@b2[Fda!qXP(6N'qi"U6S9
+Zfer,(b(c8(cE15-Ca#[$RSj#qrTm11C#NaI&1BehS$'#I'4[K4XkUZBC&cATMh%
+5c&QcaeeNA9&lCqQ88FdD%9Eid(Qlbc4e'c`J@[S3$bdL"'hf,Vl)UUV)PkbGGIe
+5idXD"B#!0f(h2rEkFc!+c*!!S@-pJbJAQ`@VqUC'#(mlj4'bZ)AH`UFSL3(aDbk
+a2V$`PR*)1"HFI5(cNEMP-Va[be(r#1(PYpFGriS,Vmf#*dP`jrXA9PjrElXXkH@
+fq0BJYr&"&'1rFe2h9MZc%d&Ec*cmHlB&"edFCBMc[T6p(E1-Y+qReI2diedlRi-
+c%40$mVq-j51,#(bIEDD5cqBp1$jFZ)MMa9E6&5Y0-'8$qB(fm1)R!Ch,#m5UP6G
+YjH@m*lJT#Kjq@9IQi,AS&C6rj$f9R'hX'-rTkhBbZm(`Z&dJmq24lRRU`0(H#V@
+lQ8XaSVd,4Y#,Nf2+pa2$UkNPE53lYK`qim82JJ5H0[4*IiQb2Z,rqh,,8a5d!MG
+UL-8eX9dfKlD3!'bhep`991-Efbr`HhmII9)SMcN,4'@jBBk`$Mhbd$8qF,01`Kc
+C-J'%f-XDXhaUm4h6mMj`VE`12kf2)R[AB)'T01[PM0l#FDD*9rSX(QbZ[4h)@`i
+%(F)l&!b6eSQV6ejKp3KQEe@0JIXid-Cl2IVdZlJ'!MXbkU'G9A*2J`iiSK6P"UI
+)%$)"*E#96h0N@kJTh&-GP'XjJ"J'K@Pq@a&1Aj+bd0&,108"V13A6YKX3r@)CQH
+$[46+r9Z$0!439%TR(6%pXaQ1D&SI90rJEFZ89T3ApdjP+$8DaFaJBJI"3N*(RZ@
+c0KbYURUj0U)daZdHf0+D!kDKN[P'Sa8FGm)+Rm%HRBK[aHYfDAP!@hCp-L#%0Vf
+!+La!@UiiY2j1peE@`4J`fc[U(N[CZRiR9X4SDd5@KNbN`8@FI$SAGbdK6[(41q'
+r5&,-HGEJdU,'84U0%H#Pl&[G*E'HP&SEUlQ&+Q0e5L3Sh%2j)"'MXkMmibY23cV
+f%6,$iiJmLC@,1E9(%Q3FFkriarrQ2MdI1f06l4P8kk34&U`UBZ62SY6CeqkjA)$
+LTrhS%6R50@kV"MFQk)b)pl$kqEJ&``lk)GLmqGHRe)#dDrCZ`l)VXDGhQ$F3FYI
+596''e1&)b"JLF-C2EYjAdVZQ!K)@NQNRhlI,Ck4[HeEELS-m*&rZ*TIi82HBIq*
+KJj`PqGJ-kGR1lFTZChp*K3iI6Y[X$pf+(ZmD,Rr,bQ&Y6$c1QI*)FckrD3jJIPN
+hpU!91Hphf,THJQdTJi[3J)[SS!+k5!1'8mXGV[+9B!)bTIieYhNF5-JM+mfpFY#
+%+$RCK2b[YqKDMZD%FQiD#dkMTTRI2T)r$+kKJK'`l8SGE,,@6c3D0kQTajh661S
+Y!rK,,QKc&jUV`C!!QDM&@0f*SqR[A'2iD+Xa[50T5)XSrca0aKYcXA[V(V90AjY
+6k-iILA6Y`Nrml')f'IC@C+VM'q1+iYH8%kN0i-Z&2!35YjSQ5$ZAcJq%Ba5pI4A
+a9%!*lIkN'K3)VcJ@m+dI2NT`T8Eb[BapZ%*G-$6PVU3Ih38&CChYG@Dc)")NJSE
+F`NJii-M6@F-BeAZ$@1M-9d3e&Yq--&C!P1id%*m&j2d(%92lfchiq&H`&I1G)NK
+++mj5)e'NPrJS#f@1h9)H@*R2M2P-JM9+PqE`UIQ4$jMB5N0%Y#Z!DdH(rAHMLeT
+3a$4Rl*b%4F(B494,LK#2dUAL'iTm"'JF)L!#*hHX*Pa6@V`"X,C!9eNSN3XB61"
+RVEKGCVSFJ0r%YSGY91$c*%Aj9,akjq*@EX&T0(Z*kp3NZq&,k51J8J@2#P")I+Y
+LE@#&*Ah@p9kc4LQ!-lNkDVi301F5S1EJ(CER(qC1CBfTi9FCGbNE#50JF6U1EcC
+JNQ3Ci"6$UNE%&(d!e`*LIf#q(pq85GK#N@@B+c8k#Hj+3c`c-bHBXebDVR+FKTQ
+Z'5lrS+Sf4Bq0F`E!3eb`F+@jFh656BpQqKATk(EApN99kPKFdK%SiLRS"YUFT!Z
+ekF@4r@hLd,q1kjh1H"-ANKp0&CfA(ZZ0E`DQ[-#GJfj0ri1bX5%5PbckXEDjY3&
+*)fJ6MZ,rDT12eXhGC+*&6Jam24#RZ%@5Q@9-qN$iSjR`IM'4N!#I[krP3r#-Lr#
+#&1NjUJ5"j8AdM)6XCpNfYpK*'-XAMkR+*'9Cf(qkA9K@1`*TKhM20Y1jNEf&+Ap
+EA,fk9J-G+[jqE262)pSbNe3kUp+AT!Fl4Bh*)XN9E%Nj&Ai8T,!XAca6B69k-bJ
+kFbP1IaLT+HDi4TaP!&SG9Elp4&2R1FXL,jDDV+cSqM$3K1&MAZHipb1A6a4C4aY
+q8(8[eAV,hf@'6[crHbS*IPqHjK+4-BZQGAQRJ-cl0IDBAT@YXYk'#(0&*V*Ud[L
+8@BP6i[IcE5@HK`&U48CS`Vkl)'Hi5BfH2FL"dhS5-6#-``5GA)@(@T*H6XkhYcp
+m*E(BlRLj'62J([*T,f&E-ZL-SC36J#MTL0r'PeU'rELQa(fe8#0h&K`-8"DYdNa
+Er`aHE,CV`1V4rJ!&EA&Aqi!#dcRY@0RZi',95jTJ!!#IedrA#qmKRd58!D0R*cG
+L$kPH0V*#mmR6"-N50`I9@*pNS'TS495X$ajM4YZmV&TkfjdblhBl"I0&T`$62[C
+1![),*0jrMNkri"Mlp`mUpTNP8,lC,rQ-r$j&*HM3Rrj[DakjS&RRdi4%+aQH`V8
+X1L`GUJ[hU"fi+Zkk0-S-GCUKUZC1bR-N)SM-a`@icMkSFG,m#DBVE5Df&PZVG1U
+2![@V%*c5GqNjdT`4eLQq*)eL4YEC9bVi-JJl9P-(ZH`aPjalR*'E$iR4KTFD,k,
+$rqqBTKFSh!V6H,hjqBA131VA8FK$R,,lq*UH#ep$Va%!6RkhJY)K*c%brbaM%H'
+Y(YC#*9@(C1"A',-28drUHIE)GZAKc6G*,8,D8ZjKcREe6,Sh@0aCNrqhSc,Q$Dd
+faNL6@'R'TkLXReTJa(-JL-rj%Dqb-GSA5b1NM@bAPLf5q8R095bD)CD9+99*#6c
+6pJlIDhAH#B!UFkT8MHJH6QSM@Lk(DS0YEC9A$'rFZ!f!d+AM1UF"V$!Bb(dY$E8
+rmq$L-pD"Nf0'*Fke!XFYY4Y4B6R@#I#iS)c1M9Z2Faa'N!!U6T9l6I3&1ac(8!r
+@D4mU50*5hZ@Grr+bNM9XX'*iTbRh'*Z'ehd+i#+QMVAMFE0!Nkj"h'"XK@+j(*Q
+U80VYSr0lCFLiqJ-M[95qKC!!"Q-Nk#q&5lPi$2$@H8+b)4hdiBiE-mJH4k4mi$,
+[D-@#2NU0DJFI)B!R,p4C$P$fPNPqI-Bkib+),NDT#i$[$BI%2leaSUH[1UGe!GS
+54$9![9`lQkFcY0LLAp@Y1fSElbmIq%V)4*!!pA,L5-P*G&j8CL3,M[p""*0@FRL
+88p-3I`R0V`9R0H"`pQB,J+SU+-03M8Iq0D465Y6qG6`[Nlih6DPPmN5qUIHl$[X
+bM2cPaQ`,c)EHc2(eUMZ)RELKb3FdkiX2*9MEHbJ,K$hXD`fiG,9-kTDq0Xl2h(Y
+#1QmD+*4,15I(ATCDiSFaG096C+Uep,m&MVrJCM2la@qFir`T)LY"Ab!V2-iUL!a
+D'J%ajGGr*(GmrkZ'ISLl1VVf48(3*%G)J05APPZei3jHHc-llr$R#YVi36NRI84
+%$ScRp1Z()lPR5f'GFA4b6&blZkphN!!(4h!1H5%"U)e3K#-r9p-[FT!!B2YCQeD
+M%#GHlTF+eI42l0lBh&3''HVfLLXdq,)2%iQjX5pLR@Yf-)&I%8VcF[3G02`[[aR
+BT,NmMF"GX,B9lmB+@%Y(%VVdZrFG9A8-)8UPd"Hkd6aQ'[bTM2c2EbGeDAC,B18
+Z1jC(4A6k,ihI5P[UqML1Nc`r-RmRCjq%0YI`k,cmPUZCGiQl$NbAHi1TGCprD+,
+`Sk'M[aNR3HqI#iEfM!hQJGBUNLLq`836$3DHqm[1kfVSXI)UqqGJ#8*&kD"2GXU
+@FdNq[0CPRDI'Pj&qrRX6"&KAG(N3#RNShBNS+B,d"K1EG'QLVP-!k0Kj%h-VJBl
+D+9Gc0HI[D33HC(MNI1`CBSp`I!RJVl8Umq"[JdrQDiV9*)DJL01IIK%%)-E1N49
+22Rlcme$6'i-jSh*bXrG"Y)Q*`aUKc6SX,RVXppA*f9ke"Jj9E%dEDN4*(-%EkVi
+laGIGr0XM+KM0Mpp-hCVDl*84Y![6ae#fd)MH9L6Ji&&AkZ49l#SI@VD2rB@H%T-
+U0%Yi54RdZHdmU[H[6DUD8KNdLk#9)D8Ml!YSe[+4FG(@CA`"c[YHa46E5rh`4H"
+DNZKd&bPhNcE8TY)biSH#X*f#bb$E5dHS3S,mX!,XA-8``ETT95EmD+MffjK8AjC
+me,(ANj4-G0#@-AK&9LS"Z(#IKdJKqPhVbV4N`B,j!m!U#Fr1d8*QLU[[q,l4[S1
+5d'i2LHI6E-Q!F9LFZBUmAHLYJ-#M%#h[dLmX)6QNJ2mkJ5rR1Q!CiDi*f%HMkCT
+)"S!NJG#Ak(b`P9-Nl&Bkh#JpcM@%dEV@C6f#&`AM+9(c"1",LbA,GR5mDV30%1!
+9Y4GTb$aQ3l[PYJ3%d!NRM[A9EiJI31hm-5!q91Ddhc,,%5SIj&F+Y+E`HA-JHX2
+l"%rLTRY"!E*ql6(NQ&$j`9'-N!"KHj!!V6YXK[",d!#e"I9P"`('e!e&ApP[3j&
+4`J([VJVQA'T&N5TZ+"GTXcYZT'KeQ"2RpA&%0RQ&!lZY#iX!e11FJiq"*r0q5*%
+-8Q1$2EqK1#Sd2IN8V%dqe)lTd&lPX+3cH!ZF[5p@cQS1(cY@YmKjV'*+@QCYBBd
+NX``NCJ+bGD@F8#B`I[fKi1LL3p`R-G[2b)BrMrePpqk`3fE!eSP&T'NTkmZ*`r0
+bJUcMR[!NI)+RXN56R1SF4TBqcG8JDZd2-Bp)h,RG-G%lY3"8f"Vb#9dUe)3SYD&
+VhB)+ij+G+(Q8ZlA*ZP9%9LldAV*pk#1#rh!0H&6!qVPP$E`Q9cTJN!"Xcp2Y6a,
+l8&m,`eKIC,b4LU*&a%VpdhRUp*5MKG1c%e(#A99P#Krd0H&6CN,MR3B%1BZMK$*
+%rVEH'DSf9$dX%h8YX@$$[,#iqFM-'E)rr#N*%8VNjI[Db8DrJ9lHU%Vf*Rk@eBT
+L(f#PI1EPEeD)%QcR)Gf*Y2@0)ZN00Qda&8h4Gd&A*Cq&6(C-*!+S&N`Gc*Dp)fE
+h'PApYTJZb`e&im"VDMJRA*Lpdf4+M38"fHeipAN@cD[L4)R%m'fSYr5M!jM+@1B
+'h,E&`ZHUjAR69eEiZmX`TiU,#4lAlZKN+2'@TPL46[%LUBkG*'T8Ml5V%6jdGmf
+mI"8aRFb!c$1KAlTLcdm-e)[+%N91MhRBI2KhdMm+9`kIp,G`DBK43-5Y"i"-LFr
+V%2$%FT9EC31-e"RQk(K[bb0mrDf+i&M[f*Zde#j[DAf`UFP@X[NDU2M`DR+I5T2
+AkB)5FGBVqakeZea@Q[-#pI`ac#E4Yd-T)MPPikQ5i,cLVIGPIT!!4XYIN!$GkY9
+bB55kRE8VX#i'"e'2mi"(&T,'VeIiIL%(Cd[i$0lbRhFl*Cp0Z'PVDV&[50I+fbL
+`SbIj0m3P8JZkLlS%3lf5kCQ@EQXXk*Pjd2MY&EVCK5f3!+d)95ReZR!GXF24BPe
+-bU3FS`14MjV1Qf6cAp"lM+9GGma-,pCBRqURHihj6!ehq6fF12&*qBqT3IVD38C
+SH*&Td3%!`qLq8C2j6U8IekYV*8L#4-2#"%fB$!+#&+G&2+555Y+3!-BXR+c,$4h
+qArHmpH&BN5QXAQQqE8bIf(CT6l%AZi)X`@K9a(!kT8E06H!YdMkra@Ai%*GpaI*
+*DYPH13d11U-)YJdIXJ3Z-FAa40Yhc#$p#Q`*U[0B1ceG*KledL*ERBRApVYMA2p
+#8dd!pJTJhTNf)mSCKUNXf'a(4q&4T8ma@HMQ,-QhlJJCY90f!$hpYk[,I@!43,p
+JNC35PI(kqqZ23V4AZ,HjMPIFeKFX-F,a8Fh%i*M4)rJB%S1,LPSlcfB'SiPQ#AA
+chhp"S3p9eCeiXa+q9laF!CRA![1i0VM9!)ppHReQPFVCe@XD36&@D@dQdrYNS1i
+PaK2Vpk,Z+,,rMak'b&jLeIU@Uf2TaE80fKDb5C!!B'TRk5!k!@9a3V!e4bm6[4)
+,m4[#2BUHTQ!Y"*S5di$reT%$+T!!adBIq%EScieNNEB#EKlS`(GI'NEY!X,UYU6
+0M24C&C4@5(9i3,fh0NiZ4a'TBej&`)@X5NQVa-F+MDEBmTFcIjqCN@3d&'ThPBr
+C+'-SXT)4K1V$m*V@XC4@JZ#fCIRYLRN+aK`paM@mQI9S('-$('aIMBECiMP2p&m
+TT[CIX+QYEcqeDRX)'2dfGEL+BCZUAQ!9m5KeXEYUe&L$q+T6JkqkA4dXFMM)XhZ
+('VSF#,KNJ8'Cb6j%&bXm(1&`1IJEkFa3BLQ53Fp5RA'm%P5Kq5KN5m1)(U%mbFf
+ZC`@[5cYelVrPC)"Qja3)k6m2AFT`f"0k2iSM4R"FfC)X'@EBVQ'qkZlEY#9R*,h
+Y3$6%%@p9"%c!!JbapeXf[jpMa6kCCc+lLce[`0+@B'*fGL%TRjEYd!Ri+ddBF@5
+IpfYH3*`)[LUdSm$q3DpQhIhl,-FQ5UMNpFG1Z4-BVFD19M5N@'`(`94E&b8`CQb
+aFSjkGM'8&XF99aZEG*iNBAGB"DrHUqKNidUKdAVVa5qX0Q"cRQdk"0mp(f26kAh
+Med#22IjM0K-#Ze*P@a69-$jS([C6%EI1XdVRCK9EGCF!lf5bP-h0$#MP5h,,5PN
+b4L9H3PKCU`+GIMh"&p6BAPh3EcX-[8UE5T2DIjQ4EL9RQR%UCMk8T00CIl"Nem,
+LFE'I(i6QUD8r0P*L,be(8(F!9%qKe9rF49QGa&-5!0FSbk`,$JBPTSGbjEVmCRQ
+N`j%DpSE2UXD6-BaK,@MfBJL45`(X$+20[ErQV8,-bL#+fi&#`()91dkMCU[ea!!
+VMhi%2[NVrYdS-l86jbl#b@CcQ[05@UKqV3l+!iaK(J-e6Jq&EYda$HXiE-)rNie
+p'q&FX2Ld`l2@4D%,CT!!%UDVXh)4&DfK22%@ifZ*ep*AhVa[E-HL)EIM$JrHlL'
+REq5ATp$@Sk#SH6GEU,!PcpYCL-YqVC!!AUhipGXQ3Jc(S"!0eH%)NUTdhH6'SY-
+iDpk#58XF&e[@[b6mhJafedjYLdk2H51b%$Gj,8P5@qQ@JC')Ul5%+N3I#"JJp`c
+9DMiqdjb0p4GCTX#5G('$aEP9[V'IV691l3@(!DRCA%*LT!0KT[K(PH(hHTq+&!G
+f8Dr85Se9G,`ZN@BemFD*j&EX1,i4QM1T,9iP31pjX**`%DmVpqJ+%5F!ZeDHL%E
+C%4c0!pZKFBY`,M'bB!caGAip+lf(5ZrH*ahE4l*+iJ)q+'jcLBaRTc43p@'mBaL
+2pi8f60Z%"0c"I90hdrpb`raqG5jjQ%#01KEU(+UL06i3mUd2Z-B%S,AjkG&6YQ6
+PqhMXaH8F2Q5fDblCrPVa'H'XR%AD26@icD8@CR28Uc331,i'3CEGe+!44)2di"j
+3N@0[!$59[DiLHhN$"R8cp5BBjGNmVXJ6PjP+-D8H-9VrZ)9IFPa-mFSRH0PaaNK
+GTrd%q2h4k$YP0-T@jhA)'F)VHY9U9KJj)JAHeHb'!%"'kSFCJk9"2"i,Dp"5M1M
+,k``5I@1V*#(p6SiZ`1-h#PIA5YRSq4"$im1DAqQTGH0RL''9r*IR$IfQLGq[P0D
+IpmZf$!mCBT!!6CQcCHr9e[PJU-JEDHqiM5S(HEc$GN+J!)YmiV"aT`qDKdQ(aP@
+rL9)lZ-T[JDGr)dq[[C&J$ABaDETMIC6-cIra@b5i1V3BLbL2D4Yf3hRMD#((5Hp
+66TQbQ+JY)8XM'E,IRf`RG!P3m-2rh@,"2Aj&ZAcjlrlXkJ%b1!HGUBFa$Lk"j+%
+rb[ShmYXc$*cNMCF50Il*eL$[kTJLDZ8eHrCRj#Y(kCI1-9*DJIGkNrSVYjAYbla
+cMajdDP,mHkTQPVbXq1,paC96Gq&VYPFcD4YpBJJT)!EQla[l%d8'cGk2$#2)8U5
+,6i1CX(j#&2m2')Hj8UVVBR$+@(mU%BI&r+eI`#a5mbT,8kNcL[VGJcqfddH,9mZ
+$'$64cc`icC)@`JmmeRISeGB[McTNEL'2#QkJ`Vr`iIR'BAQ2A8q$MN6djX!R4YX
+2Pa6pp&,afViR@G,Rr3I1DG2JV!mjl4pC+`9S8b-r#ESB,)c6`0!9&Jkcm(-q-@i
+[YL+G[%@df+LD9PB)B1q2%I[$V5@m-)EFY,9j9DV)5!@d-VS`$K+Q8EmU6U0Jifd
+XFLL8SA*2c$PC%di%Krr"TbX+0&Td+I&VK+(e&V6j18fM#a,Q4[U)N!![XXbG5&4
+-jiQriJhUS'BJfaRK#TmZ84hbD0Le2Eq4bk!f1"C9K!@9fr#%I%M4%2Z"jEFl-,r
+9j(56RK5##RcV(&9Ebbli,-Z#lZ5'5%8,e#F2pe"U1fa'QRlG*3ch8V6+Mj8kfq%
+RY4+f(Z6b`#(bJY9eX-ZUZ3e*`*X&5RqjGU&ml*bI#ha)4AQ)'cLR35kG2DS+J4[
+&%laI8CMC6p$C-SBJKKf4jpLEQUkXPjrlM,Q9rfr-NP+5[(!QGMDHDEAljLS53Ea
+-rRZp)@HHAp-JV0-1LX&FKH3-Gq'Dr8U##ke%KqIVImp+[KR85V3N3VIC$22pG93
+G+e,QC&6HHl8NdGXCjeHRKeXHZ`'BLkaX(c4cahhQ,fkP'#1YpR@9AZ)YMB!X4iT
+8-jQAMfe"h,R$4m+YC%Pf@)GHAfNB+KR!5CLYTUDY+GeT[4cHDfS0&#h3&rVCrEC
+hTPd0M48di9ppZZN6+q&U(pjJGrHR8Rl-6CIB"MV%ccN[&'!CN5jI"h@(aCifrFG
+$hCS8Qcj-bIXfq9KFKE`S+lLqLQhLdj3eZ3cV@eeH&%dr)M0YMP-iXI-I9E-J@d(
+9HCfe1pR5fCeZRFf5N@6NNj!!!cV#N!"[p2hQ2&r%EL0[*T)i&Y0DdY0M3lVe"'i
+ZBXKVR+PUqVBc3Gb"@i'2(88dc[5LFm4'#DhH`6di*-3(1'iB85SHZ'+Dh#8FSDF
+ik,9kbJJbCETX9d!KJ-aNQ+hBfH1+j,pci3[GGKNa"m"%Ke%5HS+bT8[I556N3B"
+Qh5!`fd'525Pd[bAI0)"YVUp-BBCrbS[BJUQrUjK8aN3Ap6Z`LYN%J$"!$m&K426
+j)4bG-0Z83GSaM(jFp#LL`10aqeZYQp%N!CpADrmRHClPNUZYU3T3VfcH$h5k,%B
+NE4N(85N48%-a3c8`$%U3!(P@lmIISKc+#0"q1qYl#)YGl()(0X*h@CcY"$,)6Z-
+q(e[YLA6UK@6jY@IQKM[$j,G,43DG0GeB0&M*SACdQQj!V%da2KB,d,%#bUED8Z'
+YR2"m8dIcS4lV)al)Z-[8Bj'6*+a5,GZN+P!biZK"GN39&AabYb+6TD$I,&SXlm0
+eZ4hDljCb`8&#e5m25AYA[j`#i@82PqUMMPpB0(YN)2E8!(9@QR!mq8Zc99GfNra
+6M4Cp&2Fr2Rp+'aNdA`rE+4#C2q$$LiU3!$AUh9#!66-SdlmepbRj)K[+q8fa(U[
+)ZIHIVEV2L6N`Ger,119(FdhNU1XFpjSb`RJfRi)djT[5)S+4IVFKZ+AURHak%B(
++Y5&Zpe*!bHHR!jJXkTc!H+pjGkdBijV4%b&-DN3[$#%I%mr$`kK92A[22`8)1VA
+!UL(TJZImFRpdP,mbNqiTES$5ddk*SR!&Kr&B&#p#YlV`i`ePV95CT*!!i@[(,V9
+I6b1l+`J'!2Mp0Bcd,SF#HCPrSXF1h0D(-H3KSIjfV9Gqb-Bf"pX#VRRhI[9CC'3
+kQ0m&ci"I5&S3hp[SGS8PS`ZY%kT3*%Tk4Gp,![-@VPK[i&cKABr)&aRRh8Q3!&+
+A5@X*LG+iHN1GPcRrGpi&-["$*)ieXKBY9@8+,(2YlZR*pb"6CQmTh('[#!4$R0e
+*U8aq,IU"B![erVX*k0lY9mqX`c@2Hm"%hYGRYXlReTE6jb"RYD%#N!$#a,XD)8Y
+0BE`XMN9R#3,!2pY56"!jm`bNmmKI(RL%pB'Dr`$QDqi'D-%SRrX`Y1C@9'hG$c!
+cF'c%X!i@V1A2e'i1`-DbAImr-p35X[VM*KcCP&lDV)p6e38ZHU[TpG,Q@-N38[9
+%rqH&TqRrQGGe[9jS@HShRB15@lj#!C,CI,(#ec$XVpMIl#)S0R1#3M"(R0Fpif4
+&6JV6f$V$35,$)mULBRb!-b!kipL*0&"UU@1H0TF+rN%pGI)Q#fLNC,YGqK"VM"p
+[S%Z%B(II(JK3SP`68aXH*3pG54+G'[h['m)pTUeZ(&Jh8CYd-E!IeG8b5dHD2,6
+"3N!4dVA($i6'Q[mdaA1Y'k`P$+SBRXMjaH"8EB%,V9DLJ!01ZA,Ep-)2lC-PRIa
+4kc*-[m0[G#Kp[cCS2j(%@Mf[Ff9'j0bVrk@L-Vbh'TAVpDkCXdZrN3kQ4mVlB2i
+KR&M%[0@G&kVlK`dA`[m4*X$A42YTjb@F"YZ&M6lN'3M@N68lrRpc+K%M!YUj80[
+!C0Eb)"Xd@SJq!m2aF64[0PdC"4q@GbNECUM0U219dL68`1@lF"$U@3XU)52!NF5
+E4R1-*9S1Z1fADL'i')",(@69bA,-3K(F4%CHEC&e`acS4&CYikjUBeFZ44$*QeQ
+5pK1UUL,2%cE+(S+QDakUCQ,k'GeGIjcLLa+)i-H!mUI4HjI(ZD"2HRF*CH@S[QP
+C`h[P,f[q#KC5Q%8A`B(QLii`rK8J&8j2CmIR`XM+Be)3hRb$AcdCNkZJ98eTp"2
+mc8I6E@%jVjmZCSrZQQb%+JbK**Y8X1IDB%DPXjl(TGKiUaiN-PX-EdPQ9U4IiBk
+i9#JZV%"M"!XRX4(XbKJGf$[0)rjK05*KCQ'$"Sm35X)B+cJ,m31Deb1VZX8N@[V
+Rr6GF`c-)KfKJ'qaElIG)%GKqm8#@(UX$EU'-IpF[TBrZ24Y3f*lmr3dXSq33M,I
+4d)2+LTBhYp[[)PKAKVZ9PR@E#CE@baAIH5hEM""8RZ9*U!,(1KEHG'3H1B`1JY3
++Da53!!Qm@H!#HrS6X@cM*`[M5R`,S32S6A&8""4H,'R)0RV,&SmTih4E"%Y@*4Y
+1&4!"#"B++%,Xa',Bl@hAEQMfK0KBq1XC[-'&PJ3-5-I,U0RUi'eMlfj[4-90B@@
+bL8#e2#YL%ZmQDYVJh3C@AZ2a8%mE0i`NHd0k",A1X&Gd-Yr`)`(Xi+IUb$%8Ahe
+`J(MM9ZFFmM$2)*NJY-Q0VEZm1"368D5QLE&cCYMcHhCrDfFUj&XJp32Y0,)h('`
+TC`IUY"TH#aGk0$0Vk,GMmSXl*`1+eY[RdLp*j%h%bhI&$4meC9V`(L%X@N12r'5
+GS,*a@"2bMpmC(S,6e%CpIdKUpjLAhS*lI*%4R%rPeaVYhPFL`CjBPm('8JL,Mpa
+9D[0fe+-MX!@G"q)+ICCXK5!8)r4lYRfXHIJE&ZRK-2K3%p,LhN8C!Tdbd(4+8qG
+rrY4l(CZHQ5@dJifLHMCeKZc9$Q2)kj@fkk3-X8ed`C&Eie3JLb48[2rb0#kXfr[
+k[IrQC5KJN!!+I8l@`$cY25,$j21cqE[AJMNVHkfr'&X@RTY#CB)j"Pc%!jlD*NH
+mRk"LB!cU8p&&E6SP)ZG[lYb'GYAh"#8l04b+f8$@*cmbTYk#3Fp91LC8lb'GZRY
+Bma[&9ViepVSPN!$1FYe#2[@!1@fjKl0rI2"aQ9Iei'21Bef*KQDdM-iQ#X,2A#1
+cQTIbJr"S9)-mICN,)"d[jUH%+IlqBBY6Cp$ej"me-S%59Q$AQee8d%l$,2Nh'eq
+5CD$`bka#he&Y!1rUMX1CieG,Se4(Lbj@B9(FXce--"m%96UF'9CBF(rA0p6J%A4
+JfGQc,JZdr$29pE`h"Y'bRApjK%+I8#``e9S-'-cMieF@iDGKpZrBk,ILDD+P,eb
+c)r+UUZ2-"m`'Z!'CYRJRFk-Y5j4B3SXKNQ5ZAN(ch(&qBrLfhIbMd!QV#L4'p%6
+3`15pG4&+VfKZ0e3cAR8BmS5p&@F4PQAICG%A!kqj9#jD5akpjDmp`J&lIApTj4U
+,NmfPqVq@K8T5q+838,MH[!RHp!R0T@%JlDDLU4R"6DUEq4'BmN41#qD#@Tj8!I%
+m5r3!X8#pTiT&pH!ZH`*PS'hp(Sf4Bicrac`'5VFB#JrM[5KC34r4&6#["N6GCMX
+T3)aKCM5iNLVdZ5!I6RKHEK55CllC6rLb@m@26RQ@EVX%X)ElR!P0qXU&SmXH$c#
+-ha*0lc`PPXc3-EIe)YKEr"8""fYjGKZeST6IkMhU&&NN8$41@Kc4(m@108j5AMG
+prjrKk0RXXI`P6L58mF1N#i#F1HLl-&$9#H-fldXY&)TilX-Cp1mi&@5d9BGN@mJ
+ElYIY#hSAp9fZaVB+Yll2K%qiMmNk"RU-a[X8+*E6+CFi5Ja$@acBDC!!#LJ64-b
+`D2AAC[iiN!#lUrG-[)+Gj)(aQ%bRC[0m%Sc&q-kN#Q+pi`mkU+@A#aUNU@DTV4T
++A"2H6eKbSZ$1ie19,Gr2)JiIAeA%03DK$j@P)%R-N!$X98$0[GGC'(ZlhVcAkH#
+IAS'B0Mmh!(&M3$'G&kXp,-l)`F0#$lqQHEUV"Qpi5H[J0BcEXJb24&%fEMRZDhD
+Qj#eVeLkHB6"aS0Y,AIaapd0RAcq&C-(FAkkf1&)jR(iR6'2*"M`"jV3K(fk%#N8
+QXR%CB6GZ5XN4qhKFIJQ4Xm16d4@Ka-K)b-fpCS)ck![2P&HhRi9*MEec(,(M)B%
+m5ZlPl$&FdeMYLB[*Z[j9N!$K0q`jIRr+JpcXB@VY02%H+3CrD%E4B)TL-AdZHdp
+)2AA[`h&#T8lq&D"4q0*cDCEE[S16Npd9h8$am(-e&dl1@EIjDk8C@[[`#Ua@M4S
+lpk%mS56cIQ!HGC'T$ADFf4%LXYMAdVZ8L16iMc-e60K6QN%`Pq#"NP[Q)2phPS&
+d&([-2i5fDFK*H1LpGhfpRkM8"cc,phmKVHjBV)1$U2iI0jlTL,2r'MLA(`[fjf!
+5mE'Y5EC+1-%j$N9+0`aFYCQlP2&aA%[8bQbY)VG#IP6lbN[F36LX,c%0eU5E&Ad
+@qi(Dc&VQ4p3`&TaMHXkX*6(kq#@fSmT!`AhhjNU[XNda['mPY$+6mq%E$RreeE)
+T*`"&4lRhSeMrDh,-Sd3bDfGIA!)HLMj#$IBaa@eS3$2he)F"Q""#Hr)R**&re%h
+BV5KcFALJN!"cGEP5[`JHkp4"QQ,ibLRY%-A[%FfQ0jj,Ra'X4KJlcBBdh$P+XR!
+E*V'6EiGFe9PQXp0'S5QU'heMQG"*FC!!kr`+IKUM2dejAdh"HT5@+&JMFGrUfE*
+qJa@9CAH#P`d!+RSR`0"5-[PNkY,N%,EQhl,)V5J"`FhH9&8iKqpDUpKc[)D8mRC
+2d)39plHSm9mLKqaDS(%5kSE3C#iGXhrY+B[$J&GK5C[2RDi+H%qiGh,IFDJ*BLQ
+pC$Ce$I-eM@QA+!2[XK!!IS2V8ElpP(mNNkh(@ac!p*ZHAqI+*9'VA8Lh[4a8bSq
+SiZ"Gh,h3rr6RY$&F83F2m"hd58YaHh"eZ,e0IP-!AK),@KBA(U&,C!R(I9!'SeL
+HadH)'qh1l1Dj+fe#Vf`&`GL(VM5T0qPb0IAKEc&-FaVEP+Jkb9)"*dlIbAA9qqA
+#k0")@VL1TYS"BB!SF"H3!'(Kje02rPjGK4+Zj046&`$*d!@fb+%aIGZd2h`kdiT
+BbjD+"@mNK+mB&51,Zr2ki`aP-`0'Q4I%54*CpRq2!"!MPcleQ#RGr$CfkkQZ8"P
+N6*96#EC[qIF`m401aR"*5VF$dKB8LMP(i-45)i214VM4%-Rq)CHM[1AB#kNJXEV
+XQJ!iA9"lakXINlR2p&r+bY5EYm2QQ%LAU8'Z*8K-K+KGSNY2B"&hkNU#Ym(H[c+
+kF!kG0BD*qaX5kh(GL4cE[h53!"#Sj)$NdA,"ICT3dBP8aAKU$JTGVc[M,&B)-D@
+P)P$XcfdXB3[qaH,eUTd@[lMq09-rL,jX,FIXqV"6Yc@`FYYp'a,ANQ4mM'ZUH68
+m89UX[TL'SYJcPRh1Zjl"UlSkp[k"6QQiSr-5k!IH4X!KCeUCR!h@P4HGK#`M-lU
+-(6j$Ylc!ml%MF1qJ!lXRbm,DJcPRDehC#q3&F-A$jR%(X'q[HGU["IIHK[(iQI+
+%5&UEIcp!`R9C&j8iGkEbVB)S)[9@pBc-e8GZ5(c"+D(-Q45lcX-F,Z0DL*e0kQH
+hF0l&fRda*qR&qMZZ[pjN5mCrq!E2cIpfS9-P"-rDTpb)pb+,96Ad)0dLQ289(QM
+2aZ)ikeh0k[&kYm,'`PPI,jUFF'f&6efTmLL*'T5K5VY+@GiTC,bZ@i%-XNQ%IbA
+EKZ#pmqqVN!"pe0rUMP*L$5D6RjZ+Br+`+Lj4NrZ4QI`T9c!bKU[q2h)jGp6C"NI
+[C-p$'-Aq2KIKb'3YIe84'BZEE(U,6*!!(5Q+M`l,6!SVAaGQpjUrrBP`ra*kLB-
+,0#@PVflXKc39Sb4q&YKZAmBSV9k3!#lY+(er@q96HeQXIIkR[`Im-F2XG3Q%k*!
+!m5r9XbUUr1dYU+EMCCSdjdS0d+)aPDX*,M!r$Te#*3[r`!$CfSiiEHrIF0*!1dd
+A!Hq,Y5iDaNM'hXk(KFLMDe,+T)M*!f3U@$NE1*'j"hc!ac!,%cba'2kY4HDV6Lr
+&1"e5VMkep$Pi%@6T+lfB$LVZ8ih$mJ&)-N'Ddp(*L&!Mj54k'GViSeYBG%'&"J@
+ZC1Nkm*%Ee,AIU$523!dh6dESRpTq$'`ph'jeFJi$&2Le3iblk3V8P*6A@-iUM98
+i[0jrNfj6M0E5,J'H)+%F5@9,3V+ND(-d-,+CMQZJ2!B!a)[9-cCF0c!c8DcM2r*
+@52Cb)NP*,U2E)CR%80pcaqiL`FdZh9DTFUTZNG#IXjGSU!)@a(Kp"jlK!U*@RBr
+hCdSbXcS"eL2#e#1DrMPa1ifbck"lMm5k9LAZNU&S)MaKeHYA#HTYiNe`RD1A#4H
+&-"9JiPrTR&jNeqS4X1Y+Dld2PKk1T!bV5@bP42kV@9BR6jYLS$dXfe,+61dqhle
+T8(X2mc9E"$pU[CCK*LASE$k812!M!#,I(q`cpN%XcND!CIBr6eF@Ycb&qX(5UlF
+ap,S6pmDA+rH'a1#`jZ4hekG&$ZMB$8Tb#Cd*'@@TGrb@K'!)rm+1p%rhL,D0q!9
+aL2eE3Ici@j`SSmc$l6!UV+p8A#YIU8Iqe#Y,`0-Ym@i09q6p%)J"&+0%$lm$2S0
+e5PCbR*4X+(Nj8$FNbQY*,hA8J13MlA"JXbD(@JlHqq-3TB,`ji9GTlfL4c4+I1l
+)`S##NT[YB"&0Am+fN!!pYc1Qr)CY!CKj(H%)M%l-6ZiR%Bc9m550fS(pHRkj'-q
+%j(Vi[&LeX8YSBD&2VC%i,+"k6U'pMe)CPdRCQbEb103GL1rd(A5aCm2l#*3Ki23
+TKrFk1m[,NA33XiMNk8Z*V,15KXU0lXTLUT)mF8j+,2VUMA[RdP932G@$ed-)aTM
+@&9I$QrSpjNQ`E3,4R(e6I5AlT0m4(!dkRGY,SjLda%-`EIVUBfTe,TlM,0Q)1!E
+QXriM4U!X@I6qIR#Tk&e0`YCFT"KMm$`EIA#kELEM$aaD@TFQ)*C6rN%91""BQch
+IiZX#X@2aEqYiN[F'M)V!10l$PYp$2k8$D+X,cl0l86ZVmFcb-0aUcBJ)FF1kK-D
+49%6+aP*+G0P(DT3c`9U!4[V804*TA'+A1Y(ed+UN(318lBk,E842+2c&5I2d6S[
+[J12mA18!#qZl,aZMS+Q9b#phILA$0SFrl0!q@V2MUT*m2-Dk[VG9YYirrh&FQJ@
+kiPLZ@XjG%p6860DQcfpFVhdbdp5cA#UCEc592Gkh6L)aNThZY9*AI''*%XK0f6%
+r&fHV0#m1)Hp8Pq!HLmiCP,H8SSd&6,YP,Z`8HA(aADhrKHS#cr*j(QZ8hMFM2(C
+eMb!dQ6221+"3d6p8lKp%jMb%JTN)E'LckhKl@k4pl'X3f[%#8TM@9p,J``k"jqA
+UT-&qPrTSRB!!NM62P`m)Q56Fp*EPijri*P@FRdNJh1aj)ZN#h4Z+%5CeA"!ZP9*
+I`G0@AKialKLB669U,6RD%aiZ&)b9&3T6T4L#a,FKLSc6r%HT%JqKPdbQLq*0jdb
+heU#QcQQP5iCPAT'3!,f16*MZqA'J8,Gr6&a`04N5C1hE0k4H6+#Hrdbe)HJH2#(
+GJiDD,N#S'K*YA@,QG40@8NZ5CNp1YpX9VZ9QL*!!)AjBraUME)li*kULJ,!$&()
+8N9(3ZJ"5E$A`cfE5CFjl+eF(,$*A*#43,(I5RLerpV6I!A%hbN$-fqY@#T4I8bM
+EkHE,,+Y(pFXjS[*6mpAbDNd+`PX1dqIVa)U'6H6la2Df3G0rjep0)M9BIFB*D,B
++eUAC,pV*`df!mkqY)N1HMi`il3TC5"A9NjhGJ+-'Q@cX%cePCjBp)K(dJ($JbDJ
+k+&jhB-Ul$U'H&GEI`K0')#J4me#ZpUQ2+P3J2Ai5'qp8bR,Nf[@*(DHcJP2R3ee
+Fal,3j)2SS5q2``Ep1Xf"iJ+@8(K`Jp4I9JV)S*E1p4RpUFm,ec4dZ3fIep5Y+LE
+JZS`HAHRmP[ZGYZl[GV!l"JFk%)Dc5'%+c1!qJdrDCkX3AM0TBhikH4h8q(,MQB)
+ZlM-$a8)l1,PdfGUe)XbR2X3r,TI)X@0b8VS)PEr%UM3IG$XLC(!lH"#`TIKqrS3
+E``)L6D$$h522i#jkE$bhf1mq5pBaq`BMp@j,LZ*$5a+D%#SmRXbb+c''llBHf[e
+Zj,$Uj0Q,%)SND,a"qIHQU#'i&'l(GYh$ek!B$$lVPKTr8aerMcQk5`"LXMr&1pc
+ALAQ@KB64HZDX&F+kZI`qJ(FdVFhK+4DVh"S(4p'NeFl,jFSEa4AiCQb%C`G6QIX
+B#AXHc$qYDM"P5Y'!9F&5"Yc49VDJbZpK!(K'J8ldr4-U[1SNdbe1Tb%rh+V*5,3
+PZSNLRf$KP61b8&VFU#&JU9raST*DD-lHT)HK+pmmkjGhUC!!KV3CSI4@X+$*BEf
+J"@,X+L)i#hG8+YJ%1C*CLRe*1EYKR)RqZM@2ip@V9#AjCaJ-RpB!X@%)ida,`Mh
+Td`YbhrRPNdiKCP0M-%UMj6C'C9YLM1!eqYKQ,DJaJYIN"GI4hR@`0FBUCZhABM'
+@q4kS!+ZhjPmmejA1)5lV$`MJeYRH3@`hPJpi0TNR30XR8Shd,,#S*[CI(@Cmi-e
+Mbd,S9Z6I+liR)T`KSdI&P3!D1ecVJmMQHM4`qVXDmY[*8Uq4BmSiq8jYEGX-"Va
+C-3FUple4)R$KcEB"IB"l!Y1-R`5A",D#3a"mUi!U'l,!2HeB%ppadA#d6imZcEL
+XlCUIE5fFKTqTYK!VCZ0JD%[8`!#L*CrA1`@-(0#HArpV8U"H'Xcc4i0Y0%VD9qr
+)KB*,2+@!`TDR9c&PZaFSq!cB@22VMGP1V65+MXjp%D5-iTaAYUp3qA6[@Af4`DI
+G%e-,*Q@S#(K&4JGPf5q-iFirDaaZIKZ#[[32al[[UKB80'DQ8-#GH3[9K"S+C-&
+6m*GLC,-j5%#$ZUlkG,18*40ID(G'V%X[YAZHVla%!caCQZk!bmYkVEJ6SXlUeGr
+HP-j!UDh!25pQqk%(Ta)3rFE5L`@AM+!P`J1UX)f#YkVVjSK-Y)`''bYP8-N4$LL
+$p%Cpkc4KL@XblUT11&mFNV5kPB4k5SXc*$'hRLA*p)0*5Q1VR"BP6'Kp#V(2@"h
+6SHVFdNd2Ta0Qc3ILppcY1NVTb54a%9QqVQ#pqU,c#f8iBlML1AiP-1c"UDf$S$G
+1JSpi@M9Y%1)bSb`$QIkVmjlX8FkA+KP-+jl6iY%3Cd4`q$+GI&DflXp[qj8T,4T
+$$8f8Q8e02A`2@b!X"`pi$(YEC(9+-mpZP&rMT-mKk&0I#QBU)RPfJX9A"JI'Sk2
+PhD-kic+c[1['80r,QZ1AiC(FJjkUT59&cNp,*FSfNGNe"!Flr'Ad1b2eIq'`ZQ8
+je4(TY5rpUPhD4Xr@GR2)Qc&S9rDdDCUjE5R'-#*!rDq82cKRK#R1Bf2&AH9E61,
+)@hfpq[aNFKI4A$"d5TP6Hk4b+(188VSCc'9Ma![hP8bEDTXb2$QES,p62HZSDSf
+jr4XHM%8[pPl2@%JTSfZqe@H!R39!V'9ZB8EDR84*LPZ4aX6fEZ&U--TD62T`jU8
+qMQfh+T)#qkQqP+9,fNQ1"@+bpC@mP0,ca!5$FT1pG%4XjJeNL'K"(3cCVablXLB
+Lm9251Dl,9bB8ipq3!0f2P0REdSEMNXNE05DjrZ60aRFPqf-TLE#%rcJl@DG[bJ+
+D'm[mTEb6$24cq*V"9ZIQ5F%YQfBc!LrTDVU,YHQ,Z)bc8Y#%6-diH`8d60p#pQ2
+K54-m0['CVJjG0X-j'2@9P#YdapB4`H6[cETFi!JBPP@$Zl9hjFNiql(!IMhJ0,)
+QZEfE0&@Tb2bCaM&4B5hI1lCSm-)Z!i!eX$!0ml04rh2aMc[&)%c[0EPjSh*A"L$
+'$A5**LK#m$#$cU(&lD'F"Xic+e[JV8J3fEA22'clK#NMAaZ##3L#GdEQ8fHlL[S
+EGCpA,a`8CFPVQ5j2dG%Add2#8&"8#TkkkU!Kb2KIL9JC)$iGPb(*FH*%ZjDYBTm
+$9h[HVmU9m3rkR*1&eapaQPl9eTddr#[`+H-%lfp6lkc`DeV9$YfcRh+Z6B&2k@0
++XTVQT6#JUBJ6CZRZfm'fJqmjdfTdNM$$KB"40K*XC$NPFcEcbm-#LR)A'b9cFQI
+e-'(Iqhjb3lQNB)[Y3fqm"#,bN!#le*J@kXkY2IrHp3Rfkh(4REYZZ@8rjj!!DEb
+LTC-6N[J4TdMi6&@eV#`"E[2'U$FK4TpCph,6V-Q%[&9JI,Mb`fkA+iMQIk'2cGU
+hbqcV#CdGQm0l3bR8YDG890S@Y,G'U$prC[E"%M6c5@XC@i1$@##B8iD,C1-k-#5
+#32HfK+64E[I`[DEVQ9096Mcc6mr!cb@ap51$Z1qqYlDh'E`DHa(#@k5@p'2*5Pj
+V(ZX6,!ZQA($d3[L(#`2##riKS&Q%S0&M@JcGmGPTD3bZa&G2!I"$XCKkkHSC1`+
+`&1C,AkA"9(Tccdlb[$H'qc0eh`2HacQUS2d*8Ll*[!Pi1*M'JR'iiAI'cLq+ZYU
+B$+lmX@kjpdK&BB8'JikNc&0$*56EM3F6UF8rf`cB!M4Q`I[8-pfqYT!!4!4bl1'
+'M&#GCI,VS*&!rM22DZ-*XR$3cefCMq1FdA!&N98+dI[f'&pAU2&,FCV$VcD,m0A
+fXZ#S#e*8iAr!XT6N[TYNM0BQ@qdLF,!NFKh(P@Tc10H,J5S!LmL#23F1kd4L*lq
+r*KM3b$+p!4mZ,SFXI'Q$4R126e0k(dM-@+NGM3ihPJhQAl%k60c"@*58-%e#K0L
+95PR,Q-ZU6-XJai,QiHRA8"GZ&i-h#@5-j`kA86*b&C6)04**#jHpM0r,Nl4QdQB
+5@hU(eR1j+3SbR4B5KDV0[&`hG4I1JG1R8,0[5aClcp-bI64)'QN21L!jr9MV(3k
+VRpqS[`Umdp3E!B8RVTbCl'Bc*N#9raGI80!(Vl2kbkVjXZUDN!!&m5("1Ze'lHA
+DS+[&5c*(&NG"chG,q[!'K-8@[Riqa"QY6(,&@X#RP+AH)cM-4,[SAUBdej`9e9a
+-S0eF-G-HKqH*EBDpL(Up$2YLY[T9#%GbVM3LP+13!%6*#!B-e8Fq8YP-@BZ`GbE
+SI0LP2H-2lGri*MF9i%KHMXA@&$#"aC+AU#B+[qS0&dk`dbG"4dUP)p2f-9KHV5+
+-3EX6#iFY+l([N3h+8E!%aG`SS*U8N!$&E-B%mcUXFaf#)2$0bB3%),[cL!K5hRj
++15#[l-R@Lip2ZDdAI6@"[l8ZX0!RmDhUF$1LqX3SKrKGFX8paY`a[e-!cYGZdk)
+EKCN#2R8Jh((NhjYbikhb%qU-E35HTX-NQ1"),kbr4!S-p1XNX-jd2-%#mAcG4a%
+fSP6T0L(f5@l@f1+jk8JF,r90qBlbSkB"DI'Clr+I2-"k2l@@@++$E29(jI+(D*d
+l!c([9Bj9pBM@ET6j+U"4%5Li&Y[V1e'SAZ,Imh!j895QQh@Mq),e1eMTjj!!q%V
+8A9`U[pR9I2dHDcR2#'N6adq#"3(C3%-jXQaRcm1qpLfVbMk`mZCFEfTmX$mX3Ak
+hP9Y$96M)Hk9$ieaD&)fd3d8i@L3mSH5l(mqGZ3)J)(lI'k-G+8ZDD"l+9#VF%YX
+B0$Sk6qHj4CH6r1Kq+$-b"h(AMS%V#Uq(L5Imk5heEK-YreVCGQV`rrMCiA&0ZaM
+3!prP,F#!0F,q3c"K6E&&@+4%EFGbcGJmh2Pr,qSE[[B[BcXmZF8q&,`dp#PXT"e
+cl89L)MlRY+c1IQJ%31'JcXY-#iN5Ske+ZVQjmTXNNUm+"HaRh8(eRm%q)$9&CXT
+iPY*XJ4NQ+DX*"0T%XQ)$PicHbA`MkFApjce`q-hG4FY$,1,EN!!qFZBQ%CX&Pp[
+S@%Df@0eL`F-TD)8rG)+b*+4jj1XFR'`rIB%C%PDZ#rc56K(JHi))ki,EZ-1-jqH
+6iXIMZ,('%[r$kCRbJaDSmmlhV6'm`HV&r"T!M`USQc4Td!3,IpH1HF0p12"mfR&
+lX+TI8`!+UE'pHm!cLD+5T'%V5h%pMcbE2jf6mbUqJXk,H8RQAfP1T-bp2Cr2e"U
+KU$qCI@`(IjIIr)D%0$0*Xc6"9T(j3,Y4KMkm!&'C'Khp+69#%TajPBB0&j5$#B[
+JGU`&QM2V9H+-'JaFU)Ql$,)q--"8a$QilKaS5"pDd@TTS&FD`%T4PHaVKCEIh)c
+q5[B`YlHQ-'!S9r8A,%k94UXPlMlEL+Z$"+pD!jRrmId,"!*ZZ13Ym@30GjCF'i(
+UT*TeGi5NGh8!XCH,YK-q1jb+F&R+pb,2Y(j%-hY8VHl!iB,-jpbP@HM-ClMBhca
+`m!6NYK%Z[[jijpidBk#KeUZRr,pYc2lhXU8bXJqba#Sj9-,S*K&)NLSh'jfTK&$
+-VBkp4`mB9Mlhj`C)8kar"#Y&YTISS[R[h,N%a*2mR4k!K%e$icdX8VRhTBCj)9f
+K"!h4([%jH9,XP*A[')UI#EkM,k%*SadP2im[Rmi`#B!,3pCKmEQYC3iMhFjQ*AB
+hShhQEBL9aNNYa&i@b5diFT&c2'4Gq!ZX[ID1rUXS,),Y!d%32qGq%C!!PRCrj#5
+8j219*6J$Yl+H(8QIe39+b3%EVYKhYUMZ`33-9!4bQTr9VVYTYaY4FLqR4HFYdp9
+E4U(SJ9&(LhF"9V`fUDH+(%)NdiQ@I1p)b#5N`[AAM'!GlB4Ld&HTfk`E@3GkcLL
+Bb,2[5-14BBpFDpIPl5b`PT0%2#mSCN-&Y-JQIZA$hmJ`KN4hH5RE$T1!NVP@!ie
+&8r3aZcEcc9H'42rAFkR9'-qXPk8JcVDqpCbYS)j6k4N%Yaj9Qi+T#!efScjhPVH
+-@db$JNR,!"QScR'Z[$#4mKK0SJNEeSIF0)*0KMX28P+Lq33BXGS$mZbZfSlPlJ6
+9E#'!)p[(q%c")q-4[#,F1Lp2hNe*PP9T43Saq+D969S4G!rP+Z3kfkH$VLZ[k2M
+6lX$QT24JVf[1j+1DM`[+pe3`$KU,R8b-MAb,pjKBq*d,*([pEdA(21[4ei'qJmR
+C!YdR2TVbimSC$4ImXiY*`,4CUahD[#mi&j1VTID%D`a1[5UJDJq`&)$UaB[KHJD
+-U)+bBHKRYN)1m-JGj21%jTPeG8GaKFh#BcpRciHhVL%LY'3Y3,IZKJMdT3B4YKP
+"Mi[S5-qUSEf`j`i[,D3iI0mjS#MH(G"VV`YrDmc41Y"`IYGNH4$eVp0A0)LGV@*
+A1S((IS19mZ,KIJ0+RS1)iMGa22aM[cLS(!-GlPa)VdX+MRZJ"b*c"*Nh2)[XI"c
+fV[D%dPXhQC4r8i-ZEp([PQJh9%'hE`*J@YQT'+`FY0%+faGM63mSM+C(X['3!&P
+(1BCN+KYLN!"2@SR0[lGreUhNk3*S!mJ4UVNjTUk&DHEAqGhNq%Z,MVdLFKiLJKY
+Xj-F6k`NpfmjdNA"3EXd0*9Y0QRfr$+rL"JV-NK1[BhDkSm5@Nh$b,p8&lf8hfL6
+pa&QTr"2pcDN5UIp+KK3r&hBlZ!`GkK'P'3Dq$c"$Bm)!!mR2qaL29')%pX@aeV5
+GhAeVYQpGCQV*ej,D11bK&ZVr%59T[6jm"'FK2fU9Af&,k1e!UeQUIkN*U@r0VYb
+&ecG)(96!T"XMbJ0%["j*!8YHSfE#VM@8(5"M0Z[%U@5LJ,!!PacYHNr1&4lS8cj
+NP6mTN!!5M$3l5U"r6hkk!Qjh38DGh4Fp*1L)Rj!!kf!KY*&!J6)SmF#Z-12,*1K
+4fTk,&bZ'E!ATJH%8-hVIqXmqeQBHFdKprd4P!MZ*dp2*[dGkiY`RL9pac6E$`(`
+k9`fq#4iDiX(+59$r6l"#bHZlN!!3SC&SP!F*3X8+li4RbH,5$[4[dE%hR@YAh2Y
+I!"F)rcqGe)U3!'iX[,iZSjiE54L+&K@f2d8(j)qPM!iHLN8CmH&JiRfVq#@P3,5
+8V`NfZ3!R&)YF(N%+YA5T!'$CcF44[djQVK!X59$a#0,0m(p'340$2[Cbk'A+S%6
+I0Y+,H`Hf`YF!FrD1@behb#[*CrhH9Rql3'2*$3V(9Y[mAEklBKHNqdMi0(G,0#X
+4Q,'U2faU5Gc4*%P,S5RFdNbj@'SdI8AT[TXaM,j@FTS,4m[C+M0*Y##h1,qpjc%
+29TGiMrB1IQa`rppVhf(MZpadlU5a@XH5SDl)8jJck9B51P5j`Iraa3$E,'qE++2
+"DXJ8HU,(29b8riB&(d#JAq6GZ2#cDCNRGf4YFk+[4aAQD8cr@LRQL*+*6pfK$Q[
+5V91-596q3'pd6!+2V)rmHQ,"jK!X2aV[ld#%Z[CEY-,i-2@ZLikc39eh2hDG!N@
+8bhd[lC)RZjf&JN#(91CCG+(EGB5C$6%`8!CEKUUCCY6Ek&pb5'"P0e!GqmLp'j,
+(k+Rkr)r*('X%)S@q,C9SZpik#&-XV6rXKd2"hU#!Fqc,8*kScLEiiT3EP2r,TaM
+LDHT%L"Yp(bKLlN8AF)$h-SQ#pF'HA"%4GeVHqA!h"j+VF+M04pF+ZBC`#!Fd(89
+X@I`lCQQ4$b*GVPI-SHr5-VqT4SM&l3"a%FQ!#r[$@"S+2FZH69+-X!QkAaD4jDk
+)Me%-ele'VJ)@mT%3,DlcTZ$m(#'CD4lqUN5X2RS%MrZ#+G1(Ce`lj(T&llM`dr8
+bqUb9`CZj[L#KAL9GNTMhHEI8e1VV`f6DYh8SP(UAhTeLY2dZKHjh`FaY#%FX!UI
+ql%(-U1c)m6C"(b[GK,[)XZ`Q33!hFJep'89EY+clEKQ@4DUM188S1-eBi#+hk2"
+eIHhd[2!3er@6I'P8MHE%I[,B#kmfNd"!PGY6#j!!@#'"V*)B`8%EYP("2J8HdHh
+@E9889*j%`A9+S&p[FKBmL[8r$0IZ22J0"'NNKlh4Nl$[+`Lbl1lG8X"TK6lE#eB
+lCa5ZF&2hj59'2T[%X[!Z%kY$EHAdZ'PfNHclBLTpHd1UT5!AITEH0M)H%JR`jiC
+YK#b3!2(bmm,rDj20,FkhKIRDeAKqpNpIUZX%mM(Y*1elIRNSRU8RTZ9QXa1l2rJ
+M,,UX-B,jDHA&VJb3!!L&96!r(F2H`Ylql4pMGZjJJUqGU0cfBIr2M9',(&N51k8
+81[M!G'6&"F%[dTY68*6kHBRSJN9T2"cEr(rVH,`D@C!!KN[Ih'@FJMZ5SJKCBk(
+bD&Z0G(MlAH@c&r,%UZkS9VT'hST8Y"[eR[d"d[M2"`&rlcaYm#42pE1$-KHRNar
+#aPbjJfT6$82j64b,+5BTG"%G%T)VqV'Mr&*1&LCI[J*d*(N"(Mc[HG2"8$FIMT-
+T!-EU[Gq1YGEi$Fa[Qh3S94r"9Hk#&Q*T5fEkPpl+!qk5S&L`E3&)dACQQ1VIiSA
+6,AdQ5T!!KU3%CBQ%f)"eKXp`c`VK$Ii6[LBDES(`dqBrS*!!'UbJFhD%hY@'GUS
+$S[N&p6&(R+rKPFP&5U92T3("EIQkmef,L#d!90XRei[,Ql+dNm@SfM3d6Z@XjmU
+PAfTi3CXYEBbMjPPpq1$'1pc[kF9+N93$#8j`SMJ,E6+$5e3b&PZETDLCUATF,`5
+![B#G!I`MNA[IGEqTb,J2B9YcVbI(-ji'L)H3!!9Tk8p'2"4A`0YBH$BT+X(8[%3
+T4jbYTiV!Qjh'ii5[Hl%@e"jh%iVB5$rbi*Q(pd8-"Hq''`hq[GCf+Bb6l835V5)
+c'5FMY0%j@qLl#1'ifZek3Qe8,q)P4)"BRA'6[!3FbaT"E6@1L-X"IXYkRl04mHR
+9-G3%Bl%1-IefUb2pTk-p)!YRkTC!PZeTkNk*k&T3[TihKY$i0lZpE@5m6+P`'6!
+)HK'V!pPfh,0f$D4*bil9qkU$UZ&K4qFV(2a5*FVYY2$TBImK-La5hfqY9GSCKH1
+EjHmfR0i+D`6V0i9,em%-QTId`0h-pI[fi[K35"ZqfKj$C6lEmrXU+9!"`cp6HcQ
+R&Ip+!NlSC')BbJ[KJ3ZVR9p)K('"8@VHq4q3!!AR`kmp4&9HA[R4Lq$UP[Fe$09
+q!BkJ,2[lr%)DiBr`QLUUT%hfaA*eTGJrJc$fi9XE1Qq&b[jP-Qq%j+KdjfXUGVH
+,eBcibiZ@'cL)@G@3!-ZLE&H083*Cr4(hkR6IECCp%35bdfhKY(m"*M+c`4ZLT8i
+VZQRH'R&SZHmach90T'G(e4%lL9dRJl4aXYE0Sk1SabV6"QaQNR2+NLd03Q2Sl-k
+'hq[P9AP3i@R5qD41a"r)UXEEI,+LBT!![,HT3+CjFB)M-T%pp4i+F")Q`Y9N-K$
+2$I%#j,'3!&S8kTkreD&qbXh`#r4DR(lLi"fU1erhXH34l2$e2VjU5A!$K!B(NL-
+jTEQCCQf%1h"*5G@V'ISC+qej8"Tk8,2-LeaTP,h-Dhjh-FAdIrUQKi8rFNA'rRk
+D#d1N%[36("kbJr5NM8-k6lB5pAU`eSpE&XZ1VLCGj8*[1kLXfl@CEIMm@+lJJMT
+9M0MAq0`ZR&8#*0T1-Z4CKR8%B`#`+E'%SaVMh45pfa$3&l(V)Cm@RH!Rd(PVqA3
+0#CBT630cLL%Tc[DdEMaIdN`(i*h[BH6I89JBCALi4#E3BBYeK!r22LUIB-DQE1X
+6c6SqqR9i'#K$prkSfSTGr`F@$MmRli%#ecR#BlCZSjePBZja#R0Yj)*UlkUER5I
+@hrFX0%p'%M"&J8DhRir@6[YZ$I3ICM$D#h6a0BUqcPM2$K5R#Q%`eS9jL,JpZ9&
+&I,QhQ*P6)*!!a1mKmM`AZXl[$!0Y9*!!CKLk2"#Y*2,A6mUT,RQRbqMISib3!",
+(UeH,B6(JqC943hl8[J,4*0J'cBbe`(D$5m3'"Hek'qim310KRD&C2SF6ZRJ,bLd
+T64*He5k$#@-'l)CbE9'GG+Cf8e!F92h2G+!U&j!!b[c'rKcRC`jA&Ja(XZ"Sc'S
+Yddp#S3li8@e$[jXi[GBBc-)0@1Rl@N'(JP&Vi@me(!jRil04h2hRN5m%jkPrQY4
+PMD,&r2Ui6HRZ,1JhiQG[U3,(pYN$b'Qk1QR[YN5e!"Y`iAp#I1X2fj0PT,c"'UK
+iLV5$Q32jXV,82SV2M@+q3fb#2AFa@@[h[3HCX[MaJ+f19Z&-L2Q&IZ`hFRSHF0i
+NkV,`)SK#TcJT'G`B261Ef&NTa$1qH&[!018ShI!ab0l+541KH-j1IqS1&irQBkK
+Eh)qMHaAM0#Ca9%*Bik("YNr*EH,%jVJTG,qBTQeUkYc-+&dj5FR90RKX"ae!Aa+
+R,j@cZ1R85L8qmHZ0clZ3!%K&FZhmXfc**Ia)2$!2![)P)hSr)Cjcm-08)HEiPJL
+%*1NKL'A,NZiHi4KQ$F"PRKT[b5lq[ITd2RK8ep@jUTJI!DIcH&P2-frHX23P'AH
+6R,a(reHH469jPlYUCDmmiEp@d)!ND6rEeQhKE'S2eI-GlP1C1mSrCANLBjI@R#Y
+D3,EHSrl'm[Lr`2k*[m@H[+2!'Y3j(@`2PQ)6bD3J9T4cI)+3!2&f[@YIlmcHbYH
+Y#L`rJ[k-5p$)j3#1A$(%5NQBqPG@V4Mdh3"CT#+Ble5DcPe$h`cH,iJmc2NK+k*
+-dI8H4YU5h(Up9Y5-(D+13X$+3lRMK@brh*4))@2+3Laeld4JAqRC&PFJ%k22qMS
+r[-H(5A)[AM*QmpTH9K,6A,QpYh4E5KF+3%LG`C4Nci2K[,V5VJ+)QPjjdG2NP(P
++%h2,15MQfF$[SQeA(RY!4-$'e$X5)5@9p,`A1hZ3!)d'ZZYefUBmApR%h'lN60U
+Cce-RGD'4S)3KiJ-VB@,2HI1@Tc5MI(+r8mGKE%#+M!')Mp3RT)'a)XZd6a+"$3F
+Z8+JKr4NE46AJATTJ9"Ifl#a([&6YGXpSMJBM01'B8QL`8S8VjD$(bVY1qKFD2lR
+aj03Mrr49[b+Y-TPR`rkfCAR22RYjUTU"QqD"dDPJYrcE*qQHN5&aKE%-icb)-dZ
+KZ`IjFhbT9%X$KJ9LPBlMdPFQ"mj-iL)VcR)5c'S4(Iqb533aU3M@-fN!$0kqpk9
+HQELE$DGS$mSR2AmSAQmXQ-$)q(bBhV0XS*1(Y8%DK,&0a@$iaJep(8EfR2&QQ0U
+@iIeJLX50Gi1TA%!&SK&3'RiZHGRH'I9pI0)`E66b*@JmE$2Y+2H((eS62#6JNQr
+D))k%+H+aYA#[@%2jqdlafXP%TCI2p0GdrfNG&84V0iR`-GbQZp*+,4P3Pk9598M
+qR9rPkkqddS&ml52@LR&bCVeb`aQ`3'8VdkIjd%k$YP16(0!TF8T'0"`8&dU*RU4
+r+ZQ#QAFHY@8+0pH[Y8M"5N-i+Me2VjG09(4Ee#Y!a+&C,V3"4aE-bjj9mGPeXVp
+J)`M86b*aNM$QYSh&FCmBf0QpZQD!RT5##8(!ULD##b[P@V`Ijr"C-j(4BIjbFVZ
+NdXaf[FFJ&lRM$HZKIiG1Zi,q,0BG)VjFq194"%HXXdS*Xd0&0Lr'aFLa2F[+d1,
+S282C-TpN+bPFKYk3!&E`,[f)bEdV[f5,N8J4Ya4dV@RK2*K[Ca!i6F"p4FbDlk3
+$r4$(q,$!lUpS+1ae$$BLDQfJ)!3(S+T!`bUd1$e[cELNra-qZQ[D`Ulr)Y&BaZc
+j@12'9QkmX,Bm56mi4'#SKS'r'6!"(qfqY$G31qir-%XMICb9,5KA+0PdQ[0D)AN
+A"HS3LUQ62S'YUN+BkPDK1#(F`kF1ET`5((8ZpBI$QdYl@6,kb[Xd4NU-VmibQL`
+RC*`E2$&AQ"!J8A"IUk,DE$pKD96P4RkEF)cC8rQR4+$rQP*[8p20+#GREZr&+2Z
+3!-#R,,c!2I(rcbJaQd-DU$TDKG-!`5Gb1#'fFcFH1pI!KC1JI*f)A38E2Tk!Nia
+D@(Aakjp#Y-dDJrRic[L5lF%5C[,S%,eAqcEr)HZ2[-+[C5lR,`-rp-T1VSFPm+6
+2IG6Fb&j`(CCc"X8ek-TM0[@r2TA(1+k,',BANdEZNd50Q(Ea$l6,V2D"hl0p$iT
+Q,8l##MbN-@&5mRbpRjd)pS(qB5aeMCc"d--ZhLBhjY5'E`V'ea'Kb'GLj[h0QRS
+2q%JpNE9Qp&#6!r"lh@0XpEI""$HpS!mF)H)FQ,D-VF*%EShDX6&rrUfE+P-'3H)
+j"4P9,#,dcQhcZ"m5#+ZVm4l[(J[Z3%Zre`SK&KRLcK5NYX9&,Gpe9&I@dB&mq`Z
+-f'#L$*H))hBj5*@CkEe$K35fU1ArB2FR*NJkUrjHemlke@`l@m6!HG[K+2[*M&m
+#3qAB"D9CjL!1$FCL%Ef5R9S!r'$(@58mSFe,XC('k)pSd[R($XN8BG'L,Z&-XkT
+e5CP@M&1ca+89J@`PLU156M82*kJmQ)B8X-%aBZ4PZZI&Bf!kmK6&3@!R2cpMdPS
+f!pJr#+K-U)m9DjQaE#NP+2Ql+bS6Si)a5h&CLCc%ZbD`$Y`CL-r-d88Ed*I+MbR
+HcKImJ0GEX3cF'd'@Tdh5VqF9hGhE+&XCF[&e3alU@T58JQ&!Fe[SE#J-0iSh3)!
+HPN4*)C6aAYQRRNBMNqj'b*KcLYe,2ZNfIY%$JM,8-Hadp`HPFF4&#P9e51--a-U
+BS)0Vi'bfKG6**V#GB@eJ5Jm[`@qG('8Qk88qej!!rSKYk!KEaeJK5p*QrM"eE9[
+D+[fl4ELlj##q%*em@k&9Bk0!4@h'J$ZF+TNH+6qQF"hfcf-UB(8[IGS-MYDGElp
+(QmP`Y1EbRJeU"l4IVQcZ`KH(!I@-'+6XkH90R9'VESFB1KRQYqT$UR(kA)`$kq6
+Y-XV'mF@ZLLHj%RQ$4l*mb&#[&!cN'!*-V'HBf4fq-k@Ne(D[M1PA'@VU&#0R'1D
+b&m%IR-A$Ed*0DmeXJDN@ZHUMCAXiZEB82Gq%a-KP'FP)3$Nkk9c(&*q&JmbdU`R
+JrUDfQmHYHf+2QT+PA!lq$B6EN!!kJl4!1Lhb*NG*kp"Y9QCTj(FVLd2NP@ReCj'
+PhKZ3!'!$[E[k62PqDk`X5EQd%[k8e5`D6EYRq+,AMZPj2VNQkhVBJq$[r[[ifdI
+)A*XZC19mF%PF5G'V9,E6Q@`jLLX`l#*1e4XHLjc*0refDJe,c'`XHj%SPr-"0G'
+rV)D2'3X,fa&AdeMS6M(,bMrd1"6hh4J(9AH"e-[hXfGVid*P0eqi8Jf,Fcq#0K!
+bEIRp[LFLm`lDT1M4YqMR9'+B4FKf(L19ij!!9H+Kj"BUX'SC"M0Ji#9!*qjJA``
+1eIl''fVkI"dbpJD"0#RLI`Mrh4RUrES[Xp8Nd,j[a(-4KF4pjp0Fl0!B,Cj8IVj
+2dQb0kf1*&hdJIUe,lE$2*'Ye-TP2mXRIrJFqLf6F3JL4*CUaqiiRPerK32*A#2e
+8paSD8YlGkbd!9T'Em8M1-M+L*lFdfTfB'U!!9I0b#ce"P44[bMqlABIq%V0)lDT
+B4Aqph@b6Rde[T+kYS2N)82PTYQki,cVdN!!Pi+bMG$`fIPm$$BL+p3'Jj1AFCI#
+Gc)#4!@,%"HXK5+rq9Y$U[0"-hR9#`ZR0aLkBKEE6J+E-!rGb`9GXcPD19K&R4V+
+)4d1cRqrHR4h3-J-MlArUK#00IV@GB)Qb(Yk&deK3jNA4qDShB"&d-HN`l!)q+Jq
+JdRf5QTZY"@Q$+M!M,SKX4b8TUCUU4`GUmY&Rl46C%0V0VI5(h&-(!+@3"!%!!$!
+!3!#3#K@'!*!(FJ!!LmRrN!3!N!UH#`!!:
diff --git a/biblio/bibtex/utils/bibindex/Makefile b/biblio/bibtex/utils/bibindex/Makefile
new file mode 100644
index 0000000000..619c92a0af
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/Makefile
@@ -0,0 +1,189 @@
+#=======================================================================
+# Makefile for bibindex and biblook.
+#
+# These programs are written in ISO/ANSI Standard C. They must be
+# compiled with a Standard C compiler, or with a C++ compiler.
+#
+# Current target list:
+# all make bibindex and biblook
+# bibindex.txt ascii text file from UNIX man pages
+# bibindex make indexing program
+# bibindex.tar UNIX tar archive file for bibindex
+# distribution
+# bibindex.tar.z compressed UNIX tar archive file for bibindex
+# bibindex.uue uuencoded bibindex.tar.z archive
+# bibindex.zip InfoZip archive file for bibindex
+# distribution
+# bibindex.zoo zoo archive file for bibindex distribution
+# bibindex.tar-lst listing of UNIX tar archive file
+# bibindex.zip-lst listing of InfoZip archive file
+# bibindex.zoo-lst listing of zoo archive file
+# biblook.txt ascii text file from UNIX man pages
+# biblook make lookup program
+# clean remove all recreatable files, except
+# executables
+# clobber remove all recreatable files
+# install install executables and manual pages
+# uninstall uninstall executables and manual pages
+#
+# [01-Jun-1993]
+#=======================================================================
+
+DEST = /usr/local
+
+BINDIR = $(DEST)/bin
+
+CATDIR = $(DEST)/man/cat1
+
+# Compilation with a C++ compiler is preferable. SunOS 4.1 CC cannot be
+# used, however, because of its erroneous function prototypes in stdlib.h
+# which use char* instead of void* in many places. There is no such
+# problem with Sun Solaris 2.1 CC, which works fine.
+CC = CC ## some UNIX C++ compilers
+CC = CC -I/usr/CC/incl ## C++ on SunOS 4.1.1
+CC = acc -Dsun ## SunOS Standard C compiler
+CC = c89 -D_POSIX_SOURCE ## HP 9000/850 HP-UX A.08.00 D
+CC = c89 -D_POSIX_SOURCE ## IBM RS/6000 Standard C
+CC = xlC ## IBM RS/6000 C++
+CC = cc ## many UNIX systems
+CC = cc $(GCCFLAGS) ## NeXT
+CC = lcc -A -A -n ## Princeton/AT&T Standard C compiler
+CC = g++ $(GCCFLAGS) ## UNIX systems with GNU C++
+CC = gcc $(GCCFLAGS) ## GNU C
+CC = g++ $(GCCFLAGS) ## UNIX systems with GNU C++
+CC = g++ $(GCCFLAGS) -Dtemplate=Template ## NeXT systems with GNU C++
+CC = cc -ObjC ## NeXT systems with Objective C
+CC = gcc $(GCCFLAGS) ## GNU C
+
+CFLAGS = $(OPT) ## most cases
+
+GCCFLAGS = -Wall -Wshadow -Wcast-qual -Wpointer-arith \
+ -Wwrite-strings
+
+COL = col -b
+
+COMPRESS = compress
+
+CP = /bin/cp
+
+FTPDIR = /usr/spool/ftp/pub/tex/bib
+
+LDFLAGS =
+
+# Use /usr/lib/debug/malloc.o on Sun systems for malloc debugging
+# with acc, gcc, or CC
+LIBS = /usr/lib/debug/malloc.o
+LIBS =
+
+MANDIR = $(DEST)/man/man1
+
+MANEXT = 1
+
+NROFF = nroff -man
+
+# Define DEBUG_MALLOC on Sun systems for debugging memory allocation
+OPT = -g -DDEBUG_MALLOC
+OPT = -g
+
+RM = /bin/rm -f
+
+SHELL = /bin/sh
+
+TAR = tar
+
+TARFILES = README Makefile bibindex.c bibindex.man bibindex.txt \
+ biblook.c biblook.h biblook.man biblook.txt
+
+UNZIP = unzip
+
+UUENCODE = uuencode
+
+ZIP = zip
+
+ZOO = zoo
+
+#=======================================================================
+
+all: bibindex biblook bibindex.txt biblook.txt
+
+bibindex: bibindex.o
+ $(CC) $(CFLAGS) -o bibindex bibindex.o $(LDFLAGS) $(LIBS)
+
+bibindex.txt: bibindex.man
+ $(NROFF) $? | $(COL) >$@
+
+bibindex.tar: $(TARFILES)
+ $(TAR) cf $@ $(TARFILES)
+
+bibindex.tar-lst: bibindex.tar
+ $(TAR) tvf $? >$@
+
+bibindex.tar.z: bibindex.tar
+ $(COMPRESS) <$? >$@
+
+bibindex.uue: bibindex.tar.z
+ $(UUENCODE) $? $? >$@
+
+bibindex.zip: $(TARFILES)
+ -$(RM) $@
+ $(ZIP) $@ $(TARFILES)
+
+bibindex.zip-lst: bibindex.zip
+ $(UNZIP) -v $? >$@
+
+bibindex.zoo: $(TARFILES)
+ -$(RM) $@
+ $(ZOO) a $@ $(TARFILES)
+
+bibindex.zoo-lst: bibindex.zoo
+ $(ZOO) v $? >$@
+
+biblook: biblook.o
+ $(CC) $(CFLAGS) -o biblook biblook.o $(LDFLAGS) $(LIBS)
+
+biblook.txt: biblook.man
+ $(NROFF) $? | $(COL) >$@
+
+bibindex.o biblook.o: biblook.h
+
+clean mostlyclean:
+ -$(RM) \#*
+ -$(RM) *~
+ -$(RM) core
+ -$(RM) *.o
+ -$(RM) bibindex.tar bibindex.tar.z bibindex.tar-lst
+ -$(RM) bibindex.uue
+ -$(RM) bibindex.zip bibindex.zip-lst
+ -$(RM) bibindex.zoo bibindex.zoo-lst
+
+clobber distclean realclean reallyclean: clean
+ -$(RM) biblook bibindex
+ -$(RM) biblook.txt bibindex.txt
+
+install: bibindex biblook
+ -$(CP) bibindex $(BINDIR)
+ -chmod 775 $(BINDIR)/bibindex
+ -$(CP) biblook $(BINDIR)
+ -chmod 775 $(BINDIR)/biblook
+ -$(CP) bibindex.man $(MANDIR)/bibindex.$(MANEXT)
+ -chmod 774 $(MANDIR)/bibindex.$(MANEXT)
+ -$(CP) biblook.man $(MANDIR)/biblook.$(MANEXT)
+ -chmod 774 $(MANDIR)/biblook.$(MANEXT)
+
+install-ftp: bibindex.tar.z bibindex.zip bibindex.zoo \
+ bibindex.tar-lst bibindex.zip-lst bibindex.zoo-lst
+ -for f in $? ; \
+ do \
+ $(CP) $$f $(FTPDIR) ; \
+ chmod 774 $(FTPDIR)/$$f ; \
+ done
+
+uninstall:
+ -$(RM) $(BINDIR)/bibindex
+ -$(RM) $(BINDIR)/biblook
+ -$(RM) $(MANDIR)/bibindex.$(MANEXT)
+ -$(RM) $(MANDIR)/biblook.$(MANEXT)
+ -$(RM) $(CATDIR)/bibindex.$(MANEXT)
+ -$(RM) $(CATDIR)/biblook.$(MANEXT)
+
+#=======================================================================
diff --git a/biblio/bibtex/utils/bibindex/README b/biblio/bibtex/utils/bibindex/README
new file mode 100644
index 0000000000..7009c644cc
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/README
@@ -0,0 +1,47 @@
+/u/sy/beebe/tex/bibindex/2-4/README, Tue Jun 1 17:00:51 1993
+Edit by Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+
+This directory contains bibindex and biblook, programs for fast lookup
+in BibTeX bibliography data bases. They were written by Jeff
+Erickson, now at the University of California, Berkeley.
+
+bibindex converts a .bib file to a .bix file, which is a compact
+binary representation of the .bib file containing hash tables for fast
+lookup, as well as byte offset positions into the corresponding .bib
+file.
+
+biblook provides an interactive lookup facility using the .bix and
+.bib files. It verifies that the file version number and bibindex
+version number match its own values, and also compares the file time
+stamps so that it can detect whether the .bix file is out-of-date with
+respect to the .bib file. In either case, execution terminates.
+
+biblook may provide a more convenient, and faster, way of searching
+.bib files than text editors or pattern search utilities like the grep
+programs, particularly since it supports boolean operations between
+pairs of patterns.
+
+Both programs are documented in UNIX man pages, and the *.txt files
+are the output of nroff+col processing of the *.man files, so that
+documentation can read even if nroff is unavailable (e.g. non-UNIX
+systems, or UNIX systems where it is an extra-cost option).
+
+The programs so far run only under UNIX. Plans are to investigate the
+possibility of making them work on other operating systems.
+
+For very large bibliography files, it may be necessary to change the
+type Index_t in biblook.h from "unsigned short" to "unsigned int".
+The choice in version 2.4 and earlier of "unsigned short" is suitable
+for the SIGGRAPH and TeX User Group bibliography collections
+(SIGGRAPH: 6.7MB with 15,400 entries; TUG: 3.9MB with 14,600 entries).
+as of June 1993. Using "unsigned int" increases the size of the .bix
+files by 55% (TUG) to 68% (SIGGRAPH).
+
+Author of README and *.man files:
+ Nelson H. F. Beebe
+ Center for Scientific Computing
+ Department of Mathematics
+ University of Utah
+ Salt Lake City, UT 84112
+ USA
+ Email: beebe@math.utah.edu (Internet)
diff --git a/biblio/bibtex/utils/bibindex/bibindex.c b/biblio/bibtex/utils/bibindex/bibindex.c
new file mode 100644
index 0000000000..af7870896a
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/bibindex.c
@@ -0,0 +1,1062 @@
+/* ================================================================= *\
+
+ bibindex -- a program to index bibtex files, used in conjunction
+ with biblook
+
+ This program was specifically developed for use with the
+ computational geometry bibliographic database, and assumes the
+ rules thereof. The database may be obtained by anonymous ftp
+ from cs.usask.ca in the file "pub/geometry/geombib.tar.Z".
+
+ Version 1.0 written by Jeff Erickson <jeff@ics.uci.edu>, 27 Mar 92
+ Version 2.0 written by Jeff Erickson <jeff@ics.uci.edu>, 17 Jun 92
+
+ This program is in the public domain. You may use it or modify
+ it to your heart's content, at your own risk. Bouquets, brickbats,
+ and bug fixes may be sent to Jeff Erickson, jeffe@cs.berkeley.edu.
+
+ %Make% gcc -O -o bibindex bibindex.c
+
+ Usage: bibindex bibfile [-i field ...]
+
+ -----------------------------------------------------------------
+
+ HOW IT WORKS:
+
+ The bibtex file is read field by field. The file offset beginning
+ each record and each record's citation key are recorded. A list of
+ words is extracted from each field. These words are placed into
+ tables, which remember which records contain them in their
+ respective fields. Once the file has been completely read, the
+ hash tables are compacted and sorted.
+
+ The hash tables are extensible, since we have to maintain one for
+ each possible field type, and static tables would be way too big.
+ Initially, each table holds 1K entries, and the tables are doubled
+ whenever they reach 75% capacity. Each table entry is at least 24
+ bytes. If the resulting hash tables use too much memory, the
+ entries should be changed to pointers, allocated on the fly.
+
+ The entry lists associated with each word are implemented as
+ extensible arrays. Initially, each list holds eight entries. If a
+ new entry is inserted into a full list, the list is doubled first.
+
+ The index file has the following format (loosely):
+
+ version info
+ # entries
+ array of offsets into bib file -- one per entry
+ # field types
+ array of field names -- one per field type
+ array of -- one per field type
+ # words
+ array of -- one per word
+ word -- in alphabetical order
+ # locations
+ array of entry #s -- one per location
+
+ There are advantages and disadvantages of having multiple hash
+ tables instead of a single table. I am starting with the premise
+ that the lookup program should be very fast. Consequently, I can't
+ make it determine which fields contain a given word. Doing so
+ would require putting ALL of the entry-parsing code into the lookup
+ program. It would also mean potentially parsing a lot of
+ extraneous entries to find relatively common words in relatively
+ uncommon places (eg, "title edelsbrunner").
+
+ If there were a single word table, each word list would have to
+ include bitmasks to indicate the appropriate fields along with the
+ entry numbers. Assuming between 16 and 32 field types (the CG bib
+ uses about 24), this would triple the size of each entry. On the
+ average, each word occurs in less than two field types. The
+ bitmask approach would also require knowledge of the field names in
+ advance; the multiple table approach does not.
+
+ -----------------------------------------------------------------
+ VERSION HISTORY:
+
+ 1.0 <jge> 3/26/92 Initial version completed
+ 1.1 <jge> 3/27/92 Words restricted to letters only; special
+ rules added for apostrophes, so that words
+ like "didn't" and "O'Rourke" can be handled
+ correctly.
+ 1.2 <jge> 3/30/92 Faster hash function; now compressing hash
+ tables before sorting them. Execution time on
+ the CG bib reduced by a factor of thirty-five.
+ 1.3 <jge> 4/2/92 Toyed with the hash function some more, trying
+ to reduce collisions, with limited success.
+ 1.4 <jge> 4/17/92 Added exit(0) at the end of main() [I thought
+ that was supposed to be automatic!]
+
+ 2.0 <jge> 6/12/92 First major revision completed.
+ 1. Major change in file format -- word tables for every
+ field instead of just author, title, and keywords.
+ 2. Word hash tables made extensible.
+ 3. Fixed bug in GetNextWord that would cause the function
+ to return inside nested braces.
+ 4. Fixed bug in MungeField that would kill everything in an
+ entry after an abbreviation. Abbreviations now go into
+ the appropriate hash table with the other words.
+ 5. Made GetNextWord consider numbers and math expressions
+ to be words.
+ 6. Added WriteWord, resulting in 40% savings in disk space.
+ 7. Added -i flag and black holes. Ignoring "oldlabel"
+ gives another 15% savings (6/92 version of CGbib).
+ 2.1 <jge> 7/9/92 Minor bug fixes.
+ 2.2 Nelson H. F. Beebe <beebe@math.utah.edu> 03-Oct-1992
+ Testing with >100K lines of .bib files led to these changes:
+ 1. Add support for complete BibTeX keyword name syntax with
+ iskeychar() function.
+ 2. Add support for trailing comma after last key = "value" entry.
+ 3. Record input line number for display in error messages.
+ 4. Record initial line number of each BibTeX entry for
+ display in error messages to better localize error.
+ 5. Add test for word buffer overflow in MungeField() to prevent
+ run-time core dumps, and increase supported word size from
+ 15 to 31 (a word-length histogram of a 116921-word dictionary
+ found words up to 28 characters long, with 1% longer than 15).
+ File version increased to 2 because of word size change.
+ 6. Add typecasts in calls to qsort() and comparisons of
+ unsigned short with short, change main() from void to int,
+ remove variable from initializer of msg[2], and add void to
+ IndexBibFile() definition to allow compilation with C++ as
+ well as C for better compile-time checking.
+ 7. In MungeEntry(), do an ungetc() after key name collection.
+ Otherwise, a key="value" pair without a blank before the =
+ will not be recognized because the = read on lookahead has
+ not been put back.
+ 8. Revise table compression code in OutputTables() and
+ code in FreeTables() to avoid duplicate frees, which is
+ a fatal error on many systems, and specified to result
+ in undefined behavior by the 1989 ANSI/ISO C Standard.
+ 9. Define bcopy() as a macro to invoke standard memcpy()
+ instead.
+ 10. Include time.h, unistd.h, and malloc.h to get proper
+ function declarations for library routines needed here.
+ 11. Add DEBUG_MALLOC support.
+ 12. Change several char* types to const char*.
+ 13. Correct some typographical errors in comment.
+ 14. Write UNIX manual pages for bibindex and biblook.
+ 15. Allow command-line to specify a filename with .bib extension.
+ 16. Add help support to biblook.
+ 17. Correct error in FreeTables() in biblook.c; inner loop
+ incremented i instead of j.
+ 2.3 Bill Jones <jones@cs.usask.ca> 93/01/29
+ 1. Declarations common to bibindex.c and biblook.c factored out
+ to new file biblook.h.
+ 2. Index type of (signed) short overflows early; created typedef
+ Index_t, defined as unsigned short.
+ 3. Changed hash tables to extend at 75% capacity rather than 50%.
+ 2.4 Nelson H. F. Beebe <beebe@math.utah.edu> [01-Jun-1993]
+ 1. Remove some mixed-mode arithmetic.
+ 2. Increase MAXFIELDS from 64 to 127 to deal with TeX User Group
+ bibliography collection
+ 3. Correct error in GetHashTable(); older versions got into an
+ infinite loop if MAXFIELDS field names were already stored, and
+ a new one was encountered.
+
+\* ================================================================= */
+
+
+#include "biblook.h"
+
+static long line_number = 1L; /* for debug messages */
+static long initial_line_number = 1L;
+
+
+/* ======================= UTILITY FUNCTIONS ======================= */
+
+/* ----------------------------------------------------------------- *\
+| void die(const char *msg1, const char *msg2) -- print an error message and die
+\* ----------------------------------------------------------------- */
+void die(const char *msg1, const char *msg2)
+{
+ fprintf(stderr,
+ "\nError:\tin BibTeX entry starting at line %ld, \
+error detected at line %ld:\n\t%s %s\n",
+ initial_line_number, line_number, msg1, msg2);
+ exit(1);
+}
+
+/* ----------------------------------------------------------------- *\
+| char safegetc(FILE *fp, const char *where)
+|
+| Get the next character safely. Used by routines that assume that
+| they won't run into the end of file.
+\* ----------------------------------------------------------------- */
+char safegetc(FILE *fp, const char *where)
+{
+ char c;
+
+ if (feof(fp))
+ die("Unexpected end of file in", where);
+
+ c = getc(fp);
+ if (c == '\n')
+ line_number++;
+ return (c);
+}
+
+/* ----------------------------------------------------------------- *\
+| void *safemalloc(unsigned howmuch, const char *msg1, const char *msg2)
+|
+| Allocate memory safely. Used by routines that assume they won't
+| run out of memory.
+\* ----------------------------------------------------------------- */
+void *safemalloc(unsigned howmuch, const char *msg1, const char *msg2)
+{
+ register void *tmp = NULL;
+
+ tmp = malloc(howmuch);
+ if (tmp == NULL)
+ die(msg1, msg2);
+
+ return tmp;
+}
+
+
+/* ====================== HASH TABLE FUNCTIONS ===================== *\
+
+ The hash tables start small and double whenever they reach 75%
+ capacity. Hashing is performed by going through the string one
+ character at a time, multiplying by a constant and adding in the
+ new character value each time. The constant is defined to give
+ the same even spread (about size/sqrt(2)) between successive
+ multiples, as long as the hash table size is a power of two.
+
+ Collisions are resolved by double hashing. Since the hash table
+ size is always a power of two, the secondary hash value has to be
+ odd to avoid loops.
+
+ The field tables are non-extensible hash tables, otherwise handled
+ the same way. It is probably well worth the effort to fine tune
+ the field table hash function in order to avoid collisions.
+
+ The field tables associated with ignored fields are black holes.
+ Everything is the same, except that InsertEntry doesn't actually
+ DO anything.
+
+\* ================================================================= */
+
+#define MAXFIELDS 127 /* intentionally way too much */
+ /* NB: limited by char type of numfields */
+
+#define INIT_HASH_SIZE 256
+#define HASH_CONST 1482907 /* prime close to 2^{20.5} */
+
+typedef struct /* Hash table entry */
+{
+ Word theword; /* the hashed word */
+ Index_t number; /* number of references in the list */
+ Index_t size; /* real size of reference list */
+ Index_t *refs; /* actual list of references */
+} HashCell, *HashPtr;
+
+typedef struct /* Extensible hash table */
+{
+ Word thefield; /* the field type */
+ Index_t number; /* number of words in the hash table */
+ Index_t size; /* real size of the hash table */
+ HashPtr words; /* the actual hash table */
+} ExHashTable;
+
+static ExHashTable fieldtable[MAXFIELDS]; /* the field tables */
+static char numfields; /* number of fields */
+
+
+/* ----------------------------------------------------------------- *\
+| void InitTables(void)
+|
+| Initialize the field tables
+\* ----------------------------------------------------------------- */
+void InitTables(VOID)
+{
+ register unsigned short i;
+
+ numfields = 0;
+ for (i=0; i<MAXFIELDS; i++)
+ {
+ fieldtable[i].thefield[0] = 0;
+ fieldtable[i].number = 0;
+ fieldtable[i].size = 0;
+ fieldtable[i].words = NULL;
+ }
+}
+
+/* ----------------------------------------------------------------- *\
+| void InitOneField(ExHashTable *htable)
+|
+| Initialize one field's hash table
+\* ----------------------------------------------------------------- */
+void InitOneField(register ExHashTable *htable)
+{
+ Index_t i;
+
+ htable->number = 0;
+ htable->size = INIT_HASH_SIZE;
+ htable->words = (HashPtr) safemalloc(INIT_HASH_SIZE*sizeof(HashCell),
+ "Can't create hash table for",
+ htable->thefield);
+ for (i=0; i<INIT_HASH_SIZE; i++)
+ {
+ htable->words[i].theword[0] = 0;
+ htable->words[i].number = 0;
+ htable->words[i].size = 0;
+ htable->words[i].refs = NULL;
+ }
+}
+
+/* ----------------------------------------------------------------- *\
+| void FreeTables(void)
+|
+| Free the tables
+\* ----------------------------------------------------------------- */
+void FreeTables(VOID)
+{
+ register unsigned short i;
+ Index_t j;
+
+ for (i=0; i < (unsigned short)numfields; i++)
+ {
+ if (fieldtable[i].words)
+ {
+ for (j=0; j < fieldtable[i].number; j++)
+ {
+ if (fieldtable[i].words[j].refs)
+ free(fieldtable[i].words[j].refs);
+ }
+ free(fieldtable[i].words);
+ }
+ }
+}
+
+
+/* ----------------------------------------------------------------- *\
+| ExHashTable *GetHashTable(char *field)
+|
+| Get the hash table associated with the given field. If the table
+| is unclaimed, claim it and initialize it.
+\* ----------------------------------------------------------------- */
+ExHashTable *GetHashTable(char *field)
+{
+ register unsigned long hash=0; /* primary hash value */
+ register unsigned long skip=1; /* secondary hash value */
+ register int i;
+
+ for (i=0; field[i]; i++)
+ {
+ hash = (hash*HASH_CONST + field[i]) % MAXFIELDS;
+ skip += 2*hash;
+ }
+
+ while (fieldtable[hash].thefield[0] && /* cell not empty and */
+ strcmp(fieldtable[hash].thefield, field)) /* not the right field */
+ {
+ hash = (hash+skip) % MAXFIELDS;
+ }
+
+ if (!fieldtable[hash].thefield[0])
+ {
+ strcpy(fieldtable[hash].thefield, field);
+ InitOneField(fieldtable+hash);
+ numfields++;
+ if (numfields >= MAXFIELDS) /* NB: NOT > because that produces */
+ /* an infinite while() loop above on */
+ /* next entry! */
+ die("too many field names",field);
+ }
+
+ return fieldtable+hash;
+}
+
+/* ----------------------------------------------------------------- *\
+| void InitBlackHole(char *field)
+|
+| Intitialize a black hole for the given field.
+\* ----------------------------------------------------------------- */
+void InitBlackHole(char *field)
+{
+ ExHashTable *hole;
+
+ hole = GetHashTable(field);
+ free(hole->words);
+ hole->words = NULL;
+}
+
+/* ----------------------------------------------------------------- *\
+| HashPtr GetHashCell(ExHashTable *table, char *word)
+|
+| Get the hash table cell associated with the given word. If the cell
+| is unclaimed, claim it, initialize it, and update the table's word
+| count.
+\* ----------------------------------------------------------------- */
+HashPtr GetHashCell(ExHashTable *htable, char *word)
+{
+ register HashPtr table, cell;
+ register unsigned long hash=0; /* primary hash value */
+ register unsigned long skip=1; /* secondary hash value */
+ register int i;
+
+ table = htable->words;
+
+ for (i=0; word[i]; i++)
+ {
+ hash = (hash*HASH_CONST + word[i]) % htable->size;
+ skip += 2*hash;
+ }
+
+ while (table[hash].theword[0] && /* cell not empty and */
+ strcmp(table[hash].theword, word)) /* not the right word */
+ {
+ hash = (hash+skip) % htable->size;
+ }
+ cell = table+hash;
+
+ if (!cell->theword[0])
+ {
+ strcpy(cell->theword, word);
+ cell->size = 8;
+ cell->refs = (Index_t *) safemalloc(cell->size * sizeof(Index_t),
+ "Can't create entry list for",
+ word);
+ htable->number++;
+ }
+ return cell;
+}
+
+/* ----------------------------------------------------------------- *\
+| void ExtendHashTable(ExHashTable *htable)
+|
+| Double the size of the hash table and rehash everything.
+\* ----------------------------------------------------------------- */
+void ExtendHashTable(ExHashTable *htable)
+{
+ register HashPtr newcell;
+ register HashPtr oldtable;
+ Index_t i;
+ Index_t oldsize;
+
+ oldsize = htable->size;
+ oldtable = htable->words;
+
+ htable->number = 0;
+ htable->size *= 2;
+ htable->words = (HashPtr) safemalloc(sizeof(HashCell)*htable->size,
+ "Can't extend hash table for",
+ htable->thefield);
+
+ for (i=0; i < htable->size; i++)
+ {
+ htable->words[i].theword[0] = 0;
+ htable->words[i].number = 0;
+ htable->words[i].size = 0;
+ htable->words[i].refs = NULL;
+ }
+
+ for (i=0; i< oldsize; i++)
+ {
+ if (oldtable[i].theword[0])
+ {
+ newcell = GetHashCell(htable, oldtable[i].theword);
+ *newcell = oldtable[i];
+ }
+ }
+
+ free(oldtable);
+}
+
+/* ----------------------------------------------------------------- *\
+| void InsertEntry(ExHashTable *htable, char *word, Index_t entry)
+|
+| Insert the word/entry pair into the hash table, unless it's
+| already there.
+\* ----------------------------------------------------------------- */
+void InsertEntry(ExHashTable *htable, char *word, Index_t entry)
+{
+ register HashPtr cell;
+ Index_t *newlist;
+
+ if (htable->words == NULL) /* Is it a black hole? */
+ return;
+
+ if ((Index_t)(htable->number * 4) > (Index_t)(htable->size * 3))
+ ExtendHashTable(htable);
+
+ cell = GetHashCell(htable, word);
+
+ if (cell->number && (cell->refs[cell->number-1] == entry))
+ return;
+
+ if (cell->number == cell->size) /* expand the array */
+ {
+ cell->size *= 2;
+ newlist = (Index_t *) safemalloc(cell->size * sizeof(Index_t),
+ "Can't extend entry list for",
+ word);
+
+ bcopy(cell->refs, newlist, cell->number * sizeof(Index_t));
+ free(cell->refs);
+ cell->refs = newlist;
+ }
+ cell->refs[cell->number++] = entry;
+ if (cell->number <= 0)
+ die("hash type overflow", htable->thefield);
+}
+
+
+/* ================================================================= */
+
+/* ----------------------------------------------------------------- *\
+| void WriteWord(FILE *ofp, Word word)
+|
+| Output the word in "Pascal" string format -- length byte followed
+| by characters. This saves some disk space over writing MAXWORD+1 bytes
+| in all cases.
+\* ----------------------------------------------------------------- */
+void WriteWord(FILE *ofp, Word word)
+{
+ unsigned char length = strlen(word);
+ fwrite((void *) &length, sizeof(char), 1, ofp);
+ fwrite((void *) word, sizeof(char), length, ofp);
+}
+
+/* ----------------------------------------------------------------- *\
+| void OutputTables(FILE *ofp)
+|
+| Compress and output the tables, with lots of user feedback.
+| KLUDGE -- Passing strcmp to qsort assumes intimate knowledge of
+| the HashCell and ExhashTable structs.
+\* ----------------------------------------------------------------- */
+void OutputTables(FILE *ofp)
+{
+ register HashPtr words;
+ register int i, k, count;
+ Index_t m, n;
+
+ printf("Writing index tables...");
+ fflush(stdout);
+
+ numfields = 0; /* recount, ignoring black holes */
+ for (i=0; i<MAXFIELDS; i++)
+ {
+ if (fieldtable[i].words)
+ {
+ if (i > numfields)
+ {
+ fieldtable[numfields] = fieldtable[i]; /* copy i-th table */
+ fieldtable[i].number = 0; /* then clear i-th table */
+ fieldtable[i].size = 0; /* to avoid duplicate free() later */
+ fieldtable[i].words = NULL;
+ }
+ numfields++;
+ }
+ }
+ qsort(fieldtable, (size_t)numfields, sizeof(ExHashTable),
+ (int (*)(const void*,const void*))strcmp);
+
+ fwrite((void *) &numfields, sizeof(char), 1, ofp);
+ for (i=0; i<numfields; i++)
+ WriteWord(ofp, fieldtable[i].thefield);
+
+ printf("[%d fields]\n", numfields);
+
+ for (k=0; k<numfields; k++)
+ {
+ printf("%2d: %s...", k+1, fieldtable[k].thefield);
+ fflush(stdout);
+
+ words = fieldtable[k].words;
+
+ for (m=0, n=0; m<fieldtable[k].size; m++)
+ {
+ if (words[m].theword[0])
+ {
+ if (m > n)
+ {
+ words[n] = words[m]; /* copy m-th table to n-th */
+ words[m].number = 0; /* then clear m-th table */
+ words[m].size = 0; /* to avoid duplicate free() later */
+ words[m].refs = (Index_t*)0;
+ }
+ n++;
+ }
+ }
+ qsort(words, (size_t)fieldtable[k].number, sizeof(HashCell),
+ (int (*)(const void*,const void*))strcmp);
+
+ fwrite((void *) &(fieldtable[k].number), sizeof(Index_t), 1, ofp);
+
+ count = 0;
+ for (m=0; m<fieldtable[k].number; m++)
+ {
+ WriteWord(ofp, words[m].theword);
+ fwrite((void *) &(words[m].number), sizeof(Index_t), 1, ofp);
+ fwrite((void *) words[m].refs, sizeof(Index_t),
+ words[m].number, ofp);
+ count += words[m].number;
+ }
+
+ printf("[%d words, %d references]\n", fieldtable[k].number, count);
+ }
+}
+
+
+/* ============================= INPUT ============================= *\
+
+ I'd like this to work with more than just the CG bib, so I can't
+ assume very much about the input. In particular, all white space
+ (blanks, tabs, and newlines) is identical most of the time. On the
+ other hand, it would be nice to include any "comments" that
+ obviously go with an entry as part of that entry. Consequently, two
+ newlines in a row (possibly separated by other white space) is
+ considered a break between entries. This will give us bogus entries
+ for stray "comments", but we can take care that easily enough -- an
+ entry is only real if it contains a @ character.
+
+\* ================================================================= */
+
+/* ----------------------------------------------------------------- *\
+| unsigned long FindNextEntry(FILE *ifp)
+|
+| Return the file offset to the next entry in the bib file. On exit,
+| the file pointer is left at the first comma. Entries containing no
+| commas, such as @string, are skipped. The entry begins after the
+| most recent blank line, the end of the last entry, or the beginning
+| of the file. Returns "-1" if there is no next entry.
+\* ----------------------------------------------------------------- */
+unsigned long FindNextEntry(FILE *ifp)
+{
+ char ch;
+ char blank = 0; /* 1 if current line is blank so far */
+ char braces = 0;
+ char quotes = 0;
+ unsigned long offset;
+
+ offset = ftell(ifp);
+ ch = getc(ifp);
+ if (ch == '\n')
+ line_number++;
+
+ while (1)
+ {
+ if (feof(ifp))
+ return (unsigned long) -1;
+
+ if (ch == '@') /* got a potential entry */
+ {
+ initial_line_number = line_number; /* record start of entry */
+ blank = 0;
+ while ((ch != '{') && (ch != '('))
+ ch = safegetc(ifp, "FindNextEntry 1"); /* EOF is an */
+ /* error here */
+ quotes = 0;
+ braces = 0;
+ ch = safegetc(ifp, "FindNextEntry 2");
+
+ while (quotes || braces ||
+ ((ch != ',') && (ch != '}') && (ch != ')')))
+ {
+ if (ch == '{')
+ braces++;
+ else if (ch == '}')
+ braces--;
+ else if ((ch == '"') && !braces)
+ quotes = !quotes;
+
+ ch = safegetc(ifp, "FindNextEntry 3");
+ }
+ if (ch == ',')
+ {
+ ungetc(ch, ifp);
+ return offset;
+ }
+ else
+ offset = ftell(ifp);
+ }
+ else if (ch == '\n')
+ {
+ if (blank)
+ offset = ftell(ifp);
+ blank = 1;
+ }
+ else if (!isspace(ch))
+ blank = 0;
+ ch = getc(ifp);
+ if (ch == '\n')
+ line_number++;
+ }
+}
+
+/* ----------------------------------------------------------------- *\
+| int GetNextWord(FILE *ifp, char *word)
+|
+| Get the next word in the current field. A word is any contiguous
+| set of letters and numbers, AFTER the following steps:
+| 1. Letters are folded to lower case. Thus, "Voronoi" is
+| returned as "voronoi"
+| 2. All TeX commands, except those in math expressions, are
+| removed, but their arguments are left behind. Thus,
+| "Erd{\H o}ss" is returned as "erdos".
+| 3. All other non-word characters are removed. Non-word
+| characters inside {{possibly} nested} braces or dollar
+| signs do not delimit words, so they may cause unexpected
+| results. Thus, "{this example}" is returned as
+| "thisexample".
+| 4. TeX commands in math expressions are considered normal
+| text. Thus, "$O(n\log^2 n)$" is returned as "onlog2n"
+| instead of "onn". This occasionally gives unexpected or
+| unreadable results. For example, "$\bigcup_1^n[a_i,b_i]$"
+| is returned as "bigcup1naibi".
+| 5. Apostrophes do not delimit words. Thus, "didn't" is
+| returned as "didnt", and "{\'O}'D{\'u}nlaing" is returned
+| as "odunlaing".
+|
+| Returns 1 if a word was actually found, 0 otherwise.
+|
+| The file pointer is left at the character immediately following the
+| word. The input is assumed to be syntactically correct: unbalanced
+| braces, math delimiters, and quotation marks will cause errors.
+\* ----------------------------------------------------------------- */
+int GetNextWord(FILE *ifp, char *word)
+{
+ char braces = 0; /* levels of indented braces */
+ char math = 0; /* 1 if in math expression */
+ char inword = 0; /* 1 if word has started */
+ char incmd = 0; /* 1 if reading TeX command */
+ char done = 0; /* 1 if word is complete */
+ char ch = ' ';
+ int nchars = 0; /* how many characters stored in word */
+
+ while (!done)
+ {
+ ch = safegetc(ifp, "GetNextWord 1");
+
+ if (isalpha(ch)) /* letters */
+ {
+ if (!incmd) /* may be part of TeX command */
+ {
+ inword = 1;
+ if (++nchars <= MAXWORD) /* ignore overflow in word buffer */
+ *word++ = tolower(ch);
+ }
+ }
+ else if (isdigit(ch))
+ {
+ incmd = 0;
+ inword = 1;
+ if (++nchars <= MAXWORD) /* ignore overflow in word buffer */
+ *word++ = ch;
+ }
+ else if (ch == '\'') /* ignore apostrophes entirely */
+ incmd = 0;
+ else if (ch == '\\') /* beginning of TeX command */
+ {
+ if (!math) /* if math, pretend it's text */
+ {
+ ch = safegetc(ifp, "GetNextWord 2");
+ if (isalpha(ch))
+ incmd = 1;
+ }
+ }
+ else if (ch == '{') /* left brace */
+ {
+ incmd = 0;
+ braces++;
+ }
+ else if (ch == '}') /* right brace */
+ {
+ incmd = 0;
+ if (!braces)
+ {
+ ungetc(ch, ifp);
+ done = 1;
+ }
+ else
+ braces--;
+ }
+ else if (ch == '"') /* double quote */
+ {
+ incmd = 0;
+ if (!braces)
+ {
+ ungetc(ch, ifp);
+ done = 1;
+ }
+ }
+ else if (ch == '$') /* math */
+ {
+ incmd = 0;
+ math = !math;
+ if (math) /* treat $s as braces */
+ braces++;
+ else
+ braces--;
+ }
+ else if (incmd) /* other characters */
+ incmd = 0;
+ else if (inword && !braces)
+ done = 1;
+ }
+
+ *word = 0;
+ return inword;
+}
+
+const char *badwords[] = BADWORDS;
+
+/* ----------------------------------------------------------------- *\
+| void MungeField(FILE *ifp, ExHashTable *htable, Index_t entry)
+|
+| Munge the current field. Dump all words into the given hash table,
+| with the given entry number. On exit, the file pointer is on the
+| comma or closing character for the entry.
+\* ----------------------------------------------------------------- */
+void MungeField(FILE *ifp, ExHashTable *htable, Index_t entry)
+{
+ int i;
+ char ch, bad;
+ char nextword[MAXWORD+1];
+
+ ch = safegetc(ifp, "MungeField");
+ while (isspace(ch))
+ ch = safegetc(ifp, "MungeField");
+
+ if (ch != '=')
+ die("= expected in bibliography field", htable->thefield);
+
+ ch = safegetc(ifp, "MungeField");
+ while (isspace(ch))
+ ch = safegetc(ifp, "MungeField");
+
+ if (ch != '{' && ch != '"') /* handle abbreviations */
+ {
+ for (i=0; !strchr(NONABBREV, ch); i++)
+ {
+ if (i >= MAXWORD)
+ die("word buffer overflow", htable->thefield);
+ nextword[i] = tolower(ch);
+ ch = safegetc(ifp, "MungeField");
+ }
+ nextword[i] = 0;
+ nextword[MAXWORD] = 0;
+ InsertEntry(htable, nextword, entry);
+ }
+ else
+ {
+ while (GetNextWord(ifp, nextword))
+ {
+ if (nextword[1] == 0) /* ignore single letters */
+ continue;
+ for (bad=0, i=0; !bad && badwords[i]; i++)
+ if (!strcmp(nextword, badwords[i]))
+ bad = 1;
+ if (!bad)
+ {
+ nextword[MAXWORD] = 0; /* truncate to fit */
+ InsertEntry(htable, nextword, entry);
+ }
+ }
+ ch = safegetc(ifp, "MungeField"); /* close quote/brace */
+ ch = safegetc(ifp, "MungeField"); /* comma (maybe) */
+ }
+
+ while (isspace(ch))
+ ch = safegetc(ifp, "MungeField");
+ ungetc(ch, ifp); /* comma or close paren/brace */
+}
+
+/* ----------------------------------------------------------------- *\
+| int iskeychar(char c,int first_char)
+|
+| Return 1 if c is a valid keyword character, and 0 otherwise.
+| The rules are different for the first character, so first_char
+| must be set non-zero to select that case.
+|
+| The code in bibtex.web in the section on character set dependencies
+| creates a character classification array, id_class[], which permits
+| the following characters (verified by experiment too) in field
+| names:
+|
+| A-Z a-z 0-9
+| ! $ & + - . / : ; < > ? @ [ \ ] ^ _ ` | ~ <DELete>
+|
+\* ----------------------------------------------------------------- */
+
+int iskeychar(char c,int first_char)
+{
+ if (first_char)
+ return (isalpha(c) ? 1 : 0);
+ else if (isalpha(c) || isdigit(c))
+ return (1);
+ else if (strchr("!$&+-./:;<>?@[\\]^_`|~\177",(int)c) != (char*)NULL)
+ return (1);
+ else
+ return (0);
+}
+
+/* ----------------------------------------------------------------- *\
+| void MungeEntry(FILE *ifp, Index_t entry)
+|
+| Wander through the entry, extracting words and depositing them in
+| the appropriate hash tables.
+\* ----------------------------------------------------------------- */
+void MungeEntry(FILE *ifp, Index_t entry)
+{
+ register char ch;
+ Word thefield;
+ short i;
+
+ ch = safegetc(ifp, "MungeEntry");
+ while (ch == ',')
+ {
+ ch = safegetc(ifp, "MungeEntry");
+ while (isspace(ch))
+ ch = safegetc(ifp, "MungeEntry");
+
+ if ((ch == '}') || (ch == ')')) /* allow trailing comma after */
+ return; /* last key = "value" entry */
+
+ if (!isalpha(ch))
+ {
+ char msg[2];
+ msg[0] = ch;
+ msg[1] = 0;
+ die("Nonalpha character in field descriptor:", msg);
+ }
+
+ for (i=0; iskeychar(ch,i==0); i++)
+ {
+ if (i >= MAXWORD)
+ {
+ thefield[i] = 0;
+ die("field name buffer overflow", thefield);
+ }
+ thefield[i] = tolower(ch);
+ ch = safegetc(ifp, "MungeEntry");
+ }
+ ungetc(ch, ifp); /* put back lookahead char */
+ thefield[i] = 0;
+
+ MungeField(ifp, GetHashTable(thefield), entry);
+
+ ch = safegetc(ifp, "MungeEntry");
+ }
+}
+
+
+/* ============================= OUTPUT ============================ */
+
+/* ----------------------------------------------------------------- *\
+| IndexBibFile(FILE *ifp, FILE *ofp, char *filename)
+|
+| Index a bibtex file. Input comes from ifp; output goes to ofp.
+| Filename is the name of the bibliography, with no prefix.
+\* ----------------------------------------------------------------- */
+void
+IndexBibFile(FILE *ifp, FILE *ofp, char *filename)
+{
+ Index_t count=0;
+ long curoffset;
+ long *offsets;
+ long *oldoff;
+ Index_t offsize;
+ time_t now = time(0);
+
+ printf("Indexing %s.bib...", filename);
+ fflush(stdout);
+
+ offsize = 128; /* MINIMUM OFFSET LIST SIZE */
+ offsets = (long *) malloc(offsize * sizeof(long));
+
+ while (!feof(ifp))
+ {
+ curoffset = FindNextEntry(ifp);
+ if (curoffset == (unsigned long) -1)
+ break;
+
+ offsets[count] = curoffset;
+ MungeEntry(ifp, count++);
+
+ if (count == offsize) /* expand full offset array */
+ {
+ oldoff = offsets;
+ offsize *= 2;
+ offsets = (long *) malloc(offsize * sizeof(long));
+ bcopy(oldoff, offsets, count * sizeof(long));
+ free(oldoff);
+ }
+
+ if (!(count % 500)) /* feedback */
+ {
+ printf("%d...", count);
+ fflush(stdout);
+ }
+ }
+
+ printf("done.\n");
+
+ fprintf(ofp, "bibindex %d %d %d %s", FILE_VERSION, MAJOR_VERSION,
+ MINOR_VERSION, ctime(&now));
+
+ printf("Writing file offsets...");
+ fflush(stdout);
+ fwrite((void *) &count, sizeof(Index_t), 1, ofp);
+ fwrite((void *) offsets, sizeof(long), count, ofp);
+ free(offsets);
+ printf("[%d entries]\n", count);
+
+ OutputTables(ofp);
+
+ printf("All done!\n");
+}
+
+/* ----------------------------------------------------------------- *\
+| The main program
+\* ----------------------------------------------------------------- */
+
+int main(int argc, char **argv)
+{
+ FILE *ifp;
+ FILE *ofp;
+ char infile[256];
+ char outfile[256];
+ char *p;
+ int i;
+
+#if DEBUG_MALLOC
+ malloc_debug(2);
+#endif /* DEBUG_MALLOC */
+
+ if (argc < 2)
+ die("Usage: bibindex bib [-i field...]", "");
+
+ if (((p = strrchr(argv[1],'.')) != (char*)NULL) &&
+ (strcmp(p, ".bib") == 0))
+ *p = '\0'; /* remove any .bib extension */
+
+ sprintf(infile, "%s.bib", argv[1]);
+ sprintf(outfile, "%s.bix", argv[1]);
+
+ ifp = fopen(infile, "r");
+ if (!ifp)
+ die("Can't read", infile);
+
+ ofp = fopen(outfile, "w");
+ if (!ofp)
+ die("Can't write", outfile);
+
+ InitTables();
+
+ if ((argc > 2) && (!strcmp(argv[2], "-i")))
+ for (i=3; i<argc; i++)
+ InitBlackHole(argv[i]);
+
+ IndexBibFile(ifp, ofp, argv[1]);
+
+ FreeTables();
+ fclose(ifp);
+ fclose(ofp);
+
+ exit(0); /* Argh! */
+ return (0); /* keep compilers happy */
+}
diff --git a/biblio/bibtex/utils/bibindex/bibindex.man b/biblio/bibtex/utils/bibindex/bibindex.man
new file mode 100644
index 0000000000..6993a45c50
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/bibindex.man
@@ -0,0 +1,112 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "1.02",
+.\" date = "03 October 1992",
+.\" time = "14:49:29 MDT",
+.\" filename = "bibindex.man",
+.\" address = "Center for Scientific Computing
+.\" Department of Mathematics
+.\" University of Utah
+.\" Salt Lake City, UT 84112
+.\" USA
+.\" Tel: +1 801 581 5254
+.\" FAX: +1 801 581 4148",
+.\" checksum = "39992 112 591 4491",
+.\" email = "beebe@math.utah.edu (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, BibTeX",
+.\" supported = "yes",
+.\" docstring = "This file is the UNIX nroff/troff manual page
+.\" documentation for bibindex, a BibTeX bibliography
+.\" indexing program.
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH BIBINDEX 1 "03 October 1992" "Version 2.2"
+.SH NAME
+bibindex \- create a bibliography index file for \fBbiblook\fP(1)
+.SH SYNOPSIS
+.B "bibindex \fIbasename\fP [[\-i] word] [[\-i] word] .\|.\|.
+.SH DESCRIPTION
+.I bibindex
+creates a compact binary index file from a \*(Bi\& bibliography file
+to permit fast lookup by \fIbiblook\fP(1). The \fIbasename\fP
+argument can optionally omit the \fI.bib\fP extension. The output
+index file will be named with the same basename, and extension
+\fI.bix\fP.
+.PP
+For indexing purposes, a word is any contiguous set of letters and
+numbers, \fIafter\fP the following steps:
+.RS
+.TP \w'1.'u+2n
+1.
+Letters are folded to lower case. Thus, "Voronoi" is
+returned as "voronoi"
+.TP
+2.
+All \*(Te\& commands, except those in math expressions, are
+removed, but their arguments are left behind. Thus,
+"Erd{\\H o}ss" is returned as "erdos".
+.TP
+3.
+All other non-word characters are removed. Non-word
+characters inside {{possibly} nested} braces or dollar
+signs do not delimit words, so they may cause unexpected
+results. Thus, "{this example}" is returned as
+"thisexample".
+.TP
+4.
+\*(Te\& commands in math expressions are considered normal
+text. Thus, "$O(n\\log^2 n)$" is returned as "onlog2n"
+instead of "onn". This occasionally gives unexpected or
+unreadable results. For example, "$\\bigcup_1^n[a_i,b_i]$"
+is returned as "bigcup1naibi".
+.TP
+5.
+Apostrophes do not delimit words. Thus, "didn't" is
+returned as "didnt", and "{\\'O}'D{\\'u}nlaing" is returned
+as "odunlaing".
+.RE
+.PP
+\fIbibindex\fP examines the contents of all value strings, and expects
+them to be well-formed \*(Te\& input. In particular, braces and
+dollar signs should be balanced.
+.PP
+Errors detected result in a message giving the line number of the
+\*(Bi\& entry in which the error was detected, and the line number at
+the point of the error. Unbalanced braces or dollar signs can result
+in large differences between these line numbers; in such a case, the
+error is somewhere in the entry indicated by the first line number.
+.SH OPTIONS
+.TP \w'\-i'u+2n
+.B \-i \fIkeyword\fP
+Add \fIkeyword\fP to the list of \*(Bi\& keywords that are to be
+ignored, along with their string values, in preparing the index. By
+default, all \fIkeyword = "value"\fP pairs are indexed. Any number
+of \fB\-i\fP switches and keywords may be specified.
+.SH "SEE ALSO"
+bibclean(1), biblook(1), bibtex(1), latex(1), tex(1)
+.SH AUTHOR
+.nf
+Jeff Erickson
+Computer Science Division
+University of California
+Berkeley, CA 94720
+USA
+Email: <jeff@cs.berkeley.edu>, <jeffe@melody.berkeley.edu>
+.fi
+.PP
+This program is in the public domain. You may use it or modify it to
+your heart's content, at your own risk.
+.\" =======================[End of bibindex.man]========================
diff --git a/biblio/bibtex/utils/bibindex/bibindex.txt b/biblio/bibtex/utils/bibindex/bibindex.txt
new file mode 100644
index 0000000000..ea32c5d5db
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/bibindex.txt
@@ -0,0 +1,132 @@
+
+
+
+BIBINDEX(1) User Commands BIBINDEX(1)
+
+
+
+NAME
+ bibindex - create a bibliography index file for biblook(1)
+
+SYNOPSIS
+ bibindex basename [[-i] word] [[-i] word] ...
+
+DESCRIPTION
+ bibindex creates a compact binary index file from a BibTeX
+ bibliography file to permit fast lookup by biblook(1). The
+ basename argument can optionally omit the .bib extension.
+ The output index file will be named with the same basename,
+ and extension
+
+ For indexing purposes, a word is any contiguous set of
+ letters and numbers, after the following steps:
+
+ 1. Letters are folded to lower case. Thus, "Voronoi"
+ is returned as "voronoi"
+
+ 2. All TeX commands, except those in math expressions,
+ are removed, but their arguments are left behind.
+ Thus, "Erd{\H o}ss" is returned as "erdos".
+
+ 3. All other non-word characters are removed. Non-
+ word characters inside {{possibly} nested} braces
+ or dollar signs do not delimit words, so they may
+ cause unexpected results. Thus, "{this example}"
+ is returned as "thisexample".
+
+ 4. TeX commands in math expressions are considered
+ normal text. Thus, "$O(n\log^2 n)$" is returned as
+ "onlog2n" instead of "onn". This occasionally
+ gives unexpected or unreadable results. For exam-
+ ple, "$\bigcup_1^n[a_i,b_i]$" is returned as
+ "bigcup1naibi".
+
+ 5. Apostrophes do not delimit words. Thus, "didn't"
+ is returned as "didnt", and "{\'O}'D{\'u}nlaing" is
+ returned as "odunlaing".
+
+ bibindex examines the contents of all value strings, and
+ expects them to be well-formed TeX input. In particular,
+ braces and dollar signs should be balanced.
+
+ Errors detected result in a message giving the line number
+ of the BibTeX entry in which the error was detected, and the
+ line number at the point of the error. Unbalanced braces or
+ dollar signs can result in large differences between these
+ line numbers; in such a case, the error is somewhere in the
+ entry indicated by the first line number.
+
+
+
+
+
+Version 2.2 Last change: 03 October 1992 1
+
+
+
+
+
+
+BIBINDEX(1) User Commands BIBINDEX(1)
+
+
+
+OPTIONS
+ -i keyword
+ Add keyword to the list of BibTeX keywords that are to
+ be ignored, along with their string values, in preparing
+ the index. By default, all keyword = "value" pairs are
+ indexed. Any number of -i switches and keywords may be
+ specified.
+
+SEE ALSO
+ bibclean(1), biblook(1), bibtex(1), latex(1), tex(1)
+
+AUTHOR
+ Jeff Erickson
+ Computer Science Division
+ University of California
+ Berkeley, CA 94720
+ USA
+ Email: <jeff@cs.berkeley.edu>, <jeffe@melody.berkeley.edu>
+
+ This program is in the public domain. You may use it or
+ modify it to your heart's content, at your own risk.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Version 2.2 Last change: 03 October 1992 2
+
+
+
diff --git a/biblio/bibtex/utils/bibindex/biblook.c b/biblio/bibtex/utils/bibindex/biblook.c
new file mode 100644
index 0000000000..3f7ae6ac14
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/biblook.c
@@ -0,0 +1,1245 @@
+/* ================================================================= *\
+
+ biblook -- look up references in a bibindexed BibTeX file
+
+ This program was specifically developed for use with the
+ computational geometry bibliographic database. The database
+ can be obtained by anonymous ftp from cs.usask.ca in the file
+ `pub/geometry/geombib.tar.Z'.
+
+ Version 1.0 written by Jeff Erickson <jeff@ics.uci.edu>, 27 Mar 92
+ Version 2.0 written by Jeff Erickson <jeff@ics.uci.edu>, 17 Jun 92
+
+ This program is in the public domain. You may use it or modify
+ it to your heart's content, at your own risk. Bouquets, brickbats,
+ and bug fixes may be sent to Jeff Erickson, jeffe@cs.berkeley.edu.
+
+ %Make% gcc -O -o biblook biblook.c
+
+ Usage: biblook bibfile [savefile]
+
+ -----------------------------------------------------------------
+
+ HOW IT WORKS:
+
+ The user can enter any of the following commands:
+
+ f[ind] [not] <field> <words>
+ Find the entries containing the given words in any field
+ with a prefix matching the <field> argument. For example,
+ `a' matches both `author' and `address', and `au' matches
+ `author' only. If the <field> argument is `-' (or any
+ string with no letters or numbers), match any field.
+
+ If `not' appears before the <field>, the sense of the search
+ is reversed. The symbols `~' and `!' can be used in place
+ of `not'.
+
+ Each word is a contiguous sequence of letters and digits.
+ Case is ignored; accents should be omitted; apostrophes are
+ not required. Single characters and a few common words are
+ also ignored. Any word ending with an asterisk is treated
+ as a prefix. Thus, `point*' matches `point', `points',
+ `pointer', etc.
+
+ and [not] <field> <words>
+ or [not] <field> <words>
+ Intersect (resp. union) the results of the given search
+ with the previous search. Several of these commands may be
+ combined on a single line. Commands are handled in the order
+ in which they appear; there is no precedence. Unlike other
+ commands, and like `not', these must be spelled out
+ completely. `&' can be used in place of `and', and `|' can
+ be used in place of `or'.
+
+ d[isplay]
+ Display the results of the previous search.
+
+ s[ave] [<filename>]
+ Save the results of the previous results into the specified
+ file. If <filename> is omitted, the previous save file is
+ used. If no save file has ever been specified, results are
+ saved in the file specified on the command line. If no such
+ file is specified, `save.bib' is used. If the save file
+ exists, results are appended to it.
+
+ q[uit]/EOF
+ Quit.
+
+ Several commands can be combined on a single line by separating
+ them with semicolons. For example, the following command displays
+ all STOC papers cowritten by Erdo"s without `Voronoi diagrams' in
+ the title:
+
+ f b stoc* | b symp* theory comp* & au erdos & ~t voronoi diagrams ; d
+
+ -----------------------------------------------------------------
+ Version history
+
+ 1.0 <jge> 3/29/92 Initial version complete
+ 1.1 <jge> 4/3/92 Fixed GetToken bug.
+ Prompts and feedback messages sent to stderr
+ instead of stdout, so results can be
+ redirected to a file.
+
+ 2.0 <jge> 6/17/92 Major change in file format and commands.
+ 1. Allow searching on any field or all fields.
+ 2. More extensive boolean queries (and, or, not)
+ 3. New command to save results to a file
+ 4. New command to display results, rather than displaying
+ them automatically.
+ 5. Allow searching for prefixes
+ 6. Pipe display results through $PAGER or /usr/ucb/more
+ 2.1 <jge> 7/8/92 Minor bug fixes.
+ 2.3 Bill Jones <jones@cs.usask.ca> 93/01/29
+ 1. Declarations common to bibindex.c and biblook.c factored out
+ to new file biblook.h.
+ 2. Index type of (signed) short overflows early; created typedef
+ Index_t, defined as unsigned short.
+ 2.4 Nelson H. F. Beebe <beebe@math.utah.edu> [01-Jun-1993]
+ 1. Remove some mixed-mode arithmetic.
+ 2. Add cast to return value of fork().
+ 3. Correct use and type of numoffsets so that code works
+ if Index_t is "unsigned int" or "unsigned long".
+
+\* ================================================================= */
+
+
+#include "biblook.h"
+
+/* ======================= UTILITY FUNCTIONS ======================= */
+
+/* ----------------------------------------------------------------- *\
+| void die(const char *msg1, const char *msg2) -- print an error message and die
+\* ----------------------------------------------------------------- */
+void die(const char *msg1, const char *msg2)
+{
+ fprintf(stderr, "Error: %s %s\n", msg1, msg2);
+ exit(1);
+}
+
+/* ----------------------------------------------------------------- *\
+| void safefread(void *ptr, size_t size, size_t num, FILE *fp)
+|
+| Read from the file, but die if there's an error.
+\* ----------------------------------------------------------------- */
+void safefread(void *ptr, size_t size, size_t num, FILE *fp)
+{
+ if (fread(ptr, size, num, fp) < num)
+ die("Unexpected EOF in bix file.", "");
+}
+
+/* ----------------------------------------------------------------- *\
+| char safegetc(FILE *fp)
+|
+| Get the next character safely. Used by routines that assume that
+| they won't run into the end of file.
+\* ----------------------------------------------------------------- */
+char safegetc(FILE *fp)
+{
+ if (feof(fp))
+ die("Unexpected EOF in bib file.", "");
+ return getc(fp);
+}
+
+
+/* ========================== INDEX TABLES ========================= */
+
+typedef struct
+{
+ Word theword;
+ Index_t numindex;
+ Index_t *index;
+} Index, *IndexPtr;
+
+typedef struct
+{
+ Word thefield;
+ Index_t numwords;
+ IndexPtr words;
+} IndexTable;
+
+char numfields;
+IndexTable *fieldtable;
+
+Index_t numoffsets;
+long *offsets;
+
+/* ----------------------------------------------------------------- *\
+| void ReadWord(FILE *ifp, Word word)
+|
+| Read a "pascal" string into the given buffer
+\* ----------------------------------------------------------------- */
+void ReadWord(FILE *ifp, Word word)
+{
+ char length;
+
+ safefread((void *) &length, sizeof(char), 1, ifp);
+ if (length > MAXWORD)
+ die("Index file is corrupt", "(word too long).");
+
+ safefread((void *) word, sizeof(char), length, ifp);
+ word[length] = 0;
+}
+
+/* ----------------------------------------------------------------- *\
+| void GetOneTable(FILE *ifp, IndexTable *table)
+|
+| Get one index table from the file
+\* ----------------------------------------------------------------- */
+void GetOneTable(FILE *ifp, register IndexTable *table)
+{
+ Index_t i, num;
+
+ safefread((void *) &table->numwords, sizeof(Index_t), 1, ifp);
+ table->words = (IndexPtr) malloc(table->numwords * sizeof(Index));
+
+ for (i=0; i<table->numwords; i++)
+ {
+ ReadWord(ifp, table->words[i].theword);
+ safefread((void *) &num, sizeof(Index_t), 1, ifp);
+ table->words[i].numindex = num;
+ table->words[i].index = (Index_t *) malloc(num * sizeof(Index_t));
+ safefread((void *) table->words[i].index, sizeof(Index_t), num,
+ ifp);
+ }
+}
+
+/* ----------------------------------------------------------------- *\
+| void GetTables(char *filename)
+|
+| Get the tables from the index file.
+\* ----------------------------------------------------------------- */
+void GetTables(char *filename)
+{
+ int version, i;
+ FILE *ifp;
+
+ ifp = fopen(filename, "r");
+ if (!ifp)
+ die("Can't read", filename);
+ if (fscanf(ifp, "bibindex %d %*[^\n]%*c", &version) < 1)
+ die(filename, "is not a bibindex file!");
+ if (version != FILE_VERSION)
+ die(filename, "is the wrong version. Please rerun bibindex.");
+
+ safefread((void *) &numoffsets, sizeof(Index_t), 1, ifp);
+ offsets = (long *) malloc(numoffsets * sizeof(long));
+ safefread((void *) offsets, sizeof(long), numoffsets, ifp);
+
+ safefread((void *) &numfields, sizeof(char), 1, ifp);
+ fieldtable = (IndexTable *) malloc(numfields * sizeof(IndexTable));
+
+ for (i=0; i<numfields; i++)
+ ReadWord(ifp, fieldtable[i].thefield);
+
+ for (i=0; i<numfields; i++)
+ GetOneTable(ifp, fieldtable+i);
+
+ fclose(ifp);
+}
+
+/* ----------------------------------------------------------------- *\
+| void FreeTables(void)
+|
+| Free the index tables.
+\* ----------------------------------------------------------------- */
+void FreeTables(VOID)
+{
+ register int i;
+ register Index_t j;
+
+ for (i=0; i<numfields; i++)
+ {
+ for (j=0; j<fieldtable[i].numwords; j++)
+ free(fieldtable[i].words[j].index);
+ free(fieldtable[i].words);
+ }
+ free(fieldtable);
+ free(offsets);
+}
+
+
+/* ----------------------------------------------------------------- *\
+| Index_t FindIndex(IndexTable table, char *word, char prefix)
+|
+| Find the index of a word in a table. Return INDEX_NAN if the word isn't
+| there. If prefix is true, return the index of the first matching
+| word.
+\* ----------------------------------------------------------------- */
+Index_t FindIndex(IndexTable table, char *word, char prefix)
+{
+ register IndexPtr words = table.words;
+ register int hi, lo, mid; /* must be signed */
+ register int cmp;
+
+ hi = table.numwords-1;
+ lo = 0;
+
+ while (hi>=lo)
+ {
+ mid = (hi+lo)/2;
+ cmp = strcmp(word, words[mid].theword);
+
+ if (cmp == 0)
+ return mid;
+ else if (cmp < 0)
+ hi = mid-1;
+ else if (cmp > 0)
+ lo = mid+1;
+ }
+
+ if (prefix && !strncmp(word, words[lo].theword, strlen(word)))
+ return lo;
+ else
+ return INDEX_NAN;
+}
+
+
+/* =================== SET MANIPULATION ROUTINES =================== */
+
+#define SETSCALE (sizeof(unsigned long)*8)
+
+static Index_t setsize;
+static unsigned long setmask; /* used to erase extra bits */
+typedef unsigned long *Set;
+
+/* ----------------------------------------------------------------- *\
+| Set NewSet(void)
+|
+| Get a new variable to hold sets of integers in the range
+| [0, numoffsets]. Set setsize and setmask.
+\* ----------------------------------------------------------------- */
+Set NewSet(VOID)
+{
+ setsize = (numoffsets + SETSCALE - 1)/SETSCALE; /* HACK */
+ setmask = (1<<(numoffsets%SETSCALE)) - 1; /* KLUDGE */
+
+ return (Set) malloc(setsize * SETSCALE);
+}
+
+/* ----------------------------------------------------------------- *\
+| void EmptySet(Set theset)
+|
+| Empty the set.
+\* ----------------------------------------------------------------- */
+void EmptySet(Set theset)
+{
+ register Index_t i;
+ for (i=0; i<setsize; i++)
+ theset[i] = 0L;
+}
+
+/* ----------------------------------------------------------------- *\
+| void SetUnion(Set src1, Set src2, Set result)
+|
+| Get the union of two sets
+\* ----------------------------------------------------------------- */
+void SetUnion(Set src1, Set src2, Set result)
+{
+ register Index_t i;
+ for (i=0; i<setsize; i++)
+ result[i] = src1[i] | src2[i];
+}
+
+/* ----------------------------------------------------------------- *\
+| void SetInsersection(Set src1, Set src2, Set result)
+|
+| Get the intersection of two sets
+\* ----------------------------------------------------------------- */
+void SetIntersection(Set src1, Set src2, Set result)
+{
+ register Index_t i;
+ for (i=0; i<setsize; i++)
+ result[i] = src1[i] & src2[i];
+}
+
+/* ----------------------------------------------------------------- *\
+| void SetComplement(Set src, Set result)
+|
+| Get the complement of a set
+\* ----------------------------------------------------------------- */
+void SetComplement(Set src, Set result)
+{
+ register Index_t i;
+ for (i=0; i<setsize; i++)
+ result[i] = ~src[i];
+ result[setsize-1] &= setmask; /* clear those last few bits */
+}
+
+/* ----------------------------------------------------------------- *\
+| void CopySet(Set src, Set result)
+|
+| Copy one set into another
+\* ----------------------------------------------------------------- */
+void CopySet(Set src, Set result)
+{
+ register Index_t i;
+ for (i=0; i<setsize; i++)
+ result[i] = src[i];
+}
+
+
+/* ----------------------------------------------------------------- *\
+| int CountSet(Set theset)
+|
+| Get the cardinality of the set
+\* ----------------------------------------------------------------- */
+int CountSet(Set theset)
+{
+ register unsigned i, j, count;
+
+ count = 0;
+ for (i=0; i<(unsigned)setsize; i++)
+ for (j=0; j<(unsigned)SETSCALE; j++)
+ if (theset[i] & (1<<j))
+ count++;
+
+ return count;
+}
+
+/* ----------------------------------------------------------------- *\
+| void BuildSet(Set theset, Index_t *thelist, Index_t length)
+|
+| Build a set out of a list of integers
+\* ----------------------------------------------------------------- */
+void BuildSet(Set theset, Index_t *thelist, Index_t length)
+{
+ register unsigned i;
+
+ EmptySet(theset);
+ for (i=0; i<(unsigned)length; i++)
+ theset[thelist[i]/SETSCALE] |= 1 << (thelist[i] % SETSCALE);
+}
+
+/* ----------------------------------------------------------------- *\
+| void DoForSet(Set theset, void (*action)(int, void *), void *arg)
+|
+| Do something to every element in a set
+\* ----------------------------------------------------------------- */
+void DoForSet(Set theset, void (*action)(int, void *), void *arg)
+{
+ register unsigned i, j;
+
+ for (i=0; i<(unsigned)setsize; i++)
+ for (j=0; j<(unsigned)SETSCALE; j++)
+ if (theset[i] & (1<<j))
+ (*action)(SETSCALE*i + j, arg);
+}
+
+
+/* ======================== SEARCH ROUTINES ======================== */
+
+Set results, oldresults, oneword, onefield;
+short firstfield, lastfield; /* indices into fieldtable */
+
+/* ----------------------------------------------------------------- *\
+| void InitSearch(void)
+|
+| Initialize the search lists
+\* ----------------------------------------------------------------- */
+void InitSearch(VOID)
+{
+ results = NewSet();
+ oldresults = NewSet();
+ oneword = NewSet();
+ onefield = NewSet();
+ firstfield = lastfield = -1;
+}
+
+/* ----------------------------------------------------------------- *\
+| void FreeSearch(void)
+|
+| Free the search list
+\* ----------------------------------------------------------------- */
+void FreeSearch(VOID)
+{
+ free(results);
+ free(oldresults);
+ free(oneword);
+ free(onefield);
+}
+
+/* ----------------------------------------------------------------- *\
+| void ClearResults(void)
+|
+| Clear the current and old results
+\* ----------------------------------------------------------------- */
+void ClearResults(VOID)
+{
+ EmptySet(results);
+ SetComplement(results, results);
+ CopySet(results, oldresults);
+}
+
+/* ----------------------------------------------------------------- *\
+| void SaveResults(void)
+|
+| Save and clear the current results
+\* ----------------------------------------------------------------- */
+void SaveResults(VOID)
+{
+ CopySet(results, oldresults);
+ EmptySet(results);
+ SetComplement(results, results);
+}
+
+/* ----------------------------------------------------------------- *\
+| void CombineResults(char invert, char intersect)
+|
+| Combine current results with old results
+\* ----------------------------------------------------------------- */
+void CombineResults(char invert, char intersect)
+{
+ if (invert)
+ SetComplement(results, results);
+ if (intersect)
+ SetIntersection(results, oldresults, results);
+ else
+ SetUnion(results, oldresults, results);
+}
+
+
+/* ----------------------------------------------------------------- *\
+| char SetUpField(char *field)
+|
+| Set up the search fields. Return the number of searchable fields.
+\* ----------------------------------------------------------------- */
+char SetUpField(char *field)
+{
+ int i, len;
+
+ firstfield = -1;
+ len = strlen(field);
+
+ for (i=0; i<numfields; i++)
+ {
+ if (!strncmp(field, fieldtable[i].thefield, len))
+ {
+ if (firstfield == -1)
+ firstfield = i;
+ lastfield = i;
+ }
+ }
+
+ if (firstfield == -1)
+ {
+ printf("\tNo searchable fields matching \"%s\".\n", field);
+ return 0;
+ }
+ else
+ return lastfield - firstfield + 1;
+
+}
+
+const char *badwords[] = BADWORDS;
+
+/* ----------------------------------------------------------------- *\
+| void FindWord(char *word, char prefix)
+|
+| Find a word in the currently active field and update `results'.
+| If the prefix flag is set, find all words having the given prefix.
+\* ----------------------------------------------------------------- */
+void FindWord(register char *word, char prefix)
+{
+ register IndexPtr words;
+ Index_t win, len;
+ int i;
+
+ if (!prefix)
+ {
+ if (!word[0])
+ {
+ printf("\t[ignoring empty string]\n");
+ return;
+ }
+ if (!word[1])
+ {
+ printf("\t[ignoring \"%s\"]\n", word);
+ return;
+ }
+ for (i=0; badwords[i]; i++)
+ {
+ if (!strcmp(badwords[i], word))
+ {
+ printf("\t[ignoring \"%s\"]\n", word);
+ return;
+ }
+ }
+ }
+
+ EmptySet(oneword);
+ len = strlen(word);
+
+ for (i=firstfield; i<=lastfield; i++)
+ {
+ words = fieldtable[i].words;
+ win = FindIndex(fieldtable[i], word, prefix);
+
+ if (win != INDEX_NAN)
+ {
+ if (prefix)
+ {
+ while ((win < fieldtable[i].numwords) &&
+ !strncmp(words[win].theword, word, len))
+ {
+ BuildSet(onefield, words[win].index,
+ words[win].numindex);
+ SetUnion(oneword, onefield, oneword);
+ win++;
+ }
+ }
+ else
+ {
+ BuildSet(onefield, words[win].index,
+ words[win].numindex);
+ SetUnion(oneword, onefield, oneword);
+ }
+ }
+ }
+
+ SetIntersection(oneword, results, results);
+}
+
+
+/* ============================= OUTPUT ============================ */
+FILE *bibfp;
+
+/* ----------------------------------------------------------------- *\
+| void ReportResults(void)
+|
+| Report the results of the previous search.
+\* ----------------------------------------------------------------- */
+void ReportResults(VOID)
+{
+ int numresults;
+
+ numresults = CountSet(results);
+
+ if (numresults == 0)
+ printf("\tNo matches found.\n");
+ else if (numresults == 1)
+ printf("\t1 match found.\n");
+ else
+ printf("\t%d matches found.\n", numresults);
+}
+
+/* ----------------------------------------------------------------- *\
+| void PrintEntry(int entry, FILE *ofp)
+|
+| Print the entry.
+\* ----------------------------------------------------------------- */
+void PrintEntry(int entry, FILE *ofp)
+{
+ char ch;
+ char braces;
+ char quotes;
+
+ if (entry >= (int)numoffsets) /* extra bits might be set */
+ return;
+
+ putc('\n', ofp);
+ if (fseek(bibfp, offsets[entry], 0))
+ die("Index file is corrupt.", "");
+
+ ch = safegetc(bibfp);
+
+ while (ch != '@')
+ {
+ putc(ch, ofp);
+ ch = safegetc(bibfp);
+ }
+ while ((ch != '{') && (ch != '('))
+ {
+ putc(ch, ofp);
+ ch = safegetc(bibfp);
+ }
+
+ braces = quotes = 0;
+
+ putc(ch, ofp);
+ ch = safegetc(bibfp);
+ while (braces || quotes || ((ch != '}') && (ch != ')')))
+ {
+ if (ch == '{')
+ braces++;
+ else if (ch == '}')
+ braces--;
+ else if ((ch == '"') && !braces)
+ quotes = !quotes;
+ putc(ch, ofp);
+ ch = safegetc(bibfp);
+ }
+
+ putc(ch, ofp);
+ putc('\n', ofp);
+}
+
+/* ----------------------------------------------------------------- *\
+| void PrintResults(char *filename)
+|
+| Print the current search results into the given file. If the
+| filename is NULL, pipe the output through $PAGER.
+\* ----------------------------------------------------------------- */
+void PrintResults(char *filename)
+{
+ int numresults;
+ FILE *ofp;
+ char *pager;
+ char *the_tmpfile = (char*)NULL;
+ int childpid;
+
+ numresults = CountSet(results);
+ if (numresults == 0)
+ printf("\tNothing to display!\n");
+ else if (numresults == numoffsets)
+ printf("\tI can't display the entire bibliography!\n");
+ else
+ {
+ if (filename)
+ {
+ ofp = fopen(filename, "a");
+ if (!ofp)
+ {
+ printf("\tCan't write to \"%s\"!\n", filename);
+ return;
+ }
+ }
+ else
+ {
+ the_tmpfile = (char*)tempnam(NULL, "bibl.");
+ ofp = fopen(the_tmpfile, "w");
+ if (!ofp)
+ {
+ printf("\tCan't write to \"%s\"!\n", the_tmpfile);
+ return;
+ }
+ }
+
+ if (filename)
+ {
+ time_t now = time(0);
+ fprintf(ofp, "%% Retrieved by biblook %d.%d at %s",
+ MAJOR_VERSION, MINOR_VERSION, ctime(&now));
+ }
+
+ DoForSet(results, (void (*)(int, void *)) PrintEntry,
+ (void *) ofp);
+
+ fclose(ofp);
+ if (filename)
+ printf("\tResults saved in \"%s\"\n", filename);
+ else
+ {
+ pager = (char*)getenv("PAGER");
+
+ if ((childpid = (int)fork()) != 0)
+ waitpid(childpid, (int *) 0, 0);
+ else if (pager)
+ {
+ execlp(pager, pager, the_tmpfile, (char *) 0);
+ perror(pager); /* should never get here! */
+ exit(0);
+ }
+ else
+ {
+ execl("/usr/ucb/more", "more", the_tmpfile, (char *) 0);
+ perror("/usr/ucb/more");
+ exit(0);
+ }
+
+ unlink(the_tmpfile);
+ free(the_tmpfile); /* malloc'ed by tempnam() */
+ putchar('\n');
+ }
+ }
+}
+
+
+/* ======================== USER INTERFACE ========================= */
+
+typedef enum {
+ T_Find, T_Display, T_Save, T_Quit, T_Word,
+ T_And, T_Or, T_Not, T_Semi, T_Return, T_Help
+} Token;
+
+/* ----------------------------------------------------------------- *\
+| Token GetToken(char *tokenstr)
+|
+| Get the next input token.
+\* ----------------------------------------------------------------- */
+Token GetToken(char *tokenstr)
+{
+ static char line[256];
+ static short pos;
+ static char neednew = 1;
+ short tlen = 0;
+
+ *tokenstr = 0;
+
+ if (neednew)
+ {
+ printf("biblook: ");
+ if (!fgets(line, 254, stdin))
+ return T_Quit;
+
+ pos = 0;
+ neednew = 0;
+ }
+
+ while ((line[pos] == ' ') || (line[pos] == '\t'))
+ pos++;
+
+ switch (line[pos])
+ {
+ case '\n':
+ pos++;
+ neednew = 1;
+ return T_Return;
+
+ case '&':
+ pos++;
+ return T_And;
+
+ case '|':
+ pos++;
+ return T_Or;
+
+ case '~':
+ case '!':
+ pos++;
+ return T_Not;
+
+ case ';':
+ pos++;
+ return T_Semi;
+
+ default:
+ tokenstr[tlen++] = tolower(line[pos++]);
+ while (!isspace(line[pos]) && (line[pos] != ';') &&
+ (line[pos] != '&') && (line[pos] != '|'))
+ {
+ tokenstr[tlen++] = tolower(line[pos++]);
+ }
+ tokenstr[tlen] = 0;
+
+ /* I really ought to use a hash table here. */
+
+ if (!strncmp(tokenstr, "find", tlen))
+ return T_Find;
+ else if (!strncmp(tokenstr, "display", tlen))
+ return T_Display;
+ else if (!strncmp(tokenstr, "help", tlen))
+ return T_Help;
+ else if (!strncmp(tokenstr, "?", tlen))
+ return T_Help;
+ else if (!strncmp(tokenstr, "save", tlen))
+ return T_Save;
+ else if (!strncmp(tokenstr, "quit", tlen))
+ return T_Quit;
+ else if (!strcmp(tokenstr, "and"))
+ return T_And;
+ else if (!strcmp(tokenstr, "or"))
+ return T_Or;
+ else if (!strcmp(tokenstr, "not"))
+ return T_Not;
+ else
+ return T_Word;
+ }
+}
+
+
+/* ----------------------------------------------------------------- *\
+| char Strip(char *string)
+|
+| Strip all but alphanumeric characters out of the string. Return
+| true if the original string ended with the prefix character '*'.
+\* ----------------------------------------------------------------- */
+char Strip(char *string)
+{
+ char prefix = 0;
+ char *src = string;
+
+ while (*src)
+ {
+ prefix = (*src == '*');
+ if (isalnum(*src))
+ *string++ = *src;
+ src++;
+ }
+ *string = 0;
+ return prefix;
+}
+
+/* ----------------------------------------------------------------- *\
+| void CmdError(void)
+|
+| Print syntax error message
+\* ----------------------------------------------------------------- */
+void CmdError(VOID)
+{
+ printf("?? Syntax error ??\n");
+}
+
+static const char* helplines[] =
+{
+ "biblook permits rapid lookup in a BibTeX bibliography data",
+ "base, using a compact binary index file prepared by bibindex(1).",
+ "",
+ "Available commands:",
+ "? or h[elp]",
+ " Display this help message.",
+ "",
+ "f[ind] [not] <field> <words>",
+ " Find the entries containing the given words in any",
+ " field with a prefix matching the <field> argument. For",
+ " example, `a' matches both `author' and `address', and",
+ " `au' matches `author' only. If the <field> argument is",
+ " `-' (or any string with no letters or numbers), match",
+ " any field.",
+ "",
+ " If `not' appears before the <field>, the sense of the",
+ " search is reversed. The symbols `~' and `!' can be",
+ " used in place of `not'.",
+ "",
+ " Each word is a contiguous sequence of letters and",
+ " digits. Case is ignored; accents should be omitted;",
+ " apostrophes are not required. Single characters and a",
+ " few common words are also ignored. Any word ending",
+ " with an asterisk is treated as a prefix. Thus,",
+ " `point*' matches `point', `points', `pointer', etc.",
+ "",
+ "and [not] <field> <words>",
+ "or [not] <field> <words>",
+ " Intersect (resp. union) the results of the given search",
+ " with the previous search. Several of these commands",
+ " may be combined on a single line. Commands are handled",
+ " in the order in which they appear; there is no pre-",
+ " cedence. Unlike other commands, and like `not', these",
+ " must be spelled out completely. `&' can be used in",
+ " place of `and', and `|' can be used in place of `or'.",
+ "",
+ "d[isplay]",
+ " Display the results of the previous search.",
+ "",
+ "s[ave] [<filename>]",
+ " Save the results of the previous results into the",
+ " specified file. If <filename> is omitted, the previous",
+ " save file is used. If no save file has ever been",
+ " specified, results are saved in the file specified on",
+ " the command line. If no such file is specified,",
+ " `save.bib' is used. If the save file exists, results",
+ " are appended to it.",
+ "",
+ "q[uit]/EOF",
+ " Quit.",
+ "",
+ "Several commands can be combined on a single line by",
+ "separating them with semicolons. For example, the following",
+ "command displays all STOC papers cowritten by Erdo\"s",
+ "without `Voronoi diagrams' in the title:",
+ "",
+ "f b stoc* | b symp* theory comp* & au erdos & ~t voronoi diagrams ; d",
+ "",
+ (const char*)NULL,
+};
+
+/* ----------------------------------------------------------------- *\
+| void GiveHelp(void)
+|
+| Print a help message. Lines are stored as separate strings to
+| avoid hitting compiler limits.
+\* ----------------------------------------------------------------- */
+
+void GiveHelp(VOID)
+{
+ int k;
+
+ for (k = 0; helplines[k]; ++k)
+ printf("\t%s\n",helplines[k]);
+}
+
+/* ----------------------------------------------------------------- *\
+| States for Lookup()
+\* ----------------------------------------------------------------- */
+typedef enum {
+ Wait, Find, FindN, FindF, FindW,
+ Display, Save, SaveF, Error
+} CmdState;
+
+/* ----------------------------------------------------------------- *\
+| void Lookup(const char *defsave)
+|
+| Execute commands until the user quits. Defsave is the default
+| save file name. This is one big finite state machine. It's long
+| and boring, but that's interface code for ya!
+\* ----------------------------------------------------------------- */
+void Lookup(const char *defsave)
+{
+ char tokenstr[256];
+ char savefile[256];
+ CmdState state = Wait;
+ Token thetoken;
+ char intersect = 1; /* 1 = intersect, 0 = union */
+ char invert = 0; /* 1 = invert */
+ char prefix; /* 1 = word is really a prefix */
+
+ ClearResults();
+ strcpy(savefile, defsave);
+
+ while (1)
+ {
+ thetoken = GetToken(tokenstr);
+
+ if ((thetoken == T_Quit) && !tokenstr[0])
+ return;
+ else if (thetoken == T_Help)
+ {
+ GiveHelp();
+ continue;
+ }
+
+ switch (state)
+ {
+ case Wait:
+ switch (thetoken)
+ {
+ case T_Quit:
+ return;
+ case T_Find:
+ state = Find;
+ ClearResults();
+ break;
+ case T_And:
+ state = Find;
+ SaveResults();
+ break;
+ case T_Or:
+ state = Find;
+ intersect = 0;
+ SaveResults();
+ break;
+ case T_Display:
+ state = Display;
+ break;
+ case T_Save:
+ state = Save;
+ break;
+ case T_Return:
+ case T_Semi:
+ break;
+ default:
+ state = Error; CmdError(); break;
+ }
+ break;
+
+ case Find:
+ if (thetoken == T_Not)
+ {
+ state = FindN;
+ invert = 1;
+ }
+ else
+ {
+ if (tokenstr[0])
+ {
+ state = FindF;
+ Strip(tokenstr);
+ if (!SetUpField(tokenstr))
+ state = Error;
+ }
+ else
+ {
+ state = (thetoken == T_Return) ? Wait : Error;
+ CmdError();
+ }
+ }
+ break;
+
+ case FindN:
+ if (tokenstr[0])
+ {
+ state = FindF;
+ Strip(tokenstr);
+ if (!SetUpField(tokenstr))
+ state = Error;
+ }
+ else
+ {
+ state = (thetoken == T_Return) ? Wait : Error;
+ CmdError();
+ }
+ break;
+
+ case FindF:
+ if (tokenstr[0])
+ {
+ state = FindW;
+ prefix = Strip(tokenstr);
+ FindWord(tokenstr, prefix);
+ }
+ else
+ {
+ state = (thetoken == T_Return) ? Wait : Error;
+ CmdError();
+ }
+ break;
+
+ case FindW:
+ switch (thetoken)
+ {
+ case T_And:
+ state = Find;
+ CombineResults(invert, intersect);
+ SaveResults();
+ invert = 0;
+ intersect = 1;
+ break;
+ case T_Or:
+ state = Find;
+ CombineResults(invert, intersect);
+ SaveResults();
+ invert = 0;
+ intersect = 0;
+ break;
+ case T_Semi:
+ state = Wait;
+ CombineResults(invert, intersect);
+ invert = 0;
+ intersect = 1;
+ break;
+ case T_Return:
+ state = Wait;
+ CombineResults(invert, intersect);
+ ReportResults();
+ invert = 0;
+ intersect = 1;
+ break;
+ default:
+ if (tokenstr[0])
+ {
+ state = FindW;
+ prefix = Strip(tokenstr);
+ FindWord(tokenstr, prefix);
+ }
+ else
+ {
+ state = Error;
+ CmdError();
+ }
+ break;
+ }
+ break;
+
+ case Display:
+ if ((thetoken == T_Semi) || (thetoken == T_Return))
+ {
+ state = Wait;
+ PrintResults(NULL);
+ }
+ else
+ {
+ state = Error;
+ CmdError();
+ }
+ break;
+
+ case Save:
+ if (tokenstr[0])
+ {
+ state = SaveF;
+ strcpy(savefile, tokenstr);
+ }
+ else if ((thetoken == T_Semi) || (thetoken == T_Return))
+ {
+ state = Wait;
+ PrintResults(savefile);
+ }
+ else
+ {
+ state = Error;
+ CmdError();
+ }
+ break;
+
+ case SaveF:
+ if ((thetoken == T_Semi) || (thetoken == T_Return))
+ {
+ state = Wait;
+ PrintResults(savefile);
+ }
+ else
+ {
+ state = Error;
+ CmdError();
+ }
+ break;
+
+ case Error:
+ switch (thetoken)
+ {
+ case T_Quit:
+ return;
+ case T_Return:
+ state = Wait;
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+ }
+}
+
+
+/* ================================================================= *\
+| The main program
+\* ================================================================= */
+int main(int argc, char **argv)
+{
+ char bibfile[256];
+ char bixfile[256];
+ struct stat bibstat, bixstat;
+ char *p;
+
+ printf("biblook version %d.%d file version %d\n",
+ (int)MAJOR_VERSION, (int)MINOR_VERSION, (int)FILE_VERSION);
+ printf("Type ? or h for help\n");
+
+ if ((argc != 2) && (argc != 3))
+ {
+ fprintf(stderr, "Usage: biblook bib [savefile]\n");
+ exit(1);
+ }
+
+ if (((p = strrchr(argv[1],'.')) != (char*)NULL) &&
+ (strcmp(p, ".bib") == 0))
+ *p = '\0'; /* remove any .bib extension */
+
+ sprintf(bibfile, "%s.bib", argv[1]);
+ sprintf(bixfile, "%s.bix", argv[1]);
+
+ stat(bibfile, &bibstat);
+ stat(bixfile, &bixstat);
+ if (bibstat.st_mtime > bixstat.st_mtime)
+ die(bixfile, "is out of date. Please rerun bibindex.");
+
+ bibfp = fopen(bibfile, "r");
+ if (!bibfp)
+ die("Can't read", bibfile);
+
+ GetTables(bixfile);
+ InitSearch();
+
+ if (argc == 3)
+ Lookup(argv[2]);
+ else
+ Lookup("save.bib");
+
+ FreeSearch();
+ FreeTables();
+
+ fclose(bibfp);
+ exit(0);
+ return(0);
+}
diff --git a/biblio/bibtex/utils/bibindex/biblook.h b/biblio/bibtex/utils/bibindex/biblook.h
new file mode 100644
index 0000000000..b5709099a1
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/biblook.h
@@ -0,0 +1,113 @@
+#include <stdio.h>
+#if (__STDC__ || __cplusplus || c_plusplus)
+#include <stdlib.h>
+#endif /* (__STDC__ || __cplusplus || c_plusplus) */
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#if !__NeXT__
+#include <unistd.h>
+#include <malloc.h>
+#endif /* !__NeXT__ */
+
+#if (__STDC__ || __cplusplus || c_plusplus)
+#define VOID void
+#else /* NOT (__STDC__ || __cplusplus || c_plusplus) */
+#define VOID
+#endif /* (__STDC__ || __cplusplus || c_plusplus) */
+
+#undef bcopy
+#define bcopy(source,target,length) \
+ memcpy((char*)(target),(const char*)(source),length)
+
+#if sun
+#if __cplusplus
+extern "C" int _filbuf(FILE *); /* missing from stdio.h */
+#if !__GNUC__
+int _flsbuf(unsigned char,FILE *); /* missing from stdio.h */
+#endif /* !__GNUC__ */
+extern "C" int _flsbuf(unsigned int, FILE *); /* missing from stdio.h */
+extern "C" char *tempnam(const char *, const char *);
+ /* not defined by acc's stdio.h */
+extern "C" int waitpid(int, int *, int); /* not defined by any Sun .h file */
+#else /* NOT __cplusplus */
+int _filbuf(FILE *); /* missing from stdio.h */
+#if !__GNUC__
+int _flsbuf(unsigned char,FILE *); /* missing from stdio.h */
+#endif /* !__GNUC__ */
+char *tempnam(const char *, const char *); /* not defined by acc's stdio.h */
+int waitpid(int, int *, int); /* not defined by any Sun .h file */
+#endif /* __cplusplus */
+#endif /* sun */
+
+#if DEBUG_MALLOC
+ /* For dynamic memory debugging. */
+ /* Note that the parens around free and malloc */
+ /* are essential to prevent macro expansion in */
+ /* ANSI/ISO Standard C and C++. Erroneous */
+ /* preprocessors will go into an infinite loop */
+ /* (e.g. SunOS /usr/CC/sun4/cpp) */
+#if sun
+int malloc_debug(int level);
+int malloc_verify(void);
+#else /* NOT sun */
+#define malloc_debug(level) level
+#define malloc_verify() 1
+#endif /* sun */
+#undef free
+#undef malloc
+#define free(ptr) (malloc_verify(), \
+ fprintf(stderr,"line %d: free(%p)\n",(int)__LINE__,(ptr)), \
+ (free)(ptr))
+static void *p__; /* for malloc() debugging */
+#define malloc(s) (malloc_verify(),\
+ p__ = (malloc)(s),\
+ fprintf(stderr,"line %d: malloc(%ld) -> %p\n",\
+ (int)__LINE__,(s),(p__)),\
+ p__)
+#endif /* DEBUG_MALLOC */
+
+#if __NeXT__
+static char* p__;
+static char* q__;
+/* NB: This is not a general definition of tempnam(), but works for
+this program! */
+#define tempnam(dir,pfx) (p__ = tmpnam((char*)NULL), \
+ q__ = malloc(strlen(p__)+1), \
+ strcpy(q__,p__))
+#include <libc.h> /* for struct rusage definition */
+#define waitpid(pid, statusp, options) wait4((pid), (statusp), (options),\
+ (struct rusage*)0)
+#endif /* __NeXT__ */
+
+#if ardent
+/* Stardent has only simple wait-for-all-children function, sigh... */
+#define waitpid(pid, statusp, options) wait((int*)0)
+char *getenv(const char *name); /* missing from system header files */
+#endif
+
+#if __hppa
+#include <sys/wait.h>
+#endif /* __hppa */
+
+#if __sgi
+#include <sys/wait.h>
+#endif /* __sgi */
+
+#define FILE_VERSION 2 /* file format version */
+#define MAJOR_VERSION 2 /* program version */
+#define MINOR_VERSION 4
+
+#define MAXWORD 31 /* maximum length of word indexed */
+typedef char Word[MAXWORD+1];
+
+typedef unsigned short Index_t;
+#define INDEX_NAN 65535 /* maximum value representable as Index_t */
+
+#define BADWORDS { /* words not to index */ \
+ "an", "and", "for", "in", "of", "on", "the", "to", "with", 0 \
+}
+
+#define NONABBREV ",\n\t \"#%'()={}" /* See LaTeX book, p.143 */
diff --git a/biblio/bibtex/utils/bibindex/biblook.man b/biblio/bibtex/utils/bibindex/biblook.man
new file mode 100644
index 0000000000..d39c874791
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/biblook.man
@@ -0,0 +1,122 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "1.00",
+.\" date = "30 September 1992",
+.\" time = "16:48:22 MDT",
+.\" filename = "biblook.man",
+.\" address = "Center for Scientific Computing
+.\" Department of Mathematics
+.\" University of Utah
+.\" Salt Lake City, UT 84112
+.\" USA
+.\" Tel: +1 801 581 5254
+.\" FAX: +1 801 581 4148",
+.\" checksum = "20001 122 646 4560",
+.\" email = "beebe@math.utah.edu (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, BibTeX",
+.\" supported = "yes",
+.\" docstring = "This file is the UNIX nroff/troff manual page
+.\" documentation for biblook, a BibTeX bibliography
+.\" lookup program.
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH BIBLOOK 1 "30 September 1992" "Version 2.2"
+.SH NAME
+biblook \- lookup entries in a bibliography file
+.SH SYNOPSIS
+.B "biblook \fIbasename\fP [\fIsavefile\fP]
+.SH DESCRIPTION
+.I biblook
+permits rapid lookup in a \*(Bi\& bibliography data base, using a
+compact binary index file prepared by \fIbibindex\fP(1).
+.PP
+At the prompt, the user can enter any of the following commands:
+.PP
+.TP
+.B ? or h[elp]
+Display a help message.
+.TP
+.B "f[ind] [not] <field> <words>"
+Find the entries containing the given words in any field
+with a prefix matching the <field> argument. For example,
+`a' matches both `author' and `address', and `au' matches
+`author' only. If the <field> argument is `-' (or any
+string with no letters or numbers), match any field.
+.IP
+If `not' appears before the <field>, the sense of the search
+is reversed. The symbols `~' and `!' can be used in place
+of `not'.
+.IP
+Each word is a contiguous sequence of letters and digits.
+Case is ignored; accents should be omitted; apostrophes are
+not required. Single characters and a few common words are
+also ignored. Any word ending with an asterisk is treated
+as a prefix. Thus, `point*' matches `point', `points',
+`pointer', etc.
+.PP
+.TP
+.BR "and [not] <field> <words>"
+.TP
+.BR "or [not] <field> <words>"
+Intersect (resp. union) the results of the given search
+with the previous search. Several of these commands may be
+combined on a single line. Commands are handled in the order
+in which they appear; there is no precedence. Unlike other
+commands, and like `not', these must be spelled out
+completely. `&' can be used in place of `and', and `|' can
+be used in place of `or'.
+.PP
+.TP
+.B "d[isplay]"
+Display the results of the previous search.
+.PP
+.TP
+.B "s[ave] [<filename>]"
+Save the results of the previous results into the specified
+file. If <filename> is omitted, the previous save file is
+used. If no save file has ever been specified, results are
+saved in the file specified on the command line. If no such
+file is specified, `save.bib' is used. If the save file
+exists, results are appended to it.
+.PP
+.TP
+.B "q[uit]/EOF"
+Quit.
+.PP
+Several commands can be combined on a single line by separating
+them with semicolons. For example, the following command displays
+all STOC papers cowritten by Erdo"s without `Voronoi diagrams' in
+the title:
+.PP
+.nf
+f b stoc* | b symp* theory comp* & au erdos & ~t voronoi diagrams ; d
+.fi
+.PP
+.SH "SEE ALSO"
+bibclean(1), bibindex(1), bibtex(1), latex(1), tex(1)
+.SH AUTHOR
+.nf
+Jeff Erickson
+Computer Science Division
+University of California
+Berkeley, CA 94720
+USA
+Email: <jeff@cs.berkeley.edu>, <jeffe@melody.berkeley.edu>
+.fi
+.PP
+This program is in the public domain. You may use it or modify it to
+your heart's content, at your own risk.
+.\" ========================[End of biblook.man]========================
diff --git a/biblio/bibtex/utils/bibindex/biblook.txt b/biblio/bibtex/utils/bibindex/biblook.txt
new file mode 100644
index 0000000000..2586b0feb4
--- /dev/null
+++ b/biblio/bibtex/utils/bibindex/biblook.txt
@@ -0,0 +1,132 @@
+
+
+
+BIBLOOK(1) User Commands BIBLOOK(1)
+
+
+
+NAME
+ biblook - lookup entries in a bibliography file
+
+SYNOPSIS
+ biblook basename [savefile]
+
+DESCRIPTION
+ biblook permits rapid lookup in a BibTeX bibliography data
+ base, using a compact binary index file prepared by bibin-
+ dex(1).
+
+ At the prompt, the user can enter any of the following com-
+ mands:
+
+ ? or h[elp]
+ Display a help message.
+
+ f[ind] [not] <field> <words>
+ Find the entries containing the given words in any
+ field with a prefix matching the <field> argument. For
+ example, `a' matches both `author' and `address', and
+ `au' matches `author' only. If the <field> argument is
+ `-' (or any string with no letters or numbers), match
+ any field.
+
+ If `not' appears before the <field>, the sense of the
+ search is reversed. The symbols `~' and `!' can be
+ used in place of `not'.
+
+ Each word is a contiguous sequence of letters and
+ digits. Case is ignored; accents should be omitted;
+ apostrophes are not required. Single characters and a
+ few common words are also ignored. Any word ending
+ with an asterisk is treated as a prefix. Thus,
+ `point*' matches `point', `points', `pointer', etc.
+
+ and [not] <field> <words>
+
+ or [not] <field> <words>
+ Intersect (resp. union) the results of the given search
+ with the previous search. Several of these commands
+ may be combined on a single line. Commands are handled
+ in the order in which they appear; there is no pre-
+ cedence. Unlike other commands, and like `not', these
+ must be spelled out completely. `&' can be used in
+ place of `and', and `|' can be used in place of `or'.
+
+ d[isplay]
+ Display the results of the previous search.
+
+ s[ave] [<filename>]
+ Save the results of the previous results into the
+
+
+
+Version 2.2 Last change: 30 September 1992 1
+
+
+
+
+
+
+BIBLOOK(1) User Commands BIBLOOK(1)
+
+
+
+ specified file. If <filename> is omitted, the previous
+ save file is used. If no save file has ever been
+ specified, results are saved in the file specified on
+ the command line. If no such file is specified,
+ `save.bib' is used. If the save file exists, results
+ are appended to it.
+
+ q[uit]/EOF
+ Quit.
+
+ Several commands can be combined on a single line by
+ separating them with semicolons. For example, the following
+ command displays all STOC papers cowritten by Erdo"s without
+ `Voronoi diagrams' in the title:
+
+ f b stoc* | b symp* theory comp* & au erdos & ~t voronoi diagrams ; d
+
+SEE ALSO
+ bibclean(1), bibindex(1), bibtex(1), latex(1), tex(1)
+
+AUTHOR
+ Jeff Erickson
+ Computer Science Division
+ University of California
+ Berkeley, CA 94720
+ USA
+ Email: <jeff@cs.berkeley.edu>, <jeffe@melody.berkeley.edu>
+
+ This program is in the public domain. You may use it or
+ modify it to your heart's content, at your own risk.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Version 2.2 Last change: 30 September 1992 2
+
+
+
diff --git a/biblio/bibtex/utils/bible/BIBLE.HLP b/biblio/bibtex/utils/bible/BIBLE.HLP
new file mode 100644
index 0000000000..eb37732483
--- /dev/null
+++ b/biblio/bibtex/utils/bible/BIBLE.HLP
Binary files differ
diff --git a/biblio/bibtex/utils/bible/bible.ini b/biblio/bibtex/utils/bible/bible.ini
new file mode 100644
index 0000000000..529abd98a9
--- /dev/null
+++ b/biblio/bibtex/utils/bible/bible.ini
@@ -0,0 +1,85 @@
+//Options File for BiBLE
+
+[library filenames]
+filename=*none*
+lastfile=*none*
+
+[BibTeX entry specification]
+types=article,book,booklet,conference,inbook,incollection,inproceedings,manual,mastersthesis,misc,phdthesis,proceedings,techreport,unpublished,not in list
+fields=address,author,booktitle,chapter,editor,howpublished,institution,journal,note,number,month,organization,pages,publisher,school,series,title,type,volume,year,edition
+article=4,1,16,7,19,18,9,12,10,8
+book=5,1,16,4,13,19,18,9,15,0,20,10,8
+booklet=1,16,1,18,9,15,0,20,10,8
+conference=4,1,16,2,19,4,18,9,15,12,0,10,11,13,8
+inbook=7,1,16,4,3,12,13,19,18,9,15,17,0,20,10,8
+incollection=5,1,16,2,13,19,4,18,9,15,17,3,12,0,20,10,8
+inproceedings=4,1,16,2,19,4,18,9,15,12,0,10,11,13,8
+manual=1,16,1,11,0,20,10,19,8
+mastersthesis=4,1,16,14,19,17,0,10,8
+misc=0,1,16,5,10,19,8
+phdthesis=4,1,16,14,19,17,0,10,8
+proceedings=2,16,19,4,18,9,15,0,10,11,13,8
+techreport=4,1,16,6,19,17,9,0,10,8
+unpublished=3,1,16,8,10,19
+not in list=0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
+choice=inbook,3,12,book,1,4,inbook,1,4,book,9,18,inbook,9,18,incollection,9,18,inproceedings,9,18,proceedings,9,18
+
+[filtering options]
+filtering=no
+filter1.field=type
+filter2.field=line off
+filter3.field=line off
+filter1.op=equals
+filter2.op=contains
+filter3.op=greater than
+filter1.value=inbook
+filter2.value=eye
+filter3.value=1980
+filtermode=and
+
+[log options]
+log.status=yes
+disp.status=yes
+log.error=yes
+disp.error=yes
+writelog=yes
+logfile=bible.log
+maxlogsize=300
+
+[saving options]
+backup=yes
+linebreak=yes
+linewidth=70
+insertwidth=5
+datapath=c:\
+
+[exiting options]
+autosave=no
+switchfilteringoff=yes
+switchsortingoff=no
+savesorted=no
+savesize=yes
+
+[window size]
+main.width=524
+main.top=15
+main.height=684
+main.left=357
+display.width=297
+display.top=16
+display.height=695
+display.left=58
+sorting=year
+
+[HTML export options]
+expfields=,title,
+expline=no
+expcolumns=1
+
+[display options]
+disp1=title
+disp2=reference
+disp3=none
+disp4=none
+truncate=yes
+charlimit=45
diff --git a/biblio/bibtex/utils/bible/readme.txt b/biblio/bibtex/utils/bible/readme.txt
new file mode 100644
index 0000000000..8e904ec776
--- /dev/null
+++ b/biblio/bibtex/utils/bible/readme.txt
@@ -0,0 +1,38 @@
+README.TXT for BiBLE for Windows
+V0.99 (15.03.2000)
+******************************************************************
+
+Before you use this software, read and understand the following:
+
+1. BiBLE was written because I wanted a convenient way to edit my
+ own BibTeX library. I can't and won't guarantee that it works
+ with yours. Try it at your own risk.
+2. Don't use the program on your library before you know what you're
+ doing. Create a backup copy of your library.
+3. If you find any errors or have suggestions for future versions,
+ tell me. Maybe I'll include them. schreiber@genista.de
+4. You may redistribute this package only as a whole with all the
+ files unchanged. The distribution contains:
+
+ bible.exe - the win32 executable
+ bible.hlp - the windows helpfile
+ bible.ini - initialization file
+ test.bib - demonstration database
+ readme.txt - this file
+ versions.txt - the version history
+
+5. BiBLE is free to use.
+6. Read the windows helpfile.
+7. The .ini-file contains the information about the possible itemtypes
+ and their fields. If you want to add custom items, you can do so.
+ Just add another type-name to the "types=..." line, and a line
+ saying "typename=x,f,f,f,f". The x is the number of required fields
+ following, the fs are the numbers of the field in the "fields=..."
+ line. If you want to add your own optional or required fields DO SO
+ ONLY AT THE END OF THAT LINE or all the other items will get messed
+ up. The line starting with "choice=" contains alternative field pairs.
+ Don't change the first pair, as it is the only one where you can have
+ both field values set (type inbook, fields chapter and/or pages). If
+ you need custom fields with and/or behaviour contact me and explain
+ why.
+8. Have fun. \ No newline at end of file
diff --git a/biblio/bibtex/utils/bible/versions.txt b/biblio/bibtex/utils/bible/versions.txt
new file mode 100644
index 0000000000..ea2dd092b5
--- /dev/null
+++ b/biblio/bibtex/utils/bible/versions.txt
@@ -0,0 +1,20 @@
+BiBLE for Windows
+Version history
+******************************************************************
+
+
+V0.99:
+******************************************************************
+
+
+02.04.2000 Build 111 - BiBLE now reminds you to save
+30.03.2000 Build 110 - added variable item display feature
+29.03.2000 Build 109 - added automatic printing for HTML export
+27.03.2000 Build 108 - minor import filter problem solved
+21.03.2000 Build 107 - improved sorting speed
+21.03.2000 Build 106 - added clipboard and html export
+20.03.2000 Build 104 - fixed minor clipboard import problem
+ and startup without file loading error
+17.03.2000 Build 103 - clipboard import filter added
+16.03.2000 Build 102 - corrected an error in the "new item" function
+15.03.2000 Build 99 - first published version of BiBLE \ No newline at end of file
diff --git a/biblio/bibtex/utils/bibsort/Makefile b/biblio/bibtex/utils/bibsort/Makefile
new file mode 100644
index 0000000000..88f1ace3bd
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/Makefile
@@ -0,0 +1,157 @@
+#=======================================================================
+# Makefile for bibsort, a BibTeX bibliography file sort utility.
+#
+# Current target list:
+#
+# all make documentation files
+# bibsort.hlp VAX VMS HELP file of manual pages
+# bibsort.shar UNIX shar bundle for e-mail distribution
+# bibsort.tar UNIX tar archive bundle
+# bibsort.txt ASCII text file of manual pages
+# bibsort.zip Info-ZIP archive bundle
+# bibsort.zoo Zoo archive bundle
+# clean remove temporary files
+# clobber remove all automatically recreatable files
+# install install bibsort on system
+# install.time installation time stamp
+# install-ftp install bibsort on anonymous ftp directory
+# install-ftp.time installation time stamp
+# test-version test extraction of version number
+# uninstall remove installed executable and man pages
+# uninstall-ftp remove installed files in anonymous ftp
+# directory
+#
+# [19-Oct-1992]
+#=======================================================================
+
+# Change these two directories to match local conventions if you
+# wish to do "make install" and "make install-ftp":
+BINDIR = /usr/local/bin
+MANDIR = /usr/local/man/man1
+MANEXT = 1
+FTPDIR = /usr/spool/ftp/pub/tex/bib
+
+# Need new awk (nawk) or gawk here:
+AWK = nawk
+
+CHMOD = chmod
+
+COL = col -b
+
+COMPRESS = compress
+
+CP = /bin/cp
+
+DIST-FILES = README Makefile bibsort.man bibsort.hlp bibsort.sh \
+ bibsort.txt rofvms.awk
+
+LN = ln -s
+
+NROFF = nroff
+
+RM = /bin/rm -f
+
+SHELL = /bin/sh
+
+UNZIP = unzip
+
+VERSION = `$(AWK) '/^\#\#\#[ \t]*version *= *"[0-9.]+", *$$/ \
+ { gsub(/[^0-9.]/,"",$$4); print $$4 }' bibsort.sh`
+
+ZIP = zip
+
+ZOO = zoo
+
+#=======================================================================
+
+all: bibsort.txt bibsort.hlp
+
+# VAX VMS help file format from bibsort.txt
+bibsort.hlp: bibsort.txt rofvms.awk
+ $(AWK) -f rofvms.awk <bibsort.txt >bibsort.hlp
+
+bibsort.shar: $(DIST-FILES)
+ shar -b -c -v $(DIST-FILES) >bibsort.shar
+
+bibsort.tar: $(DIST-FILES)
+ -$(RM) bibsort.tar bibsort.tar-lst
+ tar chf bibsort.tar $(DIST-FILES)
+ -mkdir bibsort-$(VERSION)
+ cd bibsort-$(VERSION); tar xf ../bibsort.tar
+ tar cf bibsort-$(VERSION).tar bibsort-$(VERSION)
+ -$(RM) -r bibsort-$(VERSION)
+ -$(RM) bibsort.tar
+ $(LN) bibsort-$(VERSION).tar bibsort.tar
+
+bibsort.txt: bibsort.man
+ $(NROFF) -man $? | $(COL) >$@
+
+bibsort.zip: $(DIST-FILES)
+ -$(RM) bibsort*.zip
+ -$(RM) bibsort*.zip-lst
+ $(ZIP) bibsort-$(VERSION).zip $(DIST-FILES)
+ $(UNZIP) -v bibsort-$(VERSION).zip >bibsort-$(VERSION).zip-lst
+ $(LN) bibsort-$(VERSION).zip bibsort.zip
+
+bibsort.zoo: $(DIST-FILES)
+ -$(RM) bibsort*.zoo
+ -$(RM) bibsort*.zoo-lst
+ $(ZOO) a bibsort-$(VERSION).zoo $(DIST-FILES)
+ $(ZOO) v bibsort-$(VERSION).zoo >bibsort-$(VERSION).zoo-lst
+ $(LN) bibsort-$(VERSION).zoo bibsort.zoo
+
+clean:
+ -$(RM) *.o
+ -$(RM) *.shar
+ -$(RM) *.tar
+ -$(RM) *.tar-lst
+ -$(RM) *.zip
+ -$(RM) *.zip-lst
+ -$(RM) *.zoo
+ -$(RM) *.zoo-lst
+ -$(RM) *~
+ -$(RM) \#*
+ -$(RM) core
+
+clobber: clean
+ -$(RM) bibsort.hlp
+ -$(RM) bibsort.txt
+ -$(RM) install.time install-ftp.time
+
+install: install.time
+
+install.time: bibsort.sh bibsort.man
+ $(CP) bibsort.sh $(BINDIR)/bibsort
+ $(CHMOD) 755 $(BINDIR)/bibsort
+ $(CP) bibsort.man $(MANDIR)/bibsort.$(MANEXT)
+ $(CHMOD) 644 $(MANDIR)/bibsort.$(MANEXT)
+ touch install.time
+
+install-ftp: install-ftp.time
+
+install-ftp.time: bibsort.tar bibsort.zip bibsort.zoo
+ tar tvf bibsort-$(VERSION).tar >$(FTPDIR)/bibsort-$(VERSION).tar-lst
+ $(COMPRESS) <bibsort-$(VERSION).tar \
+ >$(FTPDIR)/bibsort-$(VERSION).tar.z
+ $(CP) bibsort-$(VERSION).zip $(FTPDIR)
+ $(CP) bibsort-$(VERSION).zip-lst $(FTPDIR)
+ $(CP) bibsort-$(VERSION).zoo $(FTPDIR)
+ $(CP) bibsort-$(VERSION).zoo-lst $(FTPDIR)
+ ls -l $(FTPDIR)/bibsort*
+ date >install-ftp.time
+
+test-version:
+ @echo "Version number is ""'"$(VERSION)"'"
+
+uninstall:
+ -$(RM) $(BINDIR)/bibsort $(MANDIR)/bibsort.$(MANEXT)
+ -$(RM) install.time
+
+uninstall-ftp:
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).tar
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).tar-lst
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).zip
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).zip-lst
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).zoo
+ -$(RM) $(FTPDIR)/bibsort-$(VERSION).zoo-lst
+ -$(RM) install-ftp.time
diff --git a/biblio/bibtex/utils/bibsort/README b/biblio/bibtex/utils/bibsort/README
new file mode 100644
index 0000000000..27820c3ea6
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/README
@@ -0,0 +1,15 @@
+/u/sy/beebe/tex/bibsort/README, Tue Oct 13 19:07:33 1992
+Edit by Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+
+This directory contains bibsort, a UNIX tool for sorting BibTeX
+bibliography files. The contents are:
+
+Makefile UNIX makefile
+README This file
+bibsort.hlp ASCII text file with formatted manual pages in VAX VMS
+ HELP format
+bibsort.man manual pages (nroff/troff input)
+bibsort.sh bibsort program, implemented as a UNIX sh script using
+ nawk, egrep, sort, and, tr.
+bibsort.txt ASCII text file with formatted manual pages
+rofvms.awk AWK script to convert .txt file to .hlp file
diff --git a/biblio/bibtex/utils/bibsort/bibsort.hlp b/biblio/bibtex/utils/bibsort/bibsort.hlp
new file mode 100644
index 0000000000..2dc7845201
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/bibsort.hlp
@@ -0,0 +1,200 @@
+1 DVI
+ bibsort - sort a BibTeX bibliography file
+
+2 SYNOPSIS
+ SYNOPSIS
+ bibsort [optional sort(1) switches] < infile >outfile
+
+2 DESCRIPTION
+ DESCRIPTION
+ bibsort filters a BibTeX bibliography, or bibliography frag-
+ ment, on its standard input, printing on standard output a
+ sorted bibliography.
+
+ Sorting is by BibTeX tag name, or by @String macro name, and
+ letter case is ignored in the sorting.
+
+ If no command-line switches are provided for sort(1), then
+ -f is supplied to cause letter case to be ignored. If you
+ also want to remove duplicate entries, you could specify the
+ switches -f -u.
+
+ The input stream is conceptually divided into four parts,
+ any of which may be absent.
+
+2 --1.--Introductory--material--such--as -comments,---file
+ 1. Introductory material such as comments, file
+2 ------headers, and-edit-logs-that-are-ignored-by-BibTeX.
+ headers, and edit logs that are ignored by BibTeX.
+2 ------No-line-in-this-part-begins-with-an-at-sign,-``@''.
+ No line in this part begins with an at-sign, ``@''.
+
+2 --2.--Preamble-material delineated-by-``@Preamble{''--and
+ 2. Preamble material delineated by ``@Preamble{'' and
+2 ------a -matching-closing-``}'',-intended-to-be processed
+ a matching closing ``}'', intended to be processed
+2 ------by-TeX.--Normally,-there-is-only-one-such entry--in
+ by TeX. Normally, there is only one such entry in
+2 ------a -bibliography-file,-although-BibTeX,-and-bibsort,
+ a bibliography file, although BibTeX, and bibsort,
+2 ------permit-more-than-one.
+ permit more than one.
+
+2 --3.--Macro-definitions of-the-form-``@String{...}''. A
+ 3. Macro definitions of the form ``@String{...}''. A
+2 ------single--macro--definition -may-span-multiple-lines,
+ single macro definition may span multiple lines,
+2 ------and-there are-usually-several-such-definitions.
+ and there are usually several such definitions.
+
+2 --4.--Bibliography--entries--such--as--``@Article{...}'',
+ 4. Bibliography entries such as ``@Article{...}'',
+2 ------``@Book{...}'',--``@Proceedings{...}'',--and-so-on.
+ ``@Book{...}'', ``@Proceedings{...}'', and so on.
+2 ------For-bibsort,-any-line-that--begins--with an--``@''
+ For bibsort, any line that begins with an ``@''
+2 ------immediately--followed--by letters and-digits-and-an
+ immediately followed by letters and digits and an
+2 ------open-brace-is-considered-to-be-such-an-entry.
+ open brace is considered to be such an entry.
+
+ The order of these parts is preserved in the output stream.
+ Part 1 will be unchanged, but parts 2--4 will be sorted
+ within themselves.
+
+ The sort key of ``@Preamble'' entries is their initial line,
+ of ``@String'' entries, the macro name, and of all BibTeX
+ entries, the citation tag between the open curly brace and
+ the trailing comma.
+
+ bibsort will correctly handle UNIX files with LF line termi-
+ nators, as well as IBM PC DOS files with CR LF line termina-
+ tors; the essential requirement is that input lines be del-
+ ineated by LF characters.
+
+2 CAVEATS
+ CAVEATS
+ BibTeX has loose syntactical requirements that the current
+ simple implementation of bibsort does not support. In par-
+ ticular, outer parentheses may not be used in place of
+ braces following ``@keyword'' patterns, nor may there be
+ leading or embedded whitespace.
+
+ If you have such a file, you can use bibclean(1) to pretty-
+ print it into a form that bibsort can handle successfully.
+
+ The user must be aware that sorting a bibliography is not
+ without peril, for at least these reasons:
+
+2 --1.--BibTeX-has-a-requirement-that-entry-tags given--in
+ 1. BibTeX has a requirement that entry tags given in
+2 ------crossref =--tag-pairs-in a-bibliography-entry-must
+ crossref = tag pairs in a bibliography entry must
+2 ------refer-to-entries-defined-later,--rather--than--ear-
+ refer to entries defined later, rather than ear-
+2 ------lier,--in -the-bibliography-file. -This-regrettable
+ lier, in the bibliography file. This regrettable
+2 ------implementation-limitation of-the-current (pre-1.0)
+ implementation limitation of the current (pre-1.0)
+2 ------BibTeX--prevents-arbitrary-ordering-of-entries-when
+ BibTeX prevents arbitrary ordering of entries when
+2 ------crossref-values-are-present.
+ crossref values are present.
+
+2 --2.--If-the-BibTeX-file-contains-interspersed-commentary
+ 2. If the BibTeX file contains interspersed commentary
+2 ------between--``@keyword{...}''--entries,--this-material
+ between ``@keyword{...}'' entries, this material
+2 ------will-be-considered-part-of-the-preceding-entry,-and
+ will be considered part of the preceding entry, and
+2 ------will-be-sorted-with-it.--Leading-commentary-is-more
+ will be sorted with it. Leading commentary is more
+2 ------common,-and-will-be-moved elsewhere-in-the-file.
+ common, and will be moved elsewhere in the file.
+
+2 ------This-is-normally-not--a--problem for--the--part 1
+ This is normally not a problem for the part 1
+2 ------material-before-the-``@Preamble'',-since-it-is-kept
+ material before the ``@Preamble'', since it is kept
+2 ------together-at-the-beginning of-the-output-stream.
+ together at the beginning of the output stream.
+
+2 --3.--Some-kinds-of-bibliography-files-should-be-kept--in
+ 3. Some kinds of bibliography files should be kept in
+2 ------a -different--order-than-alphabetically-by-tags. A
+ a different order than alphabetically by tags. A
+2 ------good-example-is-a bibliography-file-with the--con-
+ good example is a bibliography file with the con-
+2 ------tents--of a-journal,-for-which-publication-order-is
+ tents of a journal, for which publication order is
+2 ------likely-more-suitable.
+ likely more suitable.
+
+ While a much more sophisticated implementation of bibsort
+ could deal with the first point, solving the second one
+ requires human intelligence and natural language understand-
+ ing that computers lack.
+
+ bibsort uses ASCII control characters 001 through 007 for
+ temporary modifications of the input stream. If any of
+ these are already present in the input, they will be altered
+ on output. This is unlikely to be a problem, because those
+ characters have neither a printable representation, nor are
+ they conventionally used to mark line or page boundaries in
+ text files.
+
+2 PROGRAMMING-NOTES
+ PROGRAMMING NOTES
+ Some text editors permit application of an arbitrary filter
+ command to a region of text. For example, in GNU emacs(1),
+ the command C-u M-x shell-command-on-region, or
+ equivalently, C-u M-|, can be used to run bibsort on a
+ region of the buffer that is devoid of cross references and
+ other material that cannot be safely sorted.
+
+ Some implementations of BibTeX editing support in GNU
+ emacs(1) have a sort-bibtex-entries command that is func-
+ tionally similar to bibsort. However, the file size that
+ can be processed by emacs(1) is limited, while bibsort can
+ be used on arbitrarily large files, since it acts as a
+ filter, processing a small amount of data at a time. The
+ sort stage needs the entire data stream, but fortunately,
+ the UNIX sort(1) command is clever enough to deal with very
+ large inputs.
+
+ The current implementation of bibsort follows the UNIX trad-
+ ition of combining simple already-available tools. A six-
+ stage pipeline of egrep(1), nawk(1), sort(1), and tr(1)
+ accomplishes the job in one pass with about 70 lines of
+ shell script, 60 lines of which is a nawk(1) program for
+ insertion of sort keys. bibsort was written and tested on
+ several large bibliographies in a couple of hours. By con-
+ trast, bibtex(1) is more than 11 000 lines of code and docu-
+ mentation, and bibclean(1) is about 1500 lines long.
+
+2 BUGS
+ BUGS
+ bibsort may fail on some UNIX systems if their sort(1)
+ implementations cannot handle very long lines, because for
+ sorting purposes, each complete bibliography entry is tem-
+ porarily folded into a single line. You may be able to
+ overcome this problem by adding a -znnnnn switch to the
+ sort(1) command (passed via the command line to bibsort) to
+ increase the maximum line size to some larger value of nnnnn
+ bytes.
+
+2 SEE-ALSO
+ SEE ALSO
+ bibclean(1), bibtex(1), egrep(1), emacs(1), nawk(1),
+ sort(1), tr(1).
+
+2 AUTHOR
+ AUTHOR
+ Nelson H. F. Beebe, Ph.D.
+ Center for Scientific Computing
+ Department of Mathematics
+ University of Utah
+ Salt Lake City, UT 84112
+ Tel: (801) 581-5254
+ FAX: (801) 581-4148
+ Email: <beebe@math.utah.edu>
diff --git a/biblio/bibtex/utils/bibsort/bibsort.man b/biblio/bibtex/utils/bibsort/bibsort.man
new file mode 100644
index 0000000000..7dcfb2d320
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/bibsort.man
@@ -0,0 +1,291 @@
+.\" ====================================================================
+.\" @Troff-man-file{
+.\" author = "Nelson H. F. Beebe",
+.\" version = "0.00",
+.\" date = "13 October 1992",
+.\" time = "19:32:55 MDT",
+.\" filename = "bibsort.man",
+.\" address = "Center for Scientific Computing
+.\" Department of Mathematics
+.\" University of Utah
+.\" Salt Lake City, UT 84112
+.\" USA",
+.\" telephone = "+1 801 581 5254",
+.\" FAX = "+1 801 581 4148",
+.\" checksum = "45983 291 1296 8946",
+.\" email = "beebe@math.utah.edu (Internet)",
+.\" codetable = "ISO/ASCII",
+.\" keywords = "bibliography, sorting, BibTeX",
+.\" supported = "yes",
+.\" docstring = "This file contains the UNIX manual pages
+.\" for the bibsort utility, a program for
+.\" sorting BibTeX data base files by their
+.\" BibTeX tag names.
+.\"
+.\" The checksum field above contains a CRC-16
+.\" checksum as the first value, followed by the
+.\" equivalent of the standard UNIX wc (word
+.\" count) utility output of lines, words, and
+.\" characters. This is produced by Robert
+.\" Solovay's checksum utility.",
+.\" }
+.\" ====================================================================
+.if t .ds Bi B\s-2IB\s+2T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Bi BibTeX
+.if t .ds Te T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds Te TeX
+.TH BIBSORT 1 "13 October 1992" "Version 0.00"
+.\"======================================================================
+.SH NAME
+bibsort \- sort a BibTeX bibliography file
+.\"======================================================================
+.SH SYNOPSIS
+.B "bibsort [optional sort(1) switches]"
+< infile >outfile
+.\"======================================================================
+.SH DESCRIPTION
+.I bibsort
+filters a \*(Bi\& bibliography, or bibliography
+fragment, on its standard input, printing on
+standard output a sorted bibliography.
+.PP
+Sorting is by \*(Bi\& tag name, or by
+.I @String
+macro name, and letter case is
+ignored in the sorting.
+.PP
+If no command-line switches are provided for
+.IR sort (1),
+then
+.I \-f
+is supplied to cause letter case to be ignored.
+If you also want to remove duplicate entries, you
+could specify the switches
+.IR "\-f \-u" .
+.PP
+The input stream is conceptually divided into four
+parts, any of which may be absent.
+.RS
+.TP \w'1.'u+2n
+1.
+Introductory material such as comments, file
+headers, and edit logs that are ignored by
+\*(Bi\&. No line in this part begins with an
+at-sign, ``@''.
+.TP
+2.
+Preamble material delineated by ``@Preamble{'' and
+a matching closing ``}'', intended to be processed
+by \*(Te\&. Normally, there is only one such
+entry in a bibliography file, although \*(Bi\&,
+and
+.IR bibsort ,
+permit more than one.
+.TP
+3.
+Macro definitions of the form
+``@String{.\|.\|.}''. A single macro definition
+may span multiple lines, and there are usually
+several such definitions.
+.TP
+4.
+Bibliography entries such as ``@Article{.\|.\|.}'',
+``@Book{.\|.\|.}'', ``@Proceedings{.\|.\|.}'', and
+so on. For
+.IR bibsort ,
+any line that begins with an ``@'' immediately
+followed by letters and digits and an open brace
+is considered to be such an entry.
+.RE
+.PP
+The order of these parts is preserved in the
+output stream. Part 1 will be unchanged, but
+parts 2--4 will be sorted within themselves.
+.PP
+The sort key of ``@Preamble'' entries is their
+initial line, of ``@String'' entries, the macro
+name, and of all \*(Bi\& entries, the citation tag
+between the open curly brace and the trailing
+comma.
+.PP
+.I bibsort
+will correctly handle UNIX files with LF line
+terminators, as well as IBM PC DOS files with CR
+LF line terminators; the essential requirement is
+that input lines be delineated by LF characters.
+.\"======================================================================
+.SH CAVEATS
+\*(Bi\& has loose syntactical requirements that
+the current simple implementation of
+.I bibsort
+does not support. In particular, outer
+parentheses may
+.I not
+be used in place of braces following ``@keyword''
+patterns, nor may there be leading or embedded
+whitespace.
+.PP
+If you have such a file, you can use
+.IR bibclean (1)
+to prettyprint it into a form that
+.I bibsort
+can handle successfully.
+.PP
+The user must be aware that sorting a bibliography
+is not without peril, for at least these reasons:
+.RS
+.TP \w'1.'u+2n
+1.
+\*(Bi\& has a
+requirement that entry tags given in
+.IR "crossref" " = " "tag"
+pairs in a bibliography entry
+.I must
+refer to entries defined
+.IR later ,
+rather than earlier, in the bibliography file.
+This regrettable implementation limitation of the
+current (pre-1.0) \*(Bi\& prevents arbitrary
+ordering of entries when
+.I crossref
+values are present.
+.TP
+2.
+If the BibTeX file contains interspersed
+commentary between ``@keyword{.\|.\|.}'' entries,
+this material will be considered part of the
+.I preceding
+entry, and will be sorted with it. Leading
+commentary is more common, and will be moved
+elsewhere in the file.
+.IP
+This is normally not a problem for the part 1
+material before the ``@Preamble'', since it is kept
+together at the beginning of the output stream.
+.TP
+3.
+Some kinds of bibliography files should be kept in
+a different order than alphabetically by tags. A
+good example is a bibliography file with the
+contents of a journal, for which publication order
+is likely more suitable.
+.RE
+.PP
+While a much more sophisticated implementation of
+.I bibsort
+could deal with the first point, solving the
+second one requires human intelligence and natural
+language understanding that computers lack.
+.PP
+.I bibsort
+uses ASCII control characters 001 through 007 for
+temporary modifications of the input stream. If
+any of these are already present in the input,
+they will be altered on output. This is unlikely
+to be a problem, because those characters have
+neither a printable representation, nor are they
+conventionally used to mark line or page
+boundaries in text files.
+.\"======================================================================
+.SH "PROGRAMMING NOTES"
+Some text editors permit application of an
+arbitrary filter command to a region of text.
+For example, in GNU
+.IR emacs (1),
+the command
+.IR "C-u M-x shell-command-on-region" ,
+or equivalently,
+.IR "C-u M-|" ,
+can be used to run
+.I bibsort
+on a region of the buffer that is devoid of cross
+references and other material that cannot be
+safely sorted.
+.PP
+Some implementations of \*(Bi\& editing support in
+GNU
+.IR emacs (1)
+have a
+.I sort-bibtex-entries
+command that is functionally similar to
+.IR bibsort .
+However, the file size that can be processed
+by
+.IR emacs (1)
+is limited, while
+.I bibsort
+can be used on arbitrarily large files, since it
+acts as a filter, processing a small amount of
+data at a time. The sort stage needs the entire
+data stream, but fortunately, the UNIX
+.IR sort (1)
+command is clever enough to deal with very large
+inputs.
+.PP
+The current implementation of
+.I bibsort
+follows the UNIX tradition of combining simple
+already-available tools. A six-stage pipeline of
+.IR egrep (1),
+.IR nawk (1),
+.IR sort (1),
+and
+.IR tr (1)
+accomplishes the job in one pass with about 70
+lines of shell script, 60 lines of which is a
+.IR nawk (1)
+program for insertion of sort keys.
+.I bibsort
+was written and tested on several large
+bibliographies in a couple of hours. By contrast,
+.IR bibtex (1)
+is more than 11\0000 lines of code and
+documentation, and
+.IR bibclean (1)
+is about 1500 lines long.
+.\"======================================================================
+.SH BUGS
+.I bibsort
+may fail on some UNIX systems if their
+.IR sort (1)
+implementations cannot handle very long lines,
+because for sorting purposes, each complete
+bibliography entry is temporarily folded into a
+single line. You may be able to overcome this
+problem by adding a
+.BI -z nnnnn
+switch to the
+.IR sort (1)
+command (passed via the command line to
+.IR bibsort )
+to increase the maximum line size to some larger
+value of
+.I nnnnn
+bytes.
+.\"======================================================================
+.SH "SEE ALSO"
+.BR bibclean (1),
+.BR bibtex (1),
+.BR egrep (1),
+.BR emacs (1),
+.BR nawk (1),
+.BR sort (1),
+.BR tr (1).
+.\"======================================================================
+.SH AUTHOR
+Nelson H. F. Beebe, Ph.D.
+.br
+Center for Scientific Computing
+.br
+Department of Mathematics
+.br
+University of Utah
+.br
+Salt Lake City, UT 84112
+.br
+Tel: (801) 581-5254
+.br
+FAX: (801) 581-4148
+.br
+Email: <beebe@math.utah.edu>
+.\"==============================[The End]==============================
diff --git a/biblio/bibtex/utils/bibsort/bibsort.sh b/biblio/bibtex/utils/bibsort/bibsort.sh
new file mode 100644
index 0000000000..fe8a2281ef
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/bibsort.sh
@@ -0,0 +1,163 @@
+#!/bin/sh
+### ====================================================================
+### @UNIX-shell-file{
+### author = "Nelson H. F. Beebe",
+### version = "0.00",
+### date = "13 October 1992",
+### time = "19:33:14 MDT",
+### filename = "bibsort.sh",
+### address = "Center for Scientific Computing
+### Department of Mathematics
+### University of Utah
+### Salt Lake City, UT 84112
+### USA",
+### telephone = "+1 801 581 5254",
+### FAX = "+1 801 581 4148",
+### checksum = "35811 163 700 5138",
+### email = "beebe@math.utah.edu (Internet)",
+### codetable = "ISO/ASCII",
+### keywords = "bibliography, sorting, BibTeX",
+### supported = "yes",
+### docstring = "This file contains the bibsort utility, a
+### program for sorting BibTeX data base files
+### by their BibTeX tag names.
+###
+### The checksum field above contains a CRC-16
+### checksum as the first value, followed by the
+### equivalent of the standard UNIX wc (word
+### count) utility output of lines, words, and
+### characters. This is produced by Robert
+### Solovay's checksum utility.",
+### }
+# ====================================================================
+# Sort a BibTeX file fragment by citation tags, filtering stdin to
+# stdout.
+#
+# Usage:
+# bibsort [optional sort(1) switches] <infile >outfile
+#
+# If the sort switches are omitted, -f (ignore letter case
+# differences) is used. "bibsort -f -u" would remove duplicate
+# bibliography entries from the input stream.
+#
+# Note that this operation cannot be done in general, because @string
+# and @preamble entries need to come first, and cross-references last.
+#
+# In general, you should only apply this command to a fragment of a
+# .bib file that you know in advance can be sorted.
+#
+# We deal with leading commentary, @preamble, and @string by giving
+# them temporary sort keys that place them before other bibliography
+# entries.
+#
+########################################################################
+# WARNINGS:
+#
+# (1) This simple version does NOT recognize bib entries with outer
+# parentheses instead of braces.
+#
+# (2) It may fail on some UNIX sort implementations that cannot handle
+# very long lines, because for sorting purposes, each complete bib
+# entry is temporarily folded into a single line. You may be able to
+# overcome this problem by adding a -z nnnnn switch to the sort
+# command to set the maximum line size to nnnnn bytes.
+#
+########################################################################
+#
+# The sorting is implemented as a filter pipeline:
+#
+# Stage 1 (nawk) finds bib file entries and prefixes them with a line
+# containing a sort key, where each such line begins with a Ctl-E, and
+# the file ends with Ctl-E.
+#
+# Stage 2 (tr) turns LF into Ctl-G and Ctl-E into LF. This hides
+# line boundaries and makes each item a separate `line'.
+#
+# Stage 3 (sort) sorts `lines' (i.e. bib entries), ignoring
+# letter case differences.
+#
+# Stage 4 (tr) turns LF into Ctl-E, and Ctl-G back into LF. This
+# restores the original line boundaries.
+#
+# Stage 5 (tr) deletes all Ctl-E and Ctl-F characters.
+#
+# Stage 6 (egrep) removes the sort key lines.
+#
+
+if [ $# -gt 0 ]
+then
+ SORTFLAGS="$*"
+else
+ SORTFLAGS="-f"
+fi
+
+nawk '
+BEGIN {
+ sort_prefix = "\005"
+ sort_key = sort_prefix "%%SORTKEY:"
+ hidden_newline = "\006"
+ print sort_key "\001" hidden_newline
+}
+
+/^@[Pp][Rr][Ee][Aa][Mm][Bb][Ll][Ee]{/ {
+ k = index($0,"{") + 1
+ print sort_key "\002" substr($0,k) hidden_newline
+ printbraceditem()
+ next
+}
+/^@[sS][tT][rR][iI][nN][gG]{/ {
+ k = index($0,"{") + 1
+ m = index($0,"=")
+ print sort_key "\003" substr($0,k,m-k) hidden_newline
+ printbraceditem()
+ next
+}
+
+# "@keyword{tag,"
+/^@[a-zA-Z0-9]*{/ {
+ k = index($0,"{") + 1
+ m = index($0,",")
+ print sort_key "\004" substr($0,k,m-k) hidden_newline
+ print
+ next
+}
+
+{ print }
+
+END { printf(sort_prefix) }
+
+function bracecount(s, k,n)
+{
+ n = 0
+ for (k = 1; k <= length(s); ++k)
+ {
+ if (substr(s,k,1) == "{")
+ n++
+ else if (substr(s,k,1) == "}")
+ n--
+ }
+ return (n)
+}
+
+# Starting with the current contents of $0, print lines until we
+# reach a zero brace count.
+
+function printbraceditem(count)
+{
+ count = bracecount($0)
+ print $0
+ while (count != 0)
+ {
+ if (getline <= 0)
+ break
+ printf("%s\007",$0)
+ count += bracecount($0)
+ }
+}
+' | \
+ tr '\012\005' '\007\012' | \
+ sort ${SORTFLAGS} | \
+ tr '\007\012' '\012\005' | \
+ tr -d '\005\006' | \
+ egrep -v '^%%SORTKEY:'
+################################[The End]###############################
diff --git a/biblio/bibtex/utils/bibsort/bibsort.txt b/biblio/bibtex/utils/bibsort/bibsort.txt
new file mode 100644
index 0000000000..20dffe15cd
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/bibsort.txt
@@ -0,0 +1,264 @@
+
+
+
+BIBSORT(1) USER COMMANDS BIBSORT(1)
+
+
+
+NAME
+ bibsort - sort a BibTeX bibliography file
+
+SYNOPSIS
+ bibsort [optional sort(1) switches] < infile >outfile
+
+DESCRIPTION
+ bibsort filters a BibTeX bibliography, or bibliography frag-
+ ment, on its standard input, printing on standard output a
+ sorted bibliography.
+
+ Sorting is by BibTeX tag name, or by @String macro name, and
+ letter case is ignored in the sorting.
+
+ If no command-line switches are provided for sort(1), then
+ -f is supplied to cause letter case to be ignored. If you
+ also want to remove duplicate entries, you could specify the
+ switches -f -u.
+
+ The input stream is conceptually divided into four parts,
+ any of which may be absent.
+
+ 1. Introductory material such as comments, file
+ headers, and edit logs that are ignored by BibTeX.
+ No line in this part begins with an at-sign, ``@''.
+
+ 2. Preamble material delineated by ``@Preamble{'' and
+ a matching closing ``}'', intended to be processed
+ by TeX. Normally, there is only one such entry in
+ a bibliography file, although BibTeX, and bibsort,
+ permit more than one.
+
+ 3. Macro definitions of the form ``@String{...}''. A
+ single macro definition may span multiple lines,
+ and there are usually several such definitions.
+
+ 4. Bibliography entries such as ``@Article{...}'',
+ ``@Book{...}'', ``@Proceedings{...}'', and so on.
+ For bibsort, any line that begins with an ``@''
+ immediately followed by letters and digits and an
+ open brace is considered to be such an entry.
+
+ The order of these parts is preserved in the output stream.
+ Part 1 will be unchanged, but parts 2--4 will be sorted
+ within themselves.
+
+ The sort key of ``@Preamble'' entries is their initial line,
+ of ``@String'' entries, the macro name, and of all BibTeX
+ entries, the citation tag between the open curly brace and
+ the trailing comma.
+
+
+
+
+
+Version 0.00 Last change: 13 October 1992 1
+
+
+
+
+
+
+BIBSORT(1) USER COMMANDS BIBSORT(1)
+
+
+
+ bibsort will correctly handle UNIX files with LF line termi-
+ nators, as well as IBM PC DOS files with CR LF line termina-
+ tors; the essential requirement is that input lines be del-
+ ineated by LF characters.
+
+CAVEATS
+ BibTeX has loose syntactical requirements that the current
+ simple implementation of bibsort does not support. In par-
+ ticular, outer parentheses may not be used in place of
+ braces following ``@keyword'' patterns, nor may there be
+ leading or embedded whitespace.
+
+ If you have such a file, you can use bibclean(1) to pretty-
+ print it into a form that bibsort can handle successfully.
+
+ The user must be aware that sorting a bibliography is not
+ without peril, for at least these reasons:
+
+ 1. BibTeX has a requirement that entry tags given in
+ crossref = tag pairs in a bibliography entry must
+ refer to entries defined later, rather than ear-
+ lier, in the bibliography file. This regrettable
+ implementation limitation of the current (pre-1.0)
+ BibTeX prevents arbitrary ordering of entries when
+ crossref values are present.
+
+ 2. If the BibTeX file contains interspersed commentary
+ between ``@keyword{...}'' entries, this material
+ will be considered part of the preceding entry, and
+ will be sorted with it. Leading commentary is more
+ common, and will be moved elsewhere in the file.
+
+ This is normally not a problem for the part 1
+ material before the ``@Preamble'', since it is kept
+ together at the beginning of the output stream.
+
+ 3. Some kinds of bibliography files should be kept in
+ a different order than alphabetically by tags. A
+ good example is a bibliography file with the con-
+ tents of a journal, for which publication order is
+ likely more suitable.
+
+ While a much more sophisticated implementation of bibsort
+ could deal with the first point, solving the second one
+ requires human intelligence and natural language understand-
+ ing that computers lack.
+
+ bibsort uses ASCII control characters 001 through 007 for
+ temporary modifications of the input stream. If any of
+ these are already present in the input, they will be altered
+ on output. This is unlikely to be a problem, because those
+ characters have neither a printable representation, nor are
+
+
+
+Version 0.00 Last change: 13 October 1992 2
+
+
+
+
+
+
+BIBSORT(1) USER COMMANDS BIBSORT(1)
+
+
+
+ they conventionally used to mark line or page boundaries in
+ text files.
+
+PROGRAMMING NOTES
+ Some text editors permit application of an arbitrary filter
+ command to a region of text. For example, in GNU emacs(1),
+ the command C-u M-x shell-command-on-region, or
+ equivalently, C-u M-|, can be used to run bibsort on a
+ region of the buffer that is devoid of cross references and
+ other material that cannot be safely sorted.
+
+ Some implementations of BibTeX editing support in GNU
+ emacs(1) have a sort-bibtex-entries command that is func-
+ tionally similar to bibsort. However, the file size that
+ can be processed by emacs(1) is limited, while bibsort can
+ be used on arbitrarily large files, since it acts as a
+ filter, processing a small amount of data at a time. The
+ sort stage needs the entire data stream, but fortunately,
+ the UNIX sort(1) command is clever enough to deal with very
+ large inputs.
+
+ The current implementation of bibsort follows the UNIX trad-
+ ition of combining simple already-available tools. A six-
+ stage pipeline of egrep(1), nawk(1), sort(1), and tr(1)
+ accomplishes the job in one pass with about 70 lines of
+ shell script, 60 lines of which is a nawk(1) program for
+ insertion of sort keys. bibsort was written and tested on
+ several large bibliographies in a couple of hours. By con-
+ trast, bibtex(1) is more than 11 000 lines of code and docu-
+ mentation, and bibclean(1) is about 1500 lines long.
+
+BUGS
+ bibsort may fail on some UNIX systems if their sort(1)
+ implementations cannot handle very long lines, because for
+ sorting purposes, each complete bibliography entry is tem-
+ porarily folded into a single line. You may be able to
+ overcome this problem by adding a -znnnnn switch to the
+ sort(1) command (passed via the command line to bibsort) to
+ increase the maximum line size to some larger value of nnnnn
+ bytes.
+
+SEE ALSO
+ bibclean(1), bibtex(1), egrep(1), emacs(1), nawk(1),
+ sort(1), tr(1).
+
+AUTHOR
+ Nelson H. F. Beebe, Ph.D.
+ Center for Scientific Computing
+ Department of Mathematics
+ University of Utah
+ Salt Lake City, UT 84112
+ Tel: (801) 581-5254
+
+
+
+Version 0.00 Last change: 13 October 1992 3
+
+
+
+
+
+
+BIBSORT(1) USER COMMANDS BIBSORT(1)
+
+
+
+ FAX: (801) 581-4148
+ Email: <beebe@math.utah.edu>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Version 0.00 Last change: 13 October 1992 4
+
+
+
diff --git a/biblio/bibtex/utils/bibsort/rofvms.awk b/biblio/bibtex/utils/bibsort/rofvms.awk
new file mode 100644
index 0000000000..469786a3c6
--- /dev/null
+++ b/biblio/bibtex/utils/bibsort/rofvms.awk
@@ -0,0 +1,60 @@
+# rofvms.awk -*-awk-*-
+# Filter to convert nroff -man output to VMS .hlp file format according
+# to the rules:
+#
+# 13 or more consecutive blank lines are reduced to 1
+# 3--12 consecutive blank lines are dropped
+# 2 consecutive blank lines are reduced to 1
+# All others output verbatim.
+#
+# The peculiar number 13 handles the case where a paragraph break
+# coincides with a page break.
+#
+# In addition, whenever a line in non-blank in column 1, and then
+# previous line was blank, we insert a blank line; this provides
+# vertical space before a section heading.
+#
+# The output of nroff -man on different UNIX systems is regrettably
+# quite variable in appearance; this file is likely to need
+# modifications on other than Sun OS.
+#
+# Too bad nroff doesn't have an option to suppress titling!
+#
+# The NAME section head becomes 1 DVI, and others become
+# 2 XXX followed by XXX.
+# [05-Aug-89]
+
+# Match and delete page headers: xxx(nnn) .... xxx(nnn)
+/^[A-Za-z][-_A-Za-z0-9]*\([0-9A-Za-z]+\).*[A-Za-z][-_A-Za-z0-9]*\([0-9A-Za-z]+\)$/ {next;}
+
+# Match and delete page footers: Sun Release ...nnn
+# These vary from system to system, so extra patterns may be needed here
+/^Sun Release.*[0-9]+$/ {next;} # Sun OS x.x
+/^Printed.*[0-9]+$/ {next;} # BSD 4.3
+/^Page [0-9].*$/ {next;} # Silicon Graphics
+/^Version.*Last change:/ {next;}# bibclean.txt on SunOS 4.1.1
+
+
+# Match all lines and do blank line processing
+{
+ if (NF == 0) # blank line
+ nb++;
+ else # non blank line
+ {
+ if ((nb == 1) || (nb == 2) || (nb >= 13))
+ printf("\n");
+ else if ((nb > 0) && (substr($0,1,1) != " ") && (nf > 0))
+ printf("\n");
+ if ($0 == "NAME") # level 1 header
+ $0 = "1 DVI";
+ else if (substr($0,1,1) != " ") # level 2 header
+ {
+ header = $0;
+ gsub(/ /,"-",header);
+ $0 = "2 " header "\n " $0;
+ }
+ printf("%s\n",$0);
+ nb = 0;
+ nf++;
+ }
+}
diff --git a/biblio/bibtex/utils/bibtool/README.md b/biblio/bibtex/utils/bibtool/README.md
new file mode 100644
index 0000000000..c52f777fb7
--- /dev/null
+++ b/biblio/bibtex/utils/bibtool/README.md
@@ -0,0 +1,125 @@
+----------------------------------------------------------------------
+
+ ###### ############
+ ####### ############
+ ## ## ##
+ ## ## ## ##### ## #### #### ##
+ ####### ## ###### ## ###### ###### ##
+ ####### ## ## ## ## ## ## ## ## ##
+ ## ## ## ###### ## ## ## ## ## ##
+ ## ## ## ## ## ## ## ## ## ## ##
+ ## ## ## ## ## ## ## ## ## ## ##
+ ####### ## ###### ## ###### ###### #######
+ ###### ## ##### ## #### #### #######
+
+----------------------------------------------------------------------
+
+ BibTool: A Tool for Manipulating BibTeX Data Bases
+
+
+BibTeX provides an easy to use means to integrate citations and
+bibliographies into LaTeX documents. But the user is left alone with
+the management of the BibTeX files. The program BibTool is intended to
+fill this gap. BibTool allows the manipulation of BibTeX files which
+goes beyond the possibilities --- and intentions --- of BibTeX. The
+possibilities of BibTool include
+
+* Pretty-printing BibTeX data bases adjustable by lots of parameters.
+
+* Syntactic checks with error recovery superior to BibTeX and helpful
+ error messages.
+
+* Semantic checks can be specified by the user.
+
+* Sorting and merging of BibTeX data bases according to a free
+ definable sort key.
+
+* Generation of uniform reference keys according to predefined rules
+ or according to an own specification.
+
+* Selecting references used in one publication which are found by
+ analyzing an .aux file.
+
+* Selecting references by a set of criteria (regular expressions).
+
+* Controlled rewriting of fields utilizing regular expressions to
+ specify the rewriting rules.
+
+* Macro (String) expansion to eliminate the need of extra string
+ definitions.
+
+* Collecting statistics about one or more BibTeX data bases.
+
+
+BibTool contains a documentation written in LaTeX of more than 80
+pages (and still growing).
+
+BibTool is written in C and has been compiled on various operating
+systems like flavors of Unix and MSDOG machines. It is distributed in
+source code. No compiled versions are available from the author
+(Useless to ask!).
+
+
+# Binary Distributions
+
+
+There exist binary distributions of BibTool for several operating
+systems. For instance users of Debian based Linux systems can access
+BibTool via their native package manager.
+
+Before installing from the sources you might want to check whether the
+package manager of your system provides a sufficiently recent version
+of BibTool.
+
+
+# CTAN Download
+
+
+BibTool can be obtained from the CTAN archives:
+
+* https://www.ctan.org/tex-archive/biblio/bibtex/utils/bibtool
+
+or via the BibTool home page
+
+* http://www.gerd-neugebauer.de/software/TeX/BibTool
+
+Get the file BibTool-x.xx.tar.gz where x.xx is the version number.
+Unpack it with the command (on Unix)
+
+ gunzip < BibTool-x.xx.tar.gz | tar -xvf -
+
+It will create a directory named BibTool which contains the
+installation instructions in the file install.tex.
+
+A signature for the source bundle is provided as well. My public key
+can be found on http://pgp.mit.edu/. You should search for my email
+address.
+
+
+# Licenses
+
+
+The sources of BibTool are distributed under the GNU General Public
+License version 2 or later.
+
+The documentation is distributed under the Creative Commons
+Attributation-Share Alike 3.0 License.
+
+The distribution of BibTool contains the following third-party
+software which is released under their own licenses:
+
+* GNU regex library 0.12 is located in the directory regex-0.12. It is
+ distributed under the GNU General Public License version 2 or later.
+
+* mkdirchain consists of the file mkdirchain. It is in the public
+ domain.
+
+* install-sh consists of the file install-sh. It is distributed under
+ the MIT license contained in this file.
+
+----------------------------------------------------------------------
+Enjoy it!
+
+Gerd Neugebauer
+mailto:gene@gerd-neugebauer.de
+
diff --git a/biblio/bibtex/utils/bibtool/bibtool.pdf b/biblio/bibtex/utils/bibtool/bibtool.pdf
new file mode 100644
index 0000000000..e084512a48
--- /dev/null
+++ b/biblio/bibtex/utils/bibtool/bibtool.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibtool/c_lib.pdf b/biblio/bibtex/utils/bibtool/c_lib.pdf
new file mode 100644
index 0000000000..4588ec95be
--- /dev/null
+++ b/biblio/bibtex/utils/bibtool/c_lib.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibtool/ref_card.pdf b/biblio/bibtex/utils/bibtool/ref_card.pdf
new file mode 100644
index 0000000000..2f24c8fc01
--- /dev/null
+++ b/biblio/bibtex/utils/bibtool/ref_card.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibtools/README b/biblio/bibtex/utils/bibtools/README
new file mode 100644
index 0000000000..37ee997667
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/README
@@ -0,0 +1,51 @@
+September 3, 1992
+updated November 12, 1995
+updated October 2000
+
+This is a collection of BibTeX tools written (mostly) by David Kotz.
+I provide them as-is. Use them as you please. Some slight
+modifications may be needed to pathnames embedded in the shell
+scripts, to find the library files they need (sed, awk, and bst
+files).
+
+The programs are:
+
+ aux2bib - given an .aux file, make a portable .bib file to go with
+ it. This is useful when you need to ship a tex file elsewhere
+
+ bibify - this can be used to eliminate one pass of LaTeX in many
+ cases: (latex, bibtex, bibify, latex), instead of (latex, bibtex,
+ latex, latex). Handy for large documents. Does not work with
+ multiple aux files.
+
+ bibkey - make a list of all entries that have the given keyword in
+ their "keyword" field.
+
+ cleantex - really a general tex script, this removes all the
+ little files created by tex and latex as they run, leaving only
+ the original files.
+
+ looktex - makes a list of all entries that match a given regexp
+
+ makebib - makes an exportable .bib file from a given set of bib
+ files and an optional list of citations. Handy for posting bib
+ entries on the net! The portability comes from substituting
+ @strings, and stripping "comment" fields if you like. Ignore the
+ -d option.
+
+ printbib - the most useful of all; this makes a dvi file from a
+ .bib file for handy reference, sorted by cite key and including
+ "keyword", "abstract", and "comment" fields.
+
+ bib2html - produce an browsable html version of the bibliography.
+ There are lots of styles that do slightly different things.
+ See demo.html.
+
+ citekeys - makes a list of all the cite keys (on the @ line)
+
+See the shell scripts for more documentation.
+Otherwise you're on your own. Good luck.
+
+David Kotz
+dfk@cs.dartmouth.edu
+
diff --git a/biblio/bibtex/utils/bibtools/abstract.bst b/biblio/bibtex/utils/bibtools/abstract.bst
new file mode 100644
index 0000000000..209373cef7
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/abstract.bst
@@ -0,0 +1,1345 @@
+% BibTeX bibliography style `abstract'
+% by David Kotz dfk@cs.duke.edu
+% March 1989, May 1993, November 1995, October 2000
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% The 'abstract' section is suited for multi-paragraph abstracts, if
+% necessary, but note that bibtex takes out the blank line that you
+% might use to indicate a new paragraph. Use \par where you want a
+% new paragraph in an abstract or comment.
+
+% DFK added abstract, comment, keyword, url
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ swap$
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[" write$
+ cite$ write$
+ "]{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+% DFK added
+FUNCTION {format.abstract}
+{ abstract empty$
+ { "" }
+ { "\begin{quotation}\noindent {\bf Abstract:} "
+ abstract *
+ " \end{quotation}" *}
+ if$
+}
+
+% DFK added
+FUNCTION {format.keyword}
+{ keyword empty$
+ { "" }
+ { "\begin{quote} {\bf Keyword:} " keyword * " \end{quote}" *}
+ if$
+}
+
+% DFK added
+FUNCTION {format.url}
+{ URL empty$
+ { "" }
+ { "\begin{quote} {\bf URL} \verb`" URL * "` \end{quote}" *}
+ if$
+}
+
+% DFK added
+% 5/93 added "private", as part of the comment, if both exist.
+FUNCTION {format.comment}
+{ comment empty$
+ { private empty$
+ { "" }
+ { "\begin{quote} {\bf Private:} " private * " \end{quote}" *}
+ if$
+ }
+ { private empty$
+ { "\begin{quote} {\bf Comment:} " comment * " \end{quote}" *}
+ { "\begin{quote} {\bf Comment:} " comment *
+ " {\bf Private:} " * private *
+ " \end{quote}" * }
+ if$
+ }
+ if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+ format.URL write$ newline$
+ format.abstract write$ newline$
+ format.keyword write$ newline$
+ format.comment write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/aux2bib b/biblio/bibtex/utils/bibtools/aux2bib
new file mode 100644
index 0000000000..ee2d052b2e
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/aux2bib
@@ -0,0 +1,68 @@
+#!/usr/local/bin/perl -s
+#
+# take a latex AUX file and change the bibstyle to subset or subset-nocomment
+# depending on if the -c flag was given (-c means use comments), then rename
+# the modified file to references.aux, run bibtex on it, rename the file
+# references.bbl to references.bib and delete references.{aux,blg}. This
+# results in a BibTeX file which can be shipped with the latex source of the
+# paper. The \bibliography{} command in the latex file will need to be changed
+# to use the newly generated bibliography.
+#
+# assumes subset.bst and subset-nocomment.bst are in the input path
+#
+# V. Khera 07-AUG-1992
+# khera@cs.duke.edu
+
+$tmpfile = "refs$$";
+$outfile = "references.bib";
+
+$SIG{'INT'} = 'handler';
+$SIG{'QUIT'} = 'handler';
+$SIG{'TERM'} = 'handler';
+$| = 1; # make sure output is flushed after print.
+
+sub handler {
+ local($sig) = @_;
+ print "Got a SIG$sig -- cleaning up\n";
+ &cleanup;
+ exit 1;
+}
+
+sub cleanup {
+ unlink <$tmpfile.*>;
+}
+
+$bibstyle = defined($c) ? "subset" : "subset-nocomment";
+
+die "usage: $0 [-c] <auxfile>\n" unless $#ARGV == 0;
+
+$infile = shift;
+
+# canonicalize the name to end i .aux. assumes file is in current directory,
+# even though a path may have been specified. tough noogies, i say!
+$infile =~ s#(.*/)?([^.]*).*#\2.aux#;
+
+die "No such file $infile\n" unless -f $infile;
+
+open(INF,$infile) || die "Cannot read $infile\n";
+@auxdata = <INF>; # slurp the whole file in
+close(INF);
+
+# create a new AUX file with subset bibstyle specified.
+@result = grep(m/(\\citation|\\bibdata).*/ , @auxdata);
+die "No citations or data files specified in $infile\n" unless @result;
+push(@result,"\\bibstyle{$bibstyle}\n");
+
+open (OUTF,">$tmpfile.aux") || die "Cannot create temp file\n";
+print OUTF @result;
+close(OUTF);
+
+print "Running bibtex...\n";
+
+$result = system "bibtex $tmpfile";
+die "Error running bibtex\n" unless ($result >> 8) == 0;
+rename ("$tmpfile.bbl", $outfile);
+
+print "Output is in $outfile\n";
+
+&cleanup;
diff --git a/biblio/bibtex/utils/bibtools/bib.html b/biblio/bibtex/utils/bibtools/bib.html
new file mode 100644
index 0000000000..f25c78d273
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bib.html
@@ -0,0 +1,37 @@
+<HTML>
+<HEAD><TITLE> Bibliography </TITLE></HEAD>
+<BODY BGCOLOR=#EEEEEE>
+<DL>
+
+<DT><A NAME="kotz:addrtrace"
+ HREF="file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z">
+ [KC94]</A></DT>
+<DD>
+David Kotz and Preston Crow.
+<STRONG>The expected lifetime of ``single-address-space'' operating
+ systems</STRONG>.
+In <EM>Proceedings of the 1994 ACM Sigmetrics Conference on Measurement and
+ Modeling of Computer Systems</EM>, pages 161-170, May 1994.
+</DD>
+
+<DT> <A NAME="kotz:pools"> [KE89]</A> </DT>
+<DD>
+David Kotz and Carla Ellis.
+<STRONG>Evaluation of concurrent pools</STRONG>.
+In <EM>Proceedings of the Ninth International Conference on Distributed
+ Computer Systems</EM>, pages 378-385, 1989.
+</DD>
+
+<DT><A NAME="kotz:thesis" HREF="file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z">
+ [Kot91]</A></DT>
+<DD>
+David Kotz.
+<STRONG>Prefetching and Caching Techniques in File Systems for MIMD
+ Multiprocessors</STRONG>.
+PhD thesis, Duke University, April 1991.
+Available as technical report CS-1991-016.
+</DD>
+
+</DL>
+</BODY>
+</HTML>
diff --git a/biblio/bibtex/utils/bibtools/bib2html b/biblio/bibtex/utils/bibtools/bib2html
new file mode 100644
index 0000000000..11cc761767
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bib2html
@@ -0,0 +1,271 @@
+#!/usr/bin/perl
+#
+# bib2html - make an html file that is equivalent to the bib files,
+# using one of the html bib styles
+#
+# usage:
+$usage = "usage: $0 {alpha|index|long|longp|long-pario|short|short-pario|cv} [-o <outfile>] file.bib...\
+OR \
+$0 [ {alpha|index|long|longp|long-pario|short|short-pario|cv} ] [-o <outfile>] -a file.aux";
+# Output is to bib.html.
+# alpha makes a bibliography like bibstyle{alpha}
+# long makes a bibliography like bibstyle{abstract}
+# short makes a bibliography like bibstyle{alpha}, but with citekey for tags
+# cv lists title first, does not print key, does not sort
+# (useful for listing your papers on your home page)
+#
+# David Kotz 7/94
+# dfk@cs.dartmouth.edu
+
+# updated Dan Gildea 1/2003:
+# . now handles nested \bf \em etc correctly
+# . added some more accents
+# . new -a file.aux usage to use existing .aux file, useful to
+# list only papers cited by a given latex document
+# http://www.cs.rochester.edu/~gildea/
+
+# updated 2/2004, thanks to Juergen Vollmer
+# a) allowing \emph{..}, \texttt{...} and \textbf{..}
+# b) setting the environment variable BSTINPUTS to directory from $0
+# c) if run on existing .aux file, bibstyle is now optional on the command line.
+# if not bib style nor specified on command line, uses the html version
+# of bib style from original document.
+
+use File::Basename;
+use File::Spec::Functions;
+
+$tmp = "/tmp/bib2html$$";
+
+my $cmd_dir = catfile (dirname ($0),
+ dirname ((defined readlink($0)) ? readlink($0) : $0));
+
+$ENV{BSTINPUTS} .= ":$cmd_dir";
+
+if ( scalar(@ARGV) < 2 ) {
+ die "$usage\n";
+}
+
+
+## pick up the args
+my %Opts; # will hold the option values
+
+if ($ARGV[0] !~ /^-/) {
+ $Opts{style} = shift @ARGV;
+}
+while ($ARGV[0] =~ /^-/) {
+ $tmpArg = shift @ARGV;
+ if ($tmpArg eq "-o" ) {
+ $Opts{outfile} = shift @ARGV;
+ } elsif ($tmpArg eq "-a" ) {
+ $Opts{auxfile} = shift @ARGV;
+ }
+}
+
+$Opts{outfile} = "bib.html" if ( !defined ($Opts{outfile}) );
+
+$SIG{INT} = \&cleanup;
+
+print "Creating $tmp.aux for $files\n";
+open AUX, ">$tmp.aux";
+
+if ($Opts{auxfile}) {
+ system "ls";
+ open(AUXIN, $Opts{auxfile}) || die "could not open $Opts{auxfile}";
+ while (<AUXIN>) {
+ # if style not specified on command line, use html version
+ # of style specified in .aux file
+ s/^\\bibstyle\{([^\}]*)\}/"\\bibstyle{html-".($Opts{style}||$1)."}"/e;
+ print AUX;
+ }
+} else {
+ if (!defined $Opts{style}) {
+ die "bib style not defined";
+ }
+ ## get all the remaining file names
+ my $files = killSuffix ( shift @ARGV );
+ foreach $file ( @ARGV ) {
+ $files .= ','; # make sure the list is comma delimited, bibtex needs it
+ $files .= killSuffix ($file);
+ }
+
+
+## need double slashes here to go around slash interpretation
+## only one is printed
+ print AUX <<EOF;
+\\relax
+\\citation{*}
+\\bibstyle{html-$Opts{style}}
+\\bibdata{$files}
+EOF
+}
+close AUX;
+
+unlink <$tmp.{bbl,blg}>;
+
+if (-r "html-split.bst.gz" ) {
+ system ( "gunzip html-split.bst.gz" );
+}
+
+print "bibtex $tmp\n";
+
+system "bibtex $tmp";
+
+print "Bibtex done\n\n";
+
+
+## -------------------------------------------------------------------
+## the cleanup operation
+open BBL, "$tmp.bbl";
+open OUT, ">$Opts{outfile}";
+
+## stack of formatted text types that were started and did not finish on teh same line
+## elements are em, tt or b or i and when a candidate for a format-closing brace is found
+## this stack will be popped to see which format we have to close
+my @formatsToClose;
+
+while ( <BBL> ) {
+
+
+ ## accent handlers
+ ## these are quite definite about their replacemnets and so should
+ ## come before the more generic operations later
+ ## all braces in the latex constructs are optional
+ ## info on the html codes can be found at http://www.w3.org/TR/REC-html40/
+ ## \\? is to handle latex \'\i which you do to put acute on i without dot
+ s/\\ \` (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+ /&$1grave;/gx; # grave accent
+ s/ \\ \' (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+ /&$1acute;/gx; # 'acute accent
+ s/ \\ \^ (?: \{ )? \\? ([aeiouAEIOU]) (?: \} )?
+ /&$1circ;/gx; # circumflex
+ s/ \\ \" (?: \{ )? \\? ([aeiouyAEIOUY]) (?: \} )?
+ /&$1uml;/gx; # "umlaut
+ s/ \\ \~ (?: \{ )? \\? ([anoANO]) (?: \} )?
+ /&$1tilde;/gx; # tilde
+ s/ \\ c (?: \{ )? ([cC]) (?: \} )?
+ /&$1cedil;/gx; # cedilla
+ s/ \\ [v\'] (?: \{ )? ([cC]) (?: \} )?
+ /$1/gx; # no html code for czech hook
+ s/ \{? \\[s\"]s \}?
+ /&szlig;/gx; # german Scharf-S
+
+ ## several weird symbols
+ s/ \\copyright
+ /&copy;/gx;
+ s/ \\pounds
+ /&pound;/gx;
+
+ ## weirder symbols
+ s/ \\ (ae|AE)
+ /&$1lig;/gx;
+ s/ \\ (o|O)
+ /&$1slash;/gx;
+ s/ \\ss
+ /&szlig;/gx;
+
+ ## greek letters, case insensitive matching, but upper case in latex and
+ ## html have the first letter of the english word capitalized
+ s/ \\ (?: var )? (alpha|beta|gamma|delta|epsilon|theta|lambda|pi|rho|sigma|omega)
+ /&$1;/gxi;
+
+ ## remove any \/ space-increasing symbols
+ s+ ([^\\]) \\ \/
+ +$1+gx;
+
+ s+ \\ \ + +gx;
+
+ ## deal with \cite stuff, change it to a link to a record the same html file
+ s+ ([^\\]) \\cite\{ (.*?) \}
+ +$1<a href="#$2">$2</a>+xg;
+
+ ## These rules are to deal with my (DFK) macros
+ s/\\ie/i.e./g;
+ s/\\eg/e.g./g;
+ s/\\etc/etc./g;
+ s+\\vs\\+<EM>vs.</EM>+g;
+ s/\\usec/usec/g;
+ s/\\mbox //g;
+ s/\\par / <P> /g;
+ s/\\par$/ <P>/g;
+
+
+ s/\\\&/\&amp;/g; # ampersand
+
+ s/-{2,3}/-/g; # multiple dashes
+
+# a few rules are needed to compensate for BibTeXs way of splitting
+# long words over two lines by sticking a % (TeX comment character) at
+# the end of the line. This works when one word (usually a URL) is
+# split over more than one line.
+ ## if we have an unescaped % at the end of the line, remove it and the newline and
+ ## join the next line on
+ ## example straight out of the camel book, pg 204. amazing
+ if ( s/ ([^\\]) \% \n$ /$1/x and $nextline = <BBL> ) {
+ $_ .= $nextline;
+ redo; # back to the top
+ }
+
+# hyphenation characters should be removed
+ s+\\-++g;
+
+# tildes -
+# tilde not preceded by \ or / is a nbsp
+# \~{} is ~ (likely in a URL)
+# all other tildes left alone, notably /~ (URL)
+ s+ ([^\\/]) ~ +$1&nbsp;+xg; # normal standalone tilde - nbsp
+ s/ \\~ \{\} /~/xg; # \~{} to ~ - do before removing braces below
+
+ ## --------------------------------------------------------
+ ## deal with em and tt and bf text surrounded by braces
+ ## deal with \emph{..}, \texttt{...} and \textbf{..}
+
+ ## the fancy groupings around the em etc are because in html bold font is not 'bf'
+ ## but just b and italic is i not 'it' so we have to pick out only a part of those
+ ## latex tags
+ ## final |\w+ is to skip over \rm or any other commands we don't handle
+ ## also removes braces with no command
+
+ while ( /(text(b)f|text(tt)|(em)ph)?([\{\}])/ ) {
+ if (defined $1) {
+ my $cmd = "$1";
+ my $fmt = $2 || $3 || $4;
+ s/\\$cmd\{/<$fmt>/;
+ push ( @formatsToClose, $fmt )
+ } elsif ($5 eq '{') {
+ ## beginning of format
+ s/ \{ (?: \\ (?: (em)|(b)f|(tt)|(i)t|\w+ ) )? \s*
+ / ( $format = $1 or $2 or $3 or $4 ) ? "<$format>" : '' /ex ;
+ ## push the format to be closed onto the stack (may be nothing)
+ push ( @formatsToClose, $format )
+ } else {
+ ## pop format to close from stack
+ s+ \s*\}
+ + ( $format = pop (@formatsToClose) ) ? "</$format>" : '' +ex ;
+ }
+ }
+
+ ## --------------------------------------------------------
+
+ ##retrieve symbols escaped by backslashes
+ my $escapedChars = quotemeta ( '#$%&_{}' );
+ s/ ([^\\]) \\ ([$escapedChars])
+ /$1$2/gxo;
+
+ print OUT $_;
+}
+
+
+print "\n";
+print "\noutput is in $Opts{outfile}\n";
+
+cleanup();
+
+sub killSuffix {
+ $file = shift();
+ ( $name, $path ) = fileparse ( $file, '\.[^.]*$' ); # the pattern indicates what a suffix looks like
+ return ($path . $name);
+}
+
+sub cleanup {
+ unlink ( glob ("$tmp.{aux,bbl,blg}") );
+}
diff --git a/biblio/bibtex/utils/bibtools/bibify b/biblio/bibtex/utils/bibtools/bibify
new file mode 100644
index 0000000000..4d33d9c1d9
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bibify
@@ -0,0 +1,37 @@
+#!/bin/csh -f
+
+if ($1 !~ *.aux) then
+ set input=$1.aux
+ set bbl = $1.bbl
+else
+ set input=$1
+ set bbl=$1:r.bbl
+endif
+
+set file=/tmp/bibify$$
+onintr clean
+
+cat $input > $file
+
+set style=`sed -n 's/\\bibstyle{\(.*\)}/\1/p' $input`
+
+switch($style)
+case "alpha":
+case "abstract":
+ cat $bbl | sed -n 's/bibitem\[\(.*\)\]{\(.*\)}/bibcite{\2}{\1}/p' >> $file
+ breaksw
+case "plain":
+case "unsrt":
+case "abbrv":
+ cat $bbl | sed -n 's/bibitem/bibcite/p'| awk '{print $1"{"NR"}"}' >> $file
+ breaksw
+default:
+ echo unknown bibliography style, cannot bibify.
+ goto clean
+endsw
+
+mv $file $input
+
+clean:
+/bin/rm -f $file.* >& /dev/null
+
diff --git a/biblio/bibtex/utils/bibtools/bibkey b/biblio/bibtex/utils/bibtools/bibkey
new file mode 100644
index 0000000000..551f21a8ec
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bibkey
@@ -0,0 +1,56 @@
+#!/bin/csh -f
+#
+# bibkey - look for a word in the keyword field
+# in the references in a BiBTeX file. A restricted form of looktex, in
+# that bibkey only looks at "keyword" fields of the entries.
+#
+# David Kotz (dfk@cs.dartmouth.edu)
+#
+# usage:
+# bibkey keyword file...
+#
+# Warning: Any characters in keyword that have meanings in regexps
+# used by either sed or egrep must be escaped with a \ (the most
+# likely occurrence might be \ itself: use \\). Case is ignored in
+# the search.
+#
+# Multiple keywords may be specified with an egrep alternation format:
+# eg bibkey 'jones|smith' foo.bib
+#
+# Actually, any egrep expression is allowed.
+# Be sure to quote it properly.
+#
+
+set L=~/lib
+
+if ($#argv < 2) then
+ echo usage: bibkey keyword 'file...'
+ exit 1
+endif
+
+set keyword=`echo "$1" | tr A-Z a-z`
+shift
+
+set script=/tmp/bibkey$$
+onintr cleanup
+
+# Search for the keyword and get a script for extracting the
+# references:
+# Cat the files
+# Strip comment lines and comments on lines
+# Translate to lower case (needs to precede sed and egrep)
+# Extract the keyword entries, plus number for lines with @
+# Search for the keyword
+# Convert this output into a sed script
+cat $* \
+ | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \
+ | tr A-Z a-z \
+ | sed -n -f $L/bibkey.sed \
+ | egrep '^[0-9]*$|'"($keyword)" \
+ | awk -f $L/bibkey.awk > $script
+
+# Now have sed print out the correct entries:
+cat $* | sed -n -f $script
+
+cleanup:
+rm -f $script
diff --git a/biblio/bibtex/utils/bibtools/bibkey.awk b/biblio/bibtex/utils/bibtools/bibkey.awk
new file mode 100644
index 0000000000..b296f656ca
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bibkey.awk
@@ -0,0 +1,33 @@
+# bibkey.awk
+#
+# Goes with bin/bibkey - look for a word in the keyword entry
+#
+# David Kotz (dfk@cs.dartmouth.edu)
+#
+# On stdin, we get a list of line numbers of the beginning of entries
+# (in the concatenated bibtex input) and the text of lines from keyword
+# entries that have the keyword in them.
+#
+# On stdout, we produce a sed script for printing entries that had a
+# match in them somewhere. This is a list of lines like "A,Bp" where A
+# and B are line numbers.
+
+BEGIN {found=0; last=1}
+
+{
+# test: is line a number?
+ if ($1+0 > 0) {
+ if (found) {
+ print last "," $1-1 "p";
+ found=0
+ }
+ last=$1
+ } else {
+ found = 1
+ }
+}
+
+END {
+ if (found)
+ print last ",$p";
+}
diff --git a/biblio/bibtex/utils/bibtools/bibkey.sed b/biblio/bibtex/utils/bibtools/bibkey.sed
new file mode 100644
index 0000000000..f203adb66f
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bibkey.sed
@@ -0,0 +1,32 @@
+# bibkey.sed
+#
+# Goes with bin/bibkey - look for a word in the keyword entry
+#
+# David Kotz (dfk@cs.dartmouth.edu)
+#
+# On stdin, we get a lowercased bibtex file with comments stripped.
+#
+# On stdout, we produce a list of line numbers that are the starting
+# line number of each reference, and the text of all "keyword"
+# entries on separate lines.
+
+# the idea is to get @ line numbers and all keywords
+# @ entry
+/^[ ]*@.*/=
+# one-line keyword entry
+s/[ ]*keyword[ ]*=[ ]*"\(.*\)".*/\1/p
+t
+# start of multi-line keyword entry
+s/[ ]*keyword[ ]*=[ ]*"\(.*\)/\1/
+t partial
+b
+# Handle multi-line keyword entry: save this line, repeatedly add
+# lines until close quote forces output
+:partial
+N
+s/\(.*\n.*\)".*/\1/
+t done
+b partial
+:done
+s/\n/ /g
+p
diff --git a/biblio/bibtex/utils/bibtools/bibtex-extras.el b/biblio/bibtex/utils/bibtools/bibtex-extras.el
new file mode 100644
index 0000000000..5a268e072b
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/bibtex-extras.el
@@ -0,0 +1,22 @@
+;; these are things I put in my .emacs
+;; David Kotz dfk@cs.dartmouth.edu
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Add bibtex mode
+(autoload 'bibtex-mode "bibtex" "Bibtex mode" t)
+; and redefine some of the key bindings
+; and add my favorite extra fields
+(setq bibtex-mode-hook
+ '(lambda ()
+;; (define-key bibtex-mode-map "\C-c\C-\'" 'bibtex-remove-double-quotes)
+ (define-key bibtex-mode-map [?\C-c ?\C-'] 'bibtex-remove-double-quotes)
+ (define-key bibtex-mode-map "\C-c\C-eI" 'bibtex-InBook)
+ (define-key bibtex-mode-map "\C-c\C-e\C-i" 'bibtex-InProceedings)
+ (define-key bibtex-mode-map "\C-c\C-eM" 'bibtex-Manual)
+ (define-key bibtex-mode-map "\C-c\C-e\C-m" 'bibtex-Misc)
+ (setq bibtex-mode-user-optional-fields '("URL" "keyword" "private" "comment"))
+ )
+ )
+
+(setq auto-mode-alist (cons (cons "\\.bib$" 'bibtex-mode) auto-mode-alist))
+
diff --git a/biblio/bibtex/utils/bibtools/citekeys b/biblio/bibtex/utils/bibtools/citekeys
new file mode 100644
index 0000000000..dfcc3aa346
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/citekeys
@@ -0,0 +1,52 @@
+#!/bin/csh -f
+#
+# citekeys - print out all the cite keys in given bib files
+#
+# usage:
+# citekeys file.bib...
+#
+
+onintr cleanup
+
+if ($#argv < 1) then
+ echo 'usage: citekeys file.bib...'
+ exit 1
+endif
+
+unset files
+foreach i ($*)
+ if ($i:e == bib) then
+ set file=$i:r
+ else
+ set file=$i
+ endif
+
+ if ($?files) then
+ set files=($files,$i)
+ else
+ set files=($file)
+ endif
+end
+
+echo creating citekeys.aux for $files
+
+cat > citekeys.aux <<EOF
+\relax
+\citation{*}
+\bibstyle{citekeys}
+\bibdata{$files}
+EOF
+
+rm -f citekeys.{log,dvi,bbl,blg}
+
+echo bibtex citekeys
+bibtex citekeys
+
+mv citekeys.bbl citekeys.out
+
+echo ""
+echo output is in citekeys.out
+
+cleanup:
+rm -f citekeys.{tex,aux,log,dvi,bbl,blg}
+
diff --git a/biblio/bibtex/utils/bibtools/citekeys.bst b/biblio/bibtex/utils/bibtools/citekeys.bst
new file mode 100644
index 0000000000..0632e0dbf0
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/citekeys.bst
@@ -0,0 +1,60 @@
+% BibTeX bibliography style `citekeys
+% by David Kotz dfk@cs.dartmouth.edu
+% March 1994
+% modified (distantly) from
+ % BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY { author } {} {}
+
+FUNCTION {article} {}
+FUNCTION {book} {}
+FUNCTION {booklet} {}
+FUNCTION {inbook} {}
+FUNCTION {incollection} {}
+FUNCTION {inproceedings} {}
+FUNCTION {conference} {}
+FUNCTION {manual} {}
+FUNCTION {mastersthesis} {}
+FUNCTION {misc} {}
+FUNCTION {phdthesis} {}
+FUNCTION {proceedings} {}
+FUNCTION {techreport} {}
+FUNCTION {unpublished} {}
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+MACRO {feb} {"February"}
+MACRO {mar} {"March"}
+MACRO {apr} {"April"}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"August"}
+MACRO {sep} {"September"}
+MACRO {oct} {"October"}
+MACRO {nov} {"November"}
+MACRO {dec} {"December"}
+
+READ
+
+FUNCTION {presort}
+{ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {cite.key.only} { cite$ write$ newline$ }
+
+ITERATE {cite.key.only}
diff --git a/biblio/bibtex/utils/bibtools/cleantex b/biblio/bibtex/utils/bibtools/cleantex
new file mode 100644
index 0000000000..14d8bd29a0
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/cleantex
@@ -0,0 +1,19 @@
+#!/bin/csh
+#
+# cleantex - clean up files related to Latex processing
+#
+# usage - cleantex [base]...
+# default is \*, ie, to remove all latex extraneous files.
+# Otherwise, those beginning with 'base.' are removed.
+#
+# No csh -f flag so that we get safe-rm instead of rm, where appropriate.
+
+set extensions="{dvi,aux,log,toc,lof,bbl,blg,lot,inx}"
+
+if ($#argv == 0) then
+ rm -f *~ *.$extensions
+else
+ foreach i ($*)
+ rm -f $i.tex~ $i.$extensions
+ end
+endif
diff --git a/biblio/bibtex/utils/bibtools/demo.bib b/biblio/bibtex/utils/bibtools/demo.bib
new file mode 100644
index 0000000000..b8b493eaaf
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/demo.bib
@@ -0,0 +1,81 @@
+% BibTeX bibliography file
+
+@InProceedings{kotz:addrtrace,
+ author = {David Kotz and Preston Crow},
+ title = {The Expected Lifetime of ``Single-Address-Space'' Operating
+ Systems},
+ booktitle = {Proceedings of the 1994 ACM Sigmetrics Conference on Measurement
+ and Modeling of Computer Systems},
+ year = {1994},
+ month = {May},
+ pages = {161--170},
+ URL = {file://cs.dartmouth.edu/pub/CS-papers/Kotz/kotz:addrtrace.ps.Z},
+ keyword = {operating system, wide address space, virtual memory, memory
+ management, dfk},
+ abstract = {Trends toward shared-memory programming paradigms, large (64-bit)
+ address spaces, and memory-mapped files have led some to propose the use of a
+ single virtual-address space, shared by all processes and processors. Typical
+ proposals require the single address space to contain all process-private
+ data, shared data, and stored files. To simplify management of an address
+ space where stale pointers make it difficult to re-use addresses, some have
+ claimed that a 64-bit address space is sufficiently large that there is no
+ need to ever re-use addresses. Unfortunately, there has been no data to
+ either support or refute these claims, or to aid in the design of appropriate
+ address-space management policies. In this paper, we present the results of
+ extensive kernel-level tracing of the workstations in our department, and
+ discuss the implications for single-address-space operating systems. We found
+ that single-address-space systems will not outgrow the available address
+ space, but only if reasonable space-allocation policies are used, and only if
+ the system can adapt as larger address spaces become available.}
+}
+
+@InProceedings{kotz:pools,
+ author = {David Kotz and Carla Ellis},
+ title = {Evaluation of Concurrent Pools},
+ booktitle = {Proceedings of the Ninth International Conference on Distributed
+ Computer Systems},
+ year = {1989},
+ pages = {378--385},
+ keyword = {dfk, concurrent pool, concurrent data structure},
+ comment = {also Duke TR CS-1987-30, kotz:poolsTR}
+}
+
+@PhdThesis{kotz:thesis,
+ author = {David Kotz},
+ title = {Prefetching and Caching Techniques in File Systems for {MIMD}
+ Multiprocessors},
+ year = {1991},
+ month = {April},
+ school = {Duke University},
+ note = {Available as technical report CS-1991-016.},
+ URL = {file://cs.duke.edu/dist/theses/kotz/kotz.ps.Z},
+ keyword = {dfk, parallel file system, prefetching, MIMD, disk caching,
+ parallel I/O, pario bib},
+ abstract = {The increasing speed of the most powerful computers, especially
+ multiprocessors, makes it difficult to provide sufficient I/O bandwidth to
+ keep them running at full speed for the largest problems. Trends show that
+ the difference in the speed of disk hardware and the speed of processors is
+ increasing, with I/O severely limiting the performance of otherwise fast
+ machines. This widening access-time gap is known as the ``I/O bottleneck
+ crisis.'' One solution to the crisis, suggested by many researchers, is to
+ use many disks in parallel to increase the overall bandwidth. This
+ dissertation studies some of the file system issues needed to get high
+ performance from parallel disk systems, since parallel hardware alone cannot
+ guarantee good performance. The target systems are large MIMD multiprocessors
+ used for scientific applications, with large files spread over multiple disks
+ attached in parallel. The focus is on automatic caching and prefetching
+ techniques. We show that caching and prefetching can transparently provide
+ the power of parallel disk hardware to both sequential and parallel
+ applications using a conventional file system interface. We also propose a
+ new file system interface (compatible with the conventional interface) that
+ could make it easier to use parallel disks effectively. Our methodology is a
+ mixture of implementation and simulation, using a software testbed that we
+ built to run on a BBN GP1000 multiprocessor. The testbed simulates the disks
+ and fully implements the caching and prefetching policies. Using a synthetic
+ workload as input, we use the testbed in an extensive set of experiments. The
+ results show that prefetching and caching improved the performance of
+ parallel file systems, often dramatically.},
+ comment = {Published as kotz:prefetch, kotz:jwriteback, kotz:jpractical,
+ kotz:fsint2.}
+}
+
diff --git a/biblio/bibtex/utils/bibtools/demo.html b/biblio/bibtex/utils/bibtools/demo.html
new file mode 100644
index 0000000000..b137af9884
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/demo.html
@@ -0,0 +1,83 @@
+
+<HTML>
+<HEAD><TITLE> bib2html demo </TITLE></HEAD>
+<BODY>
+
+<H1> bib2html demo </H1>
+
+<P>
+
+<B>bib2html</B> is a combination of a shell script and two
+BibTeX-style files. bib2html takes the name of a style and a list of
+.bib file names, and runs BibTeX to produce an output file bib.html.
+This demo page assumes that you have run either
+<CODE> bib2html alpha demo.bib </CODE>
+or
+<CODE> bib2html abstract demo.bib, </CODE>
+and that the output
+<A HREF="bib.html"> bib.html </A>
+remains in the same directory as this
+file. (Note: the abstracting style will often produce some warning
+messages from bibtex if the abstracts or comments are too long, but
+the resulting HTML is still usable.)
+</P>
+
+<P>
+
+One of the neat things about bib2html is that you can put a <EM> URL
+</EM> field in your bib entries, and that URL will be used to make the
+entry's label into a Web link. Usually, the URL would point to the
+paper itself (e.g., compressed postscript in an ftp archive, or
+perhaps even an HTML-format paper), but it could of course point to
+anything. Thus you can expand your idea of what bib entries might
+reference....
+
+</P>
+
+<P>
+
+One of the other neat things about bib2html is that you can put
+citations to the bibliography in other pages, much like you can in
+LaTeX. The difference is that the citations are <EM>links</EM> to the
+bibliography page. For example, I can refer one of my recent papers
+in the demo bibliography
+
+<A HREF="bib.html#kotz:addrtrace"> [KC94b]. </A>
+(View the source of this page to see how it's done). That one has the
+paper's text on-line. My PhD thesis is
+<A HREF="bib.html#kotz:thesis"> [Kot91]. </A>
+Another paper does not have any on-line version
+<A HREF="bib.html#kotz:pools"> [KE89]. </A>
+
+</P>
+
+<P>
+
+Notice that I use the cite key for the anchor label, rather than the
+label chosen by BibTeX. This has two main benefits: it makes the
+citation (URL) more like that in LaTeX, and it makes the citation
+independent of the format of the bibliography page (and the way it
+chooses labels).
+
+</P>
+
+<P>
+
+One disadvantage is that there is no way to automatically generate the
+citation labels at the point of reference, like BibTeX's
+cross-referencing capability. Another disadvantage is that bib2html
+doesn't understand arbitrary LaTeX commands. Although it converts
+most accents, \bf, \em, etc to HTML,
+any fancier embedded LaTeX or TeX commands are just
+passed through. If you need a pretty bibliography,
+you'll have to edit those by hand.
+
+</P>
+
+<A HREF="http://www.ctan.org/tex-archive/biblio/bibtex/utils/bibtools/">bib2html source</A>.
+
+<HR>
+
+-- David Kotz
+</BODY>
+</HTML>
diff --git a/biblio/bibtex/utils/bibtools/html-alpha.bst b/biblio/bibtex/utils/bibtools/html-alpha.bst
new file mode 100644
index 0000000000..9c991dd1b1
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/html-alpha.bst
@@ -0,0 +1,1286 @@
+% BibTeX bibliography style `html-alpha'
+% spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-alpha.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword, url
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block}
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+ "> [" * label * "]</A> </DT>" * write$
+ }
+ { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> [" * label * "]</A></DT>" * write$
+ }
+ if$
+ newline$
+ "<DD>" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<EM>" swap$ * "</EM>" * }
+ if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<STRONG>" swap$ * "</STRONG>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et&nbsp;al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "&nbsp;" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et&nbsp;al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et&nbsp;al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+% DFK changed {\etalchar{+}} to + for HTML
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+ "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+ "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+ "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+ "</DL>" write$ newline$
+ "</BODY>" write$ newline$
+ "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/html-cv.bst b/biblio/bibtex/utils/bibtools/html-cv.bst
new file mode 100644
index 0000000000..4e9bdc7453
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/html-cv.bst
@@ -0,0 +1,1330 @@
+%% File: `html-cv.bst'
+%% for use with bib2html to print HTML bibliography
+%%
+%% Prints title first, rather than author - useful for listing
+%% your papers on your homepage/cv.
+%% Uses URL field to provide href link for title.
+%% Omits organization and publisher for conference proceedings.
+%% Does not sort output - preserves order of input file.
+%% $Id: html-cv.bst,v 1.3 2003/01/10 20:43:52 dgildea Exp $
+
+% by Dan Gildea (http://www.cis.upenn.edu/~dgildea/), modified from
+%% plainnat.bst:
+%% A modification of `plain.bst' for use with natbib package
+%% Copyright 1993-1999 Patrick W Daly
+%% Max-Planck-Institut f\"ur Aeronomie
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly@linmpi.mpg.de
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.header}
+{ write$
+ newline$
+ before.all 'output.state :=
+}
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.isbn}
+{ isbn empty$
+ { "" }
+ { new.block "ISBN " isbn * }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn empty$
+ { "" }
+ { new.block "ISSN " issn * }
+ if$
+}
+
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { new.block "URL \url{" url * "}" * }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { URL empty$
+ { "<LI> <A NAME=" quote$ * cite$ * quote$ *
+ ">" * title * "</A>, " *
+ }
+ { "<LI><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * ">" * title * "</A>, " *
+ }
+ if$ }
+ if$
+}
+
+FUNCTION {format.full.names}
+{'s :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.full}
+{ author empty$
+ { editor empty$
+ { "" }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.full}
+{ author empty$
+ { "" }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.full}
+{ editor empty$
+ { "" }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.full
+ { type$ "proceedings" =
+ 'editor.full
+ 'author.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+ { "empty year in " cite$ * warning$
+ pop$ "" }
+ 'skip$
+ if$
+ month empty$
+ 'skip$
+ { month
+ " " * swap$ *
+ }
+ if$
+ extra.label *
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \citep{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ 'skip$
+ if$
+ ", \citet{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " }
+ if$
+ " \citet{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ format.btitle output.header
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.title output.header
+ format.authors output
+ author format.key output
+ new.block
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ format.btitle output.header
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ %organization output
+ %publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.btitle output.header
+ format.authors output
+ author format.key output
+ new.block
+ organization address new.block.checkb
+ organization output
+ address output
+ format.edition output
+ format.date output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.title output.header
+ format.authors output
+ author format.key output
+ title howpublished new.block.checkb
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ format.issn output
+
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.btitle output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.btitle output.header
+ format.editors output
+ editor format.key output
+ new.block
+ format.bvolume output
+ format.number.series output
+ address output
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ format.isbn output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.title output.header
+ format.authors "author" output.check
+ author format.key output
+ new.block
+
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * s #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ year field.or.null sortify
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+% not sorting because want html to reflect order in latex doc
+%ITERATE {presort}
+
+% not sorting because want html to reflect order in latex doc
+%SORT
+
+STRINGS { longest.label last.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num number.label }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.longest.label}
+
+%ITERATE {forward.pass}
+
+%REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label 'sort.key$ :=
+}
+
+% not sorting because want html to reflect order in latex doc
+%ITERATE {bib.sort.order}
+
+% not sorting because want html to reflect order in latex doc
+%SORT
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "<ul>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "</ul>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/html-long.bst b/biblio/bibtex/utils/bibtools/html-long.bst
new file mode 100644
index 0000000000..fcf2f7b7bf
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/html-long.bst
@@ -0,0 +1,1356 @@
+% BibTeX bibliography style `html-long'
+% spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-long.bst,v 1.3 2004/02/25 16:20:50 gildea Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+% JV: the abstract etc is now part of the <dd>..</dd> section.
+
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+ "> " * cite$ * ":</A> </DT>" * write$
+ }
+ { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+ }
+ if$
+ newline$
+ "<DD>" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ earlier empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+ ">" * earlier * "</A>." * write$ newline$
+ }
+ if$
+ later empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+ ">" * later * "</A>." * write$ newline$
+ }
+ if$
+ "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<EM>" swap$ * "</EM>" * }
+ if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<STRONG>" swap$ * "</STRONG>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et&nbsp;al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "&nbsp;" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et&nbsp;al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et&nbsp;al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+ { skip$ }
+ { "<P><QUOTE> " swap$ * " </QUOTE></P>" *}
+ if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty,
+% or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+ { pop$ pop$ "" }
+ { swap$
+ "<strong> " swap$ * ":</strong> " * swap$ * }
+ if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+ add.period$ write$
+ "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+ "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+ "Comment" comment format.dfkfield format.quotedParagraph write$ newline$
+ ""
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ dfk.stuff
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+ "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+ "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+ "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+ "</DL>" write$ newline$
+ "</BODY>" write$ newline$
+ "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/html-longp.bst b/biblio/bibtex/utils/bibtools/html-longp.bst
new file mode 100644
index 0000000000..5e03c4dc3e
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/html-longp.bst
@@ -0,0 +1,1363 @@
+% BibTeX bibliography style `html-longp'
+% Spits out HTML-formatted bibliography in place of bbl output.
+% This is different from html-long in that it also includes the
+% "private" and "reader" fields in the output.
+% does not properly handle crossrefs.
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-longp.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword, earlier, later, URL, private, reader
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ reader
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+ "> " * cite$ * ":</A> </DT>" * write$
+ }
+ { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+ }
+ if$
+
+ newline$
+
+ "<DD>" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ earlier empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+ ">" * earlier * "</A>." * write$ newline$
+ }
+ if$
+ later empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+ ">" * later * "</A>." * write$ newline$
+ }
+ if$
+ "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<EM>" swap$ * "</EM>" * }
+ if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<STRONG>" swap$ * "</STRONG>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et&nbsp;al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "&nbsp;" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et&nbsp;al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et&nbsp;al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+ { skip$ }
+ { "<P><QUOTE> " swap$ * " </QUOTE></P>" *}
+ if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty,
+% or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+ { pop$ pop$ "" }
+ { swap$
+ "<strong> " swap$ * ":</strong> " * swap$ * }
+ if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+ "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+ "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+
+ "Comment" comment format.dfkfield
+ "Private" private format.dfkfield
+ *
+ format.quotedParagraph write$ newline$
+
+ "Reader" reader format.dfkfield format.quotedParagraph write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+ "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+ "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+ "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+ "</DL>" write$ newline$
+ "</BODY>" write$ newline$
+ "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/html-short.bst b/biblio/bibtex/utils/bibtools/html-short.bst
new file mode 100644
index 0000000000..49066f63b5
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/html-short.bst
@@ -0,0 +1,1305 @@
+% BibTeX bibliography style `html-short'
+% spits out HTML-formatted bibliography in place of bbl output
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-short.bst,v 1.2 2003/01/10 19:35:22 dgildea Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block}
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to HTML, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "<DT> <A NAME=" quote$ * cite$ * quote$ *
+ "> " * cite$ * ":</A> </DT>" * write$
+ }
+ { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+ }
+ if$
+ newline$
+ "<DD>" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ earlier empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+ ">" * earlier * "</A>." * write$ newline$
+ }
+ if$
+ later empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+ ">" * later * "</A>." * write$ newline$
+ }
+ if$
+ "</DD>" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to HTML
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<EM>" swap$ * "</EM>" * }
+ if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<STRONG>" swap$ * "</STRONG>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et&nbsp;al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "&nbsp;" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et&nbsp;al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et&nbsp;al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+% DFK changed {\etalchar{+}} to + for HTML
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "+" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "+" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to HTML
+FUNCTION {begin.bib}
+{ "<HTML>" write$ newline$
+ "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+ "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+ "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+ "</DL>" write$ newline$
+ "</BODY>" write$ newline$
+ "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/bibtools/looktex b/biblio/bibtex/utils/bibtools/looktex
new file mode 100644
index 0000000000..b64071ca67
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/looktex
@@ -0,0 +1,53 @@
+#!/bin/csh -f
+# looktex - look for a keyword in the references in a BiBTeX file.
+#
+# David Kotz (dfk@cs.dartmouth.edu)
+#
+# usage:
+# looktex keyword file...
+#
+# Warning: Any characters in keyword that have meanings in regexps
+# used by either sed or egrep must be escaped with a \ (the most
+# likely occurrence might be \ itself: use \\). Case is ignored in
+# the search, as well as position in the reference.
+#
+# Multiple keywords may be specified with an egrep alternation format:
+# eg looktex 'jones|smith' foo.bib
+#
+# Actually, any egrep expression is allowed.
+# Be sure to quote it properly.
+#
+
+set L=~/lib
+
+if ($#argv < 2) then
+ echo usage: looktex keyword 'file...'
+ exit 1
+endif
+
+set keyword=`echo "$1" | tr A-Z a-z`
+shift
+
+set script=/tmp/looktex$$
+onintr cleanup
+
+# Search for the keyword and get a script for extracting the
+# references:
+# Cat the files
+# Strip comment lines and comments on lines
+# Translate to lower case
+# Search for the keyword and all @ lines
+# Extract the line number only, plus 'entry' for lines with @
+# Convert this output into a sed script
+cat $* \
+ | sed -e 's/^%.*//' -e 's/\([^\\]\)%.*/\1/' \
+ | tr A-Z a-z \
+ | egrep -n "($keyword)"'|^[ ]*@' \
+ | sed -n -e "s/:[ ]*@.*$keyword.*/ entry key/p" -e 's/:[ ]*@.*/ entry/p' -e "s/:.*//p" \
+ | awk -f $L/looktex.awk > $script
+
+# Now have sed print out the correct entries:
+cat $* | sed -n -f $script
+
+cleanup:
+rm -f $script
diff --git a/biblio/bibtex/utils/bibtools/looktex.awk b/biblio/bibtex/utils/bibtools/looktex.awk
new file mode 100644
index 0000000000..35b534769e
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/looktex.awk
@@ -0,0 +1,39 @@
+# looktex.awk
+#
+# Goes with bin/looktex - look for a keyword in the references in a BiBTeX file
+#
+# David Kotz (dfk@cs.dartmouth.edu)
+#
+# This takes a list of line numbers that had the keyword. Some of the
+# line numbers will be followed by "entry" or "entry key"; "entry"
+# means that the line number is the start of a new bibtex entry, not a
+# line containing the keyword. "entry key" means that it is a line
+# starting an entry AND containing the keyword.
+#
+# On stdout, we produce a sed script for printing entries that had a
+# match in them somewhere. This is a list of lines like "A,Bp" where A
+# and B are line numbers.
+
+BEGIN {found=0; last=1}
+
+# defines the start of a new entry WITH a keyword match
+NF==3 {
+ if (found) { print last "," $1-1 "p" }
+ found=1
+ last=$1
+}
+
+# defines the start of a new entry
+NF==2 {
+ if (found) { print last "," $1-1 "p" }
+ found=0
+ last=$1
+}
+
+# marks a place where the keyword was found
+NF==1 {found=1}
+
+END {
+ if (found)
+ print last ",$p";
+}
diff --git a/biblio/bibtex/utils/bibtools/makebib b/biblio/bibtex/utils/bibtools/makebib
new file mode 100644
index 0000000000..edd9ba4144
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/makebib
@@ -0,0 +1,95 @@
+#!/bin/csh -f
+#
+# makebib - make a bib file that has the given citations
+#
+# usage:
+# makebib [-n | -d | -u] file.bib... [citekey]...
+# Where -n means "no comment", ie, don't include any "comment" fields.
+# And -d means "dfk", ie, add attribution to dfk to all comment fields.
+# And -u means "unsorted", and comments are still included.
+# Output is to subset.bib. If citekey is not given, then all refs in
+# the bibfile are included.
+#
+# dfk 11/24/92: write the subset.aux file directly, skipping latex
+# dfk 9/99: add unsorted option
+
+onintr cleanup
+
+if ($#argv < 1) then
+ echo 'usage: makebib [-n|-d] file.bib... [citekey]...'
+ exit 1
+endif
+
+if ("$1" == "-n") then
+ set bst=subset-nocomment
+ shift
+else
+ if ("$1" == "-d") then
+ set bst=subset-dfk
+ shift
+ else
+ if ("$1" == "-u") then
+ set bst=subset-unsorted
+ shift
+ else
+ set bst=subset
+ endif
+ endif
+endif
+
+if ($#argv < 1) then
+ echo 'usage: makebib [-n|-d|-u] file.bib... [citekey]...'
+ exit 1
+endif
+
+set files = $1:r
+shift
+
+while ($1:e == bib)
+ set files=($files,$1:r)
+ shift
+end
+
+echo creating subset.aux for $files
+
+cat > subset.aux <<EOF
+\relax
+\bibstyle{$bst}
+\bibdata{$files}
+EOF
+
+# an annoying incompatibility in the way "echo" treats backslash...
+if (`uname` == Linux) then
+ set citation="\\citation"
+else
+ set citation="\citation"
+endif
+
+if ($#argv > 0) then
+ foreach f ($*)
+ echo $citation"{$f}" >> subset.aux
+ end
+else
+ echo $citation'{*}' >> subset.aux
+endif
+rm -f subset.{log,dvi,bbl,blg}
+
+echo bibtex subset
+bibtex subset
+
+if (-e makebib.sed.Z) uncompress makebib.sed
+if (-e makebib.sed.gz) gunzip makebib.sed
+
+echo ""
+echo 'Fixing these lines (might be doing the wrong thing)'
+grep '[^\\]%$' subset.bbl
+echo end.
+echo ""
+
+sed -f makebib.sed subset.bbl > subset.bib
+
+echo ""
+echo output is in subset.bib
+
+cleanup:
+rm -f subset.{tex,aux,log,dvi,bbl,blg,sed}
diff --git a/biblio/bibtex/utils/bibtools/printbib b/biblio/bibtex/utils/bibtools/printbib
new file mode 100644
index 0000000000..378396e1b5
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/printbib
@@ -0,0 +1,68 @@
+#!/bin/csh -f
+#
+# printbib - print a full bibtex bib file out
+#
+# David Kotz
+#
+# usage:
+# printbib bibfile...
+#
+# Then send the dvi file 'abstract.dvi' to the printer
+# (usage varies; try lpr -d abstract.dvi)
+
+if ($#argv == 0) then
+ echo usage: printbib bibfile...
+ exit 1
+endif
+
+if ($1:e == "bib") then
+ set files=($1:r)
+else
+ set files=($1)
+endif
+
+shift
+foreach f ($*)
+ if ($f:e == "bib") then
+ set files="$files,$f:r"
+ else
+ set files="$files,$f"
+ endif
+end
+
+echo creating abstract.tex for $files
+
+cat > abstract.tex <<EOF
+\documentclass[11pt]{article}
+\usepackage{latexsym}
+\sloppy
+\setlength{\textwidth}{6.5in}
+\setlength{\textheight}{9in}
+\setlength{\topmargin}{-0.5in}
+\setlength{\oddsidemargin}{0pt}
+\setlength{\evensidemargin}{0pt}
+\newcommand{\eg}{e.g.} % e.g.
+\newcommand{\ie}{i.e.} % i.e.
+\newcommand{\etc}{etc.} % etc.
+\newcommand{\vs}{{\em vs.}} % vs.
+\begin{document}
+\begin{center} \Large Bibliography files \large \\\\
+EOF
+echo $files >> abstract.tex
+cat >> abstract.tex <<EOF
+\\\\ \today
+\end{center}
+\nocite{*}
+\bibliographystyle{abstract}
+EOF
+
+echo "\bibliography{$files}" >> abstract.tex
+echo '\end{document}' >> abstract.tex
+
+rm -f abstract.{aux,log,dvi,bbl,blg}
+
+set echo
+latex abstract.tex
+bibtex abstract
+latex abstract.tex
+latex abstract.tex
diff --git a/biblio/bibtex/utils/bibtools/subset-dfk.bst b/biblio/bibtex/utils/bibtools/subset-dfk.bst
new file mode 100644
index 0000000000..b3f506bea9
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/subset-dfk.bst
@@ -0,0 +1,281 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk@cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+% This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+% adds my name to the comment field
+% modified from
+ % BibTeX bibliography style `abstract'
+ % by David Kotz dfk@cs.duke.edu
+ % March 1989
+ % modified from
+ % BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ category
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+ ", " write$ % write comma and newline
+ newline$
+ " " write$ % and a respectable indentation
+
+ swap$ % now field name is on top
+ " = {" * % put = {
+ swap$ * % now text is back on top; concatenate
+ "}" * % put }
+ write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+ { pop$ pop$ }
+ 'output.field
+ if$
+}
+
+% special for "comment"
+% output if top not empty; below the top is the name of the field
+FUNCTION {output.comment}
+{ duplicate$ empty$
+ { pop$ pop$ }
+ { " [David.Kotz@Dartmouth.edu]" * output.field }
+ if$
+}
+
+% prints each field
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+ "key" key output
+ "author" author output
+ "title" title output
+
+ "journal" journal output
+ "booktitle" booktitle output
+
+ "chapter" chapter output
+ "edition" edition output
+ "editor" editor output
+
+ crossref missing$
+ { }
+ { "crossref" crossref output }
+ if$
+
+ "year" year output
+ "month" month output
+ "series" series output
+ "volume" volume output
+ "number" number output
+ "type" type output
+
+ "pages" pages output
+
+ "institution" institution output
+ "school" school output
+ "organization" organization output
+ "publisher" publisher output
+ "howpublished" howpublished output
+ "address" address output
+
+ "category" category output
+
+ "note" note output
+
+ "earlier" earlier output
+ "later" later output
+
+ "URL" URL output
+ "keyword" keyword output
+ "abstract" abstract output
+ "comment" comment output.comment
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field
+FUNCTION {output.bibitem}
+{
+% write the @ line
+ "@" swap$ * write$ % @type
+ "{" cite$ * write$ % {citekey
+
+ output.bibfields
+
+% finish entry
+ newline$
+ "}" write$
+ newline$
+ newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+ "% BibTeX bibliography file" write$
+ newline$
+ newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
diff --git a/biblio/bibtex/utils/bibtools/subset-nocomment.bst b/biblio/bibtex/utils/bibtools/subset-nocomment.bst
new file mode 100644
index 0000000000..687719f828
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/subset-nocomment.bst
@@ -0,0 +1,272 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk@cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+% This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+% This one doesn't include 'comment' in output.
+% modified from
+ % BibTeX bibliography style `abstract'
+ % by David Kotz dfk@cs.duke.edu
+ % March 1989
+ % modified from
+ % BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ category
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+ ", " write$ % write comma and newline
+ newline$
+ " " write$ % and a respectable indentation
+
+ swap$ % now field name is on top
+ " = {" * % put = {
+ swap$ * % now text is back on top; concatenate
+ "}" * % put }
+ write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+ { pop$ pop$ }
+ 'output.field
+ if$
+}
+
+% prints each field
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+ "key" key output
+ "author" author output
+ "title" title output
+
+ "journal" journal output
+ "booktitle" booktitle output
+
+ "chapter" chapter output
+ "edition" edition output
+ "editor" editor output
+
+ crossref missing$
+ { }
+ { "crossref" crossref output }
+ if$
+
+ "year" year output
+ "month" month output
+ "series" series output
+ "volume" volume output
+ "number" number output
+ "type" type output
+
+ "pages" pages output
+
+ "institution" institution output
+ "school" school output
+ "organization" organization output
+ "publisher" publisher output
+ "howpublished" howpublished output
+ "address" address output
+
+ "category" category output
+
+ "note" note output
+
+ "earlier" earlier output
+ "later" later output
+
+ "URL" URL output
+ "keyword" keyword output
+ "abstract" abstract output
+% "comment" comment output
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field
+FUNCTION {output.bibitem}
+{
+% write the @ line
+ "@" swap$ * write$ % @type
+ "{" cite$ * write$ % {citekey
+
+ output.bibfields
+
+% finish entry
+ newline$
+ "}" write$
+ newline$
+ newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+ "% BibTeX bibliography file" write$
+ newline$
+ newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
diff --git a/biblio/bibtex/utils/bibtools/subset.bst b/biblio/bibtex/utils/bibtools/subset.bst
new file mode 100644
index 0000000000..0efc438223
--- /dev/null
+++ b/biblio/bibtex/utils/bibtools/subset.bst
@@ -0,0 +1,271 @@
+% BibTeX bibliography style `subset'
+% by David Kotz dfk@cs.dartmouth.edu
+% August 1992, May 1993, February 1999
+% This takes an aux file and produces an unusual .bbl file,
+% that is actually in .bib format -- but it has all of the references,
+% and strings expanded. Thus, it becomes a complete, portable .bib
+% file. Crossrefs are retained but redundant.
+% modified from
+ % BibTeX bibliography style `abstract'
+ % by David Kotz dfk@cs.duke.edu
+ % March 1989
+ % modified from
+ % BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, keyword to standard set
+% 5/93 DFK added private, ignored when subsetting
+% 7/94 DFK added URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ category
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+STRINGS { s t }
+
+% output a field; the top is the text, the next to top is the name of
+% the field, and we know that the text is nonnull.
+% we start by finishing the previous line
+FUNCTION {output.field}
+{
+ ", " write$ % write comma and newline
+ newline$
+ " " write$ % and a respectable indentation
+
+ swap$ % now field name is on top
+ " = {" * % put = {
+ swap$ * % now text is back on top; concatenate
+ "}" * % put }
+ write$
+}
+
+% output if top not empty; below the top is the name of the field
+FUNCTION {output}
+{ duplicate$ empty$
+ { pop$ pop$ }
+ 'output.field
+ if$
+}
+
+% prints each field
+FUNCTION {output.bibfields}
+{
+% The fields, in what seems to be a good order
+ "key" key output
+ "author" author output
+ "title" title output
+
+ "journal" journal output
+ "booktitle" booktitle output
+
+ "chapter" chapter output
+ "edition" edition output
+ "editor" editor output
+
+ crossref missing$
+ { }
+ { "crossref" crossref output }
+ if$
+
+ "year" year output
+ "month" month output
+ "series" series output
+ "volume" volume output
+ "number" number output
+ "type" type output
+
+ "pages" pages output
+
+ "institution" institution output
+ "school" school output
+ "organization" organization output
+ "publisher" publisher output
+ "howpublished" howpublished output
+ "address" address output
+
+ "category" category output
+
+ "note" note output
+
+ "earlier" earlier output
+ "later" later output
+
+ "URL" URL output
+ "keyword" keyword output
+ "abstract" abstract output
+ "comment" comment output
+}
+
+% Takes name of type as argument, and prints @ line
+% then it prints each field
+FUNCTION {output.bibitem}
+{
+% write the @ line
+ "@" swap$ * write$ % @type
+ "{" cite$ * write$ % {citekey
+
+ output.bibfields
+
+% finish entry
+ newline$
+ "}" write$
+ newline$
+ newline$
+}
+
+FUNCTION {article}{ "Article" output.bibitem }
+
+FUNCTION {book}{ "Book" output.bibitem }
+
+FUNCTION {booklet}{ "Booklet" output.bibitem }
+
+FUNCTION {inbook}{ "InBook" output.bibitem }
+
+FUNCTION {incollection}{ "InCollection" output.bibitem }
+
+FUNCTION {inproceedings}{ "InProceedings" output.bibitem }
+
+FUNCTION {conference}{ "Conference" output.bibitem }
+
+FUNCTION {manual}{ "Manual" output.bibitem }
+
+FUNCTION {mastersthesis}{ "MastersThesis" output.bibitem }
+
+FUNCTION {misc}{ "Misc" output.bibitem }
+
+FUNCTION {phdthesis}{ "PhdThesis" output.bibitem }
+
+FUNCTION {proceedings}{ "Proceedings" output.bibitem }
+
+FUNCTION {techreport}{ "TechReport" output.bibitem }
+
+FUNCTION {unpublished}{ "Unpublished" output.bibitem }
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+% DFK use cite$ for sort key
+FUNCTION {presort}
+{
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+ "% BibTeX bibliography file" write$
+ newline$
+ newline$
+}
+
+EXECUTE {begin.bib}
+
+ITERATE {call.type$}
diff --git a/biblio/bibtex/utils/bibview-2.0/README b/biblio/bibtex/utils/bibview-2.0/README
new file mode 100644
index 0000000000..cea3fb7548
--- /dev/null
+++ b/biblio/bibtex/utils/bibview-2.0/README
@@ -0,0 +1,35 @@
+
+ BIBVIEW
+ (graphical interface for BibTeX program)
+ by Holger Martin, Peter Urban, Armin Liebl
+ liebla@informatik.tu-muenchen.de
+
+
+
+What "bibview" is:
+------------------
+
+ The program "bibview" is a graphical interface for manipulating
+ BibTeX databases. It supports the user in making new entries,
+ searching for entries and moving entries from one BiB to another.
+ It is possible to work with more than one BiB simultaneously.
+ bibview is implemented with Xt and Athena Widgets.
+ There are six types of windows in bibview:
+ The main window contains menus for customizing bibview and
+ for working with BiBs on the file level.
+ The bibliography window (one for every open BiB) contains commands
+ for manipulating the BiB.
+ The list window (at most one for every open BiB) shows a list of
+ entries. It displays the fields author, title, type and year.
+ The card window (at most one for every entry) helps editing an entry.
+ It contains boxes for each field of the entry (according to the type).
+ The fields can be edited by putting the mouse cursor into the field.
+ Macros in fields and the symbol for concatenation ('#') are marked
+ with a preceding '@'.
+
+
+Questions, comments, hacked source code:
+----------------------------------------
+Armin Liebl
+liebla@informatik.tu-muenchen.de
+
diff --git a/biblio/bibtex/utils/bibview-2.0/bibview-patch.gz b/biblio/bibtex/utils/bibview-2.0/bibview-patch.gz
new file mode 100644
index 0000000000..b154916b07
--- /dev/null
+++ b/biblio/bibtex/utils/bibview-2.0/bibview-patch.gz
Binary files differ
diff --git a/biblio/bibtex/utils/bibview-2.0/bibview.pdf b/biblio/bibtex/utils/bibview-2.0/bibview.pdf
new file mode 100644
index 0000000000..917e4612ee
--- /dev/null
+++ b/biblio/bibtex/utils/bibview-2.0/bibview.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/bibview/bibview.pl-0.2.2 b/biblio/bibtex/utils/bibview/bibview.pl-0.2.2
new file mode 100644
index 0000000000..a0201ffbae
--- /dev/null
+++ b/biblio/bibtex/utils/bibview/bibview.pl-0.2.2
@@ -0,0 +1,538 @@
+#!/usr/local/bin/perl
+#
+# bibview : view a BibTeX database and interactively search through it
+# Copyright 1992, Dana Jacobsen (jacobsd@cs.orst.edu)
+#
+#version = "0.1.0"; # 25 Aug 92 jacobsd Wrote original version
+#version = "0.2.0"; # 25 Aug 92 jacobsd added options
+#version = "0.2.1"; # 26 Aug 92 jacobsd added options
+$version = "0.2.2"; # 26 Aug 92 jacobsd fast status, command changes
+#
+# todo:
+# things in help that are not yet implemented
+# understand multiple bibliographies
+# allow "show 1-10 15"
+# support for AND and OR
+#
+# All bug-fixes, suggestions, flames, and compliments gladly accepted.
+#
+
+$ignorewords = "of and the in a on to for from an with by at as its";
+$displaymode = 'brief';
+$autoshow = 0;
+$sortoutput = 0;
+
+while (@ARGV) {
+ $_ = shift @ARGV;
+ /^--$/ && do { push(@files, @ARGV); undef @ARGV; next; };
+ /^-deb/ && do { $debugging = 1; next; };
+ /^-wor/ && do { $worddebug = 1; next; };
+ push (@files, $_);
+}
+
+# globals:
+#
+# $records{$citekey} : the full entry, verbatim
+# $authors{$citekey} : the author field
+# $titles{$citekey} : the title field
+# $inauthors{$name} : a $; seperated list of citekeys
+# $intitles{$word} : a $; seperated list of citekeys
+#
+# @result : a numbered array with citekeys of last result
+
+print "bibview $version by Dana Jacobsen, 1992\n";
+
+foreach $infile (@files) {
+ &readbibfile($infile);
+}
+
+$timetoquit = 0;
+
+until ($timetoquit) {
+ print "> ";
+ chop($command = <STDIN>);
+ $_ = $command;
+
+ if (/^load /i) {
+ ($dummy, $infile) = split;
+ &readbibfile($infile);
+ } elsif (/^write /i) {
+
+ } elsif (/^\w+\s*=/i) {
+ &handlesearch($command);
+ print " -- ", ($#result == 0) ? "1 entry" :
+ ($#result == -1 ? "no" : $#result+1, " entries"), " found.\n";
+ $autoshow && &printrecs(0, @result);
+ } elsif (s/^and\s+(\w+\s*=)/$1/i) {
+ local(%dummyaar);
+ local(@dresult) = @result;
+ &handlesearch($_);
+ grep($dummyaar{$_}++, @dresult);
+ @result = grep($dummyaar{$_}, @result);
+ print " -- ", ($#result == 0) ? "1 entry" :
+ ($#result == -1 ? "no" : $#result+1, " entries"), " found.\n";
+ $autoshow && &printrecs(0, @result);
+ } elsif (s/^or\s+(\w+\s*=)/$1/i) {
+ local(@iresult, %dummyaar);
+ local(@dresult) = @result;
+ &handlesearch($_);
+ grep($dummyaar{$_}++, @dresult);
+ @iresult = grep(!$dummyaar{$_}, @result);
+ @result = (@dresult, @iresult);
+ print " -- ", ($#result == 0) ? "1 entry" :
+ ($#result == -1 ? "no" : $#result+1, " entries"), " found.\n";
+ $autoshow && &printrecs(0, @result);
+ } elsif (/^set\s+display\s+brief/i) {
+ $displaymode = 'brief';
+ print "display mode set to $displaymode.\n";
+ } elsif (/^set\s+display\s+(full|bibtex)/i) {
+ $displaymode = 'full';
+ print "display mode set to $displaymode.\n";
+ } elsif (/^set\s+autoshow\s+true/i) {
+ $autoshow = 1;
+ print "autoshow set to true.\n";
+ } elsif (/^set\s+autoshow\s+false/i) {
+ $autoshow = 0;
+ print "autoshow set to false.\n";
+ } elsif (/^set\s+sort\s+true/i) {
+ $sortoutput = 1;
+ print "output sorting set to true.\n";
+ } elsif (/^set\s+sort\s+false/i) {
+ $sortoutput = 0;
+ print "output sorting set to false.\n";
+ } elsif (/^sort/i) {
+ @result = &titlesort(@result);
+ } elsif (/^status/i) {
+ print $#result+1, " records in last search result.\n";
+ if ($] > 4.019) {
+ print scalar(keys(%records)), " records loaded.\n";
+ print scalar(keys(%inauthors)), " unique author last names.\n";
+ print scalar(keys(%intitles)), " unique words in titles.\n";
+ } else {
+ $count = 0; $count++ while each %records;
+ print $count, " records loaded.\n";
+ $count = 0; $count++ while each %inauthors;
+ print $count, " unique author last names.\n";
+ $count = 0; $count++ while each %intitles;
+ print $count, " unique words in titles.\n";
+ }
+ print "display mode is $displaymode.\n";
+ print "autoshow is ", $autoshow ? "true" : "false", ".\n";
+ print "automatic output sorting is ", $sortoutput ? "true" : "false", ".\n";
+ } elsif (/^select\s+all/i) {
+ @result = sort keys(%records);
+ } elsif (/^display\s+authors/i) {
+ local(@dresult) = sort keys(%inauthors);
+ print join("\n", @dresult), "\n";
+ } elsif (/^display\s+titles/i) {
+ local(@dresult) = sort keys(%intitles);
+ print join("\n", @dresult), "\n";
+ } elsif (/^find\s+duplicates/i) {
+ &finddups();
+ } elsif (/^debug\s+on/i) {
+ $debugging = 1;
+ } elsif (/^debug\s+off/i) {
+ $debugging = 0;
+ } elsif (/^(detail|brief|show)/i) {
+ $oldmode = $displaymode;
+ if (s/^detail\s*//) {
+ $displaymode = 'full';
+ } elsif (s/^brief\s*//) {
+ $displaymode = 'brief';
+ } elsif (s/^show\s*//) {
+ # nothing
+ }
+ /^$/ && ($_ = "all");
+ foreach $num (split) {
+ $debugging && print "$num\n";
+ if ($num eq all) {
+ &printrecs(0, @result);
+ } else {
+ &printrecs($num-1, $result[$num-1]);
+ }
+ }
+ $displaymode = $oldmode;
+ } elsif (/^quit/i) {
+ $timetoquit = 1;
+ } elsif (/^(\?|help)/i) {
+ print "load <file> -- load <file>\n";
+ print "a=<name> -- find author exactly matching <name>\n";
+ print "a=/<name> -- find author matching the regex <name>\n";
+ print "t=<word> -- find title containing the word <word>\n";
+ print "t=/<word> -- find title containing the regex <word>\n";
+ print "<field> = /<text> -- find field containing the regex <text>\n";
+ print "and <search> -- logical and the results with <search>\n";
+ print "or <search> -- logical or the results with <search>\n";
+ print "set display brief -- use one line per record when displaying\n";
+ print "set display full -- use BibTeX record when displaying\n";
+ print "set autoshow true -- display results after search\n";
+ print "set autoshow false -- don't display results after search\n";
+ print "select all -- select all records loaded\n";
+ print "show [all | <n>..] -- show <n>th result(s) or all\n";
+ print "brief [all | <n>..] -- display result(s) <n> in brief format\n";
+ print "detail [all | <n>..] -- display result <n> in BibTeX format\n";
+ print "status -- show status of bibview\n";
+ print "quit -- quit bibview\n";
+ print "!<command> -- execute <command> via the shell\n";
+ print "-----------------------\n";
+ print "not implemented yet:\n";
+ print "write <file> -- write search results to <file>\n";
+ print "load all in <subj> -- load all files in <subj> biblio directory\n";
+ print "unload <file> -- remove entries from <file>\n";
+ print "unload all in <subj> -- remove entries from biblios in <subj>\n";
+ print "display mode lib -- display records in tagged field format\n";
+ print "delete [all | <n>..] -- delete results from memory\n";
+ print "find duplicates -- selects duplicate entries\n";
+ } elsif (/^\s*$/) {
+ # nothing
+ } elsif (s/^!//) {
+ system($_);
+ } else {
+ print "Unrecognized command. Use ? for help.\n";
+ }
+}
+
+
+########################################
+########################################
+########################################
+
+sub readbibfile {
+ local ($file) = @_;
+ local ($num) = 0;
+ local ($dups) = 0;
+ local ($oldpipe) = $|;
+
+ # this little gem is from Larry Wall -- expand ~user.
+ $file =~ s#^(~([a-z0-9]+))(/.*)?$#((getpwnam($2))[7]||$1).$3#e;
+ # this is mine -- handle ~/file
+ $file =~ s#^(~)(/.*)?$#((getpwnam(getlogin))[7]||$1).$2#e;
+
+ open (IN, $file) || open (IN, "$file.bib") ||
+ ((warn "Can't open $file: $!\n"), return 0);
+ $| = 1;
+ print "loading $file..";
+
+ while (! eof(IN)) {
+ $key = &bibtexread(*IN);
+
+ if ((!$records{$key}) && $key) {
+ $num++;
+ ($num % 50) || print ".";
+ $records{$key} = $entry{FULL};
+
+ $authors{$key} = $entry{author};
+
+ if ($entry{booktitle}) {
+ if ($entry{title}) {
+ $titles{$key} = $entry{title} . ' in ' . $entry{booktitle};
+ } else {
+ $titles{$key} = $entry{booktitle};
+ }
+ } else {
+ $titles{$key} = $entry{title};
+ }
+
+ foreach $auth (split(/ and /, $entry{author})) {
+ $name = &parsename($auth);
+ $name =~ tr/A-Za-z0-9\-//cd; # delete non-alphanumerics
+ $name =~ tr/A-Z/a-z/; # everything lowercase
+ $inauthors{$name} .= $; . $key;
+ }
+
+ foreach $word (split(/\s+/, $titles{$key})) {
+ $word =~ tr/A-Za-z0-9\-//cd;
+ $word =~ tr/A-Z/a-z/;
+ if ($word && (index($ignorewords, $word) == -1)) {
+ if ($worddebug) { print "$word\n"; }
+ $intitles{$word} .= $; . $key;
+ }
+ }
+ } else {
+ $key && $debugging && print "Duplicate cite key: not adding $key\n";
+ $key && $dups++;
+ }
+ }
+ $| = $oldpipe;
+ print "$num entries.";
+ print $dups ? " $dups duplicate cite keys.\n" : "\n";
+}
+
+########################################
+sub handlesearch {
+ local($_) = @_;
+ local($afield, $lfield, $lvalue, $lval, $cite, $val);
+ local(%resaar);
+ local(%atolar) = ('a', 'author',
+ 't', 'title',
+ );
+ @result = ();
+
+ if ( ($afield, $lvalue) = /^(\w)\s*=\s*(.*)$/ ) {
+ $lfield = $atolar{$afield};
+ if (!$lfield) {
+ print "No abbreviation for $afield. Spell out the field name.\n";
+ return;
+ }
+ } else {
+ ($lfield, $lvalue) = /^(\w+)\s*=\s*(.*)$/;
+ $lfield =~ tr/A-Z/a-z/;
+ }
+ $debugging && print "lfield: $lfield, lvalue: $lvalue\n";
+ if (substr($lvalue, 0, 1) eq '/') { # regex search
+ substr($lvalue, 0, 1) = '';
+ print "$lfield is /$lvalue/";
+ if ($lfield eq author) {
+ while (($cite, $val) = each %authors) {
+ ($val =~ /$lvalue/i) && (push(@result, $cite));
+ }
+ } elsif ($lfield eq title) {
+ while (($cite, $val) = each %titles) {
+ ($val =~ /$lvalue/i) && (push(@result, $cite));
+ }
+ } else { # long search.
+ # (this implementation could result in false matches)
+ while (($cite, $val) = each %records) {
+ ($val =~ /$lfield\s*=.*$lvalue/i) && (push(@result, $cite));
+ }
+ }
+ } else { # exact search
+ print "$lfield is $lvalue";
+ $lvalue =~ tr/A-Za-z0-9\-//cd;
+ $lvalue =~ tr/A-Z/a-z/;
+ if ($lfield =~ /^author$/) {
+ @result = split(/$;/, $inauthors{$lvalue});
+ } elsif ($lfield =~ /^title$/) {
+ @result = split(/$;/, $intitles{$lvalue});
+ } else {
+ print " -- Exact matching on $lfield not available.\n";
+ return;
+ }
+ shift @result;
+ }
+ # weed out any duplicates that might have cropped up
+ grep($resaar{$_}++, @result);
+ @result = grep($resaar{$_}-- == 1, @result);
+
+ $sortoutput && (@result = &titlesort(@result));
+}
+
+########################################
+sub titlesort {
+ return(sort { $titles{$a} cmp $titles{$b}; } @_);
+}
+
+########################################
+sub printrecs {
+ local($cite, $auth, $names);
+ local($num) = shift(@_);
+
+ foreach $cite (@_) {
+ next if (!$cite);
+ $num++;
+ $debugging && print "cite: $cite\n";
+
+ if ($displaymode eq full) {
+ print $records{$cite}, "\n";
+ } else {
+ $names = '';
+ foreach $auth (split(/ and /, $authors{$cite})) {
+ $names .= ', ' . &parsename($auth);
+ }
+ $names =~ s/^, //;
+ $debugging && print ":$num:$names:$titles{$cite}:\n";
+ printf "%3d %-20s %-50s\n",
+ $num,
+ substr($names, 0, 20),
+ substr($titles{$cite}, 0, 50);
+ }
+ }
+}
+
+
+########################################
+# sets @result to a list of citekeys of duplicates
+sub finddups {
+ local($curtitle);
+ local($cite, $ocite, $name);
+ local($type, $otype);
+ local(@auths, @restauths);
+ local(%resaar);
+
+ @result = ();
+ foreach $name (keys %inauthors) {
+ $debugging && print "$name:";
+ @auths = split(/$;/, $inauthors{$name});
+ shift @auths;
+ @restauths = @auths;
+ foreach $cite (@auths) {
+ $curtitle = $titles{$cite};
+ ($type) = ($records{$cite} =~ /^\s*@\s*(\w+)/);
+ shift(@restauths);
+ foreach $ocite (@restauths) {
+ next if $cite eq $ocite;
+ ($otype) = ($records{$ocite} =~ /^\s*@\s*(\w+)/);
+ next if $type ne $otype;
+ next if $curtitle ne $titles{$ocite};
+ # author in common, same type, and same title
+ push(@result, $cite, $ocite);
+ }
+ }
+ }
+ $debugging && print "\n";
+
+ grep($resaar{$_}++, @result);
+ @result = grep($resaar{$_}-- == 1, @result);
+
+ print "", ($#result == 0) ? "1 duplicate" :
+ ($#result == -1 ? "no" : $#result+1, " duplicates"), " found.\n";
+}
+
+########################################
+#
+# parsename takes a name in BibTeX format, and parses it into
+# parts. It returns the last name. The following globals are
+# set:
+# $First, $von, $Last, $Jr
+
+sub parsename {
+ local($name) = @_;
+ local($doinglast) = 0;
+ local($part) = 0;
+ local($p1, $p2, $p3);
+ local($sing, $dummy);
+
+ ($dummy, $sing, $dummy) = $name =~ /(^|\s){(.*)}(\s|$)/;
+ $name =~ s/(^|\s){(.*)}(\s|$)/$1ASingleNameString$3/;
+ $First = $von = $Last = $Jr = '';
+
+ ($p1, $p2, $p3) = split(/,/, $name, 3);
+ if ($p3) {
+ $First = $p3;
+ $Jr = $p2;
+ if ($p1 =~ s/^\s*{(.*)}\s*$/$1/) {
+ $Last = $p1;
+ } else {
+ while ($p1 =~ /^[a-z]/) {
+ ($part) = $p1 =~ /^(\S+)/;
+ $p1 =~ s/^(\S+)\s*//;
+ $von .= ' ' . $part;
+ }
+ $Last = $p1;
+ }
+ } elsif ($p2) {
+ $First = $p2;
+ if ($p1 =~ s/^\s*{(.*)}\s*$/$1/) {
+ $Last = $p1;
+ } else {
+ while ($p1 =~ /^[a-z]/) {
+ ($part) = $p1 =~ /^(\S+)/;
+ $p1 =~ s/^(\S+)\s*//;
+ $von .= ' ' . $part;
+ }
+ $Last = $p1;
+ }
+ } else {
+ if ($p1 =~ s/^\s*{(.*)}\s*$/$1/) {
+ $Last = $p1;
+ } else {
+ while ($p1 =~ /^[A-Z]/) {
+ ($part) = $p1 =~ /^(\S+)/;
+ $p1 =~ s/^(\S+)\s*//;
+ $First .= ' ' . $part;
+ }
+ while ($p1 =~ /^[a-z]/) {
+ ($part) = $p1 =~ /^(\S+)/;
+ $p1 =~ s/^(\S+)\s*//;
+ $von .= ' ' . $part;
+ }
+ if ($p1) {
+ $Last = $p1;
+ } else {
+ ($Last) = $First =~ /\s+(\S+)\s*$/;
+ $First =~ s/\s+\S+\s*$//;
+ }
+ }
+ }
+ $Last =~ s/ASingleNameString/$sing/;
+ $Last =~ s/^\s+//;
+ $von =~ s/^\s+//;
+ $First =~ s/^\s+//;
+ $Jr =~ s/^\s+//;
+ # handle "et al" or "others"
+ if ( (!$Last) && ($von =~ /^(others|et\.?\s*al)\.?$/i) ) {
+ $Last = "others";
+ $von = '';
+ }
+ if ($debugging) {
+ $name =~ s/ASingleNameString/$sing/;
+ $name =~ s/^\s+//;
+ printf "%20s: %-15s %-10s %-20s %-10s\n", $name, $First, $von, $Last, $Jr;
+ }
+ return ($Last);
+}
+
+
+########################################
+#
+# split out the field parsing into a seperate routine.
+# so we read in verbatim, then call &bibtexexplode to seperate
+# into %entry.
+#
+sub bibtexread {
+ local(*FILE) = @_;
+ local($braces) = 1;
+ local($ent, $delim);
+ local($field, $value, @values);
+
+ %entry = ();
+
+ while (<FILE>) {
+ last if /^\s*@/;
+ }
+ if (!/,/) { # preamble is split on multiple lines
+ $ent = $_;
+ while (<FILE>) {
+ $ent .= $_;
+ last if /,/;
+ }
+ $_ = $ent;
+ }
+ return 0 if eof(FILE);
+ return 0 if /^\s*@\s*string/i;
+ return 0 if /^\s*@\s*preamble/i;
+ $ent = $_;
+ ( ($entry{type}, $delim, $entry{citekey})
+ = /^\s*@\s*(\w+)\s*([{(])\s*(\S+)\s*,\s*$/)
+ || do { print "Error getting line: $_\n"; return 0; };
+ $debugging && print $entry{type}, $delim, $entry{citekey}, "\n";
+ if ($delim eq '{') {
+ while (<FILE>) {
+ $ent .= $_;
+ $braces += s/{/{/g;
+ $braces -= s/}/}/g;
+ last if ($braces <= 0);
+ }
+ $entry{FULL} = $ent;
+ $ent =~ s/}\s*$//;
+ } else {
+ while (<FILE>) {
+ $ent .= $_;
+ last if $ent =~ s/[)]\s*$//;
+ }
+ $entry{FULL} = $ent . ')';
+ }
+ $ent =~ s/\s+/ /g;
+ @values = split(/,\s*(\w+)\s*=\s*/, $ent);
+ $debugging && print join("//", @values), "\n";
+ shift(@values); # zap the beginning info
+ while (@values) {
+ $field = shift(@values);
+ $field =~ tr/A-Z/a-z/;
+ $value = shift(@values);
+ $value =~ s/^\s*{(.*)}\s*$/$1/;
+ $value =~ s/^\s*"(.*)"\s*$/$1/;
+ $entry{$field} = $value;
+ }
+ return($entry{citekey});
+}
diff --git a/biblio/bibtex/utils/bibweb/COPYING b/biblio/bibtex/utils/bibweb/COPYING
new file mode 100644
index 0000000000..eeb586b392
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/biblio/bibtex/utils/bibweb/ChangeLog b/biblio/bibtex/utils/bibweb/ChangeLog
new file mode 100644
index 0000000000..798b4d6ec4
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/ChangeLog
@@ -0,0 +1,213 @@
+2003-11-19 John H Palmieri <palmieri@math.washington.edu>
+
+ * released version 0.49.
+
+ * bibweb: the AMS did something to break bibweb again, and I think
+ I've fixed it. In particular: there are now two types of MR
+ numbers: the old ones, and new ones which are just 7 digit
+ numbers. bibweb now uses the old ones for printing and uses the
+ new ones for searching and constructing URLs. Also, the AMS
+ changed the basic URL for the initial search, and so I've tried to
+ fix the one bibweb uses to compensate.
+
+2002-11-12 John H Palmieri <palmieri@math.washington.edu>
+
+ * released version 0.48.
+
+ * bibweb: changed path to perl executable
+
+ * bibweb: the AMS did something to break bibweb again, and I think
+ I've fixed it.
+
+2002-03-21 John H Palmieri <palmieri@math.washington.edu>
+
+ * released version 0.47.
+
+ * bibweb: added option '-sep CHAR': use CHAR instead of semicolon
+ to separate fields in long citation format.
+
+2000-11-09 John H. Palmieri <palmieri@math.washington.edu>
+
+ * released version 0.46.
+
+ * bibweb: the AMS did something to break bibweb again, and I think
+ I've fixed it.
+
+2000-11-09 Laurent Bartholdi <Laurent.Bartholdi@math.unige.ch>,
+ (modified by John H. Palmieri <palmieri@math.washington.edu>)
+
+ * bibweb: added option '-r': insert the math review in the bibtex output.
+
+2000-02-10 John H. Palmieri <palmieri@math.washington.edu>
+
+ * bibweb: specifying publication year wasn't working, so I fixed
+ it (by specifying the 'dr' field to be either 'all' or 'pubyear').
+
+1999-09-23 John Palmieri <palmieri@math.washington.edu>
+
+ * bibweb: released version 0.44.
+
+ * bibweb: changed URLs and stuff so that bibweb works with MathSciNet
+ version 5.0.
+
+ * bibweb: command line option -pdf retrieves information in pdf format.
+
+ * bibweb: new address.
+
+1999-03-02 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.43.
+
+ * bibweb: clarified copyright and licensing information.
+
+1998-10-26 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.41.
+
+1998-10-26 Michael Friendly <friendly@hotspur.psych.yorku.ca>
+
+ * bibweb: added option to look for webget if neither lynx nor wget
+ are present.
+
+1998-10-26 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: more modifications related to MathSciNet 4.0.
+
+1998-09-22 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.41.
+
+ * bibweb: changed URLs and stuff so that bibweb works with MathSciNet
+ version 4.0.
+
+1998-05-04 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.40.
+
+ * bibweb: added another paragraph about the GNU GPL.
+
+ * COPYING: added this file to the distribution.
+
+1998-04-21 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.39.
+
+ * bibweb: made comment character a variable, in case some weird
+ version of BibTeX barfs when it sees `%'.
+
+1998-04-15 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.38.
+
+ * bibweb: fixed a bug: $use_bibtex was not being set by default if
+ no other options were chosen.
+
+ * bibweb: MathSciNet can now handled getitem requests properly
+ with temporary MR numbers.
+
+1998-04-02 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.37.
+
+ * bibweb: I noticed that lynx seems able to return dvi and
+ postscript output just fine, so the -d and -p options now work, as
+ long as lynx is available.
+
+ * bibweb: Since MathSciNet now can return BibTeX information
+ directly using mathscinet-getitem, the URLs are easier once we
+ know the MR number. So $new_wget_url has been redefined.
+
+1998-01-06 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: released version 0.36.
+
+ * bibweb: New feature: bibweb uses the environment variable
+ MATHSCINET_SITE for its default MathSciNet search site. If this
+ variable is not defined, then the default is e-math.ams.org. Of
+ course, you can still specify a different site using the
+ command-line argument -e.
+
+ * bibweb: released version 0.35.
+
+ * bibweb: New feature: if you give the argument '-e rice', it
+ translates that to '-e ams.rice.edu'. Similarly:
+ 'ams' is short-hand for 'e-math.ams.org',
+ 'bielefeld' is shorthand for 'ams.mathematik.uni-bielefeld.de',
+ 'bonn' is shorthand for 'klymene.mpim-bonn.mpg.de', and
+ 'strasbg' is shorthand for 'irmasrv1.u-strasbg.fr'
+
+ * bibweb: AMS changed its format, so bibweb wasn't retrieving the
+ number of matches.
+
+1998-01-06 John Greenlees <j.greenlees@sheffield.ac.uk>
+
+ * bibweb: changed Bielefeld address. (Well, maybe not.)
+
+1997-12-05 Ralph Freese <ralph@math.hawaii.edu>
+
+ * bibweb ('foreach $warning' loop): changed 'last' to 'next'
+
+1997-11-25 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: fixed bug: if using Lynx, and when retrieving item with
+ temporary MR number, nothing was returned.
+
+1997-11-07 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: fixed bug: if --max=NUM option was used with NUM>9, if
+ there were more than 10 matches, only first 9 were returned.
+
+1997-11-05 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: changed version to 0.31.
+
+ * bibweb.texi (etc): fiddled a bit with the installation instructions.
+
+1997-10-28 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: changed version to 0.30, to celebrate the existence of
+ documentation.
+
+ * bibweb.texi: wrote the documentation.
+
+ * bibweb: changed version to 0.29
+
+ * bibweb: added command line option "std"
+
+ * bibweb: automatically use lynx if wget is not found.
+
+1997-10-27 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: changed version to 0.28
+
+ * bibweb: fixed bug in parsing math review number--in the last few
+ versions, even when there was a unique match, the appropriate key
+ would not get assigned to the bibtex entry.
+
+ * bibweb: fixed bug in citation parsing (have to set author, etc,
+ to '' for each citation)
+
+ * bibweb: changed version to 0.27
+
+ * bibweb: little changes
+
+ * bibweb: changed version to 0.26
+
+ * bibweb: fixed one or two bugs with -cite option
+
+1997-10-26 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: changed version to 0.25
+
+ * bibweb: fix round-up of $max_matches
+
+ * bibweb: use GetOpt to read command line arguments
+
+1997-10-25 John H Palmieri <palmieri@member.ams.org>
+
+ * bibweb: changed version to 0.24
+
+ * bibweb: changed some stylist choices, added some comments
+
+ * bibweb: changed /bin/perl to /usr/bin/perl
+
diff --git a/biblio/bibtex/utils/bibweb/HOW_TO b/biblio/bibtex/utils/bibweb/HOW_TO
new file mode 100644
index 0000000000..6f098671cb
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/HOW_TO
@@ -0,0 +1,293 @@
+
+These instructions may be a bit out of date. You should really read
+the documentation in bibweb.dvi or bibweb.info or bibweb.texi or
+bibweb.html (same documentation, different formats).
+
+-------------------
+
+How to use bibweb:
+
+Once you've installed both wget and bibweb, here's what you do:
+
+I will assume you're working with a file called 'gorilla.tex'. In
+order to use bibtex at all, you need to have two lines in the file,
+something like:
+
+ \bibliography{bozo}
+ \bibliographystyle{alpha}
+
+When you run bibtex on this, it looks for a file called 'bozo.bib',
+and loads references from that.
+
+1. Change the first of the above lines to:
+
+ \bibliography{bozo,gorilla}
+
+This way, bibtex will also look for a file called 'gorilla.bib', which
+bibweb will produce.
+
+2. If you want to cite a paper not in your bozo.bib file, say, Adams'
+paper on Hopf invariant one, you just cite it:
+
+ \cite{adams-hopf-invariant-one}
+
+3. Then run latex on the paper, as normal. After this, rather than
+running bibtex, run bibweb; it will run bibtex, and for every citation
+it can't find, it will search on MathSciNet. It will write the
+resulting bibtex entries to the file 'gorilla.bib'. Then it runs
+bibtex again, to scan these new entries. (So then you have to run
+latex a few more times, as usual.)
+
+To run bibweb, you just type:
+
+ bibweb gorilla
+
+Since MathSciNet is sort of slow, I would recommend using this in
+conjunction with X windows or some similar system: edit your tex file
+using Emacs (of course), and then in a separate window run bibweb when
+you need to. Then you can let it go on its merry way, while you keep
+typing. For you Ultra-TeX and AUC-TeX users, it should be pretty easy
+to set things up so you can run bibweb from with AUC-TeX by hitting
+C-c C-c; I'll let you work out the details.
+
+4. Other options for running bibweb:
+bibweb [options] FILE
+ where options can be:
+ -i FILE use FILE as input (aux) file
+ -o FILE use FILE as output (bib) file
+ -c REF looks up single citation REF, instead of using
+ an auxfile for input
+ -b get output in bibtex format (default)
+ -d get output in dvi format (written to MR#.dvi, where
+ 'MR#' is the Math Reviews number of the reference)
+ -p get output in postscript format (written to MR#.ps)
+ -t get output in text format (written to MR#.txt)
+ -m NUM return at most NUM entries (rounded up)
+ -e WEB_SITE use WEB_SITE for MathSciNet search
+ -L use lynx instead of wget (note: lynx is slower than wget)
+ -h print brief help message
+
+The options -d, -p, and -t use lynx rather than wget, so you must have
+lynx somewhere on your system. (But lynx is fairly common, so it may
+already be there.)
+
+The -m option: bibweb does not let you specify exactly how many
+matches to look for. If you run
+ bibweb -m NUM blah blah blah
+then it looks for at most NUM' matches, where NUM' is determined from
+NUM according to the following:
+ If NUM <= 5, then NUM' = 5.
+ If 5 < NUM <= 10, then NUM' = 10.
+ If 10 < NUM <= 20, then NUM' = 20.
+ If 20 < NUM <= 50, then NUM' = 50.
+ If 50 < NUM <= 100, then NUM' = 100.
+ If 100 < NUM <= 1000, then NUM' = 1000. (Don't try this at home.)
+ Otherwise, NUM' = 5.
+bibweb will print a message saying that it's rounding NUM up to NUM',
+if it thinks it should.
+
+The -e option: there are various places that let you search the
+MathSciNet database:
+ e-math.ams.org (the default)
+ ams.rice.edu
+ ams.mathematik.uni-bielefeld.de
+ irmasrv1.u-strasbg.fr
+So
+ bibweb -e ams.rice.edu blah blah blah
+uses the site at Rice instead of the default. If you use the -e
+option, no error checking is done: if you say
+ bibweb -e bozo.edu blah blah blah
+then bibweb will tell you that bozo.edu is not on its list of e-math
+sites, but it will go ahead and search there anyway (returning
+nothing, and doing it remarkably quickly). This way, if some new
+e-math site appears and I don't know about it, you can use bibweb to
+search there anyway.
+
+----------------
+
+Notes:
+1(a) If bibweb finds exactly one entry matching your citation, it
+puts it in gorilla.bib with the key you chose. For instance, if you
+have
+
+ \cite{kan-miller-splitting-spaces}
+
+bibweb puts the following in gorilla.bib:
+
+%% Math Reviews number: 57 #7582
+@article {kan-miller-splitting-spaces,
+ AUTHOR = {Kan, Daniel M. and Miller, Edward Y.},
+ TITLE = {Splitting spaces with finite group actions},
+ JOURNAL = {Topology},
+ VOLUME = {16},
+ YEAR = {1977},
+ NUMBER = {4},
+ PAGES = {403--407},
+}
+
+(b) If it finds several matches (at most 5), it writes them all to
+gorilla.bib, but leaves the original citation undefined. (The new
+ones have citations given by their Math Reviews numbers.) So at this
+point, you have to edit gorilla.bib to change the keys of the papers
+you're interested in, or you have to change your \cite command to
+match what was written into gorilla.bib.
+
+Example: if you have
+
+ \cite{adams;hopf-invariant-one}
+
+then there are two matches: two papers by Adams called "On the
+nonexistence of elements of Hopf invariant one", one from the Annals,
+and one from Bull. AMS. These get entered into gorilla.bib as
+
+%% Math Reviews number: 25 #4530
+@article {MR25:4530,
+ AUTHOR = {Adams, J. F.},
+ TITLE = {On the non-existence of elements of {H}opf invariant one},
+ JOURNAL = {Ann. of Math. (2)},
+ VOLUME = {72},
+ YEAR = {1960},
+ PAGES = {20--104},
+}
+
+%% Math Reviews number: 20 #3539
+@article {MR20:3539,
+ AUTHOR = {Adams, J. F.},
+ TITLE = {On the nonexistence of elements of {H}opf invariant one},
+ JOURNAL = {Bull. Amer. Math. Soc.},
+ VOLUME = {64},
+ YEAR = {1958},
+ PAGES = {279--282},
+}
+
+(c) If it finds more than 5 matches, it tells you that, and doesn't
+add any new entries to gorilla.bib.
+
+Example: if you have
+
+ \cite{serre}
+
+then bibweb adds the following to gorilla.bib:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% citation 'serre'
+%% More than 5 matches found.
+%%
+
+(d) If it doesn't find any matches, it tells you that, and doesn't
+add any new entries to gorilla.bib.
+
+Example: if you have
+
+ \cite{serre-kan}
+
+then bibweb adds the following to gorilla.bib:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% citation 'serre-kan'
+%% No matches found.
+%%
+
+(e) Occasionally, bibweb will say it only finds one match, but it will
+add several things to gorilla.bib. This happens when there are
+several papers whose reviews are all together on MathSciNet (see
+\cite{dwyer-kan;obstruction-theory-diagrams}, for example).
+
+
+
+2. There are two different formats for citations that bibweb knows how
+to handle, and it handles them in different ways.
+
+(a) Simpler format:
+
+ \cite{a-b-c-d-e}
+
+'a' gets sent as the author, 'b', 'c', and 'd' get sent as
+miscellany (they can match anything, including the author, title,
+journal, reviewer, or the text of the review). 'e' should be of the
+form '<1995' or '>1995' or '=1995' or '1995', in which case bibweb
+only searches for papers from the appropriate years. '1995' is
+treated the same as '=1995'. It seems that specifying a year or range
+of years slows things down tremendously, so you might want to avoid
+this. Also, I think if 'e' is in some other format, it will just get
+ignored.
+
+Example: \cite{devinatz-hopkins-nilpotence} matches two papers: one is
+"Nilpotence and stable homotopy theory, I" by Devinatz, Hopkins, and
+Smith; the other is 'Morava's change of rings theorem" by Devinatz,
+for which "Hopkins" and "nilpotence" are mentioned in the review.
+
+If you want to avoid this sort of thing, you can use the more involved
+format.
+
+(b) More involved format:
+
+ \cite{a1-a2-...-ak;t1-t2-...-tm;j1-j2-...jn;year}
+
+'year' should be just like field 'e' in the simpler format, but it
+slows things down, so I would avoid it. a1, ..., ak are treated as
+authors, t1, ..., tm are treated as titles, j1, ..., jn are treated as
+journals. You don't have to include the journal field, for instance,
+or the year field.
+
+Example: \cite{devinatz-hopkins;nilpotence} matches only the paper
+"Nilpotence and stable homotopy theory, I" by Devinatz, Hopkins, and
+Smith. \cite{miller-wilkerson;vanishing-steenrod} matches "Vanishing
+lines for modules over the Steenrod algebra" by Miller and Wilkerson,
+as does \cite{miller-wilkerson;vanishing-steenrod;;<1985}, as does
+\cite{miller-wilkerson;vanishing-steenrod;pure;<1985} (the paper
+appeared in the Journal of Pure and Applied Algebra).
+
+
+
+3. Using wildcards: You can use '*' as a wildcard; for instance,
+\cite{adams;hopf-invar*-one} would give the same two papers as in Note
+1(b).
+
+When using MathSciNet by hand, if you want to search for papers by
+Mike Hopkins, you could set the author field equal to "hopkins, m*".
+On the other hand, if you give bibtex the command
+\cite{hopkins,m*;global}, bibtex will treat "hopkins" as one source
+and "m*;global" as another. So to get bibweb to do the right thing,
+you should use the command
+
+ \cite{hopkins.m*;global}
+
+bibweb will translate the . to a , before sending the query to
+MathSciNet, so this citation would produce
+
+@incollection {hopkins.m*;global,
+ AUTHOR = {Hopkins, Michael J.},
+ TITLE = {Global methods in homotopy theory},
+BOOKTITLE = {Homotopy theory (Durham, 1985)},
+ PAGES = {73--96},
+ SERIES = {London Math. Soc. Lecture Note Ser.},
+ VOLUME = {117},
+PUBLISHER = {Cambridge Univ. Press},
+ ADDRESS = {Cambridge},
+ YEAR = {1987},
+}
+
+4. Examples of other options:
+
+ bibweb -i bozo -o clown
+uses 'bozo.aux' as input file (i.e., it runs 'bibtex bozo'), and writes
+output to 'clown.bib'.
+
+ bibweb -c 'adams;hopf-invariant-one'
+looks for the given reference, and writes its output to the screen.
+
+ bibweb -c 'adams;hopf-invariant-one' -o clown.bib
+looks for the given reference, and appends its output to 'clown.bib'.
+
+ bibweb -L blah blah blah
+should work just like 'bibweb blah blah blah', except that is uses
+the program 'lynx' instead of 'wget'. I haven't tested this
+extensively, but I have noticed that lynx seems rather slow compared
+to wget.
+
+
+----------------
+
+John H. Palmieri
+palmieri@math.washington.edu
diff --git a/biblio/bibtex/utils/bibweb/INSTALL b/biblio/bibtex/utils/bibweb/INSTALL
new file mode 100644
index 0000000000..cd777b7454
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/INSTALL
@@ -0,0 +1,89 @@
+
+These instructions may be a bit out of date. You should really read
+the documentation in bibweb.dvi or bibweb.info or bibweb.texi or
+bibweb.html (same documentation, different formats).
+
+-------------------
+
+Before you even think about installing bibweb, you need to make sure
+that you can use MathSciNet from your machine. If not, you're out of
+luck.
+
+To install bibweb, you need to do two things:
+
+1. (optional) Get a copy of the program 'wget' from your favorite GNU
+site. Some choices of ftp sites are:
+
+ftp://ftp.hawaii.edu/mirrors/gnu
+ftp://ftp.digex.net/pub/gnu
+ftp://wuarchive.wustl.edu/systems/gnu
+ftp://ftp.cs.columbia.edu/archives/gnu/prep
+ftp://uiarchive.cso.uiuc.edu/pub/gnu
+ftp://gatekeeper.dec.com/pub/GNU
+ftp://labrea.stanford.edu/gnu
+ftp://ftp.uu.net/archive/systems/gnu
+ftp://prep.ai.mit.edu/pub/gnu (the main GNU site, but use a mirror instead)
+
+Once you've retrieved it, install it. (When I did this, I just
+followed the wget installation instructions, and it worked without a
+hitch.)
+
+See Note 1 for a description of wget.
+
+If you have lynx and you want to skip step 1, you can; bibweb will use
+lynx if it can't find wget. wget is faster than lynx, though.
+
+
+2. Put bibweb somewhere in your path. For instance, you might put
+it in $HOME/bin, as long as that is in your path (and if it isn't,
+look at your .cshrc (or equivalent) file). Make sure its permissions
+are set to "executable" (i.e., do 'chmod ugo+x bibweb'). Also find
+out where perl lives on your computer, and put its path on the first
+line of bibweb. On my machine, for instance, I might use
+
+ #!/usr/local/bin/perl5
+
+instead of '#!/usr/local/bin/perl'.
+
+bibweb works a bit better with version 5 of perl than with version
+4. I haven't even tested it with earlier versions.
+
+See Note 2 for a brief description of bibweb.
+
+3. There is no third thing. You're ready to go.
+
+----------------
+
+Notes:
+
+1. wget is a "utility to retrieve files from the World Wide Web", to
+quote the man page. In other words, it lets you browse the web
+without actually wasting time, which sort of defeats the purpose. If
+you run
+
+ wget http://e-math.ams.org/
+
+then wget retrieves the AMS home page and saves it in your directory.
+(I'm not quite sure why you would want to retrieve this page, but
+anyway...) A slightly more useful example:
+
+ wget http://www.gnus.org/gnus.tar.gz
+
+downloads the most recent beta version of the gnus package (which is a
+news and mail reader for Emacs).
+
+wget is GNU software, so it's freely distributable.
+
+
+2. bibweb is a perl script that scans the output from a bibtex run,
+figures out authors, titles, and so forth, then queries MathSciNet
+using wget (via some arcane URL).
+
+I wrote bibweb, and it is distributed under the GNU General Public
+License. Hence it's freely distributable. See the file 'COPYING' for
+details.
+
+----------------
+
+John H. Palmieri
+palmieri@math.washington.edu
diff --git a/biblio/bibtex/utils/bibweb/README b/biblio/bibtex/utils/bibweb/README
new file mode 100644
index 0000000000..f883736cb6
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/README
@@ -0,0 +1,41 @@
+
+ BIBWEB
+
+bibweb is a utility for automatically retrieving bibliographical
+information from the American Mathematical Society's MathSciNet
+program. John Palmieri ("engineer") wrote bibweb, and Bill Dwyer
+("idea man") helped to design it.
+
+If you're too lazy to go to the library or use a web browser to find
+out bibliographical information for that ground-breaking paper you're
+writing, you can let bibweb do the work for you. You have to use
+bibtex (which means you have to use latex, I think), and you have to
+write citations in a particular format, but that's about it.
+
+See the file 'INSTALL' for installation instructions.
+
+See the file 'HOW_TO' for directions on the use of bibweb.
+
+This program is free software, distributed under the GNU General
+Public License; see the file 'COPYING' for more information.
+
+Here are the files in the distribution:
+
+COPYING GNU General Public License
+ChangeLog list of changes made to bibweb (not user-friendly)
+HOW_TO how to use
+INSTALL installation instructions
+README this file
+bibweb the actual perl script
+bibweb.dvi documentation, in dvi format
+bibweb.html documentation, in html format
+bibweb.info documentation, in info format
+bibweb.texi documentation, in texinfo format
+bibweb_toc.html table of contents for bibweb.html
+test.tex test file: run 'latex test', then 'bibweb test' and see
+ what happens
+
+----------------
+
+John H. Palmieri
+palmieri@math.washington.edu
diff --git a/biblio/bibtex/utils/bibweb/bibweb b/biblio/bibtex/utils/bibweb/bibweb
new file mode 100644
index 0000000000..10c93b1c85
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/bibweb
@@ -0,0 +1,529 @@
+#!/usr/bin/perl
+
+####################################################################
+#
+# File: bibweb
+# Author: John H. Palmieri <palmieri@math.washington.edu>
+# URL: http://www.math.washington.edu/~palmieri/Bibweb/
+# Version: 0.49 of Wed Nov 19 12:58:29 PST 2003
+# Description: retrieve bibliographical information from MathSciNet
+# automatically
+# Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003 John H. Palmieri
+# License: distributed under GNU General Public License -- see below.
+#
+####################################################################
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# (see file COPYING) along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+####################################################################
+#
+# Command line options:
+# FILE use FILE.aux as input, FILE.bib as output
+# -i FILE specify FILE as input (aux) file.
+# -o FILE specify FILE as output (bib) file. If FILE ends in
+# ".bib", write to FILE; otherwise, write to FILE.bib
+# -c CITATION looks up CITATION, rather than using an auxfile for input
+# -b get output in bibtex format (default)
+# -r insert the review in the bibtex output
+# -d get output in dvi format (written to MR#.dvi, where
+# 'MR#' is the Math Reviews number of the reference)
+# -p get output in postscript format (written to MR#.ps)
+# -pdf get output in pdf format (written to MR#.pdf)
+# -t get output in text format (written to MR#.txt)
+# -m NUM return at most NUM entries (where NUM is rounded up
+# to 5, 10, 20, 50, 100, 1000)
+# -e WEB_SITE use WEB_SITE for MathSciNet search
+# -L use lynx instead of wget (note: lynx is slower)
+# -h print brief help message
+#
+# If you use only one of the -i and -o options, bibweb makes a guess
+# as to what the other file should be.
+#
+# At the moment, -d, -p, -pdf, -t only work if you have lynx available.
+####################################################################
+
+$bibtex = 'bibtex';
+$thisprog = 'bibweb';
+$version = '0.49';
+# good choices for e_math: 'www.ams.org', 'ams.rice.edu',
+# 'ams.mathematik.uni-bielefeld.de', 'ams.mpim-bonn.mpg.de',
+# 'ams.u-strasbg.fr', 'ams.impa.br'
+$e_math = $ENV{MATHSCINET_SITE};
+unless ($e_math) {$e_math = 'www.ams.org'}
+# % is not the official BibTeX comment character yet, so you might want
+# to change these to be absolutely compatible. Of course, I forget what
+# the official way is to do comments; maybe @comment?
+$bibtex_short_comment = '%%';
+$bsc = $bibtex_short_comment;
+$bibtex_long_comment = '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%';
+#
+$use_stdout = 0;
+$usage = <<EOT;
+This is $thisprog, version $version.
+To run bibtex on FILE, and then scan MathSciNet for missing
+ bibliographical information: $0 [options] FILE
+ options can be:
+ -i FILE use \'FILE\' as input (aux) file
+ -o FILE use \'FILE\' as output (bib) file
+ -c REF looks up single citation \'REF\', instead of using
+ an auxfile for input
+ -b get output in bibtex format (default)
+ -r insert the review in the bibtex output
+ -d get output in dvi format (written to MR\#.dvi, where
+ \'MR\#\' is the Math Reviews number of the reference)
+ -p get output in postscript format (written to MR\#.ps)
+ -pdf get output in pdf format (written to MR\#.pdf)
+ -t get output in text format (written to MR\#.txt)
+ -m NUM return at most NUM entries (rounded up)
+ -e WEB_SITE use WEB_SITE for MathSciNet search
+ -L use lynx instead of wget (note: lynx is slower)
+ -std write output to STDOUT (the screen, ordinarily)
+ -sep CHAR use CHAR to delimit fields in long citation format,
+ instead of semicolon (;)
+ -h print this help message
+EOT
+
+# read command line arguments
+use Getopt::Long;
+GetOptions("input|i=s" => \$auxfile,
+ "output|o=s" => \$bibfile,
+ "stdout|std|s" => \$use_stdout,
+ "cite|c=s" => \$only_cite,
+ "bibtex|bib|b" => \$use_bibtex,
+ "review|rev|r" => \$review,
+ "dvi|d" => \$use_dvi,
+ "postscript|ps|p" => \$use_postscript,
+ "pdf" => \$use_pdf,
+ "text|txt|t" => \$use_text,
+ "max|m=i" => \$user_max,
+ "emath|e=s" => \$e_math,
+ "lynx|Lynx|L" => \$use_lynx,
+ "separator|sep=s" => \$new_separator,
+ "help|h" => \$help) or
+ die "$usage\n";
+if ($help) { die "$usage\n" };
+
+OUTPUTTYPE: {
+ if ($use_bibtex) {
+ $output_type = 'bibtex';
+ $getitem_return = 'bibtex';
+ last OUTPUTTYPE;
+ };
+ if ($use_dvi) {
+ $output_type = 'dvi';
+ $use_lynx = 1;
+ $getitem_return = 'dvi';
+ last OUTPUTTYPE;
+ };
+ if ($use_postscript) {
+ $output_type = 'postscript';
+ $use_lynx = 1;
+ $getitem_return = 'ps';
+ last OUTPUTTYPE;
+ };
+ if ($use_pdf) {
+ $output_type = 'pdf';
+ $use_lynx = 1;
+ $getitem_return = 'pdf';
+ last OUTPUTTYPE;
+ };
+ if ($use_text) {
+ $output_type = 'text';
+ $use_lynx = 1;
+ $getitem_return = 'hl';
+ last OUTPUTTYPE;
+ };
+ $use_bibtex = 1;
+ $output_type = 'bibtex';
+ $getitem_return = 'bibtex';
+}
+
+chomp($which_wget = `which wget`);
+chomp($which_lynx = `which lynx`);
+chomp($which_webget = `which webget`);
+
+if (!$use_lynx and (-x $which_wget)) {
+ $wget = 'wget';
+ $wget_switches = ' --quiet -O - ';
+}
+elsif (!$use_lynx and (-x $which_webget)) {
+ $wget = 'webget';
+ $wget_switches = '';
+}
+elsif (-x $which_lynx) {
+ $wget = 'lynx';
+ $wget_switches = ' -source ';
+}
+else {
+ die "I can't find wget, lynx, or webget. Your path may not be set
+correctly, or you may need to install one of these programs. Lynx
+must be available in order to use the -dvi, -ps, -pdf, and -txt options.\n"
+}
+
+if ($e_math eq 'ams') {$e_math = 'www.ams.org'}
+if ($e_math eq 'rice') {$e_math = 'ams.rice.edu'}
+if ($e_math eq 'bielefeld') {$e_math = 'ams.mathematik.uni-bielefeld.de'}
+if ($e_math eq 'bonn') {$e_math = 'ams.mpim-bonn.mpg.de'}
+if ($e_math eq 'strasbg') {$e_math = 'ams.u-strasbg.fr'}
+if ($e_math eq 'impa') {$e_math = 'ams.impa.br'}
+
+if ($e_math =~ /
+ ^www.ams.org$|
+ ^ams.rice.edu$|
+ ^ams.mathematik.uni-bielefeld.de$|
+ ^ams.mpim-bonn.mpg.de$|
+ ^ams.u-strasbg.fr$|
+ ^ams.impa.br$
+ /x) {
+ print "Using \`$e_math\' for the MathSciNet search.\n"
+ }
+ else {
+ print "Warning: Your choice of \`$e_math\' for the MathSciNet site
+is not one of the recommended choices. Proceeding anyway...\n\n";
+}
+
+if ($e_math eq 'www.ams.org') {$redirect = 'Providence%2C+RI+USA'}
+if ($e_math eq 'ams.rice.edu') {$redirect = 'Houston%2C+TX+USA'}
+if ($e_math eq 'ams.mathematik.uni-bielefeld.de') {
+ $redirect = 'Bielefeld%2C+Germany'}
+if ($e_math eq 'ams.mpim-bonn.mpg.de') {$redirect = 'Bonn%2C+Germany'}
+if ($e_math eq 'ams.u-strasbg.fr') {$redirect = 'Strasbourg%2C+France'}
+if ($e_math eq 'ams.impa.br') {$redirect = 'Rio+de+Janeiro%2C+Brazil'}
+
+if ($user_max) {
+ MAX: {
+ if ($user_max <= 5) { $max_matches = 5; last MAX; };
+ if ($user_max <= 10) { $max_matches = 10; last MAX; };
+ if ($user_max <= 20) { $max_matches = 20; last MAX; };
+ if ($user_max <= 50) { $max_matches = 50; last MAX; };
+ if ($user_max <= 100) { $max_matches = 100; last MAX; };
+ if ($user_max <= 1000) { $max_matches = 1000; last MAX; };
+ $max_matches = 5;
+ };
+ if ($user_max != $max_matches) {
+ print "Rounding -m argument up to $max_matches.\n\n";
+ };
+}
+else {
+ $max_matches = 5;
+}
+
+unless ($auxfile and $bibfile) {
+ $file = shift(@ARGV);
+ $auxfile = ($auxfile or $file);
+ $bibfile = ($bibfile or "$file.bib");
+}
+
+if ($bibfile and $bibfile !~ m/\.bib$/) {
+ $bibfile = "$bibfile.bib";
+}
+
+if ($only_cite) {
+ $only_cite =~ s(\'\")();
+ @bibtex_output = (1);
+ $use_stdout = 1 if ($bibfile eq "" or $bibfile eq ".bib");
+}
+else {
+ $auxfile =~ s/\.aux$//;
+ if ($auxfile and not $bibfile) { $bibfile = "$auxfile.bib" }
+ unless (-e "$auxfile.aux") {die "Couldn't read $auxfile.aux\n"};
+ unless ($use_stdout) {
+ open(BIBFILE, ">>$bibfile") or die "Couldn't open $bibfile\n";
+ print "Appending output to $bibfile . . . \n\n";
+ }
+ @bibtex_output = `$bibtex $auxfile`;
+}
+
+$semicolon = ";";
+if ($new_separator) { $semicolon = quotemeta ($new_separator) }
+
+
+foreach $warning (@bibtex_output) {
+ # get citation
+ if ($only_cite) {
+ $citation_orig = $citation = $only_cite;
+ $citation =~ tr/,/./;
+ }
+ elsif ($warning =~ (/^Warning--I didn\'t find a database entry for \"([^\"]*)\"$/)) {
+ $citation_orig = $citation = $1;
+ next if &check_bibfile($citation_orig);
+ }
+ else { next; }
+
+
+ # split citation into author, etc.
+ $citation =~ s/-and-/-/g;
+ $citation =~ tr/./,/;
+ $author = '';
+ $title = '';
+ $journal = '';
+ $year = '';
+ $dr = 'all';
+ $misc = '';
+
+ if ($citation =~ m/$semicolon/) {
+ ($authors, $titles, $journals, $year) = split(/$semicolon/, $citation);
+ $author = join('+and+', split(/-/, $authors));
+ $title = join('+and+', split(/-/, $titles));
+ $journal = join('+and+', split(/-/, $journals));
+ }
+ else {
+ ($author, $subcitation) = split(/-/, $citation, 2);
+ if ($subcitation =~ /([<>=]?\d+)\Z/) {
+ $subcitation = $`;
+ $year = $1; }
+ $misc = join('+and+', split(/-/, $subcitation));
+ }
+
+ # parse year entry
+ YEAR: {
+ if ($year eq '') {
+ $dr = 'all';
+ last YEAR;
+ };
+ if ('<' eq substr($year, 0, 1)) {
+ $ord = 'lt';
+ $yr = substr($year, 1);
+ $dr = 'pubyear';
+ last YEAR;
+ };
+ if ('=' eq substr($year, 0, 1)) {
+ $ord = 'eq';
+ $yr = substr($year, 1);
+ $dr = 'pubyear';
+ last YEAR;
+ };
+ if ('>' eq substr($year, 0, 1)) {
+ $ord = 'gt';
+ $yr = substr($year, 1);
+ $dr = 'pubyear';
+ last YEAR;
+ };
+ $ord = 'eq';
+ $yr = $year;
+ $dr = 'pubyear';
+ }
+
+ # construct URL
+ $wget_url =
+ "\'http://$e_math/msnmain?fn=130&form=fullsearch&preferred_language-en&Submit=Start+Search&" .
+ "pg4=AUCN&s4=$author&co4=AND" .
+ "&pg5=TI&s5=$title&co5=AND" .
+ "&pg6=JOUR&s6=$journal&co6=AND" .
+ "&pg7=ALLF&s7=$misc" .
+ "&dr=$dr" .
+ "&yrop=$ord&arg3=$yr" .
+ "&yearRangeFirst=&yearRangeSecond=" .
+ "&pg3=ET&s3=All&l=20&reference_lists=show&redirect=$redirect\'";
+ unless ($use_stdout) {
+ &bib_print("", "$bibtex_long_comment \n");
+ }
+ &bib_print("working on citation \'$citation_orig\' \n",
+ "$bsc citation \'$citation_orig\' \n" );
+ $match_info_printed = '';
+ $done_getting_bibtex = '';
+
+ # print $wget_url;
+
+ # call wget and process its output
+ foreach $line (`$wget $wget_url $wget_switches`) {
+ # print $line;
+
+ # get number of matches
+ if (($line =~ (/Number of Matches:.*<\/b> ([0-9]*)/))
+ or ($line =~ (/Item:.*<strong>([0-9]*)<\/strong>\s*$/))) {
+ # print $line;
+
+ $matches = $1;
+ # print $matches;
+
+ if ($matches > $max_matches) {
+ &bib_print("More than $max_matches matches found " .
+ "($matches); " .
+ "please refine your search criteria,\n" .
+ "or use the -m option. \n\n",
+ "$bsc More than $max_matches matches found " .
+ "($matches). \n$bsc\n");
+ last;
+ }
+ elsif ( not $match_info_printed ) {
+ $plural = "es";
+ $match_info_printed = 1;
+ if ($matches == 1) {$plural = ""}
+ &bib_print("$matches match$plural found. \n\n", "" );
+ }
+ }
+
+ # given match, get MR number, convert to forms for use in URL
+ #elsif ($line =~ (/TYPE=\"checkbox\" VALUE=\"([0-9][0-9_a-z]*)\"/)) {
+ elsif ((($matches == 1) and
+ ($line =~ (/<strong>MR([^<]*)<\/strong>\s*<strong>\(([^)]*)\)<\/strong>/)) and
+ (not $done_getting_bibtex))
+ or
+ (($matches > 1) and
+ ($line =~ (/<strong>MR([^<]*)<\/strong>\s*<strong>\(([^)]*)\)<\/strong>/)))) {
+
+ #print $line;
+
+ if ($matches == 1) { $done_getting_bibtex = 1 };
+
+ # there are now new MR numbers: a unique 7 digit number
+ # assigned to each item in the database. Assign this to $mr,
+ # and use it to search. Assign old MR number to $old_mr, and
+ # use it for printing.
+ $mr = $1;
+ $old_mr = $2;
+ &bib_print("", "$bsc Math Reviews number: $old_mr \n");
+ $old_mr =~ tr/ //d;
+ $old_mr =~ tr/_/:/;
+ $old_mr =~ tr/\#/:/;
+ $old_mr =~ tr/,/:/;
+
+ # print $old_mr;
+
+ $new_wget_url = "\'http://$e_math/mathscinet-getitem?mr=$mr&return=$getitem_return\'";
+
+ # bibtex output
+
+ if ($output_type eq 'bibtex') {
+
+ # call wget again, process its output
+ $at_sign_found = 0;
+
+ foreach $line2 (`$wget $new_wget_url $wget_switches`) {
+
+ # look for @ at start of bibtex
+ if (not $at_sign_found) {
+ $at_sign_found = ($line2 =~ /@/);
+ }
+
+ if ($at_sign_found) {
+ # remove html tags from text and print it (if not blank)
+ $line2 = &remove_html($line2);
+ unless (($line2 =~ (/^\s*$/)) or ($line2 =~ "MathSciNet")) {
+ $mr =~ s/CMP//;
+
+ if ($matches == 1 and $line2 =~ (/$old_mr/)) {
+ $line2 =~ s/MR$old_mr/$citation_orig/;
+ }
+ if ($line2 =~ "(c).*[0-9]*.*American Mathematical Society") {
+ # &bib_print("", "$bsc $line2\n$bsc\n");
+ &bib_print ("", "\n");
+ }
+ else {
+ &bib_print("", "$line2" );
+ if ($review && $line2 =~ "MRREV") {
+ &print_review($mr);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ # dvi, ps, pdf, txt output
+ else {
+ $wget_switches = " -dump > MR$mr.$getitem_return";
+ system ("$wget $new_wget_url $wget_switches");
+ print "Output written to MR$mr.$getitem_return\n";
+ }
+ }
+
+ # warning messages...
+ elsif ($line =~ (/Sorry, no matches found/)) {
+ &bib_print("No matches found; please revise your search criteria. \n\n",
+ "$bsc No matches found. \n$bsc\n");
+ last;
+ }
+ elsif ($line =~ (/Sorry, /)) {
+ &bib_print("There was an unknown error. " .
+ "Please check for typos, or just try again.\n\n",
+ "$bsc Syntax or server error. \n$bsc\n");
+ }
+ }
+}
+
+close(BIBFILE);
+
+# run bibtex again, to make use of new keys
+exec "$bibtex $auxfile" unless ($only_cite);
+
+########## simple subroutines
+
+# scan BIBFILE for citation, to see if you've looked for it before
+sub check_bibfile {
+ local($answer) = 0;
+ local($cite) = $_[0];
+ if ($] >= 5) { $cite = "\Q$_[0]\E"; }
+ if (-e $bibfile) {
+ open(BIBFILE, "$bibfile");
+ while (<BIBFILE>) {
+ if (/$bsc\s*citation\s*\'$cite\'/) {
+ $answer = 1;
+ last;
+ }
+ }
+ close(BIBFILE);
+ if ($answer) { print "You've searched for $_[0] before.\n\n" };
+ $answer;
+ }
+ else {
+ 0;
+ }
+}
+
+# remove html tags (strings like <blah> and </blah>)
+sub remove_html {
+ local($text) = $_[0];
+ $text =~ s/<\/[^\>]*\>/ /g;
+ $text =~ s/<[^\>]*\>//g;
+ $text;
+}
+
+# print to screen and to BIBFILE, unless writing to STDOUT
+sub bib_print {
+ local($line1, $line2) = ($_[0], $_[1]);
+ if ($use_stdout) {
+ if ($use_bibtex) {print $line2}
+ else {print $line1}
+ }
+ else {
+ open(BIBFILE, ">>$bibfile") or die "Couldn't open $bibfile\n";
+ print $line1;
+ print BIBFILE "$line2";
+ }
+}
+
+# print the review of the current $mr item.
+sub print_review {
+ local($mr) = $_[0];
+
+ local($command) = "$wget \'http://$e_math/mathscinet-getitem?mr=$mr\' $wget_switches";
+ local($count) = 0;
+ local($line);
+ &bib_print ("", " REVIEW = {");
+
+ foreach $line (`$command`) {
+ # print $line;
+ if ($line =~ "<STRONG>Reviewed</STRONG>")
+ { $count++;
+ chomp($line);
+ &bib_print ("", &remove_html($line) . " },\n"); }
+ if ($count == 2) { &bib_print ("", &remove_html($line)) }
+ if ($line =~ "citation to clipboard") { $count++ }
+ if ($line =~ "<BR CLEAR=RIGHT>") { $count++ }
+ }
+ }
diff --git a/biblio/bibtex/utils/bibweb/bibweb.html b/biblio/bibtex/utils/bibweb/bibweb.html
new file mode 100644
index 0000000000..b769cd33a4
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/bibweb.html
@@ -0,0 +1,824 @@
+<HTML>
+<HEAD>
+<!-- Created by texi2html 1.56k from bibweb.texi on 9 November 2000 -->
+
+<TITLE>Bibweb Manual</TITLE>
+</HEAD>
+<BODY>
+<H1>Bibweb Manual</H1>
+<ADDRESS>(info by John H. Palmieri)</ADDRESS>
+<P>
+<P><HR><P>
+<P>
+@tolerance 10000
+
+
+<P>
+@title{Bibweb Manual}
+
+
+<P>
+Copyright (C) 1997, 1998, 2000 John H. Palmieri
+
+
+<P>
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+
+<P>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled "Copying" is included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+
+<P>
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation
+approved by the Free Software Foundation.
+
+
+<P>
+Bibweb is a perl script written by John Palmieri (in consultation with
+Bill Dwyer).
+
+
+<P>
+This is version 0.46, November 2000, of the Bibweb manual. Bug reports
+and suggestions for new features should go to
+<SAMP>`palmieri@math.washington.edu'</SAMP>.
+
+
+<P>
+This is the first version of this manual; it is done (except for the
+indices).
+
+
+
+
+<H1><A NAME="SEC1" HREF="bibweb_toc.html#TOC1">Introduction</A></H1>
+
+<P>
+Bibweb is a utility for automatically retrieving bibliographical
+information from the American Mathematical Society's MathSciNet search
+engine (available at <A HREF="http://www.ams.org/mathscinet">http://www.ams.org/mathscinet</A>). (In
+particular, in order to use bibweb, you must have access to MathSciNet,
+which means that you or your institution has at some point shelled out
+some quantity of money to the AMS. Anyway...)
+
+
+<P>
+If you're too lazy to go to the library or use a web browser to find out
+bibliographical information for that ground-breaking paper you're
+writing, then bibweb is the program for you. It is intended for use
+with BibTeX (which means with LaTeX), and you have to write
+citations in a particular format, but that's about all there is to it.
+
+
+<P>
+Briefly: once you've installed bibweb, if you are editing a file called
+<TT>`bozo.tex'</TT>, then you need to insert the following line:
+
+
+
+<PRE>
+ \bibliography{bozo}
+</PRE>
+
+<P>
+If you are also using the BibTeX file <TT>`junk.bib'</TT>, then you
+should use the following line:
+
+
+
+<PRE>
+ \bibliography{junk,bozo}
+</PRE>
+
+<P>
+When you want to cite a paper whose bibliographical information you are
+lacking, say "Periodic phenomena in the Adams-Novikov spectral
+sequence" by H. R. Miller, D. C. Ravenel, and W. S. Wilson, then you
+give LaTeX the command
+
+
+
+<PRE>
+ \cite{miller-ravenel-wilson-periodic}
+</PRE>
+
+<P>
+or
+
+
+
+<PRE>
+ \cite{miller-ravenel-wilson-novikov}
+</PRE>
+
+<P>
+or
+
+
+
+<PRE>
+ \cite{miller-ravenel-wilson}
+</PRE>
+
+<P>
+or
+
+
+
+<PRE>
+ \cite{miller-ravenel;adams-spectral}
+</PRE>
+
+<P>
+When you run this through LaTeX, it won't find the citation (by
+assumption); BibTeX won't find a citation either. When you run
+bibweb, though, by typing
+
+
+
+<PRE>
+ bibweb bozo
+</PRE>
+
+<P>
+at the shell prompt, then it takes your citation and queries
+MathSciNet. If it finds a match, it writes the bibliographic
+information, in BibTeX format, to the file <TT>`bozo.bib'</TT>.
+
+
+<P>
+Bibweb also lets you search for just a single citation, it lets you
+specify the names of the input (TeX) and output (BibTeX) files
+separately, and has other options. See section <A HREF="bibweb.html#SEC8">Options</A> for details.
+
+
+
+
+<H1><A NAME="SEC2" HREF="bibweb_toc.html#TOC2">How to</A></H1>
+
+<P>
+In this section, we give detailed instructions for how to use bibweb.
+
+
+
+
+<H2><A NAME="SEC3" HREF="bibweb_toc.html#TOC3">LaTeX file</A></H2>
+
+<P>
+In this section, we describe how to write your LaTeX file so that it
+will produce output suitable for bibweb.
+
+
+
+
+<H3><A NAME="SEC4" HREF="bibweb_toc.html#TOC4">Bibliography command</A></H3>
+
+<P>
+You need to decide where you want to put the bibliographic information
+that bibweb will give you; this should be a file ending in <SAMP>`.bib'</SAMP>.
+Suppose you decide to use a file called <TT>`jimbob.bib'</TT> (which may or
+may not exist at this point). Then you need the following line in your
+LaTeX file:
+
+
+
+<PRE>
+ \bibliography{jimbob}
+</PRE>
+
+<P>
+As indicated above, if you already have some other bibtex files lying
+around, and you also want to use these (say they're called
+<TT>`manny.bib'</TT>, <TT>`moe.bib'</TT>, and <TT>`jack.bib'</TT>),
+then you should instead use the following line:
+
+
+
+<PRE>
+ \bibliography{manny,moe,jack,jimbob}
+</PRE>
+
+
+
+<H3><A NAME="SEC5" HREF="bibweb_toc.html#TOC5">Citations</A></H3>
+
+<P>
+There are two different formats for citations that bibweb knows how to
+handle, and it handles them in different ways.
+
+
+
+<UL>
+<LI>
+
+Simpler format:
+
+
+<PRE>
+ \cite{aaa-bbb-ccc-ddd-year}
+</PRE>
+
+<SAMP>`aaa'</SAMP> gets sent as the author, <SAMP>`bbb'</SAMP>, <SAMP>`ccc'</SAMP>, and
+<SAMP>`ddd'</SAMP> get sent as miscellany (they can match anything, including
+the author, title, journal, reviewer, or the text of the review).
+<SAMP>`year'</SAMP> should be of the form <SAMP>`&#60;1995'</SAMP> or <SAMP>`&#62;1995'</SAMP> or
+<SAMP>`=1995'</SAMP> or <SAMP>`1995'</SAMP>, in which case bibweb only searches for
+papers from the appropriate years. <SAMP>`1995'</SAMP> is treated the same as
+<SAMP>`=1995'</SAMP>. It seems that specifying a year or range of years slows
+things down tremendously, so you might want to avoid this. Also, I
+think if <SAMP>`year'</SAMP> is in some other format, it will just get ignored.
+
+For example, <SAMP>`\cite{devinatz-hopkins-nilpotence}'</SAMP> matches two
+papers: one is "Nilpotence and stable homotopy theory, I" by Devinatz,
+Hopkins, and Smith; the other is "Morava's change of rings theorem" by
+Devinatz, for which "Hopkins" and "nilpotence" are mentioned in the
+review.
+
+If you want to avoid the second sort of match, you can use the more
+involved format.
+
+<LI>
+
+More involved format:
+
+
+<PRE>
+ \cite{a1-a2-...-ak;t1-t2-...-tm;j1-j2-...jn;year}
+</PRE>
+
+<SAMP>`year'</SAMP> should be just like field <SAMP>`year'</SAMP> in the simpler format,
+but it slows things down, so I would avoid it. <SAMP>`a1'</SAMP>, ...,
+<SAMP>`ak'</SAMP> are treated as authors, <SAMP>`t1'</SAMP>, ..., <SAMP>`tm'</SAMP> are treated
+as words in the title, <SAMP>`j1'</SAMP>, ..., <SAMP>`jn'</SAMP> are treated as words in
+the journal name. You don't have to include all of the fields.
+
+For example, <SAMP>`\cite{devinatz-hopkins;nilpotence}'</SAMP> matches only
+the paper "Nilpotence and stable homotopy theory, I" by Devinatz,
+Hopkins, and Smith. <SAMP>`\cite{miller-wilkerson;vanishing-steenrod}'</SAMP>
+matches only "Vanishing lines for modules over the Steenrod algebra"
+by Miller and Wilkerson, as does
+<SAMP>`\cite{miller-wilkerson;vanishing-steenrod;;&#60;1985}'</SAMP>, as does
+<SAMP>`\cite{miller-wilkerson;vanishing-steenrod;pure;&#60;1985}'</SAMP> (the
+paper appeared in the <CITE>Journal of Pure and Applied Algebra</CITE>).
+
+<LI>
+
+Using wildcards:
+
+You can use <SAMP>`*'</SAMP> as a wildcard; for instance,
+<SAMP>`\cite{adams;hopf-invar*-one}'</SAMP> would return the two papers by
+Adams called "On the non-existence of elements of Hopf invariant one".
+
+When using MathSciNet by hand, if you want to search for papers by Mike
+Hopkins, you could set the author field equal to <SAMP>`hopkins, m*'</SAMP>. On
+the other hand, BibTeX treats commas as separators: if you give
+BibTeX the command <SAMP>`\cite{hopkins,m*;global}'</SAMP>, bibtex will
+treat <SAMP>`hopkins'</SAMP> as one source and <SAMP>`m*;global'</SAMP> as another. So
+to get bibweb to do the right thing, you should use a period instead of
+a comma: use the command
+
+
+<PRE>
+ \cite{hopkins.m*;global}
+</PRE>
+
+Bibweb will translate the <SAMP>`.'</SAMP> to a <SAMP>`,'</SAMP> before sending the
+query to MathSciNet, so this citation would produce
+
+
+<PRE>
+%% Math Reviews number: 89g:55022
+@incollection {hopkins.m*;global,
+ AUTHOR = {Hopkins, Michael J.},
+ TITLE = {Global methods in homotopy theory},
+ BOOKTITLE = {Homotopy theory (Durham, 1985)},
+ PAGES = {73--96},
+ PUBLISHER = {Cambridge Univ. Press},
+ ADDRESS = {Cambridge},
+ YEAR = {1987},
+ MRCLASS = {55Q45 (55P42 55P60 55Q10)},
+ MRNUMBER = {89g:55022},
+MRREVIEWER = {Douglas C. Ravenel},
+}
+</PRE>
+
+</UL>
+
+
+
+<H2><A NAME="SEC6" HREF="bibweb_toc.html#TOC6">Invoking bibweb</A></H2>
+
+
+
+<H3><A NAME="SEC7" HREF="bibweb_toc.html#TOC7">Basic operation</A></H3>
+
+<P>
+In this section, we give the basic instructions for running bibweb, as
+well as a brief description of what bibweb does.
+
+
+
+<PRE>
+ bibweb <VAR>file</VAR>
+</PRE>
+
+<P>
+will run bibweb on <VAR>file</VAR>. For example, to run bibweb on the file
+<TT>`elvis'</TT>, you type
+
+
+
+<PRE>
+ bibweb elvis
+</PRE>
+
+<P>
+Then bibweb will run BibTeX on <TT>`elvis'</TT> and read through the list
+of missing citations. For each such citation, it searches MathSciNet,
+and writes its results to the file <TT>`elvis.bib'</TT>. Once it has done
+this, it runs BibTeX again, to make use of any new citations.
+
+
+<P>
+If bibweb can't find the file <TT>`elvis.aux'</TT> (which it wants to pass
+to BibTeX), it prints an error message and stops. If it can't write
+to <TT>`elvis.bib'</TT>, it should also print an error message and stop.
+
+
+<P>
+By "searches MathSciNet", I mean that it fires up a web browser that
+goes to the MathSciNet site, gives it the appropriate query, gets the
+response, and then quits. The best web browser for this sort of thing
+is called <SAMP>`wget'</SAMP>; this is a GNU program (hence freely
+distributable). You can get it at your favorite GNU mirror. The second
+best web browser is <SAMP>`lynx'</SAMP>; if bibweb can't find wget, it uses
+lynx. Another option is <SAMP>`webget'</SAMP>, which is a perl script that has
+some of the capabilities of wget. See section <A HREF="bibweb.html#SEC9">Installation</A> for information
+about obtaining these programs. (By the way, bibweb doesn't know how to
+use any other web browsers. If you prefer another browser and modify
+bibweb to work with it, tell me about your changes so I can incorporate
+them into future versions.)
+
+
+<P>
+By "its results", I mean the following:
+
+
+
+<UL>
+<LI>
+
+If bibweb finds exactly one entry matching your citation, it puts it in
+<TT>`elvis.bib'</TT> with the key you chose. For instance, if you have
+
+
+<PRE>
+ \cite{kan-miller-splitting-spaces}
+</PRE>
+
+then bibweb puts something like the following in <TT>`elvis.bib'</TT>:
+
+
+<PRE>
+%% citation 'kan-miller-splitting-spaces'
+%% Math Reviews number: 57 #7582
+@article {kan-miller-splitting-spaces,
+ AUTHOR = {Kan, Daniel M. and Miller, Edward Y.},
+ TITLE = {Splitting spaces with finite group actions},
+ JOURNAL = {Topology},
+ VOLUME = {16},
+ YEAR = {1977},
+ NUMBER = {4},
+ PAGES = {403--407},
+ MRCLASS = {55C35},
+ MRNUMBER = {57 \#7582},
+MRREVIEWER = {J. P. May},
+}
+</PRE>
+
+<LI>
+
+If it finds several matches (at most 5), it writes them all to
+<TT>`elvis.bib'</TT>, but leaves the original citation undefined. (The new
+ones have citations given by their Math Reviews numbers.) So at this
+point, you have to edit <TT>`elvis.bib'</TT> to change the keys of the
+papers you're interested in, or you have to change your \cite command to
+match what was written into <TT>`elvis.bib'</TT>.
+
+For example, if you have
+
+
+<PRE>
+ \cite{serre;faisceaux}
+</PRE>
+
+then there are two matches (or maybe there are three, now), which get
+entered into <TT>`elvis.bib'</TT> as
+
+
+<PRE>
+%% citation 'serre;faisceaux'
+%% Math Reviews number: 35 #3088
+@article {MR35:3088,
+ AUTHOR = {Serre, Jean-Pierre},
+ TITLE = {Prolongement de faisceaux analytiques coh\'erents},
+ JOURNAL = {Ann. Inst. Fourier (Grenoble)},
+ VOLUME = {16},
+ YEAR = {1966},
+ NUMBER = {fasc. 1},
+ PAGES = {363--374},
+ MRCLASS = {32.50 (32.27)},
+ MRNUMBER = {35 \#3088},
+MRREVIEWER = {B. Shiffman},
+}
+%% Math Reviews number: 16,953c
+@article {MR16:953c,
+ AUTHOR = {Serre, Jean-Pierre},
+ TITLE = {Faisceaux alg\'ebriques coh\'erents},
+ JOURNAL = {Ann. of Math. (2)},
+ VOLUME = {61},
+ YEAR = {1955},
+ PAGES = {197--278},
+ MRCLASS = {14.0X},
+ MRNUMBER = {16,953c},
+MRREVIEWER = {C. Chevalley},
+}
+</PRE>
+
+<LI>
+
+If it finds more than 5 matches, it tells you that, and doesn't add any
+new entries to <TT>`elvis.bib'</TT>. For example, if you have
+
+
+<PRE>
+ \cite{serre}
+</PRE>
+
+then bibweb adds the following to <TT>`elvis.bib'</TT>:
+
+
+<PRE>
+%% citation 'serre'
+%% More than 5 matches found.
+</PRE>
+
+You can change the number <SAMP>`5'</SAMP> to something else by using the
+<SAMP>`-m'</SAMP> option. See section <A HREF="bibweb.html#SEC8">Options</A>.
+
+<LI>
+
+If it doesn't find any matches, it tells you that, and doesn't add any
+new entries to <TT>`elvis.bib'</TT>. For example, if you have
+
+
+<PRE>
+ \cite{serre-kan}
+</PRE>
+
+then bibweb adds the following to <TT>`elvis.bib'</TT>:
+
+
+<PRE>
+%% citation 'serre-kan'
+%% No matches found.
+</PRE>
+
+<LI>
+
+Occasionally, bibweb will say it only finds one match, but it will add
+several things to <TT>`elvis.bib'</TT>. This happens when there are several
+papers whose reviews are all together on MathSciNet (see
+<SAMP>`\cite{dwyer-kan;obstruction-theory-diagrams}'</SAMP>, for example). In
+these cases, bibweb ought to do a good job of assigning your chosen
+bibliographical key to the correct entry, but you might want to
+double-check.
+
+</UL>
+
+<P>
+Finally, note that if you give the citation
+
+
+
+<PRE>
+ \cite{serre}
+</PRE>
+
+<P>
+and run bibweb, then run bibweb again, it will not query MathSciNet
+again; instead it will tell you something like "You've searched for
+`serre' before".
+
+
+
+
+<H3><A NAME="SEC8" HREF="bibweb_toc.html#TOC8">Options</A></H3>
+
+<P>
+bibweb can be run with several different options.
+
+
+<DL COMPACT>
+
+<DT><SAMP>`-i <VAR>file</VAR>'</SAMP>
+<DD>
+<DT><SAMP>`--input=<VAR>file</VAR>'</SAMP>
+<DD>
+Run BibTeX on <VAR>file</VAR>.
+
+<DT><SAMP>`-o <VAR>file</VAR>'</SAMP>
+<DD>
+<DT><SAMP>`--output=<VAR>file</VAR>'</SAMP>
+<DD>
+Write output to <VAR>file</VAR> (after appending <SAMP>`.bib'</SAMP> to <VAR>file</VAR>,
+if necessary).
+
+<DT><SAMP>`--std'</SAMP>
+<DD>
+Write output to STDOUT (the screen, ordinarily).
+
+<DT><SAMP>`-c <VAR>citation</VAR>'</SAMP>
+<DD>
+<DT><SAMP>`--cite=<VAR>citation</VAR>'</SAMP>
+<DD>
+Look up only <VAR>citation</VAR>. In this case, the output is written to the
+screen, unless you also use the <SAMP>`-o'</SAMP> option.
+
+<DT><SAMP>`-m <VAR>num</VAR>'</SAMP>
+<DD>
+<DT><SAMP>`--max=<VAR>num</VAR>'</SAMP>
+<DD>
+Return at most <VAR>num</VAR> matches to each citation. Actually, <VAR>num</VAR>
+is rounded up according to the options available at MathSciNet:
+<VAR>num</VAR> will be rounded up to one of: 5, 10, 20, 50, 100, 1000.
+
+<DT><SAMP>`-e <VAR>site</VAR>'</SAMP>
+<DD>
+<DT><SAMP>`--emath=<VAR>site</VAR>'</SAMP>
+<DD>
+Search MathSciNet at the web site <VAR>site</VAR>. The default value is read
+from the environment variable <VAR>MATHSCINET_SITE</VAR>; if this variable
+hasn't been set, the default is <SAMP>`www.ams.org'</SAMP>. Some other good
+choices are <SAMP>`ams.rice.edu'</SAMP>, <SAMP>`ams.mathematik.uni-bielefeld.de'</SAMP>,
+<SAMP>`klymene.mpim-bonn.mpg.de'</SAMP>, <SAMP>`irmasrv1.u-strasbg.fr'</SAMP>, and
+<SAMP>`ams.impa.br'</SAMP>---see
+the MathSciNet homepage for more information. If you choose a value for
+<VAR>site</VAR> that's not from this list, bibweb prints a warning, but goes
+ahead and tries to use it anyway. You can use a bit of shorthand for
+<VAR>site</VAR>: <SAMP>`ams'</SAMP> stands for <SAMP>`www.ams.org'</SAMP>; <SAMP>`rice'</SAMP>
+stands for <SAMP>`ams.rice.edu'</SAMP>; <SAMP>`bielefeld'</SAMP> stands for
+<SAMP>`ams.mathematik.uni-bielefeld.de'</SAMP>; <SAMP>`bonn'</SAMP> stands for
+<SAMP>`klymene.mpim-bonn.mpg.de'</SAMP>; <SAMP>`strasbg'</SAMP> stands for
+<SAMP>`irmasrv1.u-strasbg.fr'</SAMP>; and <SAMP>`impa'</SAMP> stands for
+<SAMP>`ams.impa.br'</SAMP>.
+
+<DT><SAMP>`-L'</SAMP>
+<DD>
+<DT><SAMP>`--lynx'</SAMP>
+<DD>
+Force bibweb to use lynx as its web browser, even if wget is available.
+(As far as I can tell, lynx is slower than wget, but I suppose someone
+might have some arcane reason for avoiding wget.)
+
+<DT><SAMP>`-h'</SAMP>
+<DD>
+<DT><SAMP>`--help'</SAMP>
+<DD>
+Print a short help message, and then quit.
+
+<DT><SAMP>`-b'</SAMP>
+<DD>
+<DT><SAMP>`--bibtex'</SAMP>
+<DD>
+Produce output in bibtex format (the default).
+
+<DT><SAMP>`-r'</SAMP>
+<DD>
+<DT><SAMP>`--review'</SAMP>
+<DD>
+Include the review in the bibtex output, in the form <SAMP>`REVIEW = { ... }'</SAMP>
+
+<DT><SAMP>`-d'</SAMP>
+<DD>
+<DT><SAMP>`--dvi'</SAMP>
+<DD>
+Produce output in dvi format. This option uses lynx rather than wget,
+so lynx must be available.
+
+<DT><SAMP>`-p'</SAMP>
+<DD>
+<DT><SAMP>`--postscript'</SAMP>
+<DD>
+Produce output in postscript format. This option uses lynx rather than wget,
+so lynx must be available.
+
+<DT><SAMP>`-pdf'</SAMP>
+<DD>
+Produce output in pdf format. This option uses lynx rather than wget,
+so lynx must be available.
+
+<DT><SAMP>`-t'</SAMP>
+<DD>
+<DT><SAMP>`--text'</SAMP>
+<DD>
+Produce output in text format. This option uses lynx rather than wget,
+so lynx must be available.
+
+</DL>
+
+<P>
+For example, any of the following commands
+
+
+
+<PRE>
+ bibweb -i test -o a -m 10
+ bibweb test -o a -m 10
+ bibweb -o a -m 10 test
+ bibweb --output=a --max=10 test
+</PRE>
+
+<P>
+has bibweb read the file <TT>`text.aux'</TT> and write output to
+<TT>`a.bib'</TT>, returning at most 10 matches for each citation.
+
+
+<P>
+The command
+
+
+
+<PRE>
+ bibweb --std -m 10 test
+</PRE>
+
+<P>
+reads <TT>`test.aux'</TT> and writes the output to the screen (or whatever
+you have STDOUT set to). The command
+
+
+
+<PRE>
+ bibweb --emath=ams.rice.edu bozo
+</PRE>
+
+<P>
+reads <TT>`bozo.aux'</TT>, writes to <TT>`bozo.bib'</TT>, and uses
+<A HREF="ams.rice.edu">ams.rice.edu</A> for the MathSciNet search, as do the commands
+
+
+
+<PRE>
+ bibweb --emath=rice bozo
+ bibweb -e rice bozo
+ bibweb bozo -e rice
+</PRE>
+
+<P>
+The command
+
+
+
+<PRE>
+ bibweb --emath=quack bozo
+</PRE>
+
+<P>
+uses <SAMP>`quack'</SAMP> for the MathSciNet search. In this case, bibweb will
+give a warning (since <SAMP>`quack'</SAMP> is not one of the recognized MathSciNet
+sites), and will produce no usable results (it will be fast, though).
+
+
+<P>
+If you run the command
+
+
+
+<PRE>
+ bibweb -m 23 -c 'serre'
+</PRE>
+
+<P>
+then bibweb will tell you that it is rounding 23 up to 50, and then it
+will look for all articles with <SAMP>`serre'</SAMP> as the author. In this
+case, it will tell you that there were more than 50 matches found. I
+suppose if you typed
+
+
+
+<PRE>
+ bibweb -m 1000 -c 'serre'
+</PRE>
+
+<P>
+then you would get all of Serre's papers listed on your screen. This
+might take a while. You could instead run
+
+
+
+<PRE>
+ bibweb -m 1000 -c 'serre' -o serre.bib
+</PRE>
+
+<P>
+and then the output would be stored in the file <TT>`serre.bib'</TT>.
+
+
+
+
+<H1><A NAME="SEC9" HREF="bibweb_toc.html#TOC9">Installation</A></H1>
+
+<P>
+This is complicated: put the file <TT>`bibweb'</TT> in your path and make
+sure it's executable.
+
+
+<P>
+That's it.
+
+
+<P>
+Actually, bibweb seems to require at least version 5.003 of perl, so if
+you have an older version, you may have to upgrade.
+
+
+<P>
+And of course, to use bibweb at all, you need to have a subscription to
+MathSciNet.
+
+
+<P>
+Bibweb also requires the presence of one of the following programs:
+<SAMP>`wget'</SAMP>, <SAMP>`lynx'</SAMP>, or <SAMP>`webget'</SAMP>. Lynx is commonly available,
+so it may very well already be on your system. If you don't mind
+installing it, I would recommend using wget instead, because it's faster
+than lynx. wget is available from the GNU ftp site, or (even better)
+many GNU mirrors. Look for it at one of these:
+
+
+
+<UL>
+<LI>
+
+<A HREF="ftp://ftp.hawaii.edu/mirrors/gnu">ftp://ftp.hawaii.edu/mirrors/gnu</A>
+
+<LI>
+
+<A HREF="ftp://ftp.digex.net/pub/gnu">ftp://ftp.digex.net/pub/gnu</A>
+
+<LI>
+
+<A HREF="ftp://wuarchive.wustl.edu/systems/gnu">ftp://wuarchive.wustl.edu/systems/gnu</A>
+
+<LI>
+
+<A HREF="ftp://ftp.cs.columbia.edu/archives/gnu/prep">ftp://ftp.cs.columbia.edu/archives/gnu/prep</A>
+
+<LI>
+
+<A HREF="ftp://uiarchive.cso.uiuc.edu/pub/gnu">ftp://uiarchive.cso.uiuc.edu/pub/gnu</A>
+
+<LI>
+
+<A HREF="ftp://gatekeeper.dec.com/pub/GNU">ftp://gatekeeper.dec.com/pub/GNU</A>
+
+<LI>
+
+<A HREF="ftp://labrea.stanford.edu/gnu">ftp://labrea.stanford.edu/gnu</A>
+
+<LI>
+
+<A HREF="ftp://ftp.uu.net/archive/systems/gnu">ftp://ftp.uu.net/archive/systems/gnu</A>
+
+<LI>
+
+<A HREF="ftp://prep.ai.mit.edu/pub/gnu">ftp://prep.ai.mit.edu/pub/gnu</A>
+(the main GNU site, which you should try not to tie up)
+
+</UL>
+
+<P>
+If you'd rather use lynx and don't have it already, it is available from
+<A HREF="http://lynx.browser.org/">http://lynx.browser.org/</A>.
+
+
+<P>
+If you'd rather use webget, it is available at
+<A HREF="http://www.wg.omron.co.jp/~jfriedl/perl/inlined/webget">http://www.wg.omron.co.jp/~jfriedl/perl/inlined/webget</A>.
+
+
+<P><HR><P>
+This document was generated on 9 November 2000 using
+<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+</BODY>
+</HTML>
diff --git a/biblio/bibtex/utils/bibweb/bibweb.info b/biblio/bibtex/utils/bibweb/bibweb.info
new file mode 100644
index 0000000000..d19244d3bd
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/bibweb.info
@@ -0,0 +1,594 @@
+This is Info file bibweb.info, produced by Makeinfo version 1.68 from
+the input file bibweb.texi.
+
+ This is edition 0.46, November 2000, of the `Bibweb Manual'.
+Copyright (C) 1997, 1998, 1999, 2000 John H. Palmieri
+
+
+File: bibweb.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+Bibweb
+******
+
+ Bibweb is a perl script written by John Palmieri (in consultation
+with Bill Dwyer).
+
+ This is version 0.46, November 2000, of the Bibweb manual. Bug
+reports and suggestions for new features should go to
+`palmieri@math.washington.edu'.
+
+ This is the first version of this manual; it is done (except for the
+indices).
+
+* Menu:
+
+* Introduction:: Overview, quick instructions
+* How to:: More detailed instructions
+* Installation:: How to install
+
+
+How to
+
+* LaTeX file:: What your LaTeX file should look like
+* Invoking bibweb:: What bibweb does
+
+LaTeX file
+
+* Bibliography command:: What the \bibliography command should look like
+* Citations:: Formats for citations
+
+Invoking bibweb
+
+* Basic operation:: Quick instructions
+* Options:: Options for running bibweb
+
+
+File: bibweb.info, Node: Introduction, Next: How to, Prev: Top, Up: Top
+
+Introduction
+************
+
+ Bibweb is a utility for automatically retrieving bibliographical
+information from the American Mathematical Society's MathSciNet search
+engine (available at `http://www.ams.org/mathscinet'). (In particular,
+in order to use bibweb, you must have access to MathSciNet, which means
+that you or your institution has at some point shelled out some
+quantity of money to the AMS. Anyway...)
+
+ If you're too lazy to go to the library or use a web browser to find
+out bibliographical information for that ground-breaking paper you're
+writing, then bibweb is the program for you. It is intended for use
+with BibTeX (which means with LaTeX), and you have to write citations
+in a particular format, but that's about all there is to it.
+
+ Briefly: once you've installed bibweb, if you are editing a file
+called `bozo.tex', then you need to insert the following line:
+
+ \bibliography{bozo}
+
+If you are also using the BibTeX file `junk.bib', then you should use
+the following line:
+
+ \bibliography{junk,bozo}
+
+When you want to cite a paper whose bibliographical information you are
+lacking, say "Periodic phenomena in the Adams-Novikov spectral
+sequence" by H. R. Miller, D. C. Ravenel, and W. S. Wilson, then you
+give LaTeX the command
+
+ \cite{miller-ravenel-wilson-periodic}
+
+or
+
+ \cite{miller-ravenel-wilson-novikov}
+
+or
+
+ \cite{miller-ravenel-wilson}
+
+or
+
+ \cite{miller-ravenel;adams-spectral}
+
+When you run this through LaTeX, it won't find the citation (by
+assumption); BibTeX won't find a citation either. When you run bibweb,
+though, by typing
+
+ bibweb bozo
+
+at the shell prompt, then it takes your citation and queries
+MathSciNet. If it finds a match, it writes the bibliographic
+information, in BibTeX format, to the file `bozo.bib'.
+
+ Bibweb also lets you search for just a single citation, it lets you
+specify the names of the input (TeX) and output (BibTeX) files
+separately, and has other options. *Note Options:: for details.
+
+
+File: bibweb.info, Node: How to, Next: Installation, Prev: Introduction, Up: Top
+
+How to
+******
+
+ In this section, we give detailed instructions for how to use bibweb.
+
+* Menu:
+
+* LaTeX file:: What your LaTeX file should look like
+* Invoking bibweb:: What bibweb does
+
+
+File: bibweb.info, Node: LaTeX file, Next: Invoking bibweb, Prev: How to, Up: How to
+
+LaTeX file
+==========
+
+ In this section, we describe how to write your LaTeX file so that it
+will produce output suitable for bibweb.
+
+* Menu:
+
+* Bibliography command:: What the \bibliography command should look like
+* Citations:: Formats for citations
+
+
+File: bibweb.info, Node: Bibliography command, Next: Citations, Prev: LaTeX file, Up: LaTeX file
+
+Bibliography command
+--------------------
+
+ You need to decide where you want to put the bibliographic
+information that bibweb will give you; this should be a file ending in
+`.bib'. Suppose you decide to use a file called `jimbob.bib' (which
+may or may not exist at this point). Then you need the following line
+in your LaTeX file:
+
+ \bibliography{jimbob}
+
+As indicated above, if you already have some other bibtex files lying
+around, and you also want to use these (say they're called `manny.bib',
+`moe.bib', and `jack.bib'), then you should instead use the following
+line:
+
+ \bibliography{manny,moe,jack,jimbob}
+
+
+File: bibweb.info, Node: Citations, Prev: Bibliography command, Up: LaTeX file
+
+Citations
+---------
+
+ There are two different formats for citations that bibweb knows how
+to handle, and it handles them in different ways.
+
+ * Simpler format:
+
+ \cite{aaa-bbb-ccc-ddd-year}
+
+ `aaa' gets sent as the author, `bbb', `ccc', and `ddd' get sent as
+ miscellany (they can match anything, including the author, title,
+ journal, reviewer, or the text of the review). `year' should be
+ of the form `<1995' or `>1995' or `=1995' or `1995', in which case
+ bibweb only searches for papers from the appropriate years.
+ `1995' is treated the same as `=1995'. It seems that specifying a
+ year or range of years slows things down tremendously, so you
+ might want to avoid this. Also, I think if `year' is in some
+ other format, it will just get ignored.
+
+ For example, `\cite{devinatz-hopkins-nilpotence}' matches two
+ papers: one is "Nilpotence and stable homotopy theory, I" by
+ Devinatz, Hopkins, and Smith; the other is "Morava's change of
+ rings theorem" by Devinatz, for which "Hopkins" and "nilpotence"
+ are mentioned in the review.
+
+ If you want to avoid the second sort of match, you can use the more
+ involved format.
+
+ * More involved format:
+
+ \cite{a1-a2-...-ak;t1-t2-...-tm;j1-j2-...jn;year}
+
+ `year' should be just like field `year' in the simpler format, but
+ it slows things down, so I would avoid it. `a1', ..., `ak' are
+ treated as authors, `t1', ..., `tm' are treated as words in the
+ title, `j1', ..., `jn' are treated as words in the journal name.
+ You don't have to include all of the fields.
+
+ For example, `\cite{devinatz-hopkins;nilpotence}' matches only the
+ paper "Nilpotence and stable homotopy theory, I" by Devinatz,
+ Hopkins, and Smith. `\cite{miller-wilkerson;vanishing-steenrod}'
+ matches only "Vanishing lines for modules over the Steenrod
+ algebra" by Miller and Wilkerson, as does
+ `\cite{miller-wilkerson;vanishing-steenrod;;<1985}', as does
+ `\cite{miller-wilkerson;vanishing-steenrod;pure;<1985}' (the paper
+ appeared in the `Journal of Pure and Applied Algebra').
+
+ * Using wildcards:
+
+ You can use `*' as a wildcard; for instance,
+ `\cite{adams;hopf-invar*-one}' would return the two papers by
+ Adams called "On the non-existence of elements of Hopf invariant
+ one".
+
+ When using MathSciNet by hand, if you want to search for papers by
+ Mike Hopkins, you could set the author field equal to `hopkins,
+ m*'. On the other hand, BibTeX treats commas as separators: if
+ you give BibTeX the command `\cite{hopkins,m*;global}', bibtex will
+ treat `hopkins' as one source and `m*;global' as another. So to
+ get bibweb to do the right thing, you should use a period instead
+ of a comma: use the command
+
+ \cite{hopkins.m*;global}
+
+ Bibweb will translate the `.' to a `,' before sending the query to
+ MathSciNet, so this citation would produce
+
+ %% Math Reviews number: 89g:55022
+ @incollection {hopkins.m*;global,
+ AUTHOR = {Hopkins, Michael J.},
+ TITLE = {Global methods in homotopy theory},
+ BOOKTITLE = {Homotopy theory (Durham, 1985)},
+ PAGES = {73--96},
+ PUBLISHER = {Cambridge Univ. Press},
+ ADDRESS = {Cambridge},
+ YEAR = {1987},
+ MRCLASS = {55Q45 (55P42 55P60 55Q10)},
+ MRNUMBER = {89g:55022},
+ MRREVIEWER = {Douglas C. Ravenel},
+ }
+
+
+File: bibweb.info, Node: Invoking bibweb, Prev: LaTeX file, Up: How to
+
+Invoking bibweb
+===============
+
+* Menu:
+
+* Basic operation:: Quick instructions
+* Options:: Options for running bibweb
+
+
+File: bibweb.info, Node: Basic operation, Next: Options, Prev: Invoking bibweb, Up: Invoking bibweb
+
+Basic operation
+---------------
+
+ In this section, we give the basic instructions for running bibweb,
+as well as a brief description of what bibweb does.
+
+ bibweb FILE
+
+will run bibweb on FILE. For example, to run bibweb on the file
+`elvis', you type
+
+ bibweb elvis
+
+Then bibweb will run BibTeX on `elvis' and read through the list of
+missing citations. For each such citation, it searches MathSciNet, and
+writes its results to the file `elvis.bib'. Once it has done this, it
+runs BibTeX again, to make use of any new citations.
+
+ If bibweb can't find the file `elvis.aux' (which it wants to pass to
+BibTeX), it prints an error message and stops. If it can't write to
+`elvis.bib', it should also print an error message and stop.
+
+ By "searches MathSciNet", I mean that it fires up a web browser that
+goes to the MathSciNet site, gives it the appropriate query, gets the
+response, and then quits. The best web browser for this sort of thing
+is called `wget'; this is a GNU program (hence freely distributable).
+You can get it at your favorite GNU mirror. The second best web
+browser is `lynx'; if bibweb can't find wget, it uses lynx. Another
+option is `webget', which is a perl script that has some of the
+capabilities of wget. *Note Installation:: for information about
+obtaining these programs. (By the way, bibweb doesn't know how to use
+any other web browsers. If you prefer another browser and modify
+bibweb to work with it, tell me about your changes so I can incorporate
+them into future versions.)
+
+ By "its results", I mean the following:
+
+ * If bibweb finds exactly one entry matching your citation, it puts
+ it in `elvis.bib' with the key you chose. For instance, if you
+ have
+
+ \cite{kan-miller-splitting-spaces}
+
+ then bibweb puts something like the following in `elvis.bib':
+
+ %% citation 'kan-miller-splitting-spaces'
+ %% Math Reviews number: 57 #7582
+ @article {kan-miller-splitting-spaces,
+ AUTHOR = {Kan, Daniel M. and Miller, Edward Y.},
+ TITLE = {Splitting spaces with finite group actions},
+ JOURNAL = {Topology},
+ VOLUME = {16},
+ YEAR = {1977},
+ NUMBER = {4},
+ PAGES = {403--407},
+ MRCLASS = {55C35},
+ MRNUMBER = {57 \#7582},
+ MRREVIEWER = {J. P. May},
+ }
+
+ * If it finds several matches (at most 5), it writes them all to
+ `elvis.bib', but leaves the original citation undefined. (The new
+ ones have citations given by their Math Reviews numbers.) So at
+ this point, you have to edit `elvis.bib' to change the keys of the
+ papers you're interested in, or you have to change your \cite
+ command to match what was written into `elvis.bib'.
+
+ For example, if you have
+
+ \cite{serre;faisceaux}
+
+ then there are two matches (or maybe there are three, now), which
+ get entered into `elvis.bib' as
+
+ %% citation 'serre;faisceaux'
+ %% Math Reviews number: 35 #3088
+ @article {MR35:3088,
+ AUTHOR = {Serre, Jean-Pierre},
+ TITLE = {Prolongement de faisceaux analytiques coh\'erents},
+ JOURNAL = {Ann. Inst. Fourier (Grenoble)},
+ VOLUME = {16},
+ YEAR = {1966},
+ NUMBER = {fasc. 1},
+ PAGES = {363--374},
+ MRCLASS = {32.50 (32.27)},
+ MRNUMBER = {35 \#3088},
+ MRREVIEWER = {B. Shiffman},
+ }
+ %% Math Reviews number: 16,953c
+ @article {MR16:953c,
+ AUTHOR = {Serre, Jean-Pierre},
+ TITLE = {Faisceaux alg\'ebriques coh\'erents},
+ JOURNAL = {Ann. of Math. (2)},
+ VOLUME = {61},
+ YEAR = {1955},
+ PAGES = {197--278},
+ MRCLASS = {14.0X},
+ MRNUMBER = {16,953c},
+ MRREVIEWER = {C. Chevalley},
+ }
+
+ * If it finds more than 5 matches, it tells you that, and doesn't
+ add any new entries to `elvis.bib'. For example, if you have
+
+ \cite{serre}
+
+ then bibweb adds the following to `elvis.bib':
+
+ %% citation 'serre'
+ %% More than 5 matches found.
+
+ You can change the number `5' to something else by using the `-m'
+ option. *Note Options::.
+
+ * If it doesn't find any matches, it tells you that, and doesn't add
+ any new entries to `elvis.bib'. For example, if you have
+
+ \cite{serre-kan}
+
+ then bibweb adds the following to `elvis.bib':
+
+ %% citation 'serre-kan'
+ %% No matches found.
+
+ * Occasionally, bibweb will say it only finds one match, but it will
+ add several things to `elvis.bib'. This happens when there are
+ several papers whose reviews are all together on MathSciNet (see
+ `\cite{dwyer-kan;obstruction-theory-diagrams}', for example). In
+ these cases, bibweb ought to do a good job of assigning your chosen
+ bibliographical key to the correct entry, but you might want to
+ double-check.
+
+ Finally, note that if you give the citation
+
+ \cite{serre}
+
+and run bibweb, then run bibweb again, it will not query MathSciNet
+again; instead it will tell you something like "You've searched for
+`serre' before".
+
+
+File: bibweb.info, Node: Options, Prev: Basic operation, Up: Invoking bibweb
+
+Options
+-------
+
+ bibweb can be run with several different options.
+
+`-i FILE'
+`--input=FILE'
+ Run BibTeX on FILE.
+
+`-o FILE'
+`--output=FILE'
+ Write output to FILE (after appending `.bib' to FILE, if
+ necessary).
+
+`--std'
+ Write output to STDOUT (the screen, ordinarily).
+
+`-c CITATION'
+`--cite=CITATION'
+ Look up only CITATION. In this case, the output is written to the
+ screen, unless you also use the `-o' option.
+
+`-m NUM'
+`--max=NUM'
+ Return at most NUM matches to each citation. Actually, NUM is
+ rounded up according to the options available at MathSciNet: NUM
+ will be rounded up to one of: 5, 10, 20, 50, 100, 1000.
+
+`-e SITE'
+`--emath=SITE'
+ Search MathSciNet at the web site SITE. The default value is read
+ from the environment variable MATHSCINET_SITE; if this variable
+ hasn't been set, the default is `www.ams.org'. Some other good
+ choices are `ams.rice.edu', `ams.mathematik.uni-bielefeld.de',
+ `klymene.mpim-bonn.mpg.de', `irmasrv1.u-strasbg.fr', and
+ `ams.impa.br'--see the MathSciNet homepage for more information.
+ If you choose a value for SITE that's not from this list, bibweb
+ prints a warning, but goes ahead and tries to use it anyway. You
+ can use a bit of shorthand for SITE: `ams' stands for
+ `www.ams.org'; `rice' stands for `ams.rice.edu'; `bielefeld'
+ stands for `ams.mathematik.uni-bielefeld.de'; `bonn' stands for
+ `klymene.mpim-bonn.mpg.de'; `strasbg' stands for
+ `irmasrv1.u-strasbg.fr'; and `impa' stands for `ams.impa.br'.
+
+`-L'
+`--lynx'
+ Force bibweb to use lynx as its web browser, even if wget is
+ available. (As far as I can tell, lynx is slower than wget, but I
+ suppose someone might have some arcane reason for avoiding wget.)
+
+`-h'
+`--help'
+ Print a short help message, and then quit.
+
+`-b'
+`--bibtex'
+ Produce output in bibtex format (the default).
+
+`-r'
+`--review'
+ Include the review in the bibtex output, in the form `REVIEW = {
+ ... }'
+
+`-d'
+`--dvi'
+ Produce output in dvi format. This option uses lynx rather than
+ wget, so lynx must be available.
+
+`-p'
+`--postscript'
+ Produce output in postscript format. This option uses lynx rather
+ than wget, so lynx must be available.
+
+`-pdf'
+ Produce output in pdf format. This option uses lynx rather than
+ wget, so lynx must be available.
+
+`-t'
+`--text'
+ Produce output in text format. This option uses lynx rather than
+ wget, so lynx must be available.
+
+ For example, any of the following commands
+
+ bibweb -i test -o a -m 10
+ bibweb test -o a -m 10
+ bibweb -o a -m 10 test
+ bibweb --output=a --max=10 test
+
+has bibweb read the file `text.aux' and write output to `a.bib',
+returning at most 10 matches for each citation.
+
+The command
+
+ bibweb --std -m 10 test
+
+reads `test.aux' and writes the output to the screen (or whatever you
+have STDOUT set to). The command
+
+ bibweb --emath=ams.rice.edu bozo
+
+reads `bozo.aux', writes to `bozo.bib', and uses `ams.rice.edu' for the
+MathSciNet search, as do the commands
+
+ bibweb --emath=rice bozo
+ bibweb -e rice bozo
+ bibweb bozo -e rice
+
+The command
+
+ bibweb --emath=quack bozo
+
+uses `quack' for the MathSciNet search. In this case, bibweb will give
+a warning (since `quack' is not one of the recognized MathSciNet
+sites), and will produce no usable results (it will be fast, though).
+
+ If you run the command
+
+ bibweb -m 23 -c 'serre'
+
+then bibweb will tell you that it is rounding 23 up to 50, and then it
+will look for all articles with `serre' as the author. In this case,
+it will tell you that there were more than 50 matches found. I suppose
+if you typed
+
+ bibweb -m 1000 -c 'serre'
+
+then you would get all of Serre's papers listed on your screen. This
+might take a while. You could instead run
+
+ bibweb -m 1000 -c 'serre' -o serre.bib
+
+and then the output would be stored in the file `serre.bib'.
+
+
+File: bibweb.info, Node: Installation, Prev: How to, Up: Top
+
+Installation
+************
+
+ This is complicated: put the file `bibweb' in your path and make
+sure it's executable.
+
+ That's it.
+
+ Actually, bibweb seems to require at least version 5.003 of perl, so
+if you have an older version, you may have to upgrade.
+
+ And of course, to use bibweb at all, you need to have a subscription
+to MathSciNet.
+
+ Bibweb also requires the presence of one of the following programs:
+`wget', `lynx', or `webget'. Lynx is commonly available, so it may
+very well already be on your system. If you don't mind installing it,
+I would recommend using wget instead, because it's faster than lynx.
+wget is available from the GNU ftp site, or (even better) many GNU
+mirrors. Look for it at one of these:
+
+ * `ftp://ftp.hawaii.edu/mirrors/gnu'
+
+ * `ftp://ftp.digex.net/pub/gnu'
+
+ * `ftp://wuarchive.wustl.edu/systems/gnu'
+
+ * `ftp://ftp.cs.columbia.edu/archives/gnu/prep'
+
+ * `ftp://uiarchive.cso.uiuc.edu/pub/gnu'
+
+ * `ftp://gatekeeper.dec.com/pub/GNU'
+
+ * `ftp://labrea.stanford.edu/gnu'
+
+ * `ftp://ftp.uu.net/archive/systems/gnu'
+
+ * `ftp://prep.ai.mit.edu/pub/gnu' (the main GNU site, which you
+ should try not to tie up)
+
+ If you'd rather use lynx and don't have it already, it is available
+from `http://lynx.browser.org/'.
+
+ If you'd rather use webget, it is available at
+`http://www.wg.omron.co.jp/~jfriedl/perl/inlined/webget'.
+
+
+
+Tag Table:
+Node: Top218
+Node: Introduction1219
+Node: How to3309
+Node: LaTeX file3615
+Node: Bibliography command3988
+Node: Citations4723
+Node: Invoking bibweb8346
+Node: Basic operation8576
+Node: Options13996
+Node: Installation18073
+
+End Tag Table
diff --git a/biblio/bibtex/utils/bibweb/bibweb.texi b/biblio/bibtex/utils/bibweb/bibweb.texi
new file mode 100644
index 0000000000..57c9057c5c
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/bibweb.texi
@@ -0,0 +1,776 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename bibweb.info
+@settitle Bibweb Manual
+@c footnotestyle separate
+@c paragraphindent 2
+@iftex
+@tolerance 10000
+@end iftex
+
+@comment use 'perl texi2html -menu -split_chapter bibweb.texi' to get an
+@comment html file
+
+@ifinfo
+This is edition 0.46, November 2000, of the @cite{Bibweb
+Manual}. Copyright @copyright{} 1997, 1998, 1999, 2000 John H. Palmieri
+@end ifinfo
+
+@titlepage
+@title{Bibweb Manual}
+
+@author (info by John H. Palmieri)
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1997, 1998, 2000 John H. Palmieri
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+@end ignore
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' is included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation
+approved by the Free Software Foundation.
+@end titlepage
+@page
+
+@ifinfo
+@node top, Introduction, (dir), (dir)
+@comment node-name, next, previous, up
+@top Bibweb
+@end ifinfo
+
+Bibweb is a perl script written by John Palmieri (in consultation with
+Bill Dwyer).
+
+This is version 0.46, November 2000, of the Bibweb manual. Bug reports
+and suggestions for new features should go to
+@samp{palmieri@@math.washington.edu}.
+
+This is the first version of this manual; it is done (except for the
+indices).
+
+@menu
+* Introduction:: Overview, quick instructions
+* How to:: More detailed instructions
+* Installation:: How to install
+
+@detailmenu --- The Detailed Node Listing ---
+
+How to
+
+* La@TeX{} file:: What your La@TeX{} file should look like
+* Invoking bibweb:: What bibweb does
+
+La@TeX{} file
+
+* Bibliography command:: What the \bibliography command should look like
+* Citations:: Formats for citations
+
+Invoking bibweb
+
+* Basic operation:: Quick instructions
+* Options:: Options for running bibweb
+
+@end detailmenu
+@end menu
+
+@comment in any given node:
+@comment use '@cindex CONCEPT' to add node to concept index
+@comment use '@findex FUNCTION' for function index
+@comment use '@vindex VARIABLE' for variable index
+@comment use '@kindex KEY' for key index
+
+
+
+@comment ---------------------------------------------------------
+
+@node Introduction, How to, top, top
+@chapter Introduction
+
+Bibweb is a utility for automatically retrieving bibliographical
+information from the American Mathematical Society's MathSciNet search
+engine (available at @url{http://www.ams.org/mathscinet}). (In
+particular, in order to use bibweb, you must have access to MathSciNet,
+which means that you or your institution has at some point shelled out
+some quantity of money to the AMS. Anyway...)
+
+If you're too lazy to go to the library or use a web browser to find out
+bibliographical information for that ground-breaking paper you're
+writing, then bibweb is the program for you. It is intended for use
+with Bib@TeX{} (which means with La@TeX{}), and you have to write
+citations in a particular format, but that's about all there is to it.
+
+Briefly: once you've installed bibweb, if you are editing a file called
+@file{bozo.tex}, then you need to insert the following line:
+
+@example
+ \bibliography@{bozo@}
+@end example
+
+@noindent
+If you are also using the Bib@TeX{} file @file{junk.bib}, then you
+should use the following line:
+
+@example
+ \bibliography@{junk,bozo@}
+@end example
+
+@noindent
+When you want to cite a paper whose bibliographical information you are
+lacking, say ``Periodic phenomena in the Adams-Novikov spectral
+sequence'' by H. R. Miller, D. C. Ravenel, and W. S. Wilson, then you
+give La@TeX{} the command
+
+@example
+ \cite@{miller-ravenel-wilson-periodic@}
+@end example
+
+@noindent
+or
+
+@example
+ \cite@{miller-ravenel-wilson-novikov@}
+@end example
+
+@noindent
+or
+
+@example
+ \cite@{miller-ravenel-wilson@}
+@end example
+
+@noindent
+or
+
+@example
+ \cite@{miller-ravenel;adams-spectral@}
+@end example
+
+@noindent
+When you run this through La@TeX{}, it won't find the citation (by
+assumption); Bib@TeX{} won't find a citation either. When you run
+bibweb, though, by typing
+
+@example
+ bibweb bozo
+@end example
+
+@noindent
+at the shell prompt, then it takes your citation and queries
+MathSciNet. If it finds a match, it writes the bibliographic
+information, in Bib@TeX{} format, to the file @file{bozo.bib}.
+
+Bibweb also lets you search for just a single citation, it lets you
+specify the names of the input (@TeX{}) and output (Bib@TeX{}) files
+separately, and has other options. @xref{Options} for details.
+
+
+
+
+
+
+@comment ---------------------------------------------------------
+
+@node How to, Installation, Introduction, top
+@chapter How to
+
+In this section, we give detailed instructions for how to use bibweb.
+
+@menu
+* La@TeX{} file:: What your La@TeX{} file should look like
+* Invoking bibweb:: What bibweb does
+@end menu
+
+
+
+@comment ---------------------------------------------------------
+
+@node La@TeX{} file, Invoking bibweb, How to, How to
+@section La@TeX{} file
+
+In this section, we describe how to write your La@TeX{} file so that it
+will produce output suitable for bibweb.
+
+@menu
+* Bibliography command:: What the \bibliography command should look like
+* Citations:: Formats for citations
+@end menu
+
+@comment ---------------------------------------------------------
+
+@node Bibliography command, Citations, La@TeX{} file, La@TeX{} file
+@subsection Bibliography command
+
+You need to decide where you want to put the bibliographic information
+that bibweb will give you; this should be a file ending in @samp{.bib}.
+Suppose you decide to use a file called @file{jimbob.bib} (which may or
+may not exist at this point). Then you need the following line in your
+La@TeX{} file:
+
+@example
+ \bibliography@{jimbob@}
+@end example
+
+@noindent
+As indicated above, if you already have some other bibtex files lying
+around, and you also want to use these (say they're called
+@file{manny.bib}, @file{moe.bib}, and @file{jack.bib}),
+then you should instead use the following line:
+
+@example
+ \bibliography@{manny,moe,jack,jimbob@}
+@end example
+
+
+
+
+@comment ---------------------------------------------------------
+
+@node Citations, , Bibliography command, La@TeX{} file
+@subsection Citations
+
+There are two different formats for citations that bibweb knows how to
+handle, and it handles them in different ways.
+
+@itemize @bullet
+@item
+Simpler format:
+
+@example
+ \cite@{aaa-bbb-ccc-ddd-year@}
+@end example
+
+@samp{aaa} gets sent as the author, @samp{bbb}, @samp{ccc}, and
+@samp{ddd} get sent as miscellany (they can match anything, including
+the author, title, journal, reviewer, or the text of the review).
+@samp{year} should be of the form @samp{<1995} or @samp{>1995} or
+@samp{=1995} or @samp{1995}, in which case bibweb only searches for
+papers from the appropriate years. @samp{1995} is treated the same as
+@samp{=1995}. It seems that specifying a year or range of years slows
+things down tremendously, so you might want to avoid this. Also, I
+think if @samp{year} is in some other format, it will just get ignored.
+
+For example, @samp{\cite@{devinatz-hopkins-nilpotence@}} matches two
+papers: one is ``Nilpotence and stable homotopy theory, I'' by Devinatz,
+Hopkins, and Smith; the other is ``Morava's change of rings theorem'' by
+Devinatz, for which ``Hopkins'' and ``nilpotence'' are mentioned in the
+review.
+
+If you want to avoid the second sort of match, you can use the more
+involved format.
+
+@item
+More involved format:
+
+@example
+ \cite@{a1-a2-...-ak;t1-t2-...-tm;j1-j2-...jn;year@}
+@end example
+
+@samp{year} should be just like field @samp{year} in the simpler format,
+but it slows things down, so I would avoid it. @samp{a1}, ...,
+@samp{ak} are treated as authors, @samp{t1}, ..., @samp{tm} are treated
+as words in the title, @samp{j1}, ..., @samp{jn} are treated as words in
+the journal name. You don't have to include all of the fields.
+
+For example, @samp{\cite@{devinatz-hopkins;nilpotence@}} matches only
+the paper ``Nilpotence and stable homotopy theory, I'' by Devinatz,
+Hopkins, and Smith. @samp{\cite@{miller-wilkerson;vanishing-steenrod@}}
+matches only ``Vanishing lines for modules over the Steenrod algebra''
+by Miller and Wilkerson, as does
+@samp{\cite@{miller-wilkerson;vanishing-steenrod;;<1985@}}, as does
+@samp{\cite@{miller-wilkerson;vanishing-steenrod;pure;<1985@}} (the
+paper appeared in the @cite{Journal of Pure and Applied Algebra}).
+
+@item
+Using wildcards:
+
+You can use @samp{*} as a wildcard; for instance,
+@samp{\cite@{adams;hopf-invar*-one@}} would return the two papers by
+Adams called ``On the non-existence of elements of Hopf invariant one''.
+
+When using MathSciNet by hand, if you want to search for papers by Mike
+Hopkins, you could set the author field equal to @samp{hopkins, m*}. On
+the other hand, Bib@TeX{} treats commas as separators: if you give
+Bib@TeX{} the command @samp{\cite@{hopkins,m*;global@}}, bibtex will
+treat @samp{hopkins} as one source and @samp{m*;global} as another. So
+to get bibweb to do the right thing, you should use a period instead of
+a comma: use the command
+
+@example
+ \cite@{hopkins.m*;global@}
+@end example
+
+Bibweb will translate the @samp{.} to a @samp{,} before sending the
+query to MathSciNet, so this citation would produce
+
+@example
+%% Math Reviews number: 89g:55022
+@@incollection @{hopkins.m*;global,
+ AUTHOR = @{Hopkins, Michael J.@},
+ TITLE = @{Global methods in homotopy theory@},
+ BOOKTITLE = @{Homotopy theory (Durham, 1985)@},
+ PAGES = @{73--96@},
+ PUBLISHER = @{Cambridge Univ. Press@},
+ ADDRESS = @{Cambridge@},
+ YEAR = @{1987@},
+ MRCLASS = @{55Q45 (55P42 55P60 55Q10)@},
+ MRNUMBER = @{89g:55022@},
+MRREVIEWER = @{Douglas C. Ravenel@},
+@}
+@end example
+
+@end itemize
+
+
+
+
+@comment ---------------------------------------------------------
+
+@node Invoking bibweb, , La@TeX{} file, How to
+@section Invoking bibweb
+
+@menu
+* Basic operation:: Quick instructions
+* Options:: Options for running bibweb
+@end menu
+
+
+
+
+
+
+@comment ---------------------------------------------------------
+
+@node Basic operation, Options, Invoking bibweb, Invoking bibweb
+@subsection Basic operation
+
+In this section, we give the basic instructions for running bibweb, as
+well as a brief description of what bibweb does.
+
+@example
+ bibweb @var{file}
+@end example
+
+@noindent
+will run bibweb on @var{file}. For example, to run bibweb on the file
+@file{elvis}, you type
+
+@example
+ bibweb elvis
+@end example
+
+@noindent
+Then bibweb will run Bib@TeX{} on @file{elvis} and read through the list
+of missing citations. For each such citation, it searches MathSciNet,
+and writes its results to the file @file{elvis.bib}. Once it has done
+this, it runs Bib@TeX{} again, to make use of any new citations.
+
+If bibweb can't find the file @file{elvis.aux} (which it wants to pass
+to Bib@TeX{}), it prints an error message and stops. If it can't write
+to @file{elvis.bib}, it should also print an error message and stop.
+
+By ``searches MathSciNet'', I mean that it fires up a web browser that
+goes to the MathSciNet site, gives it the appropriate query, gets the
+response, and then quits. The best web browser for this sort of thing
+is called @samp{wget}; this is a GNU program (hence freely
+distributable). You can get it at your favorite GNU mirror. The second
+best web browser is @samp{lynx}; if bibweb can't find wget, it uses
+lynx. Another option is @samp{webget}, which is a perl script that has
+some of the capabilities of wget. @xref{Installation} for information
+about obtaining these programs. (By the way, bibweb doesn't know how to
+use any other web browsers. If you prefer another browser and modify
+bibweb to work with it, tell me about your changes so I can incorporate
+them into future versions.)
+
+By ``its results'', I mean the following:
+
+@itemize @bullet
+@item
+If bibweb finds exactly one entry matching your citation, it puts it in
+@file{elvis.bib} with the key you chose. For instance, if you have
+
+@example
+ \cite@{kan-miller-splitting-spaces@}
+@end example
+
+then bibweb puts something like the following in @file{elvis.bib}:
+
+@example
+%% citation 'kan-miller-splitting-spaces'
+%% Math Reviews number: 57 #7582
+@@article @{kan-miller-splitting-spaces,
+ AUTHOR = @{Kan, Daniel M. and Miller, Edward Y.@},
+ TITLE = @{Splitting spaces with finite group actions@},
+ JOURNAL = @{Topology@},
+ VOLUME = @{16@},
+ YEAR = @{1977@},
+ NUMBER = @{4@},
+ PAGES = @{403--407@},
+ MRCLASS = @{55C35@},
+ MRNUMBER = @{57 \#7582@},
+MRREVIEWER = @{J. P. May@},
+@}
+@end example
+
+@item
+If it finds several matches (at most 5), it writes them all to
+@file{elvis.bib}, but leaves the original citation undefined. (The new
+ones have citations given by their Math Reviews numbers.) So at this
+point, you have to edit @file{elvis.bib} to change the keys of the
+papers you're interested in, or you have to change your \cite command to
+match what was written into @file{elvis.bib}.
+
+For example, if you have
+
+@example
+ \cite@{serre;faisceaux@}
+@end example
+
+@noindent
+then there are two matches (or maybe there are three, now), which get
+entered into @file{elvis.bib} as
+
+@example
+%% citation 'serre;faisceaux'
+%% Math Reviews number: 35 #3088
+@@article @{MR35:3088,
+ AUTHOR = @{Serre, Jean-Pierre@},
+ TITLE = @{Prolongement de faisceaux analytiques coh\'erents@},
+ JOURNAL = @{Ann. Inst. Fourier (Grenoble)@},
+ VOLUME = @{16@},
+ YEAR = @{1966@},
+ NUMBER = @{fasc. 1@},
+ PAGES = @{363--374@},
+ MRCLASS = @{32.50 (32.27)@},
+ MRNUMBER = @{35 \#3088@},
+MRREVIEWER = @{B. Shiffman@},
+@}
+%% Math Reviews number: 16,953c
+@@article @{MR16:953c,
+ AUTHOR = @{Serre, Jean-Pierre@},
+ TITLE = @{Faisceaux alg\'ebriques coh\'erents@},
+ JOURNAL = @{Ann. of Math. (2)@},
+ VOLUME = @{61@},
+ YEAR = @{1955@},
+ PAGES = @{197--278@},
+ MRCLASS = @{14.0X@},
+ MRNUMBER = @{16,953c@},
+MRREVIEWER = @{C. Chevalley@},
+@}
+@end example
+
+@item
+If it finds more than 5 matches, it tells you that, and doesn't add any
+new entries to @file{elvis.bib}. For example, if you have
+
+@example
+ \cite@{serre@}
+@end example
+
+@noindent
+then bibweb adds the following to @file{elvis.bib}:
+
+@example
+%% citation 'serre'
+%% More than 5 matches found.
+@end example
+
+@noindent
+You can change the number @samp{5} to something else by using the
+@samp{-m} option. @xref{Options}.
+
+@item
+If it doesn't find any matches, it tells you that, and doesn't add any
+new entries to @file{elvis.bib}. For example, if you have
+
+@example
+ \cite@{serre-kan@}
+@end example
+
+@noindent
+then bibweb adds the following to @file{elvis.bib}:
+
+@example
+%% citation 'serre-kan'
+%% No matches found.
+@end example
+
+@item
+Occasionally, bibweb will say it only finds one match, but it will add
+several things to @file{elvis.bib}. This happens when there are several
+papers whose reviews are all together on MathSciNet (see
+@samp{\cite@{dwyer-kan;obstruction-theory-diagrams@}}, for example). In
+these cases, bibweb ought to do a good job of assigning your chosen
+bibliographical key to the correct entry, but you might want to
+double-check.
+
+@end itemize
+
+Finally, note that if you give the citation
+
+@example
+ \cite@{serre@}
+@end example
+
+@noindent
+and run bibweb, then run bibweb again, it will not query MathSciNet
+again; instead it will tell you something like ``You've searched for
+`serre' before''.
+
+
+
+@comment ---------------------------------------------------------
+
+@node Options, , Basic operation, Invoking bibweb
+@subsection Options
+
+bibweb can be run with several different options.
+
+@table @samp
+@item -i @var{file}
+@itemx --input=@var{file}
+Run Bib@TeX{} on @var{file}.
+
+@item -o @var{file}
+@itemx --output=@var{file}
+Write output to @var{file} (after appending @samp{.bib} to @var{file},
+if necessary).
+
+@item --std
+Write output to STDOUT (the screen, ordinarily).
+
+@item -c @var{citation}
+@itemx --cite=@var{citation}
+Look up only @var{citation}. In this case, the output is written to the
+screen, unless you also use the @samp{-o} option.
+
+@item -m @var{num}
+@itemx --max=@var{num}
+Return at most @var{num} matches to each citation. Actually, @var{num}
+is rounded up according to the options available at MathSciNet:
+@var{num} will be rounded up to one of: 5, 10, 20, 50, 100, 1000.
+
+@item -e @var{site}
+@itemx --emath=@var{site}
+Search MathSciNet at the web site @var{site}. The default value is read
+from the environment variable @var{MATHSCINET_SITE}; if this variable
+hasn't been set, the default is @samp{www.ams.org}. Some other good
+choices are @samp{ams.rice.edu}, @samp{ams.mathematik.uni-bielefeld.de},
+@samp{klymene.mpim-bonn.mpg.de}, @samp{irmasrv1.u-strasbg.fr}, and
+@samp{ams.impa.br}---see
+the MathSciNet homepage for more information. If you choose a value for
+@var{site} that's not from this list, bibweb prints a warning, but goes
+ahead and tries to use it anyway. You can use a bit of shorthand for
+@var{site}: @samp{ams} stands for @samp{www.ams.org}; @samp{rice}
+stands for @samp{ams.rice.edu}; @samp{bielefeld} stands for
+@samp{ams.mathematik.uni-bielefeld.de}; @samp{bonn} stands for
+@samp{klymene.mpim-bonn.mpg.de}; @samp{strasbg} stands for
+@samp{irmasrv1.u-strasbg.fr}; and @samp{impa} stands for
+@samp{ams.impa.br}.
+
+@item -L
+@itemx --lynx
+Force bibweb to use lynx as its web browser, even if wget is available.
+(As far as I can tell, lynx is slower than wget, but I suppose someone
+might have some arcane reason for avoiding wget.)
+
+@item -h
+@itemx --help
+Print a short help message, and then quit.
+
+@item -b
+@itemx --bibtex
+Produce output in bibtex format (the default).
+
+@item -r
+@itemx --review
+Include the review in the bibtex output, in the form @samp{REVIEW = @{ ... @}}
+
+@item -d
+@itemx --dvi
+Produce output in dvi format. This option uses lynx rather than wget,
+so lynx must be available.
+
+@item -p
+@itemx --postscript
+Produce output in postscript format. This option uses lynx rather than wget,
+so lynx must be available.
+
+@item -pdf
+Produce output in pdf format. This option uses lynx rather than wget,
+so lynx must be available.
+
+@item -t
+@itemx --text
+Produce output in text format. This option uses lynx rather than wget,
+so lynx must be available.
+
+@end table
+
+
+For example, any of the following commands
+
+@example
+ bibweb -i test -o a -m 10
+ bibweb test -o a -m 10
+ bibweb -o a -m 10 test
+ bibweb --output=a --max=10 test
+@end example
+
+@noindent
+has bibweb read the file @file{text.aux} and write output to
+@file{a.bib}, returning at most 10 matches for each citation.
+
+@noindent
+The command
+
+@example
+ bibweb --std -m 10 test
+@end example
+
+@noindent
+reads @file{test.aux} and writes the output to the screen (or whatever
+you have STDOUT set to). The command
+
+@example
+ bibweb --emath=ams.rice.edu bozo
+@end example
+
+@noindent
+reads @file{bozo.aux}, writes to @file{bozo.bib}, and uses
+@url{ams.rice.edu} for the MathSciNet search, as do the commands
+
+@example
+ bibweb --emath=rice bozo
+ bibweb -e rice bozo
+ bibweb bozo -e rice
+@end example
+
+@noindent
+The command
+
+@example
+ bibweb --emath=quack bozo
+@end example
+
+@noindent
+uses @samp{quack} for the MathSciNet search. In this case, bibweb will
+give a warning (since @samp{quack} is not one of the recognized MathSciNet
+sites), and will produce no usable results (it will be fast, though).
+
+If you run the command
+
+@example
+ bibweb -m 23 -c 'serre'
+@end example
+
+@noindent
+then bibweb will tell you that it is rounding 23 up to 50, and then it
+will look for all articles with @samp{serre} as the author. In this
+case, it will tell you that there were more than 50 matches found. I
+suppose if you typed
+
+@example
+ bibweb -m 1000 -c 'serre'
+@end example
+
+@noindent
+then you would get all of Serre's papers listed on your screen. This
+might take a while. You could instead run
+
+@example
+ bibweb -m 1000 -c 'serre' -o serre.bib
+@end example
+
+@noindent
+and then the output would be stored in the file @file{serre.bib}.
+
+
+
+
+@comment ---------------------------------------------------------
+
+@node Installation, , How to, top
+@chapter Installation
+
+This is complicated: put the file @file{bibweb} in your path and make
+sure it's executable.
+
+That's it.
+
+Actually, bibweb seems to require at least version 5.003 of perl, so if
+you have an older version, you may have to upgrade.
+
+And of course, to use bibweb at all, you need to have a subscription to
+MathSciNet.
+
+Bibweb also requires the presence of one of the following programs:
+@samp{wget}, @samp{lynx}, or @samp{webget}. Lynx is commonly available,
+so it may very well already be on your system. If you don't mind
+installing it, I would recommend using wget instead, because it's faster
+than lynx. wget is available from the GNU ftp site, or (even better)
+many GNU mirrors. Look for it at one of these:
+
+@itemize @bullet
+@item
+@url{ftp://ftp.hawaii.edu/mirrors/gnu}
+
+@item
+@url{ftp://ftp.digex.net/pub/gnu}
+
+@item
+@url{ftp://wuarchive.wustl.edu/systems/gnu}
+
+@item
+@url{ftp://ftp.cs.columbia.edu/archives/gnu/prep}
+
+@item
+@url{ftp://uiarchive.cso.uiuc.edu/pub/gnu}
+
+@item
+@url{ftp://gatekeeper.dec.com/pub/GNU}
+
+@item
+@url{ftp://labrea.stanford.edu/gnu}
+
+@item
+@url{ftp://ftp.uu.net/archive/systems/gnu}
+
+@item
+@url{ftp://prep.ai.mit.edu/pub/gnu}
+(the main GNU site, which you should try not to tie up)
+
+@end itemize
+
+If you'd rather use lynx and don't have it already, it is available from
+@url{http://lynx.browser.org/}.
+
+If you'd rather use webget, it is available at
+@url{http://www.wg.omron.co.jp/~jfriedl/perl/inlined/webget}.
+
+
+
+
+@comment @node Concept Index, , Previous Node, Top
+@comment @unnumbered Concept Index
+
+@comment @printindex cp
+
+@comment
+@contents
+@bye
diff --git a/biblio/bibtex/utils/bibweb/bibweb_toc.html b/biblio/bibtex/utils/bibweb/bibweb_toc.html
new file mode 100644
index 0000000000..1790db9499
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/bibweb_toc.html
@@ -0,0 +1,33 @@
+<HTML>
+<HEAD>
+<!-- Created by texi2html 1.56k from bibweb.texi on 9 November 2000 -->
+
+<TITLE>Bibweb Manual - Table of Contents</TITLE>
+</HEAD>
+<BODY>
+<H1>Bibweb Manual</H1>
+<ADDRESS>(info by John H. Palmieri)</ADDRESS>
+<P>
+<P><HR><P>
+<UL>
+<LI><A NAME="TOC1" HREF="bibweb.html#SEC1">Introduction</A>
+<LI><A NAME="TOC2" HREF="bibweb.html#SEC2">How to</A>
+<UL>
+<LI><A NAME="TOC3" HREF="bibweb.html#SEC3">LaTeX file</A>
+<UL>
+<LI><A NAME="TOC4" HREF="bibweb.html#SEC4">Bibliography command</A>
+<LI><A NAME="TOC5" HREF="bibweb.html#SEC5">Citations</A>
+</UL>
+<LI><A NAME="TOC6" HREF="bibweb.html#SEC6">Invoking bibweb</A>
+<UL>
+<LI><A NAME="TOC7" HREF="bibweb.html#SEC7">Basic operation</A>
+<LI><A NAME="TOC8" HREF="bibweb.html#SEC8">Options</A>
+</UL>
+</UL>
+<LI><A NAME="TOC9" HREF="bibweb.html#SEC9">Installation</A>
+</UL>
+<P><HR><P>
+This document was generated on 9 November 2000 using
+<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+</BODY>
+</HTML>
diff --git a/biblio/bibtex/utils/bibweb/test.tex b/biblio/bibtex/utils/bibweb/test.tex
new file mode 100644
index 0000000000..4d08708141
--- /dev/null
+++ b/biblio/bibtex/utils/bibweb/test.tex
@@ -0,0 +1,44 @@
+\documentclass{article}
+\begin{document}
+
+\cite{adams;hopf-invariant-one} % should produce two matches
+
+% \cite{palmieri.j*} % too many matches
+
+\cite{kan-miller-splitting-spaces} % one match
+
+\cite{kan-miller;splitting-spaces} % one match, might be faster
+ % than previous one
+
+\cite{hopkins.m*;global} % one match
+
+\cite{serre.j*} % too many
+
+\cite{serre-kan} % no matches
+
+% \cite{palmieri->95} % several matches
+
+\cite{serre-faisceaux} % too many
+
+\cite{miller-wilkerson-vanishing} % two matches
+
+% \cite{miller-wilkerson-vanishing-<1985} % two matches, slow
+
+\cite{miller-wilkerson;vanishing-steenrod} % one match
+
+\cite{miller-wilkerson;vanishing-steenrod;pure} % one match
+
+% \cite{miller-wilkerson;vanishing-steenrod;pure;<1985} % one match, slow
+
+\cite{devinatz-hopkins-nilpotence} % two matches
+
+\cite{hopkins-devinatz-nilpotence} % four matches
+
+% \cite{palmieri-<1993} % too many, slow
+
+\cite{brown-comenetz} % 2 matches
+
+\bibliography{test}
+\bibliographystyle{alpha}
+
+\end{document}
diff --git a/biblio/bibtex/utils/bids/bids.to.bibtex b/biblio/bibtex/utils/bids/bids.to.bibtex
new file mode 100644
index 0000000000..a00991d25a
--- /dev/null
+++ b/biblio/bibtex/utils/bids/bids.to.bibtex
@@ -0,0 +1,390 @@
+#!/usr/bin/perl
+#
+# bids.to.bibtex is based on a perl script written by Jonathan Swinton,
+# js@ic.ac.uk, and subsequently modified by Ben Bolker and Anthony Stone,
+# ajs1@cam.ac.uk.
+
+# This version last modified on 29 January 1998.
+
+# Usage: bids.to.bibtex <file>
+#
+# will take input from a BIDS email message in <file> in the source directory
+# $sourcedir and produce a BibTeX bibfile <file>.bib in the output directory
+# $bibdir.
+
+# If both files are to be in the current directory, replace the definitions
+# below by
+# $sourcedir = "";
+# $bibdir = "";
+# If the output file exists, the new references are appended to it. Otherwise
+# a new file is created.
+
+# You will need to change the first line of this file if perl lives somewhere
+# other than /usr/bin/perl on your system.
+
+# The BIDS message should have been generated using one of the downloading
+# formats. Other bibliography database output can be processed provided that
+# it is in the same (fairly standard) form, i.e. a sequence of fields each
+# beginning with a two-letter flag at the start of a line, followed by "- ",
+# with continuation lines starting with four spaces. The whole entry is
+# terminated by a blank line. Any lines in the file that do not conform to
+# this pattern are ignored. An example of such an entry is
+# TI- THE NATURE AND GEOMETRY OF INTERMOLECULAR INTERACTIONS BETWEEN
+# HALOGENS AND OXYGEN OR NITROGEN
+# AU- LOMMERSE, JPM;STONE, AJ;TAYLOR, R;ALLEN, FH
+# NA- CAMBRIDGE CRYSTALLOG DATA CTR,12 UNION RD,CAMBRIDGE CB2 1EZ,ENGLAND
+# CAMBRIDGE CRYSTALLOG DATA CTR,CAMBRIDGE CB2 1EZ,ENGLAND
+# UNIV CAMBRIDGE,CHEM LAB,CAMBRIDGE CB2 1EW,ENGLAND
+# JN- JOURNAL OF THE AMERICAN CHEMICAL SOCIETY
+# PY- 1996
+# VO- 118
+# NO- 13
+# PG- 3108-3116
+# IS- 0002-7863
+#
+# Minor variations in this format can be dealt with by changing the "elsif"s
+# near the end of this file.
+
+# Some work will be needed to deal with capitalization and accents in the
+# BibTeX file. The title is converted to lower-case, unless it already
+# contains any lower-case characters, and a few common acronyms are converted
+# back to upper case by subroutine special. Use the examples there as
+# models for your own if you like. An attempt is made to convert chemical
+# formulae, but it is usually necessary to do this by hand. Note that any
+# upper-case material in the title needs to be enclosed in braces, or BibTeX
+# will force it to lower-case again. If your citation format doesn't include
+# the title, then of course this isn't a problem.
+
+# You may wish also to modify the "journal" subroutine, which replaces the
+# full journal title by a conventional abbreviation. This almost certainly
+# doesn't deal with all the journals that you might wish to cite.
+
+# This version assumes perl 5, but it should work with perl 4.
+
+# Please address comments and bug reports to Anthony Stone (ajs1@cam.ac.uk),
+# who will be pleased to receive them but does not promise to do anything
+# about them.
+
+$sourcedir = "/users/anthony/Mail/BIDS/";
+$bibdir = "/users/anthony/bibliography/bibfiles/";
+
+$, = ' '; # set output field separator
+$\ = "\n"; # set output record separator
+
+format OUT =
+^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$line
+ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+$line
+.
+
+%name = (
+ 'TI', 'title',
+ 'AU', 'author',
+ 'NA', 'address',
+ 'JN', 'journal',
+ 'PY', 'year',
+ 'VO', 'volume',
+ 'NO', 'issue',
+ 'PG', 'pages',
+ 'AB', 'abstract',
+ 'KP', 'keywords',
+# 'NA', 'ignore',
+# 'CR', 'ignore',
+# 'RF', 'ignore',
+# 'KP', 'ignore',
+# 'PA', 'ignore'
+ );
+
+@entry{'header','author','title','journal','volume','year','issue','pages',
+ 'keywords','abstract','none'} = ('','','','','','','','','','','');
+$type = 'none';
+
+sub initcaps
+# Capitalise initial letter of every word, lower-case the rest
+{
+ local ($arg) = $_[0];
+ $arg =~ s/([A-Za-z])([A-Za-z]+)/\U$1\E\L$2\E/g;
+ $arg;
+}
+
+sub firstupper
+# Capitalise initial letter of every sentence, lower-case the rest
+{
+ local ($arg) = $_[0];
+ $arg =~ s/(.)(.*)/\U$1\E\L$2\E/;
+ $arg =~ s/([.?!]\s+)([a-z])/$1\u$2/g;
+ $arg;
+}
+
+sub lowercase
+{
+ local ($arg) = $_[0];
+ $arg =~ s/(.*)/\L$1\E/;
+ $arg;
+}
+
+sub lowertrivial
+{
+ local ($arg) = $_[0];
+ $arg =~ s/\ba\b/a/gi;
+ $arg =~ s/\ban\b/an/gi;
+ $arg =~ s/\band\b/and/gi;
+ $arg =~ s/\bthe\b/the/gi;
+ $arg =~ s/\bof\b/of/gi;
+ $arg =~ s/\bto\b/to/gi;
+ $arg =~ s/\bfrom\b/from/gi;
+ $arg =~ s/\bin\b/in/gi;
+ $arg =~ s/\bwith\b/with/gi;
+ $arg;
+}
+
+sub special
+# Add your own acronyms. Note that the upper-case replacement is enclosed
+# in braces so that BibTeX doesn't put it back into lower-case.
+{
+ local ($arg) = $_[0];
+ $arg =~ s/\bscf\b/{SCF}/g;
+ $arg =~ s/\bmc(-*)scf\b/{MC$1SCF}/g;
+ $arg =~ s/\bci\b/{CI}/g;
+ $arg =~ s/\b([0-9]-[0-9]+)g\b/{$1G}/g;
+ $arg =~ s/\bdna\b/{DNA}/g;
+ $arg =~ s/vanderwaals/{Van} der {Waals}/g;
+ $arg =~ s/moller-plesset/{M}{\\o}ller--{Plesset}/g;
+ $arg;
+}
+
+sub formulae
+# Chemical formulae -- impossible to get them all right
+{
+ local ($arg) = $_[0];
+ $arg =~ s/(\b[a-z]+[1-9]+[a-z0-9]+\b)/{\U$1\E}/gi;
+ $arg;
+}
+
+sub strip
+{
+ local ($val) = $_[0];
+
+ $val =~ s/....//; # chop off initial flag and surrounding spaces
+ $val =~ s/ *$//; # some entries have trailing spaces
+ $val;
+}
+
+sub header
+{
+ $line = "\@article{" . $flag . ",";
+ write(OUT);
+}
+
+sub authors
+{
+ # Transform author entry into BibTeX format and construct flag.
+ # The flag is made up from the first author's surname, followed by the
+ # first letter of the surname of each remaining author, followed by the
+ # last two digits of the year. This is usually unique, but not always.
+ @arr = split(/;/,$entry{'author'});
+ $flag = "";
+ foreach $auth ( @arr)
+ {
+ ($sname,$fname) = split(/, /, $auth);
+ $fname =~ s/\w/$&. /g; $fname =~ s/ *$//;
+ $sname = &initcaps($sname); $sname =~ s/^(Mac|Mc|O')([a-z])/$1\u$2/;
+ # print $fname . " " . $sname . "\n";
+ if ($flag eq "") {$flag=$sname; $flag =~ s/ //g;} else {$flag .= substr($sname,0,1);}
+ $auth = $sname . ', ' . $fname ;
+ }
+ $entry{'author'} = join (" and ", @arr);
+ $flag .= substr($entry{'year'},-2); # append last two digits of year to flag
+ $flag =~ s/ //g;
+}
+
+sub author
+{
+ $line = ' Author = {' . $entry{'author'} . '},';
+ $line = &texsafety ($line);
+ write(OUT);
+}
+
+
+sub address
+{
+ $entry{'address'} =~ s/,([^ ])/, $1/g;
+ $entry{'address'} = &lowertrivial(&initcaps($entry{'address'}));
+ $line = ' Address = {' . $entry{'address'} . '},';
+ $line = &texsafety ($line);
+ write(OUT);
+}
+
+sub title
+{
+ # If the title contains any lowercase characters already, leave it
+ # unchanged. Otherwise convert to lowercase except for first letter of
+ # each sentence, and attempt to uppercase chemical formulae and common
+ # acronyms.
+ if ( $entry{'title'}=~/[a-z]/ ) {
+ $line = $entry{'title'};}
+ else {
+ $line = &formulae(&special(&firstupper($entry{'title'})));}
+ $line = &texsafety($line);
+ $line = ' Title = {' . $line . '},';
+ # print $line;
+ write(OUT);
+}
+
+sub journal
+{
+ $journal = &initcaps($entry{'journal'});
+ $journal =~ s/Journal/J./;
+ $journal =~ s/Chemical|Chemistry/Chem./;
+ $journal =~ s/Physics|Physical/Phys./;
+ $journal =~ s/Society/Soc./;
+ $journal =~ s/Communications/Comm./;
+ $journal =~ s/Transactions/Trans./;
+ $journal =~ s/Reviews/Rev./;
+ $journal =~ s/-Chemical/ Chem./;
+ $journal =~ s/-Faraday/ Faraday/;
+ $journal =~ s/Discussions/Disc./;
+ $journal =~ s/American/Amer./;
+
+ $journal =~ s/(\s)a\s/$1/gi;
+ $journal =~ s/(\s)an\s/$1/gi;
+ $journal =~ s/(\s)and\s/$1/gi;
+ $journal =~ s/(\s)the\s/$1/gi;
+ $journal =~ s/(\s)of\s/$1/gi;
+ $journal =~ s/(\s)to\s/$1/gi;
+ $journal =~ s/(\s)from\s/$1/gi;
+ $journal =~ s/(\s)in\s/$1/gi;
+ $journal =~ s/(\s)with\s/$1/gi;
+ $line = ' Journal = {' . $journal . '},';
+ write(OUT);
+}
+
+sub year
+{
+ $line = ' Year = {' . $entry{'year'} . '},';
+ write(OUT);
+}
+
+sub volume
+{
+ $line = ' Volume = {' . $entry{'volume'} . '},';
+ write(OUT);
+}
+
+sub pages
+{
+ $line = ' Pages = {' . $entry{'pages'} . '}';
+ if ( $entry{'abstract'} ne "" || $entry{'keywords'} ne "" ) {$line .= ',';}
+ $line = &texsafety ($line);
+ write(OUT);
+}
+
+sub keywords
+{
+ if ( $entry{'keywords'} ne "" ) {
+ $line = ' Keywords = {' . &lowercase($entry{'keywords'}) . '}';
+ if ( $entry{'abstract'} ne "" ) {$line .= ',';}
+ write(OUT);}
+}
+
+sub abstract
+{
+ if ( $entry{'abstract'} ne "" ) {
+ $line = ' Abstract = {' . $entry{'abstract'} . '}';
+ $line = &texsafety ($line);
+ write(OUT);}
+}
+
+sub issue
+{
+}
+
+sub terminator
+{
+ $line = "}";
+ write(OUT);
+ print OUT "\n";
+}
+
+sub clear
+{
+ $entry{'author'} = '';
+ $entry{'title'} = '';
+ $entry{'journal'} = '';
+ $entry{'volume'} = '';
+ $entry{'year'} = '';
+ $entry{'page'} = '';
+ $entry{'issue'} = '';
+ $entry{'abstract'} = '';
+}
+
+
+sub texsafety
+{
+ # Replace % and & by \% and \&.
+ $arg = $_[0];
+ $arg =~ s/\&/\\&/g;
+ $arg =~ s/\%/\\%/g;
+ $arg;
+}
+
+while ($file = shift) {
+ open(IN,$sourcedir.$file)
+ || die "Can't open ".$sourcedir.$file."\n";
+ if ( -e $bibdir.$file.".bib" ) {
+ warn $file.".bib exists -- appending\n";
+ open(OUT,">>" . $bibdir.$file . ".bib");}
+ else {
+ open(OUT,">" . $bibdir.$file . ".bib");}
+ while (<IN>) {
+ # print;
+ chop; # strip record separator
+
+ if (/^ *$/ && $type ne 'none' && $type ne 'header' ) {
+ # Entry is complete. Process and print it.
+ & authors;
+ & header;
+ & author;
+ & address;
+ & title;
+ & journal;
+ & year;
+ & volume;
+ & issue;
+ & pages;
+ & keywords;
+ & abstract;
+ & terminator;
+ $type = 'none';
+ & clear; }
+
+ else {
+ if (/^record/i) {
+ $type = 'header';
+ $entry{$type} = $_;
+ }
+ elsif (/^\(([0-9]+)\)/) {
+ die "Input appears to be in the wrong format. You need to use 'downloading' format.\n";
+ }
+
+ elsif (/^ / && $type ne 'none' && $type ne 'ignore') {
+ $entry{$type} .= " " . & strip($_);
+ }
+ elsif (/^([A-Z][A-Z])- /i) {$tag=$1;
+ if ( defined($name{$tag}) ) {
+ $type = $name{$tag};
+ $entry{$type} = & strip ($_) ;
+ }
+ else {
+ $type = "ignore";
+ $entry{$type} = "";
+ }
+ }
+
+ # print "$type : $entry{$type}\n";
+ }
+ }
+close IN;
+close OUT;
+}
diff --git a/biblio/bibtex/utils/ebib/ChangeLog b/biblio/bibtex/utils/ebib/ChangeLog
new file mode 100644
index 0000000000..0dba0ab80c
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/ChangeLog
@@ -0,0 +1,1118 @@
+2009-07-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-search-crossref): new.
+ (ebib-entry-summary): modified to use with-help-window instead of
+ with-output-to-temp-buffer.
+
+2009-07-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-push-bibtex-key): renamed from ebib-push-entry-key
+ in accordance with ebib-insert-bibtex-key.
+ (ebib-insertion-commands): new.
+ (ebib-insertion-strings): removed.
+
+2008-08-01 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-entry-types-hash): removed.
+ (ebib-set-entry-types-hash): removed.
+ (ebib-set-unique-field-list): new.
+ (ebib-get-obl-fields): modified to use ebib-entry-types directly,
+ rather than the (now defunct) ebib-entry-types-hash.
+ (ebib-get-opt-fields): same.
+ (ebib-find-bibtex-entries): same.
+ (ebib-edit-entry-type): same.
+
+2008-06-15 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-read-string): bug fix: ebib would choke on bibtex
+ entries that have a space after the entry type but before the
+ opening parenthesis/brace. bug reported and fix provided by Rupert
+ Swarbrick.
+
+2008-05-31 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-window-size): "key buffer" in the doc string
+ changed to "index buffer".
+
+2008-05-30 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-call-file-viewer): modified to use
+ file-name-extension. is probably a safer bet that what i used
+ before: (last1 (split-string file "\\.")).
+
+2008-05-21 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-add-entry): bugfix: moved the code that creates
+ the hash table up, so that it appears before ebib-display-entry.
+
+2008-04-21 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: fixed doc strings.
+
+2008-04-20 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-entry-summary): modified: if the ebib buffers are
+ visible, instead of putting the output in a temp buffer, the
+ relevant entry is displayed in the ebib buffers.
+ (ebib) help mode removed.
+ (ebib-show-log): modified: in split-frame layout the window's
+ dedicated flag must be temporarily unset in order to switch to the
+ strings-buffer.
+ (ebib-quit-log-buffer): same.
+ (ebib-set-index-highlight): modified: move cursor to beginning of
+ line after setting the highlight.
+ (ebib-set-fields-highlight): same.
+ (ebib-set-strings-highlight): same.
+ (ebib-edit-entry): removed goto-char and switch-to-buffer.
+ (line-number-at-pos): this is called line-number in xemacs, so an
+ alias is defined.
+ (ebib-match-paren-forward): added "" to error, to keep xemacs from complaining.
+ (ebib-match-quote-forward): same.
+ (ebib-setup-windows): added delete-other-windows in full-frame layout.
+ (ebib-export-to-db): modified to use gensym.
+ (ebib-export-to-file): same.
+
+2008-04-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-pre-ebib-window): new.
+ (ebib-setup-windows): added ebib-pre-ebib-window.
+ (ebib-quit): added ebib-pre-ebib-window.
+ (ebib-lower): modified to use ebib-pre-ebib-window.
+ (ebib-edit-entry-type): modified to use ebib-layout.
+ (ebib-edit-crossref): same.
+ (ebib-fill-entry-buffer): added skip-chars-forward: the cursor
+ usually appears directly after the field name.
+ (ebib-edit-crossref): modified to make the crossref field the
+ current field again.
+ (ebib-redisplay-current-field): same.
+ (ebib-temp-window): new.
+ (ebib-leave-multiline-edit): removed.
+ (ebib-leave-multiline-edit-buffer): new.
+ (ebib-quit-multiline-edit): new.
+ (ebib-cancel-multiline-edit): modified to use
+ ebib-leave-multiline-edit-buffer.
+ (ebib-edit-multiline-field): modified to use ebib-temp-window.
+ (ebib-edit-multiline-string): same.
+ (ebib-multiline-edit): modified: sets the buffer's modified flag
+ to nil.
+ (ebib-edit-strings): modified: in split-frame layout the window's
+ dedicated flag must be temporarily unset in order to switch to the
+ strings-buffer.
+ (ebib-quit-strings-buffer): same.
+
+2008-04-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib): added nil as second argument (norecord) to
+ select-window.
+ (ebib-setup-windows): modified. now uses ebib-layout to choose the
+ desired window layout.
+ (ebib-delete-window): removed. i really don't think we need this.
+ (ebib-lower): removed call to ebib-delete-windows.
+ (ebib-quit): modified: put all the kill-buffers into a mapc.
+ (ebib-select-other-window): removed.
+ (ebib-leave-ebib-windows): new. bound to "z" and "C-xb".
+ (ebib-lower): modified: now simply leaves the ebib buffers if
+ requested. rebound to "Z".
+
+2008-04-18 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-search-next): changed $ in search string to space:
+ with ebib-index-display-fields, index entries now have a space
+ after the entry key.
+ (ebib-call-file-viewer): new.
+ (ebib-file-regexp): added a space to the regexp. (!)
+ (ebib-browse-url-in-field): changed the doc string.
+ (ebib-view-file-in-field): new.
+ (ebib-view-file-in-field): new. bound to 'f' in the entry buffer.
+ (ebib-file-associations): changed default value: paths removed
+ from the programs, as start-process searches the user's PATH.
+
+2008-04-17 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-view-file): new. bound to 'f' in the index
+ buffer. (which means that 'f' is no longer bound to
+ ebib-print-filename.
+
+2008-04-11 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-layout): new.
+ * ebib.el (ebib-add-entry): used ebib-display-entry to insert the
+ new entry in the buffer.
+
+2008-04-11 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-add-entry): inserted a space in the format string
+ that puts the new entry key into the buffer. this way
+ ebib-set-index-highlight doesn't put the end of the highlight at
+ the next line.
+
+2008-03-26 Morgan Veyret <patzy@appart.kicks-ass.net>
+
+ * ebib.el (ebib): changed to check if ebib is visible
+ already. window setup moved to ebib-setup-windows.
+ (ebib-setup-windows): new.
+ (ebib-delete-windows): new.
+ (ebib-select-other-window): new. Bound to C-xb.
+ (ebib-quit-entry-buffer): use get-buffer-window to find the index
+ buffer.
+ (ebib-entry-summary): modified to direct output to *Ebib-entry*
+ buffer.
+
+2008-03-26 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-mode): set truncate-lines to t, which works
+ better if ebib-index-dislay-fields is set.
+ (ebib-set-index-highlight): changed so that it highlights the
+ entire line if ebib-index-display-fields is set.
+
+2008-03-25 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-additional-fields): added 'file' to the default
+ value.
+ (ebib-url-regexp): changed doc string.
+ (ebib-standard-file-field): new.
+ (ebib-file-associations): new.
+ (ebib-file-regexp): new.
+ (ebib-file-search-dirs): new.
+
+2008-03-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-display-entry): added set-buffer.
+
+2008-03-18 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-display-fields): new.
+ (ebib-display-entry): new.
+ (ebib-fill-index-buffer): modified so as to make use of
+ ebib-display-entry.
+ (ebib-edit-keyname): same.
+ (ebib-set-index-highlight): changed end-of-line into
+ skip-chars-forward because of ebib-index-display-fields.
+ (ebib-select-entry): same.
+
+2007-11-15 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-syntax-table): modified the syntax classes for ()
+ and [] to punctuation character. Not that it really matters, though.
+
+2007-11-10 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: removed empty lines after the first line of doc
+ strings. (this is apparently not an Emacs convention...)
+ (ebib-read-entry): changed warning message for duplicate entries.
+ (ebib-read-string): same.
+
+2007-11-09 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-match-quote-forward): reworked a bit.
+ (ebib-show-log): new.
+ (ebib-index-mode-map): added "l" key, bound to ebib-show-log.
+ (ebib-log-mode-map): new.
+ (ebib-log-mode): new.
+ (ebib-quit-log-buffer): new.
+ (ebib-match-delim-forward): new.
+ (ebib-read-string): modified to use ebib-match-delim-forward.
+ (ebib-read-preamble): added a test to check for the result of
+ ebib-match-paren-forward.
+ (ebib-find-bibtex-entries): added test to check if
+ ebib-read-preamble returns non-nil.
+ (ebib-find-end-of-field): modified to use ebib-match-delim-forward.
+ (ebib-create-buffers): added initial message to the log buffer.
+
+2007-11-08 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-lower): added bury-buffer command for ebib-log-buffer.
+ (ebib-quit): added kill-buffer commands for ebib-log-buffer and ebib-strings-buffer.
+
+2007-11-07 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-merge-bibtex-file): added final call to ebib-log,
+ to insert "\n\f\n".
+ (ebib-find-bibtex-entries): added "Line" to warning message.
+ (ebib-read-string): same.
+ (ebib-read-entry): same.
+ (ebib-log): added save-excursion, so that the ebib log buffer is
+ only current during this function. also modified to no longer set
+ ebib-log-error to 0 unconditionally, instead checks if it's still
+ nil. also modified to use cond.
+ (ebib-match-brace-forward): new. this function handles braces {}
+ only.
+ (ebib-match-paren-forward): modified to handle parenthesis () and
+ braces {} differently.
+ (ebib-match-quote-forward): modified: logs an error when no
+ closing quote is found, and moves point to the char after the
+ opening quote.
+
+2007-11-07 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-log-error): new.
+ (ebib-create-buffers): added creating the log buffer.
+ (ebib-find-bibtex-entries): modified to use ebib-log.
+ (ebib-read-string): same.
+ (ebib-read-entry): same.
+
+2007-11-06 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-customize): added doc string.
+ (ebib-log-buffer): new.
+ (ebib-log): new.
+ (ebib-load-bibtex-file): modified to use ebib-log.
+ (ebib-merge-bibtex-file): same.
+
+2007-11-02 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-syntax-table): new.
+ (ebib-load-bibtex-file): modified to use with-syntax-table.
+ (ebib-merge-bibtex-file): same.
+ (ebib-import): same.
+ (ebib-store-multiline-text): check-parens removed.
+
+2007-10-31 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-init): removed test whether ~/.ebibrc exists; use
+ second (optional) argument to load instead.
+
+2007-10-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-marked-face): turned into a customisable option.
+ (ebib-fill-index-buffer): modified to use ebib-marked-face as a
+ face, rather than a variable.
+ (ebib-mark-entry): same.
+
+2007-10-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-fill-index-buffer): changed mapcar to mapc
+ (prevents compiler warning). fix provided by Leo
+ <sdl.web at gmail.com>.
+ (ebib): added autoload cookie. suggested by Leo
+ <sdl.web at gmail.com>.
+ (ebib-mark-entry): fixed typo: '(face ,ebib-marked-face) to `(face
+ ,ebib-marked-face). fix provided by Leo <sdl.web at gmail.com>.
+
+2007-10-22 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib): modified to store the buffer from which ebib is
+ called in ebib-push-buffer, so that it becomes the default for
+ pushing entries. Thanks to Sinisa Pajevic for the suggestion.
+
+2007-10-20 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-redisplay-current-field): modified. now redisplays
+ the entire entry buffer is the current field is crossref. (cutting
+ the value from the crossref field would leave the inherited field
+ values visible.)
+ (ebib-import): modified to use insert-buffer-substring, rather
+ than buffer-string and insert. this way, there is no need to
+ temporarily store the buffer contents in a variable.
+ (ebib-get-field-highlighted): modified so that it doesn't produce
+ an error if an entry contains a crossref to an entry that does not
+ exist.
+ (ebib-get-local-databases): variable bibfiles removed from the let.
+
+2007-10-20 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-local-bibtex-filenames): renamed from
+ ebib-local-bibtex-filname. this is now a list of strings, rather
+ than a string. thanks to Sinisa Pajevic for pointing out that a
+ \bibliography command can contain more than one .bib file.
+ (ebib-extract-bibfiles): removed.
+ (ebib-get-local-databases): modified to return a list of database
+ filenames. also now uses insert-buffer-substring, rather than a
+ combination of buffer-string and insert.
+ (ebib-insert-bibtex-key): modified so that it can handle multiple
+ bibtex files. this reflects the change to
+ ebib-local-bibtex-filenames.
+ (ebib-entry-summary): same.
+
+2007-10-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-push-entry-key): new. pushes the current entry
+ key, or the marked entry keys, to a buffer, using
+ ebib-insertion-strings. thanks to Sinisa Pajevic for suggesting
+ this feature.
+ (ebib-key "p"): changed to ebib-push-entry-key.
+ (ebib-key "r"): new. assigned to ebib-edit-preamble.
+ (ebib-prefixed-functions): ebib-push-entry-key added.
+ (ebib-push-buffer): new. holds the name of the last buffer to
+ which an entry was pushed, to present it as default in the next
+ push operation.
+ (ebib-insertion-strings): modified default value: 0 added.
+
+2007-10-11 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-get-field-highlighted): modified so as to show
+ field values inherited from a cross-referenced entry.
+ (ebib-crossref-face): new.
+ (ebib-edit-crossref): modified to redisplay the entire entry
+ buffer, not just the current field.
+
+2007-07-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-store-multiline-text): added a check to make sure
+ the text in the buffer doesn't contain unbalanced braces.
+ (ebib-filter-to-virtual-db): changed to give more feedback in the
+ minibuffer about what the user is doing.
+
+2007-06-26 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-insert-bibtex-key): changed to show the cite
+ command that the user has selected through the prefix argument.
+
+2007-04-26 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-standard-url-field): doc string modified.
+
+2007-04-06 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-allow-identical-fields): new.
+ (ebib-find-bibtex-fields): modified so as to use
+ ebib-allow-identical-fields.
+
+2007-03-30 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-url-regexp): bug fix: removed \l from default
+ value.
+
+2007-03-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: Ebib 1.3.0 released.
+
+2007-03-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-mode-map): added "u" key.
+ (ebib-url-field): new.
+ (ebib-url-regexp): new.
+ (ebib-browse-url): new.
+ (ebib-call-browser): new.
+ (ebib-entry-mode-map): added "u" key.
+ (ebib-browse-url-in-field): new.
+ (ebib-call-browser-command): new.
+
+2007-03-28 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (raw-p): regexp "\".*?\" replaced with
+ "\"[^\"]*?\"". The dot doesn't match \n, so a multiline string
+ enclosed by double quotes was incorrectly recognised as a raw
+ string.
+
+2007-03-27 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-export-entry): ebib-execute-when
+ removed. ebib-marked-p replaced with ebib-called-with-prefix.
+ (ebib-export-single-entry): added ebib-execute-when.
+ (ebib-export-marked-entries): same.
+ (ebib-prefix-map): new. (actually, this is ebib-semicolon-map
+ reintroduced under a new name.)
+ (ebib-index-mode-map): binding of the prefix key ";" changed to
+ ebib-prefix-map.
+ (ebib-key): modified so that if the user redefines a key in
+ ebib-index-mode-map, it checks whether the function is bound in
+ ebib-prefix-map as well, and if so, binds it to the same
+ key. Furthermore, if the user unbinds a key, it is unbound in
+ ebib-prefix-map as well.
+ (ebib-marked-p): removed.
+ (ebib-prefixed-functions): new.
+ (ebib-prefix-key): new.
+ (ebib-key): modified so that it unsets the current prefix key if
+ the user redefines the prefix key with mark-prefix.
+ (ebib-index-mode-map): key bindings no longer done in the defvar
+ definition, but at top level with ebib-key. Using ebib-key has the
+ advantage that ebib-prefix-map is automatically set up correctly
+ as well.
+
+2007-03-26 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-called-with-prefix): new.
+ (ebib-marked-p): new.
+ (ebib-prefix-key): new.
+ (ebib-key): added clause for mark-prefix.
+ (ebib-delete-marked-entries): removed.
+ (ebib-delete-entry): modified to handle the prefix key.
+ (ebib-export-entry): modified to call either of two helper
+ functions, depending on whether it was called with or without
+ prefix key.
+ (ebib-export-single-entry): new. helper function for
+ ebib-export-entry.
+ (ebib-export-marked-entries): changed into helper function for
+ ebib-export-entry.
+ (ebib-print-database): removed.
+ (ebib-print-marked-entries): removed.
+ (ebib-semicolon-map): removed.
+ (ebib-index-mode-map): binding for L changed to
+ ebib-latex-entries, and binding for P changed to
+ ebib-print-entries.
+ (ebib-print-entries): made interactive and modified to handle
+ marked entries.
+ (ebib-latex-database): removed.
+ (ebib-latex-marked-entries): removed.
+ (ebib-latex-entries): made interactive and modified to handle
+ marked entries.
+ (ebib-mark-all): removed.
+
+2007-03-25 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-remove-entry-from-db): modified so that a deleted
+ entry is also deleted from edb-marked-entries if it's there. This
+ avoids problems when the user deletes a marked entry, and also
+ when he renames the entry key of a marked entry.
+ (ebib-delete-marked-entries): no longer sets edb-marked-entries to
+ nil, as the entries are removed one by one by
+ ebib-remove-entry-from-db.
+ (ebib-edit-keyname): modified so that it marks the renamed entry
+ if it was marked before the renaming.
+ (ebib-unmark-all): renamed to ebib-mark-all.
+ (ebib-mark-all): modified so that it marks all entries if there
+ are no marked entries.
+ (ebib-mark-entry): real-db removed from ebib-execute-when.
+ (ebib-export-entry): modified to include the entry name in the
+ messages passed to ebib-export-to-db and ebib-export-to-file.
+ (ebib-export-string): same with string abbreviation.
+
+2007-03-24 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-export-string): modified to make use of
+ ebib-export-to-db and ebib-export-to-file.
+ (ebib-export-all-strings): same.
+ (ebib-export-preamble): same.
+ (ebib-export-marked-entries): new.
+ (ebib-semicolon-map): new key "x" added.
+ (propertize): new.
+ (ebib-write-database): rewritten to stop XEmacs from
+ complaining. (See arch log for details.)
+ (ebib-export-to-file): modified documentation string, as it said
+ something about insert-fn that isn't correct.
+ (ebib-execute-helper): added marked-entries.
+ (ebib-delete-marked-entries): modified to use marked-entries.
+ (ebib-export-marked-entries): same.
+ (ebib-delete-marked-entries): added default clause to
+ ebib-execute-when.
+ (ebib-print-entries): new. contains most of the code of former
+ ebib-print-database.
+ (ebib-print-database): modified to use ebib-print-entries.
+ (ebib-print-marked-entries): new.
+ (define-prefix-command): new keys "P", "L" and "m".
+ (ebib-mark-entry): modified: no longer adds the text properties to
+ the entry key in the database, just in the index buffer.
+ (ebib-fill-index-buffer): modified so that it adds a highlight to
+ marked entries.
+ (ebib-latex-entries): new. contains most of the code of former
+ ebib-latex-database.
+ (ebib-latex-database): modified to use ebib-latex-entries.
+ (ebib-latex-marked-entries): new.
+ (ebib-unmark-all): new.
+
+2007-03-23 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-export-to-db): new.
+ (ebib-export-to-file): new.
+ (ebib-export-entry): modified to make use of ebib-export-to-db and
+ ebib-export-to-file.
+
+2007-03-20 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-edit-field): changed to unconditionally add braces
+ around the text the user enters. Formerly, this was done through
+ from-raw, which meant that if the user typed braces around the
+ text, these would disappear.
+
+2007-03-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (add-to-listq): added a test for Emacs < 22.
+ (ebib-index-mode-map): removed 'ebib-index-mode-map argument to
+ make-keymap. Emacs officially doesn't even allow it, and in XEmacs
+ it's optional.
+ (ebib-entry-mode-map): same.
+ (ebib-strings-mode-map): same.
+ (ebib-help-mode-map): same.
+ (ebib-semicolon-map): new.
+ (ebib-index-mode-map): added ";" key.
+ (ebib-remove-entry-from-db): bug fix: would delete the key of the
+ current entry from the keys list, regardless of which entry was
+ actually deleted.
+ (ebib-semicolon-map): added "d" key.
+ (ebib-delete-marked-entries): new.
+ (ebib-entry-mode-map): bindings of C-x b and C-x k changed to
+ 'undefined.
+ (disabled): removed. The predefined function undefined does the
+ same thing.
+
+2007-03-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-filter-to-virtual-db): removed the check for the
+ `type' field. What was actually meant was the `type*' field, and
+ since this is not in ebib-unique-field-list anyway, the user isn't
+ able to filter on it.
+
+2007-03-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-mark-entry): added again for the 1.3 branch.
+
+2007-03-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: ebib 1.2.0 released.
+
+2007-03-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-mark-entry): removed in preparation for release.
+
+2007-03-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-print-database): bugfix: if ebib-print-tempfile is
+ set to "", which is its default value, the body of if-str would
+ not be executed.
+ (ebib-latex-database): same.
+
+2007-03-10 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-latex-database): new.
+ (ebib-print-preamble): new.
+ (ebib-print-multiline): new.
+ (ebib-latex-preamble): new.
+ (ebib-print-tempfile): new.
+ (ebib-print-database): modified to use ebib-print-preamble,
+ ebib-print-multiline and ebib-print-tempfile.
+ (ebib-latex-database): added real-db to ebib-execute-when.
+ (ebib-timestamp-format): new.
+ (ebib-insert-entry): modified to use format-time-string and ebib-timestamp-format.
+ (ebib-format-entry): same.
+ (ebib-yank-field-contents): renamed from ebib-paste-field-contents.
+
+2007-03-08 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-print-database): new.
+
+2007-03-06 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-scroll-down): new. replaces ebib-entry-page-up.
+ (ebib-index-scroll-up): new. replaces ebib-entry-page-down.
+ (ebib-follow-crossref): new.
+ (ebib-index-mode-map): added "F" key.
+
+2007-03-02 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-delete-entry): removed optional argument
+ entry-key, as it wasn't used at all.
+
+2007-03-01 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-paste-field-contents): sets this-command to t if
+ called illegally. that way, a second consecutive call to this
+ function is also recognised as illegal.
+
+2007-02-26 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-paste-field-contents): doc string slightly expanded.
+
+2007-02-25 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-paste-field-contents): added test for crossref field.
+ (ebib-paste-field-contents): modified so that repeatedly calling
+ this command walks around the kill ring, just like C-y/M-y.
+
+2007-02-23 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-move-to-field): bug fix: if the field being moved
+ to is type*, used to search for 'type', causing confusion with an
+ actual type field (e.g. in the entry type incollection.) now just
+ moves to (point-min).
+ (ebib-set-modified): bug fix: the modification flag of the index
+ buffer would be (re)set, regardless of whether it actually holds
+ the database whose modification flag is being (re)set.
+
+2007-02-22 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-execute-when): changed so that it does not produce
+ a spurious and if the envs list of a form only contains one element.
+
+2007-02-21 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-print-filter): changed the argument of interactive
+ from "p" to "P", to obtain the raw prefix argument.
+ (ebib-save-current-database): changed message to error.
+ (ebib-print-filter): added a default-clause to ebib-execute-when,
+ to produce a beep.
+ (ebib-prev-entry): same.
+ (ebib-next-entry): same.
+ (ebib-add-entry): same.
+ (ebib-goto-first-entry): same.
+ (ebib-goto-last-entry): same.
+ (ebib-edit-keyname): same.
+ (ebib-mark-entry): same.
+ (ebib-entry-page-up): same.
+ (ebib-entry-page-down): same.
+ (ebib-write-database): same.
+ (ebib-delete-entry): same.
+ (ebib-select-entry): same.
+ (ebib-export-entry): same.
+ (ebib-search): same.
+ (ebib-search-next): same.
+ (ebib-edit-strings): same.
+ (ebib-edit-preamble): same.
+ (ebib-export-preamble): same.
+ (ebib-virtual-db-and): same.
+ (ebib-virtual-db-or): same.
+ (ebib-virtual-db-not): same.
+
+2007-02-20 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-filter-to-virtual-db): fixed a bug: the additional
+ fields weren't included in the collection.
+ (ebib-edit-field): spurious progn removed.
+ (ebib-execute-helper): wrapped in an eval-and-compile because
+ otherwise XEmacs complains that the symbol ebib-execute-helper's
+ value as function is void.
+ (safe-write-region): new. GNU Emacs has an optional argument to
+ write-region that can be used to make sure the user doesn't
+ inadvertently overwrite an already existing file. XEmacs does not
+ have this argument.
+ (ebib-write-database): modified to use safe-write-region.
+ (ebib-insertion-strings): changed the default value from nil to
+ '((1 . "\\cite{%s}")).
+
+2007-02-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-index-mode-map): changed binding for
+ ebib-merge-bibtex-file from "m" to "M".
+ (ebib-index-mode-map): added binding "m" for ebib-mark-entry.
+ (ebib-mark-entry): new.
+ (ebib-marked-face): new. needed to accommodate xemacs. there must
+ be a better way to do this... Note that in xemacs, i know of no
+ better way than to use '(face highlight) for both the overlay
+ marking the current entry and to mark selected entries. that means
+ that you cannot tell if the current entry is selected or not. gnu
+ emacs has highlight and :inverse-video. (though the former may be
+ obsoleted at some point?)
+ (ebib-fill-index-buffer): changed to accommodate xemacs. (see
+ comment in the source.)
+ (ebib-index-buffer-help): updated.
+ (ebib-execute-when): new.
+ (ebib-execute-helper): new.
+ (when-entries): removed. its functionality is now covered by
+ ebib-execute-when.
+ (ebib-write-database): modified to use ebib-execute-when and if-str.
+ (ebib-export-entry): modified to use ebib-execute-when. also added
+ a check to make sure that the goal database is not virtual.
+ (ebib-export-preamble): same.
+ (ebib-export-all-strings): added a check to make sure the goal
+ database is not virtual.
+ (ebib-export-string): same.
+ (ebib-prev-entry): modified to use ebib-execute-when.
+ (ebib-next-entry): same.
+ (ebib-add-entry): same.
+ (ebib-close-database): same.
+ (ebib-goto-first-entry): same.
+ (ebib-goto-last-entry): same.
+ (ebib-edit-entry): same.
+ (ebib-edit-keyname): same.
+ (ebib-entry-page-up): same.
+ (ebib-entry-page-down): same.
+ (ebib-save-database): same.
+ (ebib-save-current-database): same.
+ (ebib-delete-entry): same.
+ (ebib-remove-key-from-buffer): same.
+ (ebib-select-entry): same.
+ (ebib-search): same.
+ (ebib-search-next): same.
+ (ebib-edit-strings): same.
+ (ebib-edit-preamble): same.
+ (ebib-next-database): same.
+ (ebib-prev-database): same.
+ (ebib-virtual-db-and): same.
+ (ebib-virtual-db-or): same.
+ (ebib-virtual-db-not): same.
+ (ebib-print-filter): same.
+
+2007-02-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: ebib-1.1.4 released.
+
+2007-02-19 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-filter-to-virtual-db): changed the collection to
+ contain strings rather than symbols, because xemacs requires that.
+
+2007-02-18 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (add-to-listq): new. introduced mainly because xemacs
+ doesn't allow the fourth argument to add-to-list. (actually, i'm
+ not sure if emacs 21.4 supports it...)
+
+2007-02-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-quit): set ebib-strings-highlight to nil.
+
+2007-02-11 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-unique-field-list): new. used for TAB-completion
+ in ebib-filter-to-virtual-db.
+ (ebib-set-entry-types-hash): modified to set
+ ebib-unique-field-list.
+ (ebib-key): modified to keep the cond statement out of the
+ expansion.
+ (ebib-create-new-database): modified to take an optional database
+ argument: if supplied, returns a copy of that database.
+ (ebib-index-mode-map): added "&", "|", "~" and "V".
+ (ebib-virtual-db-and): new.
+ (ebib-virtual-db-or): new.
+ (ebib-virtual-db-not): new.
+ (ebib-filter-to-virtual-db): new.
+ (ebib-create-virtual-db): new.
+ (contains): new.
+ (ebib-run-filter): new.
+ (ebib-print-filter): new.
+ (ebib-write-database): modified to handle virtual databases.
+ (ebib-edit-entry): modified to exclude virtual databases.
+ (ebib-edit-keyname): same.
+ (ebib-save-current-database): same.
+ (ebib-save-database): same.
+ (ebib-merge-bibtex-file): same
+ (ebib-add-entry): same.
+ (ebib-delete-entry): same.
+ (ebib-export-entry): same.
+ (ebib-edit-strings): same.
+ (ebib-edit-preamble): same.
+ (ebib-export-preamble): same.
+ (ebib-import): same.
+ (ebib-fill-entry-buffer): modified so that it does not result in
+ an error if the current entry does not exist. This is needed in
+ case the user deletes an entry from a database that has a virtual
+ database that containe that entry.
+ (ebib-format-entry): put (eq key 'timestamp) first in the and
+ clause. no need to check timestamp and ebib-use-timestamp for any
+ other field.
+ (ebib-write-database): modified so that when a virtual database is
+ written to a file, it doesn't attempt to put an entry that is
+ still in a virtual database's keys-list but has been deleted in
+ the source database into the new database. (note: this is still
+ not the proper way to handle this. we need to find a clean way to
+ handle the consequences of an entry being deleted in a source
+ database.)
+
+2007-02-10 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (when-entries): included a declare indent statement.
+ (with-buffer-writable): same.
+ (edb): added fields `name' and `virtual'.
+ (ebib-fill-index-buffer): modified to use edb-name.
+ (ebib-load-bibtex-file): same.
+ (ebib-write-database): same.
+ (ebib-search-in-entry): added optional field argument.
+
+2007-02-04 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-goto-next-set): adapted to make use of
+ ebib-move-to-field.
+ (ebib-goto-prev-set): same.
+ (defentry): removed.
+ (ebib-preload): removed.
+ (ebib-additional-fields): removed.
+ (ebib-insert-entry): modified to insert a timestamp, depending on
+ the argument TIMESTAMP and on the setting of EBIB-USE-TIMESTAMP.
+ (ebib-add-entry): modified: it no longer adds a timestamp
+ itself (as it did after the change two days ago) but just requests
+ ebib-insert-entry to do so.
+ (ebib-read-entry): modified to request insertion of a timestamp.
+ (ebib-edit-keyname): modified so as to explicitly NOT insert a
+ timestamp.
+ (ebib-export-entry): modified so as to request insertion of a
+ timestamp, both when exporting to another database and to a file.
+ (ebib-find-bibtex-entries): modified: timestamp argument
+ added. This argument is simply passed on to ebib-read-entry.
+ (ebib-load-bibtex-file): modified so that no timestamp is inserted
+ into the entries read from file.
+ (ebib-import): modified to request insertion of a timestamp.
+ (ebib-format-entry): modified to insert a timestamp if required.
+ (ebib-export-entry): fixed a bug that kept ebib-export-filename
+ from being set.
+ (ebib-export-preamble): same.
+
+2007-02-03 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-format-fields): modified to check if hidden fields
+ should be shown.
+ (ebib-init): added a line to make timestamp a hidden field.
+ (ebib-hide-hidden-fields): new.
+ (ebib-toggle-hidden): new.
+ (ebib-move-to-field): new.
+ (ebib-find-visible-field): new.
+ (ebib-prev-field): rewritten to make use of ebib-move-to-field.
+ (ebib-next-field): same.
+ (ebib-goto-first-field): same.
+ (ebib-goto-last-field): same.
+
+2007-02-02 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-use-timestamp): new.
+ (ebib-add-entry): modified so that it adds a timestamp if
+ ebib-use-timestamp is set.
+
+2007-01-23 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-keys-window-size): new.
+ (ebib): modified to use ebib-keys-window-size.
+ (ebib-entry-page-up): same.
+ (ebib-entry-page-down): same.
+ (ebib-customize): new.
+ (ebib-index-mode-map): added "C" key command.
+
+2007-01-10 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib): added :prefix tag to defgroup.
+
+2006-12-17 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-export-preamble): bug (no message being given
+ after exporting the preamble) fixed.
+
+2006-12-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: Ebib 0.28 released.
+
+2006-12-12 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-edit-crossref): fixed a bug that caused
+ ebib-set-modified not to be executed.
+ (ebib-set-modified): fixed. save-excursion should not be part of
+ the body of UNLESS.
+ (ebib-quit): ebib-default-type no longer set to nil. (quiting and
+ restarting ebib would leave it set to nil.)
+ (ebib-save-xrefs-first): new.
+ (ebib-compare-xrefs): new.
+ (ebib-format-database): modified to put crossreferencing entries
+ first.
+
+2006-11-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: Ebib 0.27 released.
+
+2006-11-01 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-paste-field-contents): combined two nested if's
+ into one or'ed.
+
+2006-10-30 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-format-database): added argument db.
+ (ebib-format-strings): added argument db.
+ (ebib-sort-order): new.
+ (ebib-entry<): new.
+ (ebib-get-sortstring): new.
+ (ebib-insertion-strings): changed to an alist, so that multiple
+ insertion strings can be defined.
+ (ebib-insert-bibtex-key): modified to use the new ebib-insertion-strings.
+
+2006-10-24 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-insert-bibtex-key): changed to use a customisable
+ insertion string.
+ (ebib-insertion-string): new.
+
+2006-10-23 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: Ebib 0.26 released.
+
+2006-10-23 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-set-entry-types-hash): new, to make customising
+ the entry types through the customisation buffer possible.
+ (defentry): modified, so that an entry defined with defentry is
+ also added to the list ebib-entry-types.
+ (ebib-additional-fields): renamed from ebib-ign-fields; modified
+ to check whether a field is already in the list before it is
+ added, so that it is not added twice when Ebib is closed and
+ restarted in the same Emacs session.
+ (ebib-find-bibtex-entries): added modify-syntax-entry, so that
+ users can type (e.g.) "o to create umlaut-o.
+ (ebib-format-database): use mapc on edb-keys-list rather than
+ maphash on edb-database, so that the entries are saved in
+ alphabetical order. (Following a suggestion of Thomas Schmitz.)
+
+2006-10-14 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: added customisation group ebib.
+
+2006-10-01 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-remove-key-from-buffer): added when-entries, to
+ get rid of an error message when the last entry is deleted.
+ (ebib-find-end-of-field): fixed a nasty bug that occurred when
+ reading a .bib-file with an entry in which the last field is raw
+ and is immediately followed by the closing brace. Thanks to Thomas
+ Schmitz for bringing this to my attention.
+
+2006-09-14 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-ign-fields): code, uri and location removed.
+
+2006-08-29 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-find-bibtex-entries): changed to return a list of
+ the number of entries and number of strings found, and a boolean
+ for whether a preamble was found.
+ (ebib-load-bibtex-file): adapted to accept the new return value of
+ ebib-find-bibtex-entries.
+ (ebib-merge-bibtex-file): same.
+ (ebib-import): added.
+
+2006-08-28 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-import): added.
+
+2006-08-25 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el: rearranged some of the variable definitions, so that
+ the entry types can be defined in ebib.el rather than in .ebibrc.
+ (ebib-index-mode-map): put the key definitions back in.
+ (ebib-entry-mode-map): same.
+ (ebib-strings-mode-map): same.
+
+2006-08-18 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib): renamed the keys buffer to index buffer and the
+ fields buffer to entry buffer.
+ (ebib-key): new. to enable customisation of the command keys
+ through .ebibrc.
+ (ebib-index-mode-map): moved key definitions to .ebibrc.
+ (ebib-entry-mode-map): same.
+ (ebib-strings-mode-map): same.
+
+2006-08-17 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-add-entry): rewrote to use ebib-insert-entry.
+
+2006-08-15 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-delete-entry): split into three functions.
+ (ebib-remove-key-from-buffer): split off from ebib-delete-entry.
+ (ebib-remove-entry-from-db): split off from ebib-delete-entry.
+ (ebib-edit-keyname): new. because it partially does the same as
+ ebib-delete-entry, i split up the latter.
+
+2006-08-13 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-edit-field): added special clause for the annote
+ field, so that the user is dropped into the multiline edit buffer.
+
+2005-11-18 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-read-string): changed so that it does not store
+ the braces or quotes surrounding the string.
+ (ebib-match-quote-forward): added a check to make sure that when a
+ double quote is found at the search limit, this isn't mistakenly
+ taken as the matching quote if it is escaped by a backslash.
+
+2005-11-17 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-fields-mode-map): bound C-x k to
+ ebib-quit-fields-buffer.
+ (ebib-strings-mode-map): bound C-x b to ebib-lower, and C-x k to
+ ebib-quit-strings-buffer.
+
+2005-11-05 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-load-bibtex-file): use file-readable-p instead of
+ file-exits-p.
+
+2005-11-04 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-format-fields): new. formats the fields and calls
+ a function to output them.
+ (ebib-fill-fields-buffer): moved the actual formatting and
+ printing code to ebib-format-fields.
+ (ensure-extension): new. make sure a filename has a specific
+ extension.
+ (ebib-load-bibtex-file): changed to use ensure-extension.
+ (remove-from-string): changed to function.
+ (symbol-or-string): same.
+ (ebib-extract-bibfile): new. looks for a \bibliography command in
+ the current buffer and reads its filename.
+ (ebib-get-db-from-filename): new. retrieve a bibtex database based
+ on filename.
+ (ebib-get-local-database): new. finds a database to associate with
+ the LaTeX file in the current buffer.
+ (ebib-insert-bibtex-key): removed option to use a prefix
+ argument. instead uses ebib-get-local-database to select a
+ database to get the keys from.
+ (ebib-entry-summary): new. reads the key at point and displays its
+ entry in a *Help* buffer.
+
+2005-11-03 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-prefix): changed to function.
+ (next-elem): same.
+ (prev-elem): same.
+ (ebib-get-obl-fields): same.
+ (ebib-get-opt-fields): same.
+
+2005-11-02 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (when-entries): new. execute BODY when there is a
+ database open and it contains entries.
+ (ebib-prev-entry): test whether there are entries in the current
+ database.
+ (ebib-next-entry): same.
+ (ebib-prev-entry): test whether there are entries in the current
+ database.
+ (ebib-next-entry): same.
+ (ebib-goto-first-entry): same.
+ (ebib-goto-last-entry): same.
+ (ebib-edit-entry): same.
+ (ebib-entry-page-up): same.
+ (ebib-entry-page-down): same.
+ (ebib-delete-entry): same.
+ (ebib-select-entry): same.
+ (ebib-export-entry): same.
+ (ebib-search-next): same.
+ (ebib-edit-strings): test whether a database is open.
+ (ebib-edit-preamble): same.
+ (ebib-search): test whether there are entries in the current
+ database, and ask for search string inside the function, rather
+ than in (interactive).
+ (ebib-export-preamble): test whether a database is open.
+ (ebib-next-database): same.
+ (ebib-prev-database): same.
+ (disabled): new. does nothing except beep. used to disable C-x k
+ and C-x b in the fields and strings buffers.
+
+2005-11-02 Steve Youngs <steve@sxemacs.org>
+
+ * ebib.el (ebib-init): Don't do anything with `ebib-keys-mode-map'
+ here.
+ (ebib-initial-keys-map): Removed.
+ (ebib-full-keys-map): Removed.
+ (ebib-keys-mode-map): Merge them into here.
+ (ebib-load-bibtex-file): Don't do anything with
+ `ebib-keys-mode-map' here.
+ (ebib-close-database): Ditto.
+ (ebib-fill-keys-buffer): Ditto.
+ (ebib-switch-to-database-nth): Make it compatible with
+ GNU/Emacs.
+
+2005-11-02 Joost Kremers <joostkremers@yahoo.com>
+
+ * ebib.el (ebib-keys-mode): added C-x k and C-x b redefinitions
+ to ebib-initial-keys-map.
+ (ebib-fields-mode): same.
+ (ebib-strings-mode): same.
+ (ebib-t): removed.
+
+2005-11-02 Steve Youngs <steve@sxemacs.org>
+
+ * ebib.el (ebib-init): Copy the "initial keys" keymap into
+ `ebib-keys-mode-map'.
+ (ebib-initial-keys-map): Define all the keys inside the variable
+ definition instead of at top level.
+ (ebib-full-keys-map): Ditto. Also make this keymap's parent be
+ `ebib-initial-keys-map' to save on double defining some keys.
+ (ebib-switch-to-database-nth): New. Convenience function for
+ switching between databases.
+ (ebib-fill-keys-buffer): Set the local keymap to `ebib-keys-mode-map'.
+ (ebib-load-bibtex-file): Copy the "full keys" keymap into
+ `ebib-keys-mode-map'.
+ (ebib-close-database): Copy the "initial keys" keymap into
+ `ebib-keys-mode-map' and reset the local map.
+ (ebib-fields-mode-map): Define the keys in the variable definition
+ instead of at top level.
+ (ebib-strings-mode-map): Ditto.
+ (ebib-help-mode-map): Ditto.
+
diff --git a/biblio/bibtex/utils/ebib/INSTALL b/biblio/bibtex/utils/ebib/INSTALL
new file mode 100644
index 0000000000..fc6e755b9d
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/INSTALL
@@ -0,0 +1 @@
+For installation instructions, see the Ebib manual.
diff --git a/biblio/bibtex/utils/ebib/README b/biblio/bibtex/utils/ebib/README
new file mode 100644
index 0000000000..00ad31d814
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/README
@@ -0,0 +1,14 @@
+Ebib
+
+(c) 2003-2008 Joost Kremers
+
+Ebib is a BibTeX database manager that runs in GNU Emacs and
+XEmacs. With Ebib, you can create and manage .bib-files, all within
+Emacs. It supports @string and @preamble definitions, multi-line field
+values, searching, and integration with Emacs' (La)TeX mode.
+
+See the Ebib manual for usage and installation instructions.
+
+The latest release version of Ebib, contact information and mailing list
+can be found at <http://ebib.sourceforge.net>. Development sources can be
+found at <http://repo.or.cz/w/ebib.git>.
diff --git a/biblio/bibtex/utils/ebib/VERSION b/biblio/bibtex/utils/ebib/VERSION
new file mode 100644
index 0000000000..27f9cd322b
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/VERSION
@@ -0,0 +1 @@
+1.8.0
diff --git a/biblio/bibtex/utils/ebib/doc/ebib-manual.pdf b/biblio/bibtex/utils/ebib/doc/ebib-manual.pdf
new file mode 100644
index 0000000000..cd8fa80dcf
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/doc/ebib-manual.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/ebib/doc/html/ebib-manual.css b/biblio/bibtex/utils/ebib/doc/html/ebib-manual.css
new file mode 100644
index 0000000000..cf8e846b62
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/doc/html/ebib-manual.css
@@ -0,0 +1,61 @@
+body {
+ font-family: Verdana, "Bitstream Vera Sans", sans-serif;
+ background-color: #c9c9c9;
+ color: #33333A;
+}
+
+a {
+ text-decoration: none;
+ color: #533333;
+ font-weight: bold;
+}
+
+a:hover {
+ text-decoration: none;
+ color: #cf1212;
+}
+
+h1 {
+ text-align: center
+}
+
+img {
+ border: 0;
+}
+
+#main {
+ position: absolute;
+/* margin-right: 20%; */
+ margin-left: 50px;
+ top: 100px;
+ text-align: justify;
+ width: 600px;
+}
+
+#menu {
+ position: absolute;
+/* margin-left: 78%; */
+ margin-left: 710px;
+ top: 120px;
+ width: 250px;
+ background-color: #a01c1c;
+ height: 740px;
+ padding: 10px;
+ color: #c9c9c9;
+}
+
+#menu a {
+ text-decoration: none;
+ color: #ffa71d;
+}
+
+#menu a:hover {
+ text-decoration: none;
+ color: #ffdf20;
+}
+
+.bottom-dweller {
+ width: 100%;
+ position: absolute;
+ bottom: 0%;
+}
diff --git a/biblio/bibtex/utils/ebib/doc/html/ebib-manual.html b/biblio/bibtex/utils/ebib/doc/html/ebib-manual.html
new file mode 100644
index 0000000000..a5ba2de5b4
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/doc/html/ebib-manual.html
@@ -0,0 +1,2224 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Ebib Manual</title>
+ <meta name="generator" content="muse.el" />
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1" />
+ <link rel="stylesheet" type="text/css" media="screen" href="ebib-manual.css" />
+ </head>
+ <body>
+ <h1>Ebib Manual</h1>
+ <!-- Page published by Emacs Muse begins here -->
+<div id="menu">
+
+<div class="contents">
+<dl>
+<dt>
+<a href="#sec1">Installation</a>
+</dt>
+<dt>
+<a href="#sec2">Basic Usage</a>
+</dt>
+<dd>
+<dl>
+<dt>
+<a href="#sec3">Getting Started</a>
+</dt>
+<dt>
+<a href="#sec4">Editing the Database</a>
+</dt>
+<dt>
+<a href="#sec5">Saving a Database</a>
+</dt>
+<dt>
+<a href="#sec6">Searching</a>
+</dt>
+<dt>
+<a href="#sec7">LaTeX Integration</a>
+</dt>
+<dt>
+<a href="#sec8">Cross-referencing</a>
+</dt>
+<dt>
+<a href="#sec9">Printing the Database</a>
+</dt>
+<dt>
+<a href="#sec10">Marking Entries</a>
+</dt>
+<dt>
+<a href="#sec11">Calling a Browser</a>
+</dt>
+<dt>
+<a href="#sec12">Viewing Files</a>
+</dt>
+</dl>
+</dd>
+<dt>
+<a href="#sec13">Advanced Features</a>
+</dt>
+<dd>
+<dl>
+<dt>
+<a href="#sec14">Screen Layout</a>
+</dt>
+<dt>
+<a href="#sec15">Preloading <code>.bib</code> Files</a>
+</dt>
+<dt>
+<a href="#sec16"><code>@Preamble</code> Definition</a>
+</dt>
+<dt>
+<a href="#sec17"><code>@String</code> Definitions</a>
+</dt>
+<dt>
+<a href="#sec18">Sorting the <code>.bib</code> file</a>
+</dt>
+<dt>
+<a href="#sec19">Merging and Importing</a>
+</dt>
+<dt>
+<a href="#sec20">Exporting Entries</a>
+</dt>
+<dt>
+<a href="#sec21">Timestamps</a>
+</dt>
+<dt>
+<a href="#sec22">Multiple Identical Fields</a>
+</dt>
+<dt>
+<a href="#sec23">Virtual Databases</a>
+</dt>
+<dt>
+<a href="#sec24">The Multiline Edit Buffer</a>
+</dt>
+</dl>
+</dd>
+<dt>
+<a href="#sec25">The Ebib Buffers</a>
+</dt>
+<dd>
+<dl>
+<dt>
+<a href="#sec26">The Index Buffer</a>
+</dt>
+<dt>
+<a href="#sec27">The Entry Buffer</a>
+</dt>
+<dt>
+<a href="#sec28">The Strings Buffer</a>
+</dt>
+</dl>
+</dd>
+<dt>
+<a href="#sec29">Customisation</a>
+</dt>
+<dd>
+<dl>
+<dt>
+<a href="#sec30">The Customisation Buffer</a>
+</dt>
+<dt>
+<a href="#sec31">Modifying Key Bindings</a>
+</dt>
+</dl>
+</dd>
+</dl>
+</div>
+
+
+</div>
+
+<div id="main">
+
+<p>Ebib is a program with which you can manage BibTeX database files without
+having to edit the raw <code>.bib</code> files. It runs in GNU/Emacs, version 21.1 or
+higher (lower versions are not supported) and XEmacs (at least from version
+21.4; lower version have not been tested, but may work.)</p>
+
+<p>It should be noted that Ebib is <em>not</em> a minor or major mode for editing
+BibTeX files. It is a program in itself, which just happens to make use of
+Emacs as a working environment, in the same way that for example Gnus is.</p>
+
+<p>The advantage of having a BibTeX database manager inside Emacs is that X is
+no longer required, as Emacs can run on the console, and also that some
+integration with Emacs' TeX and LaTeX modes becomes possible. For example,
+you can push a BibTeX key from Ebib to a LaTeX buffer, or, vice versa, when
+you're in a LaTeX buffer, you can consult your BibTeX database and insert a
+key from it into the document. Another advantage of Ebib is that it is
+completely controlled by key commands: no stressful mouse movements are
+required, as with most other (usually X-based) BibTeX database managers.</p>
+
+
+<h2><a name="sec1" id="sec1"></a>
+Installation</h2>
+
+<p class="first">To install Ebib, so that it will be loaded automatically when Emacs is
+started, simply copy the file <code>ebib.el</code> to somewhere in your load path and
+add the following line to Emacs' init file (<code>~/.emacs</code> for GNU/Emacs,
+<code>~/.xemacs/init.el</code> for XEmacs):</p>
+
+<pre class="example">
+(autoload 'ebib &quot;ebib&quot; &quot;Ebib, a BibTeX database manager.&quot; t)
+</pre>
+
+<p>Note: if you do not know what your load path is set to, go to the <code>*scratch*</code>
+buffer, type <code>load-path</code> on an empty line, put the cursor right after it and
+type <code>C-j</code>. The value of <code>load-path</code> will then appear in the buffer.</p>
+
+<p>When Ebib is loaded, you can run it with <code>M-x ebib</code>. This command is also
+used to return to Ebib when you have put the program in the background. You
+can bind this command to a key sequence by putting something like the
+following in Emacs' init file:</p>
+
+<pre class="example">
+(global-set-key &quot;\C-ce&quot; 'ebib)
+</pre>
+
+<p>You can of course choose any key combination you like. (In Emacs, key
+combinations of <code>C-c &lt;letter&gt;</code> are reserved for the user, so that no package
+may set them.)</p>
+
+<p>It is recommended to byte-compile the source, Ebib runs quite a lot faster
+when it is byte-compiled. You can do this either within Emacs with <code>M-x
+byte-compile-file</code>, or from your shell by going into the directory where you
+put <code>ebib.el</code> and typing:</p>
+
+<pre class="example">
+emacs -batch -f batch-byte-compile ebib.el
+</pre>
+
+<p>(Substitute <code>emacs</code> with <code>xemacs</code> if you use XEmacs.) This will create a file
+<code>ebib.elc</code>, which Emacs will load instead of <code>ebib.el</code>. Byte-compiling Ebib may
+produce a warning about functions that are ``not known to be
+defined''. This can be safely ignored. GNU Emacs and XEmacs have some small
+differences, and the functions reported in this warning are those used by
+the other version. Ebib makes sure that the correct functions are called.</p>
+
+
+
+
+<h2><a name="sec2" id="sec2"></a>
+Basic Usage</h2>
+
+<p class="first">A BibTeX database is somewhat of a free-form database. A BibTeX entry
+consists of a set of field-value pairs. Furthermore, each entry is known by
+a unique key. The way that Ebib navigates this database is by having two
+windows, one that contains a list of all the entry keys in the database,
+and one that contains the fields and values of the currently highlighted
+entry.</p>
+
+<p>When Ebib is started, the current windows in Emacs are hidden and the Emacs
+frame is divided into two windows. The top one contains a buffer that is
+called the <em>index buffer</em>, while the lower window contains the <em>entry
+buffer</em>. When a database is loaded, the index buffer holds a list of all the
+keys in the database. You can move through these keys with the cursor
+keys. In the entry buffer, the fields of the currently highlighted entry
+are shown, with their values.</p>
+
+<p>In this chapter, all basic functions of Ebib are described, so that you can
+get startet with it. At times, reference will be made to later chapters,
+where more specific functions are described.</p>
+
+
+
+<h3><a name="sec3" id="sec3"></a>
+Getting Started</h3>
+
+<p class="first">Ebib is started with the command <code>M-x ebib</code>. Entering this command hides all
+the windows in the current Emacs frame and replaces them with two windows:
+the top one contains the index buffer, the bottom one, taking up the larger
+part of the screen, contains the entry buffer. The index buffer is named
+<code>none</code>, to indicate that no database has been loaded. If you open a database,
+or start a new one, the index buffer will carry its name.</p>
+
+<p>You can quit Ebib by typing <code>q</code>. You will be asked for confirmation, and you
+will receive a warning if you happen to have an unsaved database. The
+command <code>z</code> can also be used to leave Ebib. However, unlike <code>q</code>, which
+completely quits Ebib, <code>z</code> only lowers it, so that it remains active in the
+background. The <code>.bib</code> files that you have opened remain loaded, and you can
+return to them by typing <code>M-x ebib</code> again.</p>
+
+
+<h4>Opening a <code>.bib</code> file</h4>
+
+<p class="first">Loading a <code>.bib</code> file into Ebib is done with the command <code>o</code>. Ebib reads the
+file that you specify, and reports how many entries it found, how many
+<code>@string</code> definitions it found, and whether a <code>@preamble</code> was found. Note that
+when Ebib reads a <code>.bib</code> file, it only reads entry types (e.g. <code>book, article,
+phdthesis</code> etc.) that it knows about. Fields (e.g. <code>author, title, year</code> etc.)
+that Ebib does not know about, are loaded (and saved) but not displayed, so
+they cannot be edited. Therefore, you should make sure that all the entry
+types and fields that your databases use are defined. A sensible set has
+been predefined, so that anyone who's using standard BibTeX entry types
+should have no problem loading an existing <code>.bib</code> file into Ebib. If,
+however, you have custom entry types, or custom fields in your <code>.bib</code> files,
+you should read the chapter on customising Ebib to learn how to define
+them, so that Ebib knows about them. (See <a href="#entry-types">Entry types</a>.)</p>
+
+<p>Every time Ebib reads a <code>.bib</code> file, it produces a few log messages. These
+are written into a special buffer <code>*Ebib-log*</code>. If Ebib encounters entry
+types in the <code>.bib</code> file that it doesn't know, it will log a warning. If Ebib
+finds something that it believes to be incorrect, an error will be
+logged. If any warnings or errors occur while loading the <code>.bib</code> file, Ebib
+tells you so after loading the file. To view the log file, press <code>l</code> in the
+index buffer.</p>
+
+<p>Note that even if it detects warnings or errors, Ebib will try to continue
+parsing the rest of the <code>.bib</code> file. That means that normally, only the entry
+in which an error occurs is not read. Entries occurring after the
+problematic one are read.</p>
+
+
+
+<h4>Navigating a <code>.bib</code> file</h4>
+
+<p class="first">Once you've opened a <code>.bib</code> file, the keys of all the entries in the file are
+shown in alphabetical order in the index buffer in the top Ebib window. (In
+fact, it is possible to show more than just the entry key in this
+buffer. See <a href="#index-display-fields">Index Display Fields</a> on how to accomplish this.) The first
+entry is highlighted, meaning it is the current entry. The fields it holds
+and their values are shown in the entry buffer in the bottom Ebib
+window. The first field is the type field, which tells you what kind of
+entry you're dealing with (i.e. <code>book, article</code>, etc.).</p>
+
+<p>Below the type field, Ebib displays (up to) three sets of fields. The first
+set are the so-called obligatory fields, the fields that BibTeX requires to
+be filled. The second group are the optional fields, which do not have to
+be filled but which BibTeX will normally add to the bibliography if they do
+have a value. The third group are the so-called additional fields. These
+fields are usually ignored by BibTeX (note that BibTeX normally ignores
+<em>all</em> fields it does not know), although there are bibliography styles that
+treat some of these fields as optional rather than as additional; (i.e.,
+the <code>harvard</code> styles do typeset the <code>url</code> field, if present.)</p>
+
+<p>The first two groups of fields are different for each entry type, while the
+third group are common to all entry types. You can use the additional
+fields, for example, to add personal comments to the works in your
+database. Ebib by default defines the following additional fields:
+<code>crossref, url, annote, abstract, keywords, file</code> and <code>timestamp</code>. If these are
+not sufficient for you, you need to customise Ebib and add your own
+fields. (See <a href="#additional-fields">Additional Fields</a>, if you need to find out how to do that.)</p>
+
+<p>To move around in the index buffer, you can use the <code>up</code> and <code>down</code> cursor
+keys, <code>C-p</code> and <code>C-n</code>, or for those more used to mutt's key bindings, <code>k</code> and
+<code>j</code>. Furthermore, <code>Space</code> and <code>PgDn</code> move a screenful of entries down, while <code>b</code>
+and <code>PgUp</code> move in the other direction. Lastly, <code>g</code> and <code>Home</code> move to the first
+entry, while <code>G</code> and <code>End</code> move to the last one.</p>
+
+<p>Ebib is not restricted to opening just one <code>.bib</code> file at a time. You can
+open more files by just typing <code>o</code> again and entering the filename. Ebib
+numbers the databases: the number of each database is shown in the mode
+line of the index buffer, directly before the database name. The keys 1&mdash;9
+provide a quick way of jumping from one database to another. Note that the
+numbering is dynamic: if you have three databases opened and then close the
+second, database 3 becomes database 2.</p>
+
+<p>With the <code>left</code> and <code>right</code> cursor keys, you can move to the previous or next
+database. These keys wrap, so if you hit the <code>left</code> cursor key while the
+first database is active, you move to the last database. If you are done
+with a database and want to close it, type <code>c</code>. This closes the current
+database. It does not leave Ebib, and all other databases you have open
+will remain so.</p>
+
+
+
+<h4>Starting a New <code>.bib</code> File</h4>
+
+<p class="first">If you want to start a new <code>.bib</code> file from scratch, you cannot just go and
+enter entries. You first have to give the database a name. So, to start a
+new database, type <code>o</code> first, and give the new file a name. Once you have
+done this, you can start adding entries to the database.</p>
+
+
+
+
+<h3><a name="sec4" id="sec4"></a>
+Editing the Database</h3>
+
+<p class="first">Of course, being able to open and view <code>.bib</code> files is only half the fun. One
+needs to be able to edit the files as well. Ebib's essential editing
+facilities are discussed here.</p>
+
+
+<h4>Adding and Deleting Entries</h4>
+
+<p class="first">To add an entry to a database, you type <code>a</code>. When you do this, Ebib first
+asks you for an entry key, as every entry must be identified by a unique
+key. Just type a name for the new entry (say <code>jones1998</code>). Since the entry
+key must be unique, Ebib will complain if you enter a key that already
+exists.</p>
+
+<p>Note that if you should later decide that you want to change the key of an
+entry, you can do so with the command <code>E</code>. So if you have an entry with the
+key <code>jones1998</code> and you want to add another entry by Jones from 1998, you can
+call the new one <code>jones1998b</code> and rename the existing one to <code>jones1998a</code>.</p>
+
+<p>Deleting an entry is done with <code>d</code>. Be careful with this: you will be asked
+for confirmation, but once you've confirmed, the entry is gone, and it is
+not possible to bring it back. There is no undo in Ebib. (If you haven't
+saved the database yet, it is still possible to retrieve the deleted entry
+from the <code>.bib</code> file, and otherwise it may still be in the backup file that
+Ebib creates. See <a href="#saving-database">Saving a Database</a>.)</p>
+
+
+
+<h4>Editing Fields Values</h4>
+
+<p class="first">Editing the field values for an entry is done in the lower of the two Ebib
+buffers, the so-called entry buffer. You can move focus to the entry buffer
+by typing the command <code>e</code> in the index buffer.</p>
+
+<p>You can move between fields with the same keys that you use to move between
+entries in the index buffer: the cursor keys <code>up</code> and <code>down</code>, <code>C-p</code> and <code>C-n</code>, or <code>j</code>
+and <code>k</code>. <code>Space</code> and <code>PgDn</code> move to the next set of fields, while <code>PgUp</code> and <code>b</code> move
+to the previous set of fields. <code>g</code> and <code>G</code>, and <code>Home</code> and <code>End</code> also work as
+expected.</p>
+
+<p>Editing a field value can be done with <code>e</code>. For most fields, Ebib simply asks
+you for a string value in the minibuffer. (Here, <code>RET</code> confirms the edit,
+while <code>C-g</code> cancels it.) Although BibTeX requires that field values be
+surrounded by braces {} (or double quotes &quot;&quot;, but Ebib does not use those,
+even though it can of course handle them when they are used in an existing
+<code>.bib</code> file) you do not need to type these. Ebib adds them when it saves the
+<code>.bib</code> file.</p>
+
+<p>Some fields, however, are handled in a special way. The first of these is
+the <code>type</code> field: if you edit this field, you must enter one of the
+predefined entry types. Ebib won't allow you to enter anything else. You
+can use tab-completion in this case. Similarly, if you edit the <code>crossref</code>
+field, Ebib requires that you fill in a key from the database. Here, too,
+you can use tab-completion.</p>
+
+<p>Note that if you're adding a new entry, Ebib automatically puts you in the
+entry buffer after you've typed the entry key: you don't have to type <code>e</code> to
+move to the entry buffer. When creating a new entry, it is best to set the
+<code>type</code> field first, because the <code>type</code> field determines which other fields are
+available for an entry.</p>
+
+<p>Note also that after editing a field, Ebib (usually) puts you on the next
+field. This is convenient if you're creating a new entry and need to fill
+out several fields in a row.</p>
+
+<p>If you're done editing the fields of the entry, type <code>q</code> to move focus back
+to the index buffer. (Note: keys may have different functions in the index
+buffer and the entry buffer. <code>q</code> is a typical example: in the entry buffer,
+it quits editing the entry and moves focus back to the index buffer. In the
+index buffer, however, <code>q</code> quits Ebib.)</p>
+
+
+
+<h4>Editing Multiline Values</h4>
+
+<p class="first">Apart from the <code>type</code> and <code>crossref</code> field, there is another field that Ebib
+handles in a special way when you edit its value. This is the <code>annote</code>
+field. Most field values normally consist of a single line of
+text. However, because the <code>annote</code> field is meant for creating annotated
+bibliographies, it would not be very useful if you could only write one
+line of text in this field. Therefore, when you edit the <code>annote</code> field, Ebib
+puts you in the so-called <em>multiline edit buffer</em>. This is essentially a text
+mode buffer that allows you to enter as much text as you like. To store the
+text and leave the multiline edit buffer, type <code>C-x b</code>. (This is of course
+the standard Emacs command to switch buffers. It is redefined in Ebib's
+multiline edit buffer.)</p>
+
+<p>If you want to leave the multiline edit buffer without saving the text you
+have just typed, you can use the command <code>C-x k</code>. This too is redefined in
+the multiline edit buffer: it leaves the multiline edit buffer (and hides
+it), but it does not actually kill the buffer.</p>
+
+<p>Multiline values are not restricted to the <code>annote</code> field. Any field can in
+fact hold a multiline value. (Except of course the <code>type</code> and <code>crossref</code>
+fields.) To give a field a multiline value, use <code>l</code> instead of <code>e</code>. You will
+again be put in the multiline edit buffer, where you can edit the
+value. Note that you can use <code>l</code> even if a field already has a single line
+value. Ebib will just make that the first line in the multiline edit
+buffer.</p>
+
+<p>When a field has a multiline value, only the first line is shown in the
+entry buffer, for space reasons. To indicate that the value is multiline, a
+plus sign <code>+</code> is placed in front of the value.</p>
+
+<p>By the way, the <code>e</code> key is smart about the way an entry must be edited. If
+you press <code>e</code> on a field that already has a multiline value, regardless of
+the fact whether it is the <code>annote</code> field or not, Ebib puts you in the
+multiline edit buffer. Therefore, you need <code>l</code> only if you want to give a
+field a multiline value when it doesn't have one yet.</p>
+
+<p>For more details on working with the multiline edit buffer, see
+<a href="#multiline-edit-buffer">The Multiline Edit Buffer</a>.</p>
+
+
+
+<h4>Copy, cut, paste (yank), and delete</h4>
+
+<p class="first">A few more commands are available when you're in the entry buffer editing
+field values. The commands <code>c</code>, <code>x</code> and <code>y</code> implement a copy and paste system: <code>c</code>
+copies the contents of the current field to the kill ring, <code>x</code> kills the
+contents of the current field to the kill ring, and <code>y</code> yanks (pastes) the
+most recently killed text in the kill ring. You can type <code>y</code> repeatedly to
+get the same effect you get in Emacs when you type <code>M-y</code> after an initial
+<code>C-y</code>: every additional use of <code>y</code> moves back in the kill ring.</p>
+
+<p>Lastly, there is the command <code>d</code>, which deletes the contents of the current
+field, without asking questions and without storing the text in the kill
+ring.</p>
+
+<p>Note that <code>y</code> only works when the current field does not have a value
+yet. This is to prevent you from accidentally overwriting a field value. If
+you do want to yank text into a field that already has a value, simply hit
+<code>d</code> first to delete the text.</p>
+
+
+
+
+<h3><a name="sec5" id="sec5"></a>
+Saving a Database</h3>
+
+<p><a name="saving-database" id="saving-database"></a>
+When you have undertaken any kind of editing action on a database, it is
+marked as modified, which is indicated in the mode line for the index
+buffer. A modified database can be saved by typing <code>s</code>. This saves the
+database to the file it was loaded from without asking for
+confirmation. (It is similar to <code>C-x C-s</code> in Emacs.) If you're saving a file
+for the first time after loading it, Ebib creates a backup file under the
+same name appended with a tilde: <code>&lt;filename&gt;.bib~</code>.</p>
+
+<p>If you have multiple databases open, have made changes in more than one of
+them, and want to save all of them without going through each yourself, you
+can use <code>S</code>. (That's a capital <code>S</code>.) This command saves all modified databases.</p>
+
+<p>Another way to save a database is to use the command <code>w</code>. Use this if you
+want to write the database to another file than the one it was loaded
+from. Ebib will ask you for a filename to save to, and will of course warn
+you if that file happens to exist already. Note that this command is
+similar to <code>C-x C-w</code> in Emacs, so that after using it, the new <code>.bib</code> file
+becomes associated with the database.</p>
+
+
+
+<h3><a name="sec6" id="sec6"></a>
+Searching</h3>
+
+<p><a name="searching" id="searching"></a>
+Ebib provides several search methods. First, if you are in the index
+buffer, the normal Emacs incremental searches, <code>C-s</code> and <code>C-r</code>, function as
+expected. You can use them to search entry keys. Note that once you've
+found the key you're searching, you must hit <code>ENTER</code> to make it active. Ebib
+does not update the entry buffer during incremental search, as this would
+be rather pointless: you're only interested in the entry you're searching
+for, not in the entries you pass along the way.</p>
+
+<p>Of course, it is also possible to search the database itself. If you type
+<code>/</code>, Ebib asks you for a search term. This can be a regular expression, to
+allow for flexibility in searching. After hitting <code>ENTER</code>, Ebib will start
+searching the database (starting from the current entry, <em>not</em> from the first
+entry!) and will display the entry with the first occurrence of the search
+string that it finds. All the occurrences of the search string in that
+entry are highlighted.</p>
+
+<p>Ebib searches all the fields of each entry. It is not possible with <code>/</code> to
+specify the fields to search. Note that if the search term is found in a
+field with a multiline value, Ebib will highlight the <code>+</code> sign that it
+displays in front of the field value. Keep an eye out for this when doing a
+search, because Ebib only shows the first line of multiline values, and if
+the search term appears in another line, the highlighted <code>+</code> is the only
+indication that the search term was found. (Well, that and the fact that
+Ebib does <em>not</em> say <code>Search string not found</code>, of course...)</p>
+
+<p>A search term may of course appear more than once in the database. To
+search for the next occurrence, type <code>n</code>. This will continue searching for
+the search string in the rest of the database. Again, the first entry found
+to contain the search string is displayed. Note that <code>n</code> does not wrap: if
+the end of the database is reached, Ebib stops searching. To continue
+searching from the top, hit <code>g</code> and then <code>n</code>.</p>
+
+<p>The functions described here form Ebib's basic search functionality. Ebib
+also has a much more powerful search mechanism in the form of <em>virtual
+databases</em>. These are described later. (See <a href="#virtual-databases">Virtual Databases</a>.)</p>
+
+
+
+<h3><a name="sec7" id="sec7"></a>
+LaTeX Integration</h3>
+
+<p class="first">Having a BibTeX database manager running inside Emacs has an additional
+advantage: it makes it trivially easy to insert BibTeX keys in your LaTeX
+documents.</p>
+
+<p>Ebib provides two functions for this. First, if you're in a LaTeX buffer, you
+can call the function <code>ebib-insert-bibtex-key</code>. When you invoke this command,
+Emacs prompts you for a key from the database(s) associated with the current
+buffer, a citation command (that has to be typed <em>without</em> the backslash) and any
+optional argument(s) the command allows. You can type the key using
+TAB-completion, and after hitting <code>RET</code>, Emacs puts a BibTeX citation at the
+cursor position in the current buffer with the key you selected.</p>
+
+<p>You can also do it the other way around: if you're in the index buffer in Ebib,
+you can <em>push</em> an entry to a LaTeX buffer. To do this, use the key <code>p</code>. Ebib will
+ask you for a buffer to push the entry to, a citation command and also any
+optional arguments, and then insert a citation at the current cursor position in
+the buffer you've supplied.</p>
+
+<p>For the citation command that <code>ebib-insert-bibtex-key</code> and the command key <code>p</code> ask
+for can be any command that you need. But it is also possible to predefine a
+list of citation commands which you can then enter at this prompt using tab
+completion. For details on setting this up, see <a href="#insertion-commands">Insertion Commands</a>.</p>
+
+<p>There is another function that is available outside Ebib:
+<code>ebib-entry-summary</code>. This command reads the key under the cursor in the
+current buffer and displays the field values associated with that key in a
+<code>*Help*</code> buffer. This allows you to quickly check a reference in a text.</p>
+
+<p>Probably the easiest way to use both <code>ebib-insert-bibtex-key</code> and
+<code>ebib-entry-summary</code> is to bind them to a key sequence. For example, you
+could put the following in your <code>~/.emacs</code>:</p>
+
+<pre class="example">
+(add-hook 'LaTeX-mode-hook #'(lambda ()
+ (local-set-key &quot;\C-cb&quot; 'ebib-insert-bibtex-key)))
+</pre>
+
+<p>This binds <code>C-c b</code> to the command <code>ebib-insert-bibtex-key</code> in AUCTeX's LaTeX
+mode. (Note that commands of the form <code>C-c &lt;letter&gt;</code> are reserved for the
+user, and should therefore not be set by any package. For this reasons,
+Ebib does not set this command automatically.)</p>
+
+
+<h4>Consulting databases from within a LaTeX file</h4>
+
+<p class="first">The commands <code>ebib-insert-bibtex-key</code> and <code>ebib-entry-summary</code> must consult the
+database or databases loaded in Ebib, and Ebib tries to be smart about
+which database(s) to consult. Usually, a LaTeX file has a <code>\bibliography</code>
+command somewhere toward the end, which names the <code>.bib</code> file or files that
+contain the bibliography entries. If you consult a BibTeX database from
+within a LaTeX file, Ebib first looks for a <code>\bibliography</code> command, reads
+the <code>.bib</code> files from it, and then sees if those files happen to be open. If
+they are, Ebib uses them to let you pick an entry key (in the case of
+<code>ebib-insert-entry-key</code>) or to search for the entry (in the case of
+<code>ebib-entry-summary</code>).</p>
+
+<p>Of course, it may be the case that the LaTeX file is actually part of a
+bigger project, and that only the master file contains a <code>\bibliography</code>
+command. To accommodate for this, Ebib checks whether the (buffer-local)
+variable <code>TeX-master</code> is set to a filename. If it is, it reads that file and
+tries to find the <code>\bibliography</code> command there. (Note: <code>TeX-master</code> is an
+AUCTeX variable, which is used to keep track of multi-file projects. If you
+don't use AUCTeX, this functionality doesn't work, and Ebib will only check
+the current file for a <code>\bibliography</code> command.)</p>
+
+<p>Note that if one of the <code>.bib</code> files in the <code>\bibliography</code> command isn't
+loaded, Ebib issues a warning message about this, and continues to check
+for the next <code>.bib</code> file. These warning messages appear in the minibuffer,
+but are probably directly overwritten again by further messages or prompts
+Ebib produces, so check the <code>*Messages*</code> buffer if Ebib doesn't seem to be
+able to find an entry that you're sure is in one of your databases.</p>
+
+<p>Another thing to keep in mind is that Ebib only looks for a <code>\bibliography</code>
+command once: the first time either <code>ebib-insert-bibtex-entry</code> or
+<code>ebib-entry-summary</code> is called. It stores the result of this search and uses
+it the next time either of these commands is used. Therefore, if you make a
+change to the <code>\bibliography</code> command, you must reload the file (use <code>M-x
+revert-buffer</code>) to make sure Ebib rereads the <code>\bibliography</code> command.</p>
+
+<p>If no <code>\bibliography</code> command is found at all, either in the LaTeX file
+itself, or in the master file, Ebib simply consults the current database,
+i.e. the database that was active when Ebib was lowered with <code>z</code>.</p>
+
+
+
+
+<h3><a name="sec8" id="sec8"></a>
+Cross-referencing</h3>
+
+<p><a name="cross-referencing" id="cross-referencing"></a>
+BibTeX has a cross-referencing facility. Suppose you have an entry <code>jones1998</code>,
+which appeared in a book that is also in your database, say under <code>miller1998</code>.
+You can tell BibTeX that <code>jones1998</code> is contained in <code>miller1998</code> by putting
+<code>miller1998</code> in the <code>crossref</code> field. When BibTeX finds such a cross-reference, all
+the fields of <code>jones1998</code> that don't have a value inherit their values from
+<code>miller1998</code>. At the very least, this saves you some typing, but more importantly,
+if two or more entries cross-reference the same entry, BibTeX automatically
+includes the cross-referenced entry in the bibliography (and puts a reduced
+reference in the cross-referencing entries).</p>
+
+<p>When you fill in the <code>crossref</code> field in Ebib, Ebib displays the values of the
+cross-referenced entry in the entry buffer. To indicate that they are just
+inherited values, they are marked with <code>ebib-crossref-face</code>, which by default is
+red. (You can customise it, of course. See the customisation option
+<a href="#crossref-face">Crossref Face</a>.) These values are just displayed for convenience: otherwise, Ebib
+treats these fields as if they are empty. That is, they cannot be edited (to
+edit them, you need to edit the cross-referenced entry), and it's not possible
+to copy these values to the kill ring.</p>
+
+<p>If you're viewing an entry that has a cross-reference and you want to go to the
+cross-referenced entry you can type <code>F</code>. This command reads the value of the
+<code>crossref</code> field and then displays that entry. If you want to do the reverse,
+i.e., see if the current entry is cross-referenced by any other entries, you can
+use the key <code>N</code>. What this command actually does is to make the key of the current
+entry the current search string and to search for its first occurrence <em>after</em> the
+current entry. Like the normal search command <code>/</code>, <code>N</code> does not wrap and only
+searches forward. So if you want to search for the next cross-referencing entry
+you need to press <code>n</code> (i.e., lowercase <code>n</code>), and to continue searching from the
+first entry, press <code>g</code> followed by <code>n</code>.</p>
+
+<p>Note that if you want to use BibTeX's cross-referencing options, you need to set
+the option <a href="#save-xrefs-first">Save Xrefs first</a>. This tells Ebib to save all entries with a <code>crossref</code>
+field first in the <code>.bib</code> file. Without this, BibTeX's cross-referencing will not
+work reliably.</p>
+
+
+
+<h3><a name="sec9" id="sec9"></a>
+Printing the Database</h3>
+
+<p><a name="printing-database" id="printing-database"></a>
+Sometimes it may be useful to have a <code>.pdf</code> file or print-out of your
+database. Although Ebib does not actually do the printing itself, it can
+create a LaTeX file for you that you can compile and print. In fact, there
+are two ways of doing this.</p>
+
+<p>The first is the command <code>L</code>. This command creates a simple LaTeX document
+that essentially contains a <code>\nocite{*}</code> command followed by a
+<code>\bibliography</code> command referring to the <code>.bib</code> file belonging to
+the current database. You can then run the usual sequence of LaTeX, BibTeX,
+LaTeX, LaTeX on this file, creating a document containing a list of all the
+references in your database.</p>
+
+<p>The second command for printing a database is <code>P</code>. This command also creates
+a LaTeX file. However, instead of simply providing a
+<code>\nocite{*}</code> command, <code>P</code> creates a <code>tabular</code> environment for each
+entry in the database listing all the fields of that entry and their
+values.</p>
+
+<p>The difference between <code>L</code> and <code>P</code> should be obvious: with <code>L</code>, you get a list of
+references created by BibTeX. This means that the references look the way
+they will when actually used in a document, but it also means that the list
+only contains the information that BibTeX deems relevant.</p>
+
+<p>With <code>P</code> you get an overview of your database with <em>all</em> the field values of
+each entry, including the ones that BibTeX does not use. The entries are
+not formatted as literature references, but in a way similar to how they
+are shown in Ebib.</p>
+
+<p>By default, <code>P</code> only shows single-line field values. That is, multiline
+values are normally excluded. If you want to include multiline values in
+the print-out, you have to set the option <code>Print Multiline</code> in Ebib's
+customisation buffer. (See <a href="#customisation-buffer">The Customisation Buffer</a>.) With this option set,
+Ebib will include all multiline values in the LaTeX file that <code>P</code>
+creates. Note however that Ebib does not change anything about the
+formatting of the text in a multiline value. So if you plan to make (heavy)
+use of this option, make sure that the way you type your text conforms to
+LaTeX's conventions (e.g. empty lines to mark paragraphs, etc.) and doesn't
+contain any characters such as <code>&amp;</code> that are illegal in LaTeX. (Or,
+alternatively, use LaTeX code in your multiline fields.)</p>
+
+<p>As mentioned, when you use either <code>L</code> or <code>P</code>, Ebib creates a LaTeX file. More
+precisely, it creates a temporary buffer and writes the LaTeX code into it,
+and then saves the contents of that buffer to a file. After it has done
+that, Ebib lowers itself and instruct Emacs to open the file in a buffer,
+which will then be properly set up as a LaTeX buffer. From there you can
+run LaTeX and view the result.</p>
+
+<p>Before doing all this, Ebib asks you which file to write to. Be careful
+with this: since this is supposed to be a temporary file, Ebib simply
+assumes that if you provide a filename of an existing file, it can
+overwrite that file without warning!</p>
+
+<p>A better way to tell Ebib which file to use is to set the option <code>Print
+Tempfile</code> in Ebib's customisation buffer to some temporary file. When this
+option is set, Ebib will always use this file to write to, and will not ask
+you for a filename anymore when you type <code>L</code> or <code>P</code>.</p>
+
+<p>There are two more customisation options for printing the database. These
+are <code>Print Preamble</code> and <code>LaTeX Preamble</code>. With these options, you can specify
+what Ebib should put in the preamble of the LaTeX files it creates. Use
+this if you want to use specific packages
+(e.g. <code>\usepackage{a4}</code> or
+<code>\usepackage{times})</code>. This is especially useful for <code>L</code>, since by
+default, Ebib uses BibTeX's standard bibliography style. With the option
+<code>LaTeX Preamble</code> you can set your preferred bibliography style. Details are
+discussed in the chapter on customisation, see <a href="#customisation-buffer">The Customisation Buffer</a>.</p>
+
+
+
+
+<h3><a name="sec10" id="sec10"></a>
+Marking Entries</h3>
+
+<p class="first">Commands in the index buffer generally operate on one single entry, or on
+all entries. For some, however, it may sometimes be useful to perform them
+on more than one entry, but not necessarily all of them. This can be
+achieved by marking entries. You can mark the entries you want to perform a
+command on with the key <code>m</code>. This marks (or unmarks) the current
+entry. Marked entries are displayed in inverse video (in GNU Emacs) or
+white on red (in XEmacs; note that the face properties of marked entries
+can be customised through the customisation option <a href="#marked-face">Marked Face</a>.)</p>
+
+<p>Of the commands discussed so far, four can be used on marked entries: <code>d</code>, <code>p</code>,
+<code>L</code> and <code>P</code>. Note, however, that it is not enough to mark the entries you want
+and then type any of these commands. If you do so, they will behave as if
+no entries were marked. To get these commands to work on the marked
+entries, you have to type a semicolon before them. That is, <code>; d</code> deletes all
+marked entries, and <code>; L</code> and <code>; P</code> create a LaTeX file of only the marked
+entries. The command <code>m</code> itself can also be used with the <code>;</code> prefix. If there
+are any marked entries, <code>; m</code> unmarks them all. Otherwise, <code>; m</code> marks all
+entries.</p>
+
+<p><code>; p</code> pushes all marked entries to a LaTeX buffer. It does so by putting them
+all in a single <code>\cite</code> command, separated by commas, not by putting them in
+separate <code>\cite</code> commands.</p>
+
+
+
+<h3><a name="sec11" id="sec11"></a>
+Calling a Browser</h3>
+
+<p class="first">With more and more scientific literature becoming available on-line, it
+becomes common to store URLs in a BibTeX database. Sometimes you may want
+to load such a URL in your browser. Ebib provides a convenient way for
+doing so.</p>
+
+<p>If you type <code>u</code> in the index buffer, Ebib takes the first URL stored in the
+<code>url</code> field of the current entry and passes it to your browser. Furthermore,
+in the entry buffer, you can use <code>u</code> on <em>any</em> field. If you happen to have more
+than one URL stored in the relevant field, and you want to pass the second
+(or third, etc.) to the browser, you can use a prefix argument. So typing
+<code>M-2 u</code> sends the second URL to your browser, <code>M-3 u</code> the third, and so on.</p>
+
+<p>It is not even necessary that the relevant field contains <em>only</em> URLs. It may
+contain other text mixed with the URLs: Ebib simply searches the URLs in
+the field and ignores the rest of the text. Ebib considers every string of
+characters that starts with <code>http://</code> or <code>https://</code> and that does not contain
+whitespace or any of the characters <code>&quot; ' &lt;</code> or <code>&gt;</code> as a URL. Furthermore, Ebib
+regards everything that is enclosed in a LaTeX <code>\url{...}</code>
+command as a URL. This behaviour is controlled by a regular expression that
+can be customised. (See <a href="#url-regexp">Url Regexp</a>.)</p>
+
+<p>There exists an Emacs function <code>browse-url</code>, which provides a nifty interface
+to calling an external browser. In principle, Ebib uses this
+function. However, if this function is not present on your installation,
+you can set the option <a href="#browser-command">Browser Command</a> to call the browser.</p>
+
+<p>As just explained, if you press <code>u</code> in the index buffer, Ebib searches the
+<code>url</code> field of the current entry for URLs. If you have the habit of putting
+your URLs in another field, however, you may change the customisation
+option <a href="#standard-url-field">Standard Url Field</a> and tell Ebib to use another field for searching
+the URLs. (Keep in mind, though, that in the entry buffer, you can load a
+URL from any field.)</p>
+
+
+
+<h3><a name="sec12" id="sec12"></a>
+Viewing Files</h3>
+
+<p class="first">If you have electronic versions of the papers in your database stored on
+your computer, you can use Ebib to call external viewers for these
+files. The interface for this is similar to that for calling a browser: if
+you press <code>f</code> in the index buffer, Ebib searches the <code>file</code> field for a
+filename and when it finds one, calls an appropriate viewer.</p>
+
+<p>Just as with <code>u</code>, you can use <code>f</code> in the entry buffer as well, in which case it
+can be used on any field, not just the <code>file</code> field. It is also possible to
+have more than one filename in a field: you can select the one you want to
+view with the prefix argument.</p>
+
+<p>Just as in the case of URLs, you can customise several things about the
+file view functionality. The option <a href="#standard-file-field">Standard File Field</a> allows you to
+customise the field that <code>f</code> extracts filenames from when pressed in the
+index buffer. Extracting filenames is done with a regular expression, which
+can be customised through the option <a href="#file-regexp">File Regexp</a>.</p>
+
+<p>The option <a href="#file-search-dirs">File Search Dirs</a> allows you to tell Ebib which directories it
+needs to search for files. The default value is <code>~</code>, which means Ebib just
+looks in your home dir. Since this is probably not where you keep your
+files, you may want to customise this. Note that you can specify more than
+one directory.</p>
+
+<p>Note that Ebib does not search directories recursively. It is possible,
+however, to put subdirectories in the filenames. That is, if you put
+something like <code>a/abney1987.pdf</code> in the <code>file</code> field, Ebib searches for the
+relevant file in a subdirectory <code>a/</code> of the directories listed in the option
+<code>File Search Dirs</code>. (Note that if you want to do this under Windows, you may
+want to remove the backslash from the file regexp.)</p>
+
+<p>Ebib can call different external programs depending on the file type of the
+relevant file, but you have to specify which programs to call. The option
+<a href="#file-associations">File Associations</a> allows you to do this. By default, <code>.pdf</code> and <code>.ps</code> files are
+handled, by <code>xpdf</code> and <code>gv</code>, respectively. You can specify further file types by
+their extensions (do not include the dot). The program is searched for in
+<code>PATH</code>, but you can of course specify the full path to the program.</p>
+
+
+
+
+<h2><a name="sec13" id="sec13"></a>
+Advanced Features</h2>
+
+<p class="first">The features discussed in the previous chapter should be sufficient to get
+started using Ebib. However, Ebib has several more advanced features, which
+are described in this chapter.</p>
+
+
+<h3><a name="sec14" id="sec14"></a>
+Screen Layout</h3>
+
+<p><a name="screen-layout" id="screen-layout"></a>
+By default, Ebib takes over the entire Emacs frame it is started in. If you
+have a wide enough screen, however, it may be more convenient to have Ebib
+take up only part of the frame, so that you can have the LaTeX text you're
+working on and Ebib visible at the same time. The option <a href="#layout">Layout</a> allows you
+to do this, by giving you the ability to choose between a full-frame or a
+split-frame layout.</p>
+
+<p>In the split-frame layout, the Ebib windows are displayed on the right of
+the current frame, with the left part free for your document. In this
+layout, some aspects of Ebib behave somewhat differently. Most importantly,
+the multiline edit buffer is not displayed in the lower Ebib window, but in
+the non-Ebib window on the left. (Obviously, after leaving the multiline
+edit buffer, the original buffer is restored to that window.)</p>
+
+<p>Furthermore, pressing <code>z</code> in the index buffer leaves Ebib, but keeps the
+buffers visible. You can get back to Ebib with the command <code>M-x ebib</code> (or any
+key bound to it, of course), or simply by manually switching to the index
+buffer. If you want to remove the Ebib buffers from the frame but keep Ebib
+in the background, you can use <code>Z</code> (i.e. capital <code>Z</code>) in the index
+buffer. (Note that <code>Z</code> is also available in the full-frame layout, but there
+it is identical to <code>z</code>.)</p>
+
+<p>Lastly, the command <code>ebib-entry-summary</code> checks whether the Ebib buffers are
+visible in the frame. If they are, it does not output the entry info in a
+<code>*Help*</code> buffer, but rather displays the entry in Ebib itself.</p>
+
+
+
+<h3><a name="sec15" id="sec15"></a>
+Preloading <code>.bib</code> Files</h3>
+
+<p class="first">Chances are that you will be doing most of your work with one or a few <code>.bib</code>
+files, and you may find yourself opening the same file or files every time
+you start Ebib. If so, you can tell Ebib to always load specific <code>.bib</code> files
+on startup. To do this, specify the files in Ebib's customisation buffer,
+under the option <a href="#preload-bib-files">Preload Bib Files</a>.</p>
+
+
+
+<h3><code><a name="sec16" id="sec16"></a>@Preamble</code> Definition</h3>
+
+<p class="first">Apart from database entries, BibTeX allows three more types of elements to
+appear in a <code>.bib</code> file. These are <code>@comment</code>, <code>@preamble</code> and <code>@string</code>
+definitions. Ebib provides facilities to handle the latter two. <code>@comment</code>
+definitions cannot be added to a <code>.bib</code> file through Ebib, and if Ebib finds
+one in a <code>.bib</code> file, it is simply ignored.</p>
+
+<p><code>@preamble</code> and <code>@string</code> definitions can be handled, however. Ebib allows you
+to add one <code>@preamble</code> definition to the database. In principle, BibTeX
+allows more than one such definition, but really one suffices, because you
+can use the concatenation character <code>#</code> to include multiple TeX or LaTeX
+commands. So, rather than having two <code>@preamble</code> definitions such as:</p>
+
+<pre class="example">
+@preamble{ &quot;\newcommand{\noopsort}[1]{} &quot; }
+@preamble{ &quot;\newcommand{\singleletter}[1]{#1} &quot; }
+</pre>
+
+<p>you can write this in your <code>.bib</code>
+file:</p>
+
+<pre class="example">
+@preamble{ &quot;\newcommand{\noopsort}[1]{} &quot;
+ # &quot;\newcommand{\singleletter}[1]{#1} &quot; }
+</pre>
+
+<p>Creating or editing a <code>@preamble</code> definition in Ebib is done by hitting <code>r</code> in
+the index buffer. Ebib uses the multiline edit buffer for editing the text
+of the <code>@preamble</code> definition, which means that as discussed above, <code>C-x b</code>
+stores the <code>@preamble</code> text and returns focus to the index buffer, while <code>C-x
+k</code> returns focus to the index buffer while abandoning any changes you may
+have made. (For details on using the multiline edit buffer, see
+<a href="#multiline-edit-buffer">The Multiline Edit Buffer</a>.)</p>
+
+<p>In order to create a <code>@preamble</code> as shown above in Ebib, you only have to
+type the text between the braces. Ebib takes care of including the braces
+of the <code>@preamble</code> command, but otherwise it saves the text exactly as you
+enter it. So in order to get the preamble above, you'd have to type the
+following in Ebib:</p>
+
+<pre class="example">
+&quot;\newcommand{\noopsort}[1]{} &quot;
+# &quot;\newcommand{\singleletter}[1]{#1} &quot;
+</pre>
+
+<p>Note that when Ebib loads a <code>.bib</code> file that contains more than one <code>@preamble</code>
+definition, it concatenates all the strings in them in the manner just
+described and saves them in one <code>@preamble</code> definition.</p>
+
+
+
+<h3><code><a name="sec17" id="sec17"></a>@String</code> Definitions</h3>
+
+<p class="first">If you press <code>t</code> in the index buffer, Ebib hides the entry buffer in the
+lower window and replaces it with the <em>strings buffer</em>. In this buffer, you
+can add, delete and edit <code>@string</code> definitions.</p>
+
+<p>Adding a <code>@string</code> definition is done with the command <code>a</code>. This will first ask
+you for an abbreviation and then for the value to be associated with that
+abbreviation. Once you've entered these, Ebib will sort the new
+abbreviation into the buffer.</p>
+
+<p>Moving between the <code>@string</code> definitions can be done in the usual way: the
+cursor keys <code>up</code> and <code>down</code>, <code>C-p</code> and <code>C-n</code> and <code>k</code> and <code>j</code> move up and down. <code>Space</code>
+and <code>PgDn</code> move ten strings down, while <code>b</code> and <code>PgUp</code> move in the other
+direction. The keys <code>g</code>, <code>G</code>, <code>Home</code> and <code>End</code> also function as expected.</p>
+
+<p>To delete a <code>@string</code> definition, use <code>d</code>. To edit the value of a definition,
+use <code>e</code>. There is also a command <code>c</code>, which copies the value of the current
+<code>@string</code> definition to the kill ring. Unlike in the entry buffer, there are
+no corresponing commands <code>y</code> and <code>x</code>. (In fact, <code>x</code> does exist, but has another
+function.) Yanking from the kill ring can be done with <code>C-y/M-y</code> in the
+minibuffer when you edit a <code>@string</code>'s value. Cutting a <code>@string</code>'s value
+is pointless, because a <code>@string</code> definition must have a value.</p>
+
+<p>Having defined <code>@string</code> definitions, there must of course be a way to use
+them. Just giving a field a string abbreviation as value will not do,
+because Ebib puts braces around the value that you enter when it writes the
+<code>.bib</code> file, so that BibTeX will not recognise the abbreviation, and will not
+expand it. BibTeX will only recognise an abbreviation if it appears in the
+<code>.bib</code> file outside of any braces.</p>
+
+<p>To accomplish this, you must mark a field's value as <em>raw</em>. A raw field is a
+field whose value is not surrounded by braces when the database is saved,
+so that BibTeX recognises it as an abbreviation. To mark a field raw, press
+<code>r</code>. An asterisk will appear before the field, indicating that it is
+raw. Pressing <code>r</code> again will change the field back to normal. If you press <code>r</code>
+on a field that does not have a value yet, Ebib will ask you for one.</p>
+
+<p>Note that this also makes it possible to enter field values that are
+composed of concatenations of strings and abbreviations. The BibTeX
+documentation for example explains that if you have defined:</p>
+
+<pre class="example">
+@string{WGA = &quot;World Gnus Almanac&quot;}
+</pre>
+
+<p>you can create a BibTeX field
+like this:</p>
+
+<pre class="example">
+title = 1966 # WGA
+</pre>
+
+<p>which will produce ``1966 World
+Gnus Almanac''. Or you can do:</p>
+
+<pre class="example">
+month = &quot;1~&quot; # jan
+</pre>
+
+<p>which will produce someting
+like ``1 January'', assuming your bibliography style has defined the
+abbreviation <code>jan</code>. All this is possible with Ebib, simply by entering the
+exact text including quotes or braces around the strings, and marking the
+relevant field as raw.</p>
+
+<p>An easy way to enter a <code>@string</code> abbreviation as a field value is to use the
+key <code>s</code> instead of <code>e</code>. If you type <code>s</code>, Ebib asks you for a <code>@string</code> abbreviation
+to put in the current field, and automatically marks the field as raw. With
+this command, Ebib only accepts <code>@string</code> definitions that are in the
+database, so that by using <code>s</code> you can make sure you don't make any
+typos. Note that you can use tab completion to complete a partial string.</p>
+
+
+
+<h3><a name="sec18" id="sec18"></a>
+Sorting the <code>.bib</code> file</h3>
+
+<p><a name="sorting-bib-file" id="sorting-bib-file"></a>
+By default, the entries in the database are saved to the <code>.bib</code> file in
+alphabetical order according to entry key. If you only deal with the <code>.bib</code>
+file through Ebib, you may not care in which order the entries are
+saved. However, it may sometimes be desirable to be able to specify the
+sort order of entries in more detail. (Apparently, this can be useful with
+ConTeXt, for example.)</p>
+
+<p>You can specify a sort order in Ebib's customisation buffer. To sort the
+entries, you must set at least one sort level (that is, a field to sort the
+entries on). You can also specify more than one sort level: if two entries
+have identical values for the first sort level, they will be sorted on the
+second sort level. E.g., if the first sort level is <code>author</code> and the second
+is <code>year</code>, then the entries are sorted by author, and those entries that have
+identical values for the <code>author</code> field are sorted by year.</p>
+
+<p>A sort level is not restricted to a single field. You can specify more
+fields for a single sort level. Within a single sort level, a second sort
+field is used if the first sort field does not have a value. For example,
+books that have an editor instead of an author will have an empty <code>author</code>
+field. If you sort the database on the <code>author</code> field, such entries will all
+appear at the beginning of the <code>.bib</code> file, which is most likely not what you
+want.</p>
+
+<p>To remedy this, you can specify both the <code>author</code> and the <code>editor</code> fields for
+the first sort level. Ebib will then sort an entry on its <code>author</code> field if
+it has a value, and will otherwise use the value of the <code>editor</code> field.</p>
+
+<p>The difference between two sort fields within one sort level and two sort
+levels is that a second sort <em>field</em> is an alternative for the first field
+when it has no value, while a second sort <em>level</em> is an additional sort
+criterion when two or more entries cannot be sorted on the first level,
+because they have identical values.</p>
+
+<p>By default, the option <code>Sort Order</code> has no value, which means that the
+entries in the <code>.bib</code> file are sorted according to entry key. Those that wish
+to customise the sort order will usually want to set the first sort level
+to <code>author editor</code>, and the second to <code>year</code>. In that way, the entries in the
+<code>.bib</code> file are sorted according to author/editor, and entries with the same
+author/editor are sorted by year.</p>
+
+<p>Entries that cannot be sorted on some sort level, because the sort fields
+are empty, are sorted on entry key. (Keep in mind that if the first sort
+level yields <em>no value</em> for a specific entry, Ebib does <em>not</em> use the second
+sort level to sort that entry. It uses the entry key. The second sort level
+is only used if the first yields <em>identical</em> values for two or more entries.)</p>
+
+<p>Note that if you have set the option <code>Save Xrefs First</code> (see
+<a href="#cross-referencing">Cross-referencing</a>), it is pointless to set a sort order. Saving
+cross-referencing entries first messes up any sort order, so Ebib simply
+ignores the sort order if <code>Save Xrefs First</code> is set.</p>
+
+
+
+<h3><a name="sec19" id="sec19"></a>
+Merging and Importing</h3>
+
+<p class="first">As described in the previous chapter, adding entries to a database can be
+done manually with the key <code>a</code>. There are other ways of adding entries to a
+database, however.</p>
+
+<p>With the command <code>M</code> you can merge a second <code>.bib</code> file into your current
+database. When you hit <code>M</code>, you are asked for a filename. Ebib then reads the
+entries in this file and adds them to the database. Duplicate entries (that
+is, entries with an entry key that already exists in the database) will not
+be loaded. Ebib logs a warning about each duplicate entry to its log
+buffer, and displays a warning after loading the <code>.bib</code> file when this
+happens.</p>
+
+<p>Another way to add entries to a database is to import them from an Emacs
+buffer. If, for example, you find ready-formatted BibTeX entries in a text
+file or e.g. on the internet, you can copy &amp; paste them to any Emacs buffer
+(e.g. the <code>*scratch*</code> buffer), and then execute the command <code>M-x
+ebib-import</code>. Ebib then goes through the buffer and loads all BibTeX entries
+it finds into the current database (i.e. the database that was active when
+you lowered Ebib). If you call <code>ebib-import</code> while the region is active, Ebib
+only reads the BibTeX entries in the region.</p>
+
+
+
+<h3><a name="sec20" id="sec20"></a>
+Exporting Entries</h3>
+
+<p class="first">Sometimes it can be useful to copy entries from one database to another, or
+to create a new <code>.bib</code> file with several entries from an existing
+database. For this purpose, Ebib provides exporting facilities. To export
+an entry to a <code>.bib</code> file, use the command <code>x</code>. Ebib will ask you for a
+filename to export the entry to. (If you have already exported an entry
+before, Ebib will present the filename you used as default, but you can of
+course change it.)</p>
+
+<p>For obvious reasons, Ebib appends the entry to the file that you enter if
+it already exists, it does not overwrite the file. If this is not what you
+want, delete the file first, as Ebib provides no way to do this.</p>
+
+<p>If you have more than one database open in Ebib, it is also possible to
+copy entries from one database to another. To do this, use the <code>x</code> command
+with a numeric prefix argument. E.g., if the database you want to export an
+entry to is the second database, type <code>M-2 x</code> to export the current entry to
+it. The number of the database is given in the modeline of the index
+buffer.</p>
+
+<p>If the database you're copying an entry to already contains an entry with
+the same entry key, Ebib won't copy the entry, and issues an appropriate
+warning message.</p>
+
+<p>Note that the command <code>x</code> can operate on marked entries. So to export several
+entries in one go mark them and type <code>; x</code>. You can use a prefix argument in
+the normal way: <code>M-2 ; x</code> exports the marked entries to database 2.</p>
+
+<p>Apart from entries, it is also possible to export the <code>@preamble</code> and <code>@string</code>
+definitions. The <code>@preamble</code> definition is exported with the command <code>X</code> in the
+index buffer. <code>@string</code> definitions can be exported in the strings buffer: <code>x</code>
+in this buffer exports the current string, while <code>X</code> exports all <code>@string</code>
+definitions in one go. All these commands function in the same way: when
+used without a prefix argument, they ask for a filename, and then append
+the relevent data to that file. With a numeric prefix argument, they copy
+the relevant data to the corresponding open database.</p>
+
+
+
+<h3><a name="sec21" id="sec21"></a>
+Timestamps</h3>
+
+<p><a name="timestamps" id="timestamps"></a>
+Ebib provides the possibility to add a timestamp to every new entry,
+recording the time it was added to the database. The timestamp is recorded
+in the (additional) field <code>timestamp</code>. (By default, this field is not shown,
+but you can make it visible by pressing <code>H</code> in the index buffer.)</p>
+
+<p>You can tell Ebib to create timestamps by setting the option <code>Use Timestamp</code>
+in Ebib's customisation buffer. With this option set, a timestamp is
+included in entries added to the database with <code>a</code>. Ebib will also add a
+timestamp to entries imported from a buffer or merged from a file, and to
+entries exported to another database or to a file. When importing or
+exporting entries, existing timestamps will be overwritten. The logic
+behind this is that the timestamp records the date and time when the entry
+was added to the database, not when it was first created.</p>
+
+<p>Note that if this option is unset, the timestamp of an entry is retained
+when it's imported or exported. Therefore, if you record timestamps and
+want to im-/export entries without changing their timestamps, temporarily
+unset this option.</p>
+
+<p>Ebib uses the function <code>format-time-string</code> to create the timestamp. The
+format string that Ebib uses can be customised in Ebib's customisation
+buffer. The default string is <code>&quot;%a %b %e %T %Y&quot;</code>, which produces a timestamp
+of the form <code>&quot;Mon Mar 12 01:03:26 2007&quot;</code>. Obviously, this string is not
+suited for sorting, so if you want to be able to sort on timestamps, you'll
+need to customise the format string. See the documentation for
+<code>format-time-string</code> on the options that are available.</p>
+
+
+
+<h3><a name="sec22" id="sec22"></a>
+Multiple Identical Fields</h3>
+
+<p><a name="multiple-identical-fields" id="multiple-identical-fields"></a>
+Under normal circumstances, a BibTeX entry only contains one occurrence of
+each field. If BibTeX notices that an entry contains more than one
+occurrence of an obligatory or optional field, it issues a warning. Ebib is
+somewhat less gracious, it simply takes the value of the last occurrence
+without giving any warning. (Note, by the way, that BibTeX will use the
+value of the <em>first</em> occurrence, not the last.) When additional fields appear
+more than once in an entry, BibTeX does not warn you, since it ignores
+those fields anyway. Here, too, Ebib's standard behaviour is to ignore all
+but the last value.</p>
+
+<p>However, some online reference management services ``use'' this feature of
+BibTeX in that they put multiple <code>keywords</code> fields in the BibTeX entries that
+they produce. If you were to import such an entry into Ebib, you would lose
+all your keywords except the last one. To remedy this, you can tell Ebib
+that it should allow multiple occurrences of a single field in a BibTeX
+entry. You can do this by setting the customisation option
+<a href="#allow-identical-fields">Allow Identical Fields</a>.</p>
+
+<p>With this option set, Ebib collapses the multiple occurrences into a single
+occurrence. All the values of the different occurrences are collected and
+stored in the single occurrence, separated by semicolons. That is, Ebib
+does not retain the multiple occurrences, but it does retain the values. So
+suppose you have an entry that contains the following <code>keywords</code> fields:</p>
+
+<pre class="example">
+@book{jones1998,
+ author = {Jones, Joan},
+ year = {1998},
+ ...
+ keywords = {sleep},
+ keywords = {winter},
+ keywords = {hybernation}
+}
+</pre>
+
+<p>If you load this entry into Ebib with the option <code>Allow Identical Fields</code>
+set, you will get the following:</p>
+
+<pre class="example">
+@book{jones1998,
+ author = {Jones, Joan},
+ year = {1998},
+ ...
+ keywords = {sleep; winter; hybernation}
+}
+</pre>
+
+
+
+<h3><a name="sec23" id="sec23"></a>
+Virtual Databases</h3>
+
+<p><a name="virtual-databases" id="virtual-databases"></a>
+In the previous chapter, Ebib's basic search functionality was
+discussed. (See <a href="#searching">Searching</a>.) Ebib also provides a much more sophisticated
+search and filtering mechanism in the form of <em>virtual databases</em>.</p>
+
+<p>A virtual database is a database that is not associated with any <code>.bib</code>
+file. Rather, it is created from another database by selecting entries from
+it based on a specific search pattern, called a <em>filter</em>. This allows you,
+for example, to select all entries from a database that contain the string
+``Jones'' in their <code>author</code> field. A filter can be as complex as you want:
+you can select all entries that do <em>not</em> contain ``Jones'' in the <code>author</code>
+field, or all entries that contain ``Jones'' in either the <code>author</code> or the
+<code>editor</code> field, or all entries that contain ``Jones'' in the <code>author</code> field,
+and ``symbiotic hybernation'' in the <code>keyword</code> field, etc. Basically, the
+filter can consist of an arbitray number of search criteria combined with
+the logical operators <code>and, or</code> and <code>not</code>.</p>
+
+
+<h4>Simple Selection</h4>
+
+<p class="first">Creating a virtual database is simple: press <code>&amp;</code>, and Ebib will ask you for a
+field to select on, and for a regular expression to select with. So if you
+want to select all entries that contain ``Jones'' in the <code>author</code> field, you
+press <code>&amp;</code> and type <code>author</code> as the field and <code>Jones</code> as the regexp to filter on.</p>
+
+<p>Ebib will then create a virtual database containing the entries matching
+your selection criterion. A virtual database has the same name as the
+database it is based on, prepended with <code>V:</code>. It also has a number like any
+other database, and you can move back and forth to other databases with the
+number or cursor keys.</p>
+
+<p>If you don't want to filter on one specific field but rather want to select
+all entries that match a certain regexp in any field, you can type <code>any</code> as
+the field to filter on. So specifying <code>any</code> as the field and <code>Jones</code> as the
+regexp, the virtual database will select all entries that have a field that
+contains ``Jones'' in them.</p>
+
+
+
+<h4>Complex Filters</h4>
+
+<p class="first">Once you have a virtual database, it remains associated with the database
+it was created from. This means that you can refine or extend the selection
+(i.e. the filter) that the virtual database is based on. If, in the current
+example, you want to include all the entries that have ``Jones'' in the
+<code>editor</code> field, you have to perform a logical <code>or</code> operation: you want to
+select an entry if it contains ``Jones'' in the <code>author</code> field (which you
+already did) <em>or</em> if it contains ``Jones'' in the <code>editor</code> field.</p>
+
+<p>A short sidenote: the first impulse in a case like this might be to use <code>and</code>
+instead of <code>or</code>: after all, you want to select all entries that contain
+``Jones'' in the <code>author</code> field <em>and</em> all entries that contain ``Jones'' in the
+<code>editor</code> field. However, the filter that you build up is used to test each
+entry <em>individually</em> whether it meets the selection criterion. An entry meets
+the criterion if it contains ``Jones'' in the <code>author</code> field <em>or</em> if it
+contains ``Jones'' in the <code>editor</code> field. Therefore, <code>or</code> is the required
+operator in this case. If you would use <code>and</code>, you would only get those
+entries that contain ``Jones'' in both the <code>author</code> <em>and</em> <code>editor</code> fields.</p>
+
+<p>To perform a logical <code>or</code> operation, press the key <code>|</code>. As before, you will be
+asked which field you want to filter on, and which regexp you want to
+filter with. Ebib will then update the virtual database with all entries in
+the original database that match the additional criterion.</p>
+
+<p>It is also possible to perform a logical <code>and</code> on the virtual database. Use
+this if you want to select those entries that contain ``Jones'' in the
+<code>author</code> field and e.g. ``symbiotic hybernation'' in the <code>keyword</code> field. A
+logical <code>and</code> operation is done with the key <code>&amp;</code>. (Note: this is the same key
+that is used to create a virtual database. In fact, you can also create a
+virtual database with <code>|</code>: when used in a normal database, <code>&amp;</code> and <code>|</code> are
+equivalent. They are only different in virtual databases.)</p>
+
+<p>Both the <code>&amp;</code> and <code>|</code> commands can be used with the negative prefix argument <code>M--</code>
+(or <code>C-u -</code>, which is identical). In this case, the search criterion is
+negated. That is, the negative prefix argument performs a logical <code>not</code>
+operation on the search criterion.</p>
+
+<p>That is, if you want to select all entries from a database that do <em>not</em>
+contain ``Jones'' in the <code>author</code> field, you can do this by typing <code>M-- &amp;</code> and
+then filling out the relevant field and regexp. This prefix argument is
+available both in real and in virtual databases.</p>
+
+<p>There is another way of performing a logical <code>not</code> operation, which is only
+available in virtual databases: by pressing the key <code>~</code>, you invert the
+current filter. That is, if you have a virtual database with all the
+entries containing ``Jones'' in the <code>author</code> or in the <code>editor</code> field, and you
+press <code>~</code>, the selection is inverted, and now contains all entries that do
+<em>not</em> have ``Jones'' in the <code>author</code> or <code>editor</code> field.</p>
+
+<p>Although <code>~</code> and the negative prefix argument to <code>&amp;</code> or <code>|</code> both perform logical
+<code>not</code> operations, they are <em>not</em> equivalent: <code>~</code> negates the entire filter built
+up so far, while the negative prefix argument only negates the single
+selection criterion you enter with it.</p>
+
+<p>If you want to know what the filter for the current virtual database is
+exactly, you can type <code>V</code>. This command displays the current filter in the
+minibuffer. The filter is specified as a Lisp expression, meaning that the
+operators appear before their operands, not in between them. That is, <code>x and
+y</code> is written as <code>(and x y)</code>.</p>
+
+<p>With a prefix argument (any prefix argument will do), the command <code>V</code> not
+only displays the current filter, but also reapplies it. This can be useful
+when you've made changes to the source database: Ebib does not
+automatically update a virtual database when its source database is
+modified.</p>
+
+
+
+<h4>Properties of Virtual Databases</h4>
+
+<p class="first">Virtual databases differ from normal databases in several ways. First, they
+cannot be modified: you cannot add or delete entries, and you cannot modify
+the contents of fields. It is also not possible to import entries to them
+or merge another file with them. Furthermore, it is not possible to export
+entries to them or from them.</p>
+
+<p>A virtual database cannot be saved in the normal way with <code>s</code>, and the
+command <code>S</code> to save all databases ignores virtual databases. If you want to
+save a virtual database, you can use the command <code>w</code>. This command not only
+saves the virtual database, it also changes it into a normal database, and
+detaches it from its original source database, so that you can modify it
+without affecting the source database.</p>
+
+<p>The command <code>L</code> also doesn't work with virtual databases. The reason for this
+is that the virtual database is not associated with an actual <code>.bib</code> file, so
+there is no file to create a list of references from. However, it is
+possible to use the command <code>P</code> with a virtual database to create a list of
+entries. See <a href="#printing-database">Printing the Database</a>, for details on these two commands.</p>
+
+
+
+
+<h3><a name="sec24" id="sec24"></a>
+The Multiline Edit Buffer</h3>
+
+<p><a name="multiline-edit-buffer" id="multiline-edit-buffer"></a>
+As mentioned several times before, Ebib has a special multiline edit
+buffer, which is used to edit field values that contain newlines (so-called
+<em>multiline fields</em>), and also to edit the contents of the <code>@preamble</code>
+command. This section discusses the details of this buffer.</p>
+
+<p>Ebib enters multiline edit mode in one of three cases: when you press <code>P</code> in
+the index buffer, to edit the <code>@preamble</code> definition, when you hit <code>l</code> in the
+entry buffer to edit the current field as multiline, or when you hit <code>e</code> on
+the <code>annote</code> field, or on a field whose value already is multiline.</p>
+
+<p>The multiline edit buffer uses a special major mode,
+<code>ebib-multiline-edit-mode</code>, which is derived from <code>text-mode</code>. The changes with
+respect to <code>text-mode</code> are minor (see below), which means that any
+customisations you may have made to <code>text-mode</code> will be available in the
+multiline edit buffer.</p>
+
+<p>The settings that are specific for <code>ebib-multiline-edit-mode</code> are the
+functions assigned to the key sequences <code>C-x b</code>, <code>C-x k</code> and <code>C-x C-s</code>. These key
+sequences do not have their usual functions, but rather are redefined to
+fit Ebib. Both <code>C-x b</code> and <code>C-x k</code> can be used to leave the multiline edit
+buffer. <code>C-x b</code> will store the text as it is to the database, while <code>C-x k</code>
+leaves the multiline edit buffer <em>without</em> storing the text, i.e., the
+original value of the field or preamble that you were editing is
+retained. If the text in the buffer was modified, <code>C-x k</code> asks you if you
+really want to abandon your changes.</p>
+
+<p>If you leave the multitiline edit buffer with <code>C-x b</code> when the buffer is
+empty (i.e., you deleted all the text, including the final newline), and
+you were editing a field value or the <code>@preamble</code> definition, the field value
+or preambleis deleted. (This is in fact the <em>only</em> way to delete the
+<code>@preamble</code> definition. Field values on the other hand can also be deleted by
+hitting <code>x</code> or <code>d</code> on them in the entry buffer.)</p>
+
+<p>The third command that is redefined in the multiline edit buffer is <code>C-x
+C-s</code>. This command can be used to save the database. Because Ebib does not
+do an autosave of the current database, it is advisable to save the
+database manually every now and then to prevent data loss in case of
+crashes. It would be annoying to have to leave the multiline edit buffer
+every time you want to do this, so <code>C-x C-s</code> has been redefined to allow you
+to do this from within the buffer.</p>
+
+
+
+
+<h2><a name="sec25" id="sec25"></a>
+The Ebib Buffers</h2>
+
+<p><a name="ebib-buffers" id="ebib-buffers"></a>
+This chapter lists all the key commands that exist in Ebib, with a short
+description and the actual command that they call. The latter information
+is needed if you want to customise Ebib's key bindings. (See
+<a href="#modifying-key-bindings">Modifying Key Bindings</a>.)</p>
+
+
+
+<h3><a name="sec26" id="sec26"></a>
+The Index Buffer</h3>
+
+<dl>
+<dt><strong><code>Up</code></strong></dt>
+<dd>go to previous entry. <code>(ebib-prev-entry)</code></dd>
+
+<dt><strong><code>Down</code></strong></dt>
+<dd>go to next entry. <code>(ebib-next-entry)</code></dd>
+
+<dt><strong><code>Right</code></strong></dt>
+<dd>move to the next database. <code>(ebib-next-database)</code></dd>
+
+<dt><strong><code>Left</code></strong></dt>
+<dd>move to the previous database. <code>(ebib-prev-database)</code></dd>
+
+<dt><strong><code>PgUp</code></strong></dt>
+<dd>scroll the index buffer down. <code>(ebib-index-scroll-down)</code></dd>
+
+<dt><strong><code>PgDn</code></strong></dt>
+<dd>scroll the index buffer up. <code>(ebib-index-scroll-up)</code></dd>
+
+<dt><strong><code>Home</code></strong></dt>
+<dd>go to first entry. <code>(ebib-goto-first-entry)</code></dd>
+
+<dt><strong><code>End</code></strong></dt>
+<dd>go to last entry. <code>(ebib-goto-last-entry)</code></dd>
+
+<dt><strong><code>Return</code></strong></dt>
+<dd>make the entry under the cursor current. Use after e.g. <code>C-s</code>.
+<code>(ebib-select-entry)</code></dd>
+
+<dt><strong><code>Space</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>1-9</code></strong></dt>
+<dd>jump to the corresponding database.</dd>
+
+<dt><strong><code>/</code></strong></dt>
+<dd>search the database. <code>(ebib-search)</code></dd>
+
+<dt><strong><code>&amp;</code></strong></dt>
+<dd>Create a virtual database, or perform a logical <code>and</code> on the current
+virtual database. With negative prefix argument: apply a logical <code>not</code> to the
+selectional criterion. <code>(ebib-virtual-db-and)</code></dd>
+
+<dt><strong><code>|</code></strong></dt>
+<dd>Create a virtual database, or perform a logical <code>or</code> on the current
+virtual database. With negative prefix argument: apply a logical <code>not</code> to the
+selectional criterion. <code>(ebib-virtual-db-or)</code></dd>
+
+<dt><strong><code>~</code></strong></dt>
+<dd>Perform a logical <code>not</code> on the current virtual
+database. <code>(ebib-virtual-db-not)</code></dd>
+
+<dt><strong><code>a</code></strong></dt>
+<dd>add an entry. <code>(ebib-add-entry)</code></dd>
+
+<dt><strong><code>b</code></strong></dt>
+<dd>equivalent to <code>Pgup</code>.</dd>
+
+<dt><strong><code>c</code></strong></dt>
+<dd>close the database. <code>(ebib-close-database)</code></dd>
+
+<dt><strong><code>C</code></strong></dt>
+<dd>customise Ebib. <code>(ebib-customize)</code></dd>
+
+<dt><strong><code>d</code></strong></dt>
+<dd>delete the current entry. <code>(ebib-delete-entry)</code></dd>
+
+<dt><strong><code>; d</code></strong></dt>
+<dd>delete all marked entries.</dd>
+
+<dt><strong><code>e</code></strong></dt>
+<dd>edit the current entry. <code>(ebib-edit-entry)</code></dd>
+
+<dt><strong><code>E</code></strong></dt>
+<dd>edit the key of the current entry. <code>(ebib-edit-keyname)</code></dd>
+
+<dt><strong><code>f</code></strong></dt>
+<dd>extract a filename from the <code>file</code> field and send it to an
+appropriate viewer. With numeric prefix argument, extract the <em>n</em>-th
+filename.</dd>
+
+<dt><strong><code>F</code></strong></dt>
+<dd>follow <code>crossref</code> field. <code>(ebib-follow-crossref)</code></dd>
+
+<dt><strong><code>g</code></strong></dt>
+<dd>equivalent to <code>Home</code>.</dd>
+
+<dt><strong><code>G</code></strong></dt>
+<dd>equivalent to <code>End</code>.</dd>
+
+<dt><strong><code>H</code></strong></dt>
+<dd>show/hide hidden fields. <code>(ebib-toggle-hidden)</code></dd>
+
+<dt><strong><code>j</code></strong></dt>
+<dd>equivalent to <code>Down</code>.</dd>
+
+<dt><strong><code>J</code></strong></dt>
+<dd>jump to another database. This accepts a numeric prefix argument,
+but will ask you for a database number if there is
+none. <code>(ebib-switch-to-database)</code></dd>
+
+<dt><strong><code>k</code></strong></dt>
+<dd>equivalent to <code>Up</code>.</dd>
+
+<dt><strong><code>l</code></strong></dt>
+<dd>show the log buffer. (<code>ebib-show-log</code>)</dd>
+
+<dt><strong><code>L</code></strong></dt>
+<dd>create a LaTeX file from the current database that produces a list
+of references formatted by BibTeX. <code>(ebib-latex-database)</code></dd>
+
+<dt><strong><code>; L</code></strong></dt>
+<dd>create a LaTeX file with the marked entries only.</dd>
+
+<dt><strong><code>m</code></strong></dt>
+<dd>mark (or unmark) the current entry. <code>(ebib-mark-entry)</code></dd>
+
+<dt><strong><code>; m</code></strong></dt>
+<dd>unmark all marked entries.</dd>
+
+<dt><strong><code>M</code></strong></dt>
+<dd>merge a <code>.bib</code> file. <code>(ebib-merge-bibtex-file)</code></dd>
+
+<dt><strong><code>n</code></strong></dt>
+<dd>find next occurrence of the search string. <code>(ebib-search-next)</code></dd>
+
+<dt><strong><code>N</code></strong></dt>
+<dd>search for entries cross-referencing the current one. <code>(ebib-search-crossref)</code></dd>
+
+<dt><strong><code>C-n</code></strong></dt>
+<dd>equivalent to <code>Down</code>.</dd>
+
+<dt><strong><code>M-n</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>o</code></strong></dt>
+<dd>open a <code>.bib</code> file. <code>(ebib-load-bibtex-file)</code></dd>
+
+<dt><strong><code>p</code></strong></dt>
+<dd>push an entry to a LaTeX buffer <code>(ebib-push-bibtex-key)</code></dd>
+
+<dt><strong><code>; p</code></strong></dt>
+<dd>push the marked entries to a LaTeX buffer.</dd>
+
+<dt><strong><code>C-p</code></strong></dt>
+<dd>equivalent to <code>Up</code>.</dd>
+
+<dt><strong><code>M-p</code></strong></dt>
+<dd>equivalent to <code>PgUp</code>.</dd>
+
+<dt><strong><code>P</code></strong></dt>
+<dd>create a LaTeX file for printing the database, listing the entire
+contents of each entry. <code>(ebib-print-database)</code></dd>
+
+<dt><strong><code>; P</code></strong></dt>
+<dd>create a LaTeX file with the marked entries.</dd>
+
+<dt><strong><code>r</code></strong></dt>
+<dd>show and edit the <code>@preamble</code> definition in the
+database. <code>(ebib-edit-preamble)</code></dd>
+
+<dt><strong><code>q</code></strong></dt>
+<dd>quit Ebib. This sets all variables to nil, unloads the database(s)
+and quits Ebib. <code>(ebib-quit)</code></dd>
+
+<dt><strong><code>s</code></strong></dt>
+<dd>save the database. <code>(ebib-save-current-database)</code></dd>
+
+<dt><strong><code>S</code></strong></dt>
+<dd>save all modified databases. <code>(ebib-save-all-databases)</code></dd>
+
+<dt><strong><code>t</code></strong></dt>
+<dd>show and edit the <code>@string</code> definitions in the
+database. <code>(ebib-edit-strings)</code></dd>
+
+<dt><strong><code>u</code></strong></dt>
+<dd>extract a URL from the <code>url</code> field and send it to a browser. With
+numeric prefix argument, extract the <em>n</em>-th url.</dd>
+
+<dt><strong><code>V</code></strong></dt>
+<dd>Display the filter of the current virtual database in the
+minibuffer. With prefix argument: reapply the filter. <code>(ebib-print-filter)</code></dd>
+
+<dt><strong><code>w</code></strong></dt>
+<dd>write the database to a different file. <code>(ebib-write-database)</code></dd>
+
+<dt><strong><code>x</code></strong></dt>
+<dd>export the current entry to a file, or, when used with numeric
+prefix argument, to another database. <code>(ebib-export-entry)</code></dd>
+
+<dt><strong><code>; x</code></strong></dt>
+<dd>export the marked entries to a file, or, when used with a numeric
+prefix argument, to another database.</dd>
+
+<dt><strong><code>C-x b</code></strong></dt>
+<dd>equivalent to <code>z</code>.</dd>
+
+<dt><strong><code>C-x k</code></strong></dt>
+<dd>equivalent to <code>q</code>.</dd>
+
+<dt><strong><code>X</code></strong></dt>
+<dd>export the <code>@preamble</code> definition to a file or, when used with a
+numeric prefix argument, to another database. <code>(ebib-export-preamble)</code></dd>
+
+<dt><strong><code>z</code></strong></dt>
+<dd>move focus away from the Ebib windows. <code>(ebib-leave-ebib-windows)</code></dd>
+
+<dt><strong><code>Z</code></strong></dt>
+<dd>put Ebib in the background. <code>(ebib-lower)</code></dd>
+</dl>
+
+<p>One function is not bound to any key: <code>ebib-print-filename</code>.</p>
+
+
+<h3><a name="sec27" id="sec27"></a>
+The Entry Buffer</h3>
+
+<dl>
+<dt><strong><code>Up</code></strong></dt>
+<dd>go to the previous field. <code>(ebib-prev-field)</code></dd>
+
+<dt><strong><code>Down</code></strong></dt>
+<dd>go to the next field. <code>(ebib-next-field)</code></dd>
+
+<dt><strong><code>PgUp</code></strong></dt>
+<dd>go to the previous set of fields. <code>(ebib-goto-prev-set)</code></dd>
+
+<dt><strong><code>PgDn</code></strong></dt>
+<dd>go to the next set of fields. <code>(ebib-goto-next-set)</code></dd>
+
+<dt><strong><code>Home</code></strong></dt>
+<dd>go to the first field. <code>(ebib-goto-first-field)</code></dd>
+
+<dt><strong><code>End</code></strong></dt>
+<dd>go to the last field. <code>(ebib-goto-last-field)</code></dd>
+
+<dt><strong><code>Space</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>b</code></strong></dt>
+<dd>equivalent to <code>PgUp</code>.</dd>
+
+<dt><strong><code>c</code></strong></dt>
+<dd>copy the contents of the current field to the kill
+ring. <code>(ebib-copy-field-contents)</code></dd>
+
+<dt><strong><code>d</code></strong></dt>
+<dd>delete the value of the current field. The deleted contents will <em>not</em>
+be put in the kill ring, and is therefore irretrievably
+lost. <code>(ebib-delete-field-contents)</code></dd>
+
+<dt><strong><code>e</code></strong></dt>
+<dd>edit the current field. <code>(ebib-edit-fields)</code></dd>
+
+<dt><strong><code>f</code></strong></dt>
+<dd>extract a filename from the current field and send it to an
+appropriate viewer. With numeric prefix argument, extract the <em>n</em>-th
+filename.</dd>
+
+<dt><strong><code>g</code></strong></dt>
+<dd>equivalent to <code>Home</code>.</dd>
+
+<dt><strong><code>G</code></strong></dt>
+<dd>equivalent to <code>End</code>.</dd>
+
+<dt><strong><code>j</code></strong></dt>
+<dd>go to the next field. <code>(ebib-next-field)</code></dd>
+
+<dt><strong><code>k</code></strong></dt>
+<dd>go to the previous field. <code>(ebib-prev-field)</code></dd>
+
+<dt><strong><code>l</code></strong></dt>
+<dd>edit the current field as multiline. <code>(ebib-edit-multiline-field)</code></dd>
+
+<dt><strong><code>C-n</code></strong></dt>
+<dd>equivalent to <code>Down</code>.</dd>
+
+<dt><strong><code>M-n</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>C-p</code></strong></dt>
+<dd>equivalent to <code>Up</code>.</dd>
+
+<dt><strong><code>M-p</code></strong></dt>
+<dd>equivalent to <code>PgUp</code>.</dd>
+
+<dt><strong><code>q</code></strong></dt>
+<dd>quit editing the current entry and return focus to the index
+buffer. <code>(ebib-quit-entry-buffer)</code></dd>
+
+<dt><strong><code>r</code></strong></dt>
+<dd>toggle a field's ``raw'' status. <code>(ebib-toggle-raw)</code></dd>
+
+<dt><strong><code>s</code></strong></dt>
+<dd>insert an abbreviation from the <code>@string</code> definitions in the
+database. <code>(ebib-insert-abbreviation)</code></dd>
+
+<dt><strong><code>u</code></strong></dt>
+<dd>extract a URL from the current field and send it to a browser. With
+numeric prefix argument, extract the <em>n</em>-th url.</dd>
+
+<dt><strong><code>x</code></strong></dt>
+<dd>cut the contents of the current field. Like <code>c</code>, <code>x</code> puts the contents
+of the current field in the kill ring. <code>(ebib-cut-field-contents)</code></dd>
+
+<dt><strong><code>y</code></strong></dt>
+<dd>yank the last element in the kill ring to the current
+field. Repeated use of <code>y</code> functions like <code>C-y/M-y</code>. Note that no text will be
+yanked if the field already has a value. <code>(ebib-yank-field-contents)</code></dd>
+</dl>
+
+
+
+<h3><a name="sec28" id="sec28"></a>
+The Strings Buffer</h3>
+
+<dl>
+<dt><strong><code>Up</code></strong></dt>
+<dd>go to the previous string. <code>(ebib-prev-string)</code></dd>
+
+<dt><strong><code>Down</code></strong></dt>
+<dd>go to the next string. <code>(ebib-next-string)</code></dd>
+
+<dt><strong><code>PgUp</code></strong></dt>
+<dd>go ten strings up. <code>(ebib-strings-page-up)</code></dd>
+
+<dt><strong><code>PgDn</code></strong></dt>
+<dd>go ten strings down. <code>(ebib-strings-page-down)</code></dd>
+
+<dt><strong><code>Home</code></strong></dt>
+<dd>go to the first string. <code>(ebib-goto-first-string)</code></dd>
+
+<dt><strong><code>End</code></strong></dt>
+<dd>go to the last string. <code>(ebib-goto-last-string)</code></dd>
+
+<dt><strong><code>Space</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>a</code></strong></dt>
+<dd>add a new <code>@string</code> definition. <code>(ebib-add-string)</code></dd>
+
+<dt><strong><code>b</code></strong></dt>
+<dd>equivalent to <code>PgUp</code>.</dd>
+
+<dt><strong><code>c</code></strong></dt>
+<dd>copy the text of the current string to the kill
+ring. <code>(ebib-copy-string-contents)</code></dd>
+
+<dt><strong><code>d</code></strong></dt>
+<dd>delete the current <code>@string</code> definition from the database. You will be
+asked for confirmation. <code>(ebib-delete-string)</code></dd>
+
+<dt><strong><code>e</code></strong></dt>
+<dd>edit the value of the current string. <code>(ebib-edit-string)</code></dd>
+
+<dt><strong><code>g</code></strong></dt>
+<dd>equivalent to <code>Home</code>.</dd>
+
+<dt><strong><code>G</code></strong></dt>
+<dd>equivalent to <code>End</code>.</dd>
+
+<dt><strong><code>j</code></strong></dt>
+<dd>equivalent to <code>Down</code>.</dd>
+
+<dt><strong><code>k</code></strong></dt>
+<dd>equivalent to <code>Up</code>.</dd>
+
+<dt><strong><code>l</code></strong></dt>
+<dd>edit the value of the current string as
+multiline. <code>(ebib-edit-multiline-string)</code></dd>
+
+<dt><strong><code>C-n</code></strong></dt>
+<dd>equivalent to <code>Down</code>.</dd>
+
+<dt><strong><code>M-n</code></strong></dt>
+<dd>equivalent to <code>PgDn</code>.</dd>
+
+<dt><strong><code>C-p</code></strong></dt>
+<dd>equivalent to <code>Up</code>.</dd>
+
+<dt><strong><code>M-p</code></strong></dt>
+<dd>equivalent to <code>PgUp</code>.</dd>
+
+<dt><strong><code>q</code></strong></dt>
+<dd>quit the strings buffer and return focus to the index
+buffer. <code>(ebib-quit-strings-buffer)</code></dd>
+
+<dt><strong><code>x</code></strong></dt>
+<dd>export the current <code>@string</code> definition to a file or, when used with a
+prefix argument, to another database. <code>(ebib-export-string)</code></dd>
+
+<dt><strong><code>X</code></strong></dt>
+<dd>export all the <code>@string</code> definitions to a file or, when used with a
+prefix argument, to another database. <code>(ebib-export-all-strings)</code></dd>
+</dl>
+
+
+
+
+<h2><a name="sec29" id="sec29"></a>
+Customisation</h2>
+
+<p><a name="customisation" id="customisation"></a>
+Ebib can be customised through Emacs' standard customisation interface. The
+only thing that cannot be customised in this way are the key bindings. If
+you wish to customise those, you have to use the file <code>~/.ebibrc</code>.</p>
+
+
+<h3><a name="sec30" id="sec30"></a>
+The Customisation Buffer</h3>
+
+<p><a name="customisation-buffer" id="customisation-buffer"></a>
+Ebib's customisation group is a subgroup of the <code>Tex</code> group. It can be
+invoked by typing <code>M-x customize-group RET ebib RET</code>, or by pressing <code>C</code> in
+the index buffer. This chapter gives a short description of all the options
+available in the customisation buffer.</p>
+
+
+<h4>Default Type</h4>
+
+<p class="first">The default type is the default entry type given to a new entry. Every
+entry in the Ebib database must have a type, because the type defines which
+fields are available. When a new entry is created, Ebib gives it a default
+type, which can be customised through this option. The standard value is
+<code>article</code>.</p>
+
+
+
+<h4>Preload Bib Files</h4>
+
+<p><a name="preload-bib-files" id="preload-bib-files"></a>
+This option allows you to specify which file(s) Ebib is to load when it
+starts up. Specify one file per line, press the <code>INS</code> button to add more
+files. You can complete a partial filename with <code>M-TAB</code>.</p>
+
+
+
+<h4>Additional Fields</h4>
+
+<p><a name="additional-fields" id="additional-fields"></a>
+The additional fields are those fields that are available for all entry
+types, and which BibTeX generally ignores. This option allows you to
+specify which additional fields you wish to use in your database. Specify
+one field per line, press the <code>INS</code> button to add more fields.</p>
+
+<p>By default, the following additional fields are defined: <code>crossref, url,
+annote, abstract, keywords, file</code> and <code>timestamp</code>.</p>
+
+
+
+<h4>Layout</h4>
+
+<p><a name="layout" id="layout"></a>
+The default value of this option is <code>full</code>, which means that Ebib takes over
+the entire frame when it runs. Alternatively, you can select to specify a
+width (in characters) yourself, in which case Ebib takes up the right part
+of the frame, leaving the left part free. See <a href="#screen-layout">Screen Layout</a> for details.</p>
+
+
+
+
+<h4>Index Window Size</h4>
+
+<p class="first">This option lets you specify the size of the index window at the top of the
+Ebib screen. The default value is 10.</p>
+
+
+
+<h4>Index Display Fields</h4>
+
+<p><a name="index-display-fields" id="index-display-fields"></a>
+This option allows you to specify fields that should be displayed next to
+the entry key in the index buffer. By default, the index buffer only shows
+the key of each entry, but if this is too little information, you can use
+this option to display e.g. the title of each entry as well.</p>
+
+
+
+<h4>Insertion Commands</h4>
+
+<p><a name="insertion-commands" id="insertion-commands"></a>
+With the command <code>ebib-insert-bibtex-key</code> or with the command key <code>p</code> in the index
+buffer, you can insert a BibTeX key into a LaTeX buffer. This option allows you
+to define the commands that are available through tab completion when these
+functions ask for a citation command.</p>
+
+<p>The citation commands must be given <em>without</em> the leading backslash, as Ebib adds one.
+Furthermore, you need to specify how many optional arguments each command can
+have. When Ebib prompts you for a citation key, it will ask for as many optional
+arguments as you specify here. (If you don't want to be asked for those optional
+arguments, just fill in 0.)</p>
+
+<p>When Ebib prompts you for a citation command, the commands specified in this
+option can be obtained through tab completion. However, it is not necessary to
+fill in a command from this list here. You can also enter another command (in
+which case Ebib asks for exactly one optional argument) or even no command at
+all. In the latter case, Ebib does not ask for any optional arguments and simply
+puts the key in the buffer without adding a backslash or curly braces.</p>
+
+
+
+
+<h4>Sort Order</h4>
+
+<p class="first">The use of this option is explained above, see <a href="#sorting-bib-file">Sorting the .bib file</a>. To
+create a sort order, click the <code>INS</code> button to create a sort level, and then
+click the <code>INS</code> button under that sort level to enter a sort field. If you
+want to add more than one sort field to the sort level, simply hit <code>INS</code>
+again.</p>
+
+
+
+<h4>Save Xrefs First</h4>
+
+<p><a name="save-xrefs-first" id="save-xrefs-first"></a>
+For cross-referencing to work, the cross-referencing entries must appear in
+the <code>.bib</code> file <em>before</em> the cross-referenced entries. In order to tell Ebib to
+save all entries with a <code>crossref</code> field first, you must set the option <code>Save
+Xrefs First</code> in Ebib's customisation buffer. With this option set, BibTeX's
+crossreferencing options work as intended.</p>
+
+<p>By default, this option is unset, because it (marginally) slows down saving
+the <code>.bib</code> file somewhat.</p>
+
+
+
+<h4>Crossref Face</h4>
+
+<p><a name="crossref-face" id="crossref-face"></a>
+Field values inherited from a cross-referenced entry are marked with this
+face. By default, the face has red as foreground colour.</p>
+
+
+
+<h4>Marked Face</h4>
+
+<p><a name="marked-face" id="marked-face"></a>
+When entries are marked (with <code>m</code>), they are highlighted in this face. By
+default, GNU Emacs uses the text property <code>highlight</code>. XEmacs only allows
+this on terminals, therefore it displays marked entries with a red
+background and a white foreground colour. This option allows you to change
+these defaults.</p>
+
+
+
+<h4>Use Timestamp</h4>
+
+<p class="first">If this option is set, Ebib will add a <code>timestamp</code> field to every new entry,
+recording the date and time it was added to the database. See <a href="#timestamps">Timestamps</a>.</p>
+
+
+
+<h4>Timestamp Format</h4>
+
+<p class="first">This option specifies the format string that is used to create the
+timestamp. The format string is used by <code>format-time-string</code> to create a time
+representation. The default value is <code>&quot;%a %b %e %T %Y&quot;</code>, which produces a
+timestamp of the form <code>&quot;Mon Mar 12 01:03:26 2007&quot;</code>. See the documentation for
+<code>format-time-string</code> for the forms that the format string can take.</p>
+
+
+
+<h4>Standard Url Field</h4>
+
+<p><a name="standard-url-field" id="standard-url-field"></a>
+This is the field that Ebib searches for URLs if you press <code>u</code> in the index
+buffer. Its default value is <code>url</code>.</p>
+
+
+
+<h4>Url Regexp</h4>
+
+<p><a name="url-regexp" id="url-regexp"></a>
+This is the regular expression that Ebib uses to search for URLs in a
+field. The default value is:</p>
+
+<pre class="example">
+\\url{\(.*\)}\|https?://[^ '&lt;&gt;\&quot;\n\t\f]+
+</pre>
+
+<p>With this regular expression, Ebib considers everything that is in a LaTeX
+<code>\url{...}</code> command as a URL, and furthermore every string of
+text that starts with <code>http://</code> or <code>https://</code> and does not contain whitespace
+or one of the characters <code>' &quot; &lt;</code> or <code>&gt;</code>.</p>
+
+
+
+<h4>Browser Command</h4>
+
+<p><a name="browser-command" id="browser-command"></a>
+If this option is unset (which is the default), Ebib uses the Emacs
+function <code>browse-url</code> to start a browser. If this function does not exist,
+you can set this option. For example, if you use the Firefox browser, set
+this option to <code>firefox</code>.</p>
+
+<p>For this to work, the browser that you use must be able to handle a URL on
+the command line.</p>
+
+
+
+<h4>Standard File Field</h4>
+
+<p><a name="standard-file-field" id="standard-file-field"></a>
+This is the field that Ebib searches for filenames if you press <code>f</code> in the
+index buffer. Its default value is <code>file</code>.</p>
+
+
+
+<h4>File Associations</h4>
+
+<p><a name="file-associations" id="file-associations"></a>
+The programs used to view files. By default, programs for <code>.pdf</code> and <code>.ps</code>
+files are specified, which should be available on most linux systems. If
+you prefer other programs or are running on Windows, you'll can specify
+them here. Note that Ebib searches the PATH for the programs, but you can
+also specify full path names. Of course, it is also possible to add new
+associations.</p>
+
+<p>Note that GNU/Emacs 23 (as yet unreleased) comes with <code>doc-view-mode</code>, which
+provides a way to view <code>.pdf</code> and <code>.ps</code> files inside Emacs. (The files are
+converted to <code>.png</code> format first.) If you prefer to use this mode, simply
+leave the program field blank for the relevant file type.</p>
+
+
+
+<h4>File Regexp</h4>
+
+<p><a name="file-regexp" id="file-regexp"></a>
+In order to find files in a field, Ebib uses a regular expression. The
+default value is:</p>
+
+<pre class="example">
+ [^?|\:*&lt;&gt;\&quot; \n\t\f]+
+</pre>
+
+<p>This essentially means that every string of characters not containing any
+of the characters</p>
+
+<pre class="example">
+? | \ : * &lt; &gt; &quot;
+</pre>
+
+<p>or space, newline, tab of formfeed. URLs can easily by recognised by the
+prefix <code>http:</code>, but recognising files is not so straightforward. It is
+therefore not advisable to put anything but filenames in the <code>file</code> field.</p>
+
+
+
+<h4>File Search Dirs</h4>
+
+<p><a name="file-search-dirs" id="file-search-dirs"></a>
+This is the list of directories that Ebib searches for files. Note that
+searching is not recursive: only the files listed here are searched, not
+their subdirectories.</p>
+
+
+
+<h4>Print Preamble</h4>
+
+<p class="first">This option specifies the preamble that is to be added to the LaTeX file
+Ebib creates for printing the database (i.e., the <code>P</code> command). By default,
+the preamble is empty. You can set your own <code>\usepackage</code>
+commands, or anything else you may need.</p>
+
+
+
+<h4>Print Multiline</h4>
+
+<p class="first">When this options is set, Ebib includes multiline field values when it
+creates a LaTeX file with <code>P</code> (<code>ebib-print-database</code>). When unset, multiline
+values are excluded, which saves space. By default, this option is unset.</p>
+
+
+
+<h4>Latex Preamble</h4>
+
+<p class="first">This option specifies the preamble to be added to the LaTeX file for
+creating a list of references from the database (i.e., the <code>L</code> command). By
+default, the line <code>\bibliographystyle{plain}</code> is put in the
+preamble, but you may want to specify your own BibTeX packages and options.</p>
+
+
+
+<h4>Print Tempfile</h4>
+
+<p class="first">This option specifies the name and location of the temporary file Ebib
+creates with the commands <code>ebib-print-database</code> and
+<code>ebib-latex-database</code>. By default, this option has no value,
+which means that Ebib will ask for a filename each time either of these
+commands is called.</p>
+
+
+
+<h4>Allow Identical Fields</h4>
+
+<p><a name="allow-identical-fields" id="allow-identical-fields"></a>
+If this option is set, Ebib stores the values of multiple occurrences of a
+single field within an entry in a single occurrence of that field,
+separated by semicolons. By default, this option is unset, because it slows
+down the loading of <code>.bib</code> files. See <a href="#multiple-identical-fields">Multiple Identical Fields</a>.</p>
+
+
+
+<h4>Entry Types</h4>
+
+<p><a name="entry-types" id="entry-types"></a>
+This option allows you to customise the entry types that Ebib uses. Each
+entry type has a name, a set of obligatory fields and a set of optional
+fields. You can add, alter or delete single fields in an entry type, or
+whole entry types.</p>
+
+<p>If you want to add an entry type, hit the <code>INS</code> key on the top level and give
+the new entry a name, then add obligatory and/or optional fields. It is not
+necessary that an entry type has both obligatory and optional fields, you
+can define an entry that has only obligatory or only optional fields.</p>
+
+
+
+
+<h3><a name="sec31" id="sec31"></a>
+Modifying Key Bindings</h3>
+
+<p><a name="modifying-key-bindings" id="modifying-key-bindings"></a>
+If you are unhappy about Ebib's standard key bindings, you can change them
+to anything you like. To do this, you have to create a file <code>~/.ebibrc</code> and
+write your preferred key bindings in it. A key binding definition is built
+up as follows:</p>
+
+<pre class="example">
+(ebib-key &lt;buffer&gt; &lt;key&gt; &lt;command&gt;)
+</pre>
+
+<p><code>&lt;buffer&gt;</code> is either <code>index</code>, <code>entry</code> or <code>strings</code>, for the corresponding
+buffer. <code>&lt;key&gt;</code> is a standard Emacs key description, and <code>&lt;command&gt;</code> is the
+Ebib command to be associated with the key. The commands that can be used
+here are listed in <a href="#ebib-buffers">The Ebib Buffers</a>. Note that it is possible to bind more
+than one key to a single function: just add as many <code>ebib-key</code> statements as
+necessary.</p>
+
+<p>As an example, the following binds <code>C-s</code> to <code>ebib-search</code> in the index buffer,
+so that the database can be searched with <code>C-s</code> as well as with <code>/</code>:</p>
+
+<pre class="example">
+(ebib-key index &quot;\C-s&quot; ebib-search)
+</pre>
+
+<p>If you want to unbind a key, you can simply leave out <code>&lt;command&gt;</code>. So if you
+want to bind the command <code>ebib-delete-entry</code> to <code>D</code> rather than <code>d</code>, you need to
+put the following in <code>.ebibrc</code>:</p>
+
+<pre class="example">
+(ebib-key index &quot;D&quot; ebib-delete-entry)
+(ebib-key index &quot;d&quot;)
+</pre>
+
+<p>The first line binds <code>D</code> to the command <code>ebib-delete-entry</code>. The second line
+unbinds <code>d</code>.</p>
+
+<p>If a command can be called with a prefix key (as for example
+<code>ebib-delete-entry</code> can), <code>ebib-key</code> will automatically rebind the prefixed
+version as well. So in the example above, the first line not only binds <code>D</code>,
+it also binds <code>; D</code>. Similarly, the second line not only unbinds <code>d</code>, but also
+<code>; d</code>.</p>
+
+<p>It is also possible to redefine the prefix key itself. To do this, you must
+specify <code>mark-prefix</code> for <code>&lt;buffer&gt;</code>. The value of <code>&lt;command&gt;</code> is irrelevant
+here, so it can be left out:</p>
+
+<pre class="example">
+(ebib-key mark-prefix &quot;:&quot;)
+</pre>
+
+<p>This sets up <code>:</code> as the new prefix key. Doing this automatically unbinds the
+existing prefix key.</p>
+
+</div>
+
+
+
+
+<!-- Page published by Emacs Muse ends here -->
+ </body>
+</html>
diff --git a/biblio/bibtex/utils/ebib/ebib.el b/biblio/bibtex/utils/ebib/ebib.el
new file mode 100644
index 0000000000..34411629ce
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/ebib.el
@@ -0,0 +1,3606 @@
+;; Ebib v1.8.0
+;;
+;; Copyright (c) 2003-2009 Joost Kremers
+;; All rights reserved.
+;;
+;; Redistribution and use in source and binary forms, with or without
+;; modification, are permitted provided that the following conditions
+;; are met:
+;;
+;; 1. Redistributions of source code must retain the above copyright
+;; notice, this list of conditions and the following disclaimer.
+;; 2. Redistributions in binary form must reproduce the above copyright
+;; notice, this list of conditions and the following disclaimer in the
+;; documentation and/or other materials provided with the distribution.
+;; 3. The name of the author may not be used to endorse or promote products
+;; derived from this software without specific prior written permission.
+;;
+;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+;; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE,
+;; DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(require 'cl)
+
+;;;;;;;;;;;;;;;;;;;;;;
+;; global variables ;;
+;;;;;;;;;;;;;;;;;;;;;;
+
+;; user customisation
+
+(defgroup ebib nil "Ebib: a BibTeX database manager" :group 'Tex)
+
+(defcustom ebib-default-type 'article
+ "*The default type for a newly created BibTeX entry."
+ :group 'ebib
+ :type 'symbol)
+
+(defcustom ebib-preload-bib-files nil
+ "*List of .bib files to load automatically when Ebib starts."
+ :group 'ebib
+ :type '(repeat (file :must-match t)))
+
+(defcustom ebib-additional-fields '(crossref url annote abstract
+ keywords file timestamp)
+ "*List of the additional fields."
+ :group 'ebib
+ :type '(repeat (symbol :tag "Field")))
+
+(defcustom ebib-layout 'full
+ "*Ebib window layout.
+Full width: Ebib occupies the entire Emacs frame.
+
+Specify width: Ebib occupies the right side of the Emacs frame,
+with the left side free for another window."
+ :group 'ebib
+ :type '(choice (const :tag "Full width" full)
+ (integer :tag "Specify width")))
+
+(defcustom ebib-index-window-size 10
+ "*The number of lines used for the index buffer window."
+ :group 'ebib
+ :type 'integer)
+
+(defcustom ebib-index-display-fields nil
+ "*List of the fields to display in the index buffer."
+ :group 'ebib
+ :type '(repeat (symbol :tag "Index Field")))
+
+(defcustom ebib-insertion-commands '(("cite" . 1))
+ "*A list of commands that can be used to insert an entry into a (La)TeX buffer.
+For use with EBIB-INSERT-BIBTEX-KEY and EBIB-PUSH-BIBTEX-KEY."
+ :group 'ebib
+ :type '(repeat (cons :tag "Command" (string) (integer :tag "Optional arguments"))))
+
+(defcustom ebib-sort-order nil
+ "*The fields on which the BibTeX entries are to be sorted in the .bib file.
+Sorting is done on different sort levels, and each sort level contains one
+or more sort keys."
+ :group 'ebib
+ :type '(repeat (repeat :tag "Sort level" (symbol :tag "Sort field"))))
+
+(defcustom ebib-save-xrefs-first nil
+ "*If true, entries with a crossref field will be saved first in the .bib-file.
+Setting this option has unpredictable results for the sort order
+of entries, so it is not compatible with setting the Sort Order option."
+ :group 'ebib
+ :type 'boolean)
+
+(defface ebib-crossref-face '((t (:foreground "red")))
+ "*Face used to indicate values inherited from crossreferenced entries."
+ :group 'ebib)
+
+(defface ebib-marked-face (if (featurep 'xemacs)
+ '((t (:foreground "white" :background "red")))
+ '((t (:inverse-video t))))
+ "*Face to indicate marked entries."
+ :group 'ebib)
+
+(defcustom ebib-use-timestamp nil
+ "*If true, new entries will get a time stamp.
+The time stamp will be stored in a field \"timestamp\" that can
+be made visible with the `H' command in the index buffer."
+ :group 'ebib
+ :type 'boolean)
+
+(defcustom ebib-timestamp-format "%a %b %e %T %Y"
+ "*Format of the time string used in the timestamp.
+The format is passed unmodified to FORMAT-TIME-STRING, see the
+documentation of that function for details."
+ :group 'ebib
+ :type 'string)
+
+(defcustom ebib-standard-url-field 'url
+ "*Standard field to store urls in.
+In the index buffer, the command ebib-browse-url can be used to
+send a url to a browser. This option sets the field from which
+this command extracts the url."
+ :group 'ebib
+ :type 'symbol)
+
+(defcustom ebib-url-regexp "\\\\url{\\(.*\\)}\\|https?://[^ '<>\"\n\t\f]+"
+ "*Regular expression to extract urls."
+ :group 'ebib
+ :type 'string)
+
+(defcustom ebib-browser-command ""
+ "*Command to call the browser with.
+GNU/Emacs has a function call-browser, which is used if this
+option is unset."
+ :group 'ebib
+ :type '(string :tag "Browser command"))
+
+(defcustom ebib-standard-file-field 'file
+ "*Standard field to store filenames in.
+In the index buffer, the command ebib-view-file can be used to
+view a file externally. This option sets the field from which
+this command extracts the filename."
+ :group 'ebib
+ :type 'symbol)
+
+(defcustom ebib-file-associations '(("pdf" . "xpdf")
+ ("ps" . "gv"))
+ "*List of file associations.
+Lists file extensions together with external programs to handle
+files with those extensions. If the external program is left
+blank, Ebib tries to handle the file internally in
+Emacs (e.g. with doc-view-mode)."
+ :group 'ebib
+ :type '(repeat (cons :tag "File association"
+ (string :tag "Extension") (string :tag "Command"))))
+
+(defcustom ebib-file-regexp "[^?|\\:*<>\" \n\t\f]+"
+ "*Regular expression to match filenames."
+ :group 'ebib
+ :type 'string)
+
+(defcustom ebib-file-search-dirs '("~")
+ "*List of directories to search for files."
+ :group 'ebib
+ :type '(repeat :tag "Search directories" (string :tag "Directory")))
+
+(defcustom ebib-print-preamble nil
+ "*Preamble used for the LaTeX file for printing the database.
+Each string is added to the preamble on a separate line."
+ :group 'ebib
+ :type '(repeat (string :tag "Add to preamble")))
+
+(defcustom ebib-print-multiline nil
+ "*If set, multiline fields are included when printing the database."
+ :group 'ebib
+ :type 'boolean)
+
+(defcustom ebib-latex-preamble '("\\bibliographystyle{plain}")
+ "*Preamble used for the LaTeX file for BibTeXing the database.
+Each string is added to the preamble on a separate line."
+ :group 'ebib
+ :type '(repeat (string :tag "Add to preamble")))
+
+(defcustom ebib-print-tempfile ""
+ "*Temporary file for use with EBIB-PRINT-DATABASE and EBIB-LATEX-DATABASE."
+ :group 'ebib
+ :type '(file))
+
+(defcustom ebib-allow-identical-fields nil
+ "*If set, Ebib handles multiple occurrences of a field gracefully."
+ :group 'ebib
+ :type 'boolean)
+
+(defvar ebib-unique-field-list nil
+ "Holds a list of all field names.")
+
+(defmacro add-to-listq (listvar element &optional append fn)
+ (if (or (featurep 'xemacs)
+ (string< emacs-version "22"))
+ `(add-to-list (quote ,listvar) ,element ,append)
+ `(add-to-list (quote ,listvar) ,element ,append ,fn)))
+
+(defun ebib-set-unique-field-list (var value)
+ "Sets EBIB-UNIQUE-FIELD-LIST on the basis of EBIB-ENTRY-TYPES"
+ (set-default var value)
+ (setq ebib-unique-field-list nil)
+ (mapc #'(lambda (entry)
+ (mapc #'(lambda (field)
+ (add-to-listq ebib-unique-field-list field t 'eq))
+ (cadr entry))
+ (mapc #'(lambda (field)
+ (add-to-listq ebib-unique-field-list field t 'eq))
+ (caddr entry)))
+ value))
+
+(defcustom ebib-entry-types
+ '((article ;; name of entry type
+ (author title journal year) ;; obligatory fields
+ (volume number pages month note)) ;; optional fields
+
+ (book
+ (author title publisher year)
+ (editor volume number series address edition month note))
+
+ (booklet
+ (title)
+ (author howpublished address month year note))
+
+ (inbook
+ (author title chapter pages publisher year)
+ (editor volume series address edition month note))
+
+ (incollection
+ (author title booktitle publisher year)
+ (editor volume number series type chapter pages address edition month note))
+
+ (inproceedings
+ (author title booktitle year)
+ (editor pages organization publisher address month note))
+
+ (manual
+ (title)
+ (author organization address edition month year note))
+
+ (misc
+ ()
+ (title author howpublished month year note))
+
+ (mastersthesis
+ (author title school year)
+ (address month note))
+
+ (phdthesis
+ (author title school year)
+ (address month note))
+
+ (proceedings
+ (title year)
+ (editor publisher organization address month note))
+
+ (techreport
+ (author title institution year)
+ (type number address month note))
+
+ (unpublished
+ (author title note)
+ (month year)))
+
+ "List of entry type definitions for Ebib"
+ :group 'ebib
+ :type '(repeat (list :tag "Entry type" (symbol :tag "Name")
+ (repeat :tag "Obligatory fields" (symbol :tag "Field"))
+ (repeat :tag "Optional fields" (symbol :tag "Field"))))
+ :set 'ebib-set-unique-field-list)
+
+;; generic for all databases
+
+;; constants and variables that are set only once
+(defconst ebib-bibtex-identifier "[^\"#%'(),={} \t\n\f]*" "Regexp describing a licit BibTeX identifier.")
+(defconst ebib-version "1.8.0")
+(defvar ebib-initialized nil "T if Ebib has been initialized.")
+
+;; buffers and highlights
+(defvar ebib-index-buffer nil "The index buffer.")
+(defvar ebib-entry-buffer nil "The entry buffer.")
+(defvar ebib-strings-buffer nil "The strings buffer.")
+(defvar ebib-multiline-buffer nil "Buffer for editing multiline strings.")
+(defvar ebib-log-buffer nil "Buffer showing warnings and errors during loading of .bib files")
+(defvar ebib-index-highlight nil "Highlight to mark the current entry.")
+(defvar ebib-fields-highlight nil "Highlight to mark the current field.")
+(defvar ebib-strings-highlight nil "Highlight to mark the current string.")
+
+;; general bookkeeping
+(defvar ebib-minibuf-hist nil "Holds the minibuffer history for Ebib")
+(defvar ebib-saved-window-config nil "Stores the window configuration when Ebib is called.")
+(defvar ebib-pre-ebib-window nil "The window that was active when Ebib was called.")
+(defvar ebib-pre-multiline-buffer nil "The buffer in the window before switching to the multiline edit buffer.")
+(defvar ebib-export-filename nil "Filename to export entries to.")
+(defvar ebib-push-buffer nil "Buffer to push entries to.")
+(defvar ebib-search-string nil "Stores the last search string.")
+(defvar ebib-editing nil "Indicates what the user is editing.
+Its value can be 'strings, 'fields, or 'preamble.")
+(defvar ebib-multiline-raw nil "Indicates whether the multiline text being edited is raw.")
+(defvar ebib-log-error nil "Indicates whether an error was logged.")
+(defvar ebib-local-bibtex-filenames nil
+ "A buffer-local variable holding a list of the name(s) of that buffer's .bib file(s)")
+(make-variable-buffer-local 'ebib-local-bibtex-filenames)
+(defvar ebib-syntax-table (make-syntax-table) "Syntax table used for reading .bib files.")
+(modify-syntax-entry ?\[ "." ebib-syntax-table)
+(modify-syntax-entry ?\] "." ebib-syntax-table)
+(modify-syntax-entry ?\( "." ebib-syntax-table)
+(modify-syntax-entry ?\) "." ebib-syntax-table)
+(modify-syntax-entry ?\" "w" ebib-syntax-table)
+
+;; the databases
+
+;; each database is represented by a struct
+(defstruct edb
+ (database (make-hash-table :test 'equal)) ; hashtable containing the database itself
+ (keys-list nil) ; sorted list of the keys in the database
+ (cur-entry nil) ; sublist of KEYS-LIST that starts with the current entry
+ (marked-entries nil) ; list of marked entries
+ (n-entries 0) ; number of entries stored in this database
+ (strings (make-hash-table :test 'equal)) ; hashtable with the @STRING definitions
+ (strings-list nil) ; sorted list of the @STRING abbreviations
+ (preamble nil) ; string with the @PREAMBLE definition
+ (filename nil) ; name of the BibTeX file that holds this database
+ (name nil) ; name of the database
+ (modified nil) ; has this database been modified?
+ (make-backup nil) ; do we need to make a backup of the .bib file?
+ (virtual nil)) ; is this a virtual database?
+
+;; the master list and the current database
+(defvar ebib-databases nil "List of structs containing the databases.")
+(defvar ebib-cur-db nil "The database that is currently active.")
+
+;;;;;; bookkeeping required when editing field values or @STRING definitions
+
+(defvar ebib-hide-hidden-fields t "If set to T, hidden fields are not shown.")
+
+;; these two variables are set when the user enters the entry buffer
+(defvar ebib-cur-entry-hash nil "The hash table containing the data of the current entry.")
+(defvar ebib-cur-entry-fields nil "The fields of the type of the current entry.")
+
+;; and these two are set by EBIB-FILL-ENTRY-BUFFER and EBIB-FILL-STRINGS-BUFFER, respectively
+(defvar ebib-current-field nil "The current field.")
+(defvar ebib-current-string nil "The current @STRING definition.")
+
+;; the prefix key is stored in a variable so that the user can customise it.
+(defvar ebib-prefix-key ?\;)
+
+;; this is an AucTeX variable, but we want to check its value, so let's
+;; keep the compiler from complaining.
+(eval-when-compile
+ (defvar TeX-master))
+
+;; this is to keep XEmacs from complaining.
+(eval-when-compile
+ (if (featurep 'xemacs)
+ (defvar mark-active)))
+
+;; XEmacs has line-number, not line-number-at-pos.
+(eval-and-compile
+ (if (featurep 'xemacs)
+ (defalias 'line-number-at-pos 'line-number)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; useful macros and functions ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defmacro nor (&rest args)
+ "Returns T if none of its arguments are true."
+ `(not (or ,@args)))
+
+;; we sometimes (often, in fact ;-) need to do something with a string, but
+;; take special action (or do nothing) if that string is empty. IF-STR
+;; makes that easier:
+
+(defmacro if-str (bindvar then &rest else)
+ "Execute THEN only if STRING is nonempty.
+Format: (if-str (var value) then-form [else-forms]) VAR is bound
+to VALUE, which is evaluated. If VAR is a nonempty string,
+THEN-FORM is executed. If VAR is either \"\" or nil, ELSE-FORM is
+executed. Returns the value of THEN or of ELSE."
+ (declare (indent 2))
+ `(let ,(list bindvar)
+ (if (nor (null ,(car bindvar))
+ (equal ,(car bindvar) ""))
+ ,then
+ ,@else)))
+
+(defmacro last1 (lst &optional n)
+ "Returns the last (or Nth last) element of LST."
+ `(car (last ,lst ,n)))
+
+;; we sometimes need to walk through lists. these functions yield the
+;; element directly preceding or following ELEM in LIST. in order to work
+;; properly, ELEM must be unique in LIST, obviously. if ELEM is the
+;; first/last element of LIST, or if it is not contained in LIST at all,
+;; the result is nil.
+(defun next-elem (elem list)
+ (cadr (member elem list)))
+
+(defun prev-elem (elem list)
+ (if (or (equal elem (car list))
+ (not (member elem list)))
+ nil
+ (last1 list (1+ (length (member elem list))))))
+
+(defun read-string-at-point (chars)
+ "Reads a string at POINT delimited by CHARS and returns it.
+CHARS is a string of characters that should not occur in the string."
+ (save-excursion
+ (skip-chars-backward (concat "^" chars))
+ (let ((beg (point)))
+ (looking-at-goto-end (concat "[^" chars "]*"))
+ (buffer-substring-no-properties beg (point)))))
+
+(defun remove-from-string (string remove)
+ "Returns a copy of STRING with all the occurrences of REMOVE taken out.
+REMOVE can be a regex."
+ (apply 'concat (split-string string remove)))
+
+(defun in-string (char string)
+ "Returns T if CHAR is in STRING, otherwise NIL."
+ (catch 'found
+ (do ((len (length string))
+ (i 0 (1+ i)))
+ ((= i len) nil)
+ (if (eq char (aref string i))
+ (throw 'found t)))))
+
+(defun ensure-extension (string ext)
+ "Makes sure STRING has the extension EXT, by appending it if necessary.
+EXT should be an extension without the dot."
+ (if (string-match (concat "\\." ext "$") string)
+ string
+ (concat string "." ext)))
+
+(defmacro with-buffer-writable (&rest body)
+ "Makes the current buffer writable and executes the commands in BODY.
+After BODY is executed, the buffer modified flag is unset."
+ (declare (indent defun))
+ `(unwind-protect
+ (let ((buffer-read-only nil))
+ ,@body)
+ (set-buffer-modified-p nil)))
+
+(defmacro safe-write-region (start end filename &optional append visit lockname mustbenew)
+ "XEmacs does not have the MUSTBENEW argument, so this is a way to implement it."
+ (if (featurep 'xemacs)
+ `(if (and (file-exists-p ,filename)
+ (not (y-or-n-p (format "File %s already exists; overwrite anyway? " ,filename))))
+ (error "File %s exist" ,filename)
+ (write-region ,start ,end ,filename ,append ,visit ,lockname))
+ `(write-region ,start ,end ,filename ,append ,visit ,lockname ,mustbenew)))
+
+(defun symbol-or-string (x)
+ "Returns the symbol-name of X if X is a symbol, otherwise return X.
+Much like SYMBOL-NAME, except it does not throw an error if X is
+not a symbol."
+ (if (symbolp x)
+ (symbol-name x)
+ x))
+
+;; XEmacs doesn't know about propertize...
+(if (not (fboundp 'propertize))
+ (defun propertize (string &rest properties)
+ "Return a copy of STRING with text properties added.
+First argument is the string to copy. Remaining arguments form a
+sequence of PROPERTY VALUE pairs for text properties to add to
+the result."
+ (let ((new-string (copy-sequence string)))
+ (add-text-properties 0 (length new-string) properties new-string)
+ new-string)))
+
+(defun region-active ()
+ (if (featurep 'xemacs)
+ (region-active-p)
+ mark-active))
+
+;; RAW-P determines if STRING is raw. note that we cannot do this by
+;; simply checking whether STRING begins with { and ends with } (or
+;; begins and ends with "), because something like "{abc} # D # {efg}"
+;; would then be incorrectly recognised as non-raw. so we need to do
+;; the following: take out everything that is between braces or
+;; quotes, and see if anything is left. if there is, the original
+;; string was raw, otherwise it was not.
+;;
+;; so i first check whether the string begins with { or ". if not, we
+;; certainly have a raw string. (RAW-P recognises this through the default
+;; clause of the COND.) if the first character is { or ", we first take out
+;; every occurrence of backslash-escaped { and } or ", so that the rest of
+;; the function does not get confused over them.
+;;
+;; then, if the first character is {, i use REMOVE-FROM-STRING to take out
+;; every occurrence of the regex "{[^{]*?}", which translates to "the
+;; smallest string that starts with { and ends with }, and does not contain
+;; another {. IOW, it takes out the innermost braces and their
+;; contents. because braces may be embedded, we have to repeat this step
+;; until no more balanced braces are found in the string. (note that it
+;; would be unwise to check for just the occurrence of { or }, because that
+;; would throw RAW-P in an infinite loop if a string contains an unbalanced
+;; brace.)
+;;
+;; for strings beginning with " i do the same, except that it is not
+;; necessary to repeat this in a WHILE loop, for the simple reason that
+;; strings surrounded with double quotes cannot be embedded; i.e.,
+;; "ab"cd"ef" is not a valid (BibTeX) string, while {ab{cd}ef} is.
+;;
+;; note: because these strings are to be fed to BibTeX and ultimately
+;; (La)TeX, it might seem that we don't need to worry about strings
+;; containing unbalanced braces, because (La)TeX would choke on them. but
+;; the user may inadvertently enter such a string, and we therefore need to
+;; be able to handle it. (alternatively, we could perform a check on
+;; strings and warn the user.)
+
+(defun raw-p (string)
+ "Non-nil if STRING is raw."
+ (when (stringp string)
+ (cond
+ ((eq (string-to-char string) ?\{)
+ ;; we remove all occurrences of `\{' and of `\}' from the string:
+ (let ((clear-str (remove-from-string (remove-from-string string "[\\][{]")
+ "[\\][}]")))
+ (while (and (in-string ?\{ clear-str) (in-string ?\} clear-str))
+ (setq clear-str (remove-from-string clear-str "{[^{]*?}")))
+ (> (length clear-str) 0)))
+ ((eq (string-to-char string) ?\")
+ (let ((clear-str (remove-from-string string "[\\][\"]"))) ; remove occurrences of `\"'
+ (setq clear-str (remove-from-string clear-str "\"[^\"]*?\""))
+ (> (length clear-str) 0)))
+ (t t))))
+
+(defun to-raw (string)
+ "Converts a string to its raw counterpart."
+ (if (and (stringp string)
+ (not (raw-p string)))
+ (substring string 1 -1)
+ string))
+
+(defun from-raw (string)
+ "Converts a raw string to a non-raw one."
+ (if (raw-p string)
+ (concat "{" string "}")
+ string))
+
+(defun multiline-p (string)
+ "True if STRING is multiline."
+ (if (stringp string)
+ (string-match "\n" string)))
+
+(defun first-line (string)
+ "Returns the first line of a multi-line string."
+ (string-match "\n" string)
+ (substring string 0 (match-beginning 0)))
+
+(defun sort-in-buffer (limit str)
+ "Moves POINT to the right position to insert STR in a buffer with lines sorted A-Z."
+ (let ((upper limit)
+ middle)
+ (when (> limit 0)
+ (let ((lower 0))
+ (goto-char (point-min))
+ (while (progn
+ (setq middle (/ (+ lower upper 1) 2))
+ (goto-line middle) ; if this turns out to be where we need to be,
+ (beginning-of-line) ; this puts POINT at the right spot.
+ (> (- upper lower) 1)) ; if upper and lower differ by only 1, we have found the
+ ; position to insert the entry in.
+ (save-excursion
+ (let ((beg (point)))
+ (end-of-line)
+ (if (string< (buffer-substring-no-properties beg (point)) str)
+ (setq lower middle)
+ (setq upper middle)))))))))
+
+(defun match-all (match-str string)
+ "Highlights all the matches of MATCH-STR in STRING.
+The return value is a list of two elements: the first is the
+modified string, the second either t or nil, indicating whether a
+match was found at all."
+ (do ((counter 0 (match-end 0)))
+ ((not (string-match match-str string counter)) (values string (not (= counter 0))))
+ (add-text-properties (match-beginning 0) (match-end 0) '(face highlight) string)))
+
+(defun looking-at-goto-end (str &optional match)
+ "Like LOOKING-AT but moves point to the end of the matching string.
+MATCH acts just like the argument to MATCH-END, and defaults to 0."
+ (or match (setq match 0))
+ (let ((case-fold-search t))
+ (if (looking-at str)
+ (goto-char (match-end match)))))
+
+;; this needs to be wrapped in an eval-and-compile, to keep Emacs from
+;; complaining that ebib-execute-helper isn't defined when it compiles
+;; ebib-execute-when.
+(eval-and-compile
+ (defun ebib-execute-helper (env)
+ "Helper function for EBIB-EXECUTE-WHEN."
+ (cond
+ ((eq env 'entries)
+ '(and ebib-cur-db
+ (edb-cur-entry ebib-cur-db)))
+ ((eq env 'marked-entries)
+ '(and ebib-cur-db
+ (edb-marked-entries ebib-cur-db)))
+ ((eq env 'database)
+ 'ebib-cur-db)
+ ((eq env 'real-db)
+ '(and ebib-cur-db
+ (not (edb-virtual ebib-cur-db))))
+ ((eq env 'virtual-db)
+ '(and ebib-cur-db
+ (edb-virtual ebib-cur-db)))
+ ((eq env 'no-database)
+ '(not ebib-cur-db))
+ (t t))))
+
+(defmacro ebib-execute-when (&rest forms)
+ "Macro to facilitate writing Ebib functions.
+This functions essentially like a COND clause: the basic format
+is (ebib-execute-when FORMS ...), where each FORM is built up
+as (ENVIRONMENTS BODY). ENVIRONMENTS is a list of symbols (not
+quoted) that specify under which conditions BODY is to be
+executed. Valid symbols are:
+
+entries: execute when there are entries in the database,
+marked-entries: execute when there are marked entries in the database,
+database: execute if there is a database,
+no-database: execute if there is no database,
+real-db: execute when there is a database and it is real,
+virtual-db: execute when there is a database and it is virtual,
+default: execute if all else fails.
+
+Just like with COND, only one form is actually executed, the
+first one that matches. If ENVIRONMENT contains more than one
+condition, BODY is executed if they all match (i.e., the
+conditions are AND'ed.)"
+ (declare (indent defun))
+ `(cond
+ ,@(mapcar #'(lambda (form)
+ (cons (if (= 1 (length (car form)))
+ (ebib-execute-helper (caar form))
+ `(and ,@(mapcar #'(lambda (env)
+ (ebib-execute-helper env))
+ (car form))))
+ (cdr form)))
+ forms)))
+
+;; the numeric prefix argument is 1 if the user gave no prefix argument at
+;; all. the raw prefix argument is not always a number. so we need to do
+;; our own conversion.
+(defun ebib-prefix (num)
+ (when (numberp num)
+ num))
+
+(defun ebib-called-with-prefix ()
+ "Returns T if the command was called with a prefix key."
+ (if (featurep 'xemacs)
+ (member (character-to-event ebib-prefix-key) (append (this-command-keys) nil))
+ (member (event-convert-list (list ebib-prefix-key))
+ (append (this-command-keys-vector) nil))))
+
+(defmacro ebib-export-to-db (num message copy-fn)
+ "Exports data to another database.
+NUM is the number of the database to which the data is to be copied.
+
+MESSAGE is a string displayed in the echo area if the export was
+succesful. It must contain a %d directive, which is used to
+display the database number to which the entry was exported.
+
+COPY-FN is the function that actually copies the relevant
+data. It must take as argument the database to which the data is
+to be copied. COPY-FN must return T if the copying was
+successful, and NIL otherwise."
+ (let ((goal-db (gensym)))
+ `(let ((,goal-db (nth (1- ,num) ebib-databases)))
+ (cond
+ ((not ,goal-db)
+ (error "Database %d does not exist" ,num))
+ ((edb-virtual ,goal-db)
+ (error "Database %d is virtual" ,num))
+ (t (when (funcall ,copy-fn ,goal-db)
+ (ebib-set-modified t ,goal-db)
+ (message ,message ,num)))))))
+
+(defmacro ebib-export-to-file (prompt-string message insert-fn)
+ "Exports data to a file.
+PROMPT-STRING is the string that is used to ask for the filename
+to export to. INSERT-FN must insert the data to be exported into
+the current buffer: it is called within a WITH-TEMP-BUFFER, whose
+contents is appended to the file the user enters.
+
+MESSAGE is shown in the echo area when the export was
+successful. It must contain a %s directive, which is used to
+display the actual filename."
+ (let ((filename (gensym)))
+ `(let ((insert-default-directory (not ebib-export-filename)))
+ (if-str (,filename (read-file-name
+ ,prompt-string "~/" nil nil ebib-export-filename))
+ (with-temp-buffer
+ (funcall ,insert-fn)
+ (append-to-file (point-min) (point-max) ,filename)
+ (setq ebib-export-filename ,filename))))))
+
+(defun ebib-temp-window ()
+ "Returns a window to be used for temporary use."
+ (if (eq ebib-layout 'full)
+ (get-buffer-window ebib-entry-buffer)
+ ebib-pre-ebib-window))
+
+(defun ebib-get-obl-fields (entry-type)
+ "Returns the obligatory fields of ENTRY-TYPE."
+ (nth 1 (assoc entry-type ebib-entry-types)))
+
+(defun ebib-get-opt-fields (entry-type)
+ "Returns the optional fields of ENTRY-TYPE."
+ (nth 2 (assoc entry-type ebib-entry-types)))
+
+(defun ebib-get-all-fields (entry-type)
+ "Returns all the fields of ENTRY-TYPE."
+ (cons 'type* (append (ebib-get-obl-fields entry-type)
+ (ebib-get-opt-fields entry-type)
+ ebib-additional-fields)))
+
+(defmacro ebib-retrieve-entry (entry-key db)
+ "Returns the hash table of the fields stored in DB under ENTRY-KEY."
+ `(gethash ,entry-key (edb-database ,db)))
+
+(defun ebib-erase-buffer (buffer)
+ (set-buffer buffer)
+ (with-buffer-writable
+ (erase-buffer)))
+
+(defun ebib-make-highlight (begin end buffer)
+ (let (highlight)
+ (if (featurep 'xemacs)
+ (progn
+ (setq highlight (make-extent begin end buffer))
+ (set-extent-face highlight 'highlight))
+ (progn
+ (setq highlight (make-overlay begin end buffer))
+ (overlay-put highlight 'face 'highlight)))
+ highlight))
+
+(defun ebib-move-highlight (highlight begin end buffer)
+ (if (featurep 'xemacs)
+ (set-extent-endpoints highlight begin end buffer)
+ (move-overlay highlight begin end buffer)))
+
+(defun ebib-highlight-start (highlight)
+ (if (featurep 'xemacs)
+ (extent-start-position highlight)
+ (overlay-start highlight)))
+
+(defun ebib-highlight-end (highlight)
+ (if (featurep 'xemacs)
+ (extent-end-position highlight)
+ (overlay-end highlight)))
+
+(defun ebib-delete-highlight (highlight)
+ (if (featurep 'xemacs)
+ (detach-extent highlight)
+ (delete-overlay highlight)))
+
+(defun ebib-set-index-highlight ()
+ (set-buffer ebib-index-buffer)
+ (beginning-of-line)
+ (let ((beg (point)))
+ (if ebib-index-display-fields
+ (end-of-line)
+ (skip-chars-forward "^ "))
+ (ebib-move-highlight ebib-index-highlight beg (point) ebib-index-buffer)
+ (beginning-of-line)))
+
+(defun ebib-set-fields-highlight ()
+ (set-buffer ebib-entry-buffer)
+ (beginning-of-line)
+ (let ((beg (point)))
+ (looking-at-goto-end "[^ \t\n\f]*")
+ (ebib-move-highlight ebib-fields-highlight beg (point) ebib-entry-buffer)
+ (beginning-of-line)))
+
+(defun ebib-set-strings-highlight ()
+ (set-buffer ebib-strings-buffer)
+ (beginning-of-line)
+ (let ((beg (point)))
+ (looking-at-goto-end "[^ \t\n\f]*")
+ (ebib-move-highlight ebib-strings-highlight beg (point) ebib-strings-buffer)
+ (beginning-of-line)))
+
+(defun ebib-display-entry (entry-key)
+ "Displays ENTRY-KEY in the index buffer at POINT."
+ (set-buffer ebib-index-buffer)
+ (insert (format "%-30s %s\n"
+ entry-key
+ (if ebib-index-display-fields
+ (let ((cur-entry-hash (ebib-retrieve-entry entry-key ebib-cur-db)))
+ (mapconcat #'(lambda (field)
+ (or
+ (to-raw (gethash field cur-entry-hash))
+ ""))
+ ebib-index-display-fields
+ "; "))
+ ""))))
+
+(defun ebib-redisplay-current-field ()
+ "Redisplays the contents of the current field in the entry buffer."
+ (set-buffer ebib-entry-buffer)
+ (if (eq ebib-current-field 'crossref)
+ (progn
+ (ebib-fill-entry-buffer)
+ (setq ebib-current-field 'crossref)
+ (re-search-forward "^crossref")
+ (ebib-set-fields-highlight))
+ (with-buffer-writable
+ (goto-char (ebib-highlight-start ebib-fields-highlight))
+ (let ((beg (point)))
+ (end-of-line)
+ (delete-region beg (point)))
+ (insert (format "%-17s " (symbol-name ebib-current-field))
+ (ebib-get-field-highlighted ebib-current-field ebib-cur-entry-hash))
+ (ebib-set-fields-highlight))))
+
+(defun ebib-redisplay-current-string ()
+ "Redisplays the current string definition in the strings buffer."
+ (set-buffer ebib-strings-buffer)
+ (with-buffer-writable
+ (let ((str (to-raw (gethash ebib-current-string (edb-strings ebib-cur-db)))))
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (let ((beg (point)))
+ (end-of-line)
+ (delete-region beg (point)))
+ (insert (format "%-18s %s" ebib-current-string
+ (if (multiline-p str)
+ (concat "+" (first-line str))
+ (concat " " str))))
+ (ebib-set-strings-highlight))))
+
+(defun ebib-move-to-field (field direction)
+ "Moves the fields overlay to the line containing FIELD.
+If DIRECTION is positive, searches forward, if DIRECTION is
+negative, searches backward. If DIRECTION is 1 or -1, searches
+from POINT, if DIRECTION is 2 or -2, searches from beginning or
+end of buffer. If FIELD is not found in the entry buffer, the
+overlay is not moved. FIELD must be a symbol."
+
+ ;;Note: this function does NOT change the value of EBIB-CURRENT-FIELD!
+
+ (set-buffer ebib-entry-buffer)
+ (if (eq field 'type*)
+ (goto-char (point-min))
+ (multiple-value-bind (fn start limit) (if (>= direction 0)
+ (values 're-search-forward (point-min) (point-max))
+ (values 're-search-backward (point-max) (point-min)))
+ ;; make sure we can get back to our original position, if the field
+ ;; cannot be found in the buffer:
+ (let ((current-pos (point)))
+ (when (evenp direction)
+ (goto-char start))
+ (unless (funcall fn (concat "^" (symbol-name field)) limit t)
+ (goto-char current-pos)))))
+ (ebib-set-fields-highlight))
+
+(defun ebib-create-collection (hashtable)
+ "Creates a list from the keys in HASHTABLE that can be used as COLLECTION in COMPLETING-READ.
+The keys of HASHTABLE must be either symbols or strings."
+ (let ((result nil))
+ (maphash #'(lambda (x y)
+ (setq result (cons (cons (symbol-or-string x)
+ 0)
+ result)))
+ hashtable)
+ result))
+
+(defun ebib-get-field-highlighted (field current-entry &optional match-str)
+ ;; note: we need to work on a copy of the string, otherwise the highlights
+ ;; are made to the string as stored in the database. hence copy-sequence.
+ (let ((case-fold-search t)
+ (string (copy-sequence (gethash field current-entry)))
+ (raw " ")
+ (multiline " ")
+ (matched nil))
+ ;; we have to do a couple of things now:
+ ;; - remove {} or "" around the string, if they're there
+ ;; - search for match-str
+ ;; - properly adjust the string if it's multiline
+ ;; but all this is not necessary if there was no string
+ (if (null string)
+ (let* ((xref (to-raw (gethash 'crossref current-entry)))
+ (xref-entry (ebib-retrieve-entry xref ebib-cur-db)))
+ (when xref-entry
+ (setq string (gethash field xref-entry))
+ (if string
+ (setq string (propertize (to-raw string) 'face 'ebib-crossref-face 'fontified t))
+ (setq string ""))))
+ (if (raw-p string)
+ (setq raw "*")
+ (setq string (to-raw string))) ; we have to make the string look nice
+ (when match-str
+ (multiple-value-setq (string matched) (match-all match-str string)))
+ (when (multiline-p string)
+ ;; IIUC PROPERTIZE shouldn't be necessary here, as the variable
+ ;; multiline is local and therefore the object it refers to should
+ ;; be GC'ed when the function returns. but for some reason, the
+ ;; plus sign is persistent, and if it's been highlighted as the
+ ;; result of a search, it stays that way.
+ (setq multiline (propertize "+" 'face nil))
+ (setq string (first-line string))))
+ (when (and matched
+ (string= multiline "+"))
+ (add-text-properties 0 1 '(face highlight) multiline))
+ (concat raw multiline string)))
+
+(defun ebib-format-fields (entry fn &optional match-str)
+ (let* ((entry-type (gethash 'type* entry))
+ (obl-fields (ebib-get-obl-fields entry-type))
+ (opt-fields (ebib-get-opt-fields entry-type)))
+ (funcall fn (format "%-19s %s\n" "type" entry-type))
+ (mapc #'(lambda (fields)
+ (funcall fn "\n")
+ (mapcar #'(lambda (field)
+ (unless (and (get field 'ebib-hidden)
+ ebib-hide-hidden-fields)
+ (funcall fn (format "%-17s " field))
+ (funcall fn (or
+ (ebib-get-field-highlighted field entry match-str)
+ ""))
+ (funcall fn "\n")))
+ fields))
+ (list obl-fields opt-fields ebib-additional-fields))))
+
+(defun ebib-fill-entry-buffer (&optional match-str)
+ "Fills the entry buffer with the fields of the current entry.
+MATCH-STRING is a regexp that will be highlighted when it occurs in the
+field contents."
+ (set-buffer ebib-entry-buffer)
+ (with-buffer-writable
+ (erase-buffer)
+ (when (and ebib-cur-db ; do we have a database?
+ (edb-keys-list ebib-cur-db) ; does it contain entries?
+ (gethash (car (edb-cur-entry ebib-cur-db))
+ (edb-database ebib-cur-db))) ; does the current entry exist?
+ (ebib-format-fields (gethash (car (edb-cur-entry ebib-cur-db))
+ (edb-database ebib-cur-db)) 'insert match-str)
+ (setq ebib-current-field 'type*)
+ (goto-char (point-min))
+ (ebib-set-fields-highlight))))
+;; (skip-chars-forward "^ "))))
+
+(defun ebib-set-modified (mod &optional db)
+ "Sets the modified flag of the database DB to MOD.
+If DB is nil, it defaults to the current database, and the
+modified flag of the index buffer is also (re)set. MOD must be
+either T or NIL."
+ (unless db
+ (setq db ebib-cur-db))
+ (setf (edb-modified db) mod)
+ (when (eq db ebib-cur-db)
+ (save-excursion
+ (set-buffer ebib-index-buffer)
+ (set-buffer-modified-p mod))))
+
+(defun ebib-modified-p ()
+ "Checks if any of the databases in Ebib were modified.
+Returns the first modified database, or NIL if none was modified."
+ (let ((db (car ebib-databases)))
+ (while (and db
+ (not (edb-modified db)))
+ (setq db (next-elem db ebib-databases)))
+ db))
+
+(defun ebib-create-new-database (&optional db)
+ "Creates a new database instance and returns it.
+If DB is set to a database, the new database is a copy of DB."
+ (let ((new-db
+ (if (edb-p db)
+ (copy-edb db)
+ (make-edb))))
+ (setq ebib-databases (append ebib-databases (list new-db)))
+ new-db))
+
+(defun ebib-match-paren-forward (limit)
+ "Moves forward to the closing parenthesis matching the opening parenthesis at POINT.
+This function handles parentheses () and braces {}. Does not
+search/move beyond LIMIT. Returns T if a matching parenthesis was
+found, NIL otherwise. If point was not at an opening parenthesis
+at all, NIL is returned and point is not moved. If point was at
+an opening parenthesis but no matching closing parenthesis was
+found, an error is logged and point is moved one character
+forward to allow parsing to continue."
+ (cond
+ ((eq (char-after) ?\{)
+ (ebib-match-brace-forward limit))
+ ((eq (char-after) ?\()
+ ;; we wrap this in a condition-case because we need to log the error
+ ;; message outside of the save-restriction, otherwise we get the wrong
+ ;; line number.
+ (condition-case nil
+ (save-restriction
+ (narrow-to-region (point) limit)
+ ;; this is really a hack. we want to allow unbalanced parentheses in
+ ;; field values (bibtex does), so we cannot use forward-list
+ ;; here. for the same reason, looking for the matching paren by hand
+ ;; is pretty complicated. however, balanced parentheses can only be
+ ;; used to enclose entire entries (or @STRINGs or @PREAMBLEs) so we
+ ;; can be pretty sure we'll find it right before the next @ at the
+ ;; start of a line, or right before the end of the file.
+ (re-search-forward "^@" nil 0)
+ (skip-chars-backward "@ \n\t\f")
+ (forward-char -1)
+ (if (eq (char-after) ?\))
+ t
+ (goto-char (1+ (point-min)))
+ (error "")))
+ (error (ebib-log 'error "Error in line %d: Matching closing parenthesis not found!" (line-number-at-pos))
+ nil)))
+ (t nil)))
+
+(defun ebib-match-delim-forward (limit)
+ "Moves forward to the closing delimiter matching the opening delimiter at POINT.
+This function handles braces {} and double quotes \"\". Does not
+search/move beyond LIMIT. Returns T if a matching delimiter was
+found, NIL otherwise. If point was not at an opening delimiter at
+all, NIL is returned and point is not moved. If point was at an
+opening delimiter but no matching closing delimiter was found, an
+error is logged and point is moved one character forward to allow
+parsing to continue."
+ (cond
+ ((eq (char-after) ?\")
+ (ebib-match-quote-forward limit))
+ ((eq (char-after) ?\{)
+ (ebib-match-brace-forward limit))
+ (t nil)))
+
+(defun ebib-match-brace-forward (limit)
+ "Moves forward to the closing brace matching the opening brace at POINT.
+Does not search/move beyond LIMIT. Returns T if a matching brace
+was found, NIL otherwise. If point was not at an opening brace at
+all, NIL is returned and point is not moved. If point was at an
+opening brace but no matching closing brace was found, an error
+is logged and point is moved one character forward to allow
+parsing to continue."
+ (when (eq (char-after) ?\{) ; make sure we're really on a brace, otherwise return nil
+ (condition-case nil
+ (save-restriction
+ (narrow-to-region (point) limit)
+ (progn
+ (forward-list)
+ ;; all of ebib expects that point moves to the closing
+ ;; parenthesis, not right after it, so we adjust.
+ (forward-char -1)
+ t)) ; return t because a matching brace was found
+ (error (progn
+ (ebib-log 'error "Error in line %d: Matching closing brace not found!" (line-number-at-pos))
+ (forward-char 1)
+ nil)))))
+
+(defun ebib-match-quote-forward (limit)
+ "Moves to the closing double quote matching the quote at POINT.
+Does not search/move beyond LIMIT. Returns T if a matching quote
+was found, NIL otherwise. If point was not at a double quote at
+all, NIL is returned and point is not moved. If point was at a
+quote but no matching closing quote was found, an error is logged
+and point is moved one character forward to allow parsing to
+continue."
+ (when (eq (char-after (point)) ?\") ; make sure we're on a double quote.
+ (condition-case nil
+ (save-restriction
+ (narrow-to-region (point) limit)
+ (while (progn
+ (forward-char) ; move forward because we're on a double quote
+ (skip-chars-forward "^\"") ; search the next double quote
+ (eq (char-before) ?\\))) ; if it's preceded by a backslash, keep on searching
+ (or (eq (char-after) ?\")
+ (progn
+ (goto-char (1+ (point-min)))
+ (error ""))))
+ (error (ebib-log 'error "Error in line %d: Matching closing quote not found!" (line-number-at-pos))
+ nil))))
+
+(defun ebib-insert-entry (entry-key fields db &optional sort timestamp)
+ "Stores the entry defined by ENTRY-KEY and FIELDS into DB.
+Optional argument SORT indicates whether the KEYS-LIST must be
+sorted after insertion. Default is NIL. Optional argument
+TIMESTAMP indicates whether a timestamp is to be added to the
+entry. Note that for a timestamp to be added, EBIB-USE-TIMESTAMP
+must also be set to T."
+ (when (and timestamp ebib-use-timestamp)
+ (puthash 'timestamp (from-raw (format-time-string ebib-timestamp-format)) fields))
+ (puthash entry-key fields (edb-database db))
+ (ebib-set-modified t db)
+ (setf (edb-n-entries db) (1+ (edb-n-entries db)))
+ (setf (edb-keys-list db)
+ (if sort
+ (sort (cons entry-key (edb-keys-list db)) 'string<)
+ (cons entry-key (edb-keys-list db)))))
+
+(defun ebib-insert-string (abbr string db &optional sort)
+ "Stores the @STRING definition defined by ABBR and STRING into DB.
+Optional argument SORT indicates whether the STRINGS-LIST must be sorted
+after insertion. When loading or merging a file, for example, it is more
+economic to sort KEYS-LIST manually after all entries in the file have been
+added."
+ (puthash abbr (from-raw string) (edb-strings db))
+ (ebib-set-modified t db)
+ (setf (edb-strings-list db)
+ (if sort
+ (sort (cons abbr (edb-strings-list db)) 'string<)
+ (cons abbr (edb-strings-list db)))))
+
+(defmacro ebib-cur-entry-key ()
+ "Returns the key of the current entry in EBIB-CUR-DB."
+ `(car (edb-cur-entry ebib-cur-db)))
+
+(defun ebib-search-key-in-buffer (entry-key)
+ "Searches ENTRY-KEY in the index buffer.
+
+Moves point to the first character of the key and returns point."
+ (goto-char (point-min))
+ (search-forward entry-key)
+ (beginning-of-line)
+ (point))
+
+;; when we sort entries, we either use string< on the entry keys, or
+;; ebib-entry<, if the user has defined a sort order.
+
+(defun ebib-entry< (x y)
+ "Returns T if entry X is smaller than entry Y.
+The entries are compared based on the fields listed in EBIB-SORT-ORDER. X
+and Y should be keys of entries in the current database."
+ (let* ((sort-list ebib-sort-order)
+ (sortstring-x (to-raw (ebib-get-sortstring x (car sort-list))))
+ (sortstring-y (to-raw (ebib-get-sortstring y (car sort-list)))))
+ (while (and sort-list
+ (string= sortstring-x sortstring-y))
+ (setq sort-list (cdr sort-list))
+ (setq sortstring-x (to-raw (ebib-get-sortstring x (car sort-list))))
+ (setq sortstring-y (to-raw (ebib-get-sortstring y (car sort-list)))))
+ (if (and sortstring-x sortstring-y)
+ (string< sortstring-x sortstring-y)
+ (string< x y))))
+
+(defun ebib-get-sortstring (entry-key sortkey-list)
+ "Returns the field value on which the entry ENTRY-KEY is to be sorted.
+ENTRY-KEY must be the key of an entry in the current database. SORTKEY-LIST
+is a list of fields that are considered in order for the sort value."
+ (let ((sort-string nil))
+ (while (and sortkey-list
+ (null (setq sort-string (gethash (car sortkey-list)
+ (ebib-retrieve-entry entry-key ebib-cur-db)))))
+ (setq sortkey-list (cdr sortkey-list)))
+ sort-string))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; main program execution ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;###autoload
+(defun ebib ()
+ "Ebib, a BibTeX database manager."
+ (interactive)
+ (if (or (equal (window-buffer) ebib-index-buffer)
+ (equal (window-buffer) ebib-entry-buffer))
+ (error "Ebib already active")
+ ;; we save the buffer from which ebib is called
+ (setq ebib-push-buffer (current-buffer))
+ ;; initialize ebib if required
+ (unless ebib-initialized
+ (ebib-init)
+ (if ebib-preload-bib-files
+ (mapc #'(lambda (file)
+ (ebib-load-bibtex-file file))
+ ebib-preload-bib-files)))
+ ;; if ebib is visible, we just switch to the index buffer
+ (let ((index-window (get-buffer-window ebib-index-buffer)))
+ (if index-window
+ (select-window index-window nil)
+ (ebib-setup-windows)))))
+
+(defun ebib-setup-windows ()
+ "Creates the window configuration we want for Ebib in the
+current window."
+ ;; we save the current window configuration.
+ (setq ebib-saved-window-config (current-window-configuration))
+ (if (eq ebib-layout 'full)
+ (delete-other-windows)
+ (setq ebib-pre-ebib-window (selected-window))
+ (let ((ebib-window (split-window (selected-window) (- (window-width) ebib-layout) t)))
+ (select-window ebib-window nil)))
+ (let* ((index-window (selected-window))
+ (entry-window (split-window index-window ebib-index-window-size)))
+ (switch-to-buffer ebib-index-buffer)
+ (set-window-buffer entry-window ebib-entry-buffer)
+ (unless (eq ebib-layout 'full)
+ (set-window-dedicated-p index-window t)
+ (set-window-dedicated-p entry-window t))))
+
+(defun ebib-init ()
+ "Initialises Ebib.
+This function sets all variables to their initial values, creates the
+buffers and reads the rc file."
+ (setq ebib-cur-entry-hash nil
+ ebib-current-field nil
+ ebib-minibuf-hist nil
+ ebib-saved-window-config nil)
+ (put 'timestamp 'ebib-hidden t)
+ (load "~/.ebibrc" t)
+ (ebib-create-buffers)
+ (setq ebib-index-highlight (ebib-make-highlight 1 1 ebib-index-buffer))
+ (setq ebib-fields-highlight (ebib-make-highlight 1 1 ebib-entry-buffer))
+ (setq ebib-strings-highlight (ebib-make-highlight 1 1 ebib-strings-buffer))
+ (setq ebib-initialized t))
+
+(defun ebib-create-buffers ()
+ "Creates the buffers for Ebib."
+ ;; first we create a buffer for multiline editing. this one does *not*
+ ;; have a name beginning with a space, because undo-info is normally
+ ;; present in an edit buffer.
+ (setq ebib-multiline-buffer (get-buffer-create "*Ebib-edit*"))
+ (set-buffer ebib-multiline-buffer)
+ (ebib-multiline-edit-mode)
+ ;; then we create a buffer to hold the fields of the current entry.
+ (setq ebib-entry-buffer (get-buffer-create " *Ebib-entry*"))
+ (set-buffer ebib-entry-buffer)
+ (ebib-entry-mode)
+ ;; then we create a buffer to hold the @STRING definitions
+ (setq ebib-strings-buffer (get-buffer-create " *Ebib-strings*"))
+ (set-buffer ebib-strings-buffer)
+ (ebib-strings-mode)
+ ;; the log buffer
+ (setq ebib-log-buffer (get-buffer-create " *Ebib-log*"))
+ (set-buffer ebib-log-buffer)
+ (erase-buffer)
+ (insert "Ebib log messages\n\n(Press C-v or SPACE to scroll down, M-v or `b' to scroll up, `q' to quit.)\n\n\n")
+ (ebib-log-mode)
+ ;; and lastly we create a buffer for the entry keys.
+ (setq ebib-index-buffer (get-buffer-create " none"))
+ (set-buffer ebib-index-buffer)
+ (ebib-index-mode))
+
+(defun ebib-quit ()
+ "Quits Ebib.
+The Ebib buffers are killed, all variables except the keymaps are set to nil."
+ (interactive)
+ (when (if (ebib-modified-p)
+ (yes-or-no-p "There are modified databases. Quit anyway? ")
+ (y-or-n-p "Quit Ebib? "))
+ (mapc #'(lambda (buffer)
+ (kill-buffer buffer))
+ (list ebib-entry-buffer
+ ebib-index-buffer
+ ebib-strings-buffer
+ ebib-multiline-buffer
+ ebib-log-buffer))
+ (setq ebib-databases nil
+ ebib-index-buffer nil
+ ebib-entry-buffer nil
+ ebib-initialized nil
+ ebib-index-highlight nil
+ ebib-fields-highlight nil
+ ebib-strings-highlight nil
+ ebib-export-filename nil
+ ebib-pre-ebib-window nil)
+ (set-window-configuration ebib-saved-window-config)
+ (message "")))
+
+(defun ebib-kill-emacs-query-function ()
+ "Ask if the user wants to save the database loaded in Ebib when Emacs is
+killed and the database has been modified."
+ (if (not (ebib-modified-p))
+ t
+ (if (y-or-n-p "Save all unsaved Ebib databases? ")
+ (progn
+ (ebib-save-all-databases)
+ t)
+ (yes-or-no-p "Ebib database was modified. Kill anyway? "))))
+
+(add-hook 'kill-emacs-query-functions 'ebib-kill-emacs-query-function)
+
+;;;;;;;;;;;;;;;;
+;; index-mode ;;
+;;;;;;;;;;;;;;;;
+
+(eval-and-compile
+ (define-prefix-command 'ebib-prefix-map)
+ (suppress-keymap ebib-prefix-map)
+ (defvar ebib-prefixed-functions '(ebib-delete-entry
+ ebib-latex-entries
+ ebib-mark-entry
+ ebib-print-entries
+ ebib-push-bibtex-key
+ ebib-export-entry)))
+
+;; macro to redefine key bindings.
+
+(defmacro ebib-key (buffer key &optional command)
+ (cond
+ ((eq buffer 'index)
+ (let ((one `(define-key ebib-index-mode-map ,key (quote ,command)))
+ (two (when (or (null command)
+ (member command ebib-prefixed-functions))
+ `(define-key ebib-prefix-map ,key (quote ,command)))))
+ (if two
+ `(progn ,one ,two)
+ one)))
+ ((eq buffer 'entry)
+ `(define-key ebib-entry-mode-map ,key (quote ,command)))
+ ((eq buffer 'strings)
+ `(define-key ebib-strings-mode-map ,key (quote ,command)))
+ ((eq buffer 'mark-prefix)
+ `(progn
+ (define-key ebib-index-mode-map (format "%c" ebib-prefix-key) nil)
+ (define-key ebib-index-mode-map ,key 'ebib-prefix-map)
+ (setq ebib-prefix-key (string-to-char ,key))))))
+
+(defvar ebib-index-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map)
+ map)
+ "Keymap for the ebib index buffer.")
+
+;; we define the keys with ebib-key rather than with define-key, because
+;; that automatically sets up ebib-prefix-map as well.
+(ebib-key index [up] ebib-prev-entry)
+(ebib-key index [down] ebib-next-entry)
+(ebib-key index [right] ebib-next-database)
+(ebib-key index [left] ebib-prev-database)
+(ebib-key index [prior] ebib-index-scroll-down)
+(ebib-key index [next] ebib-index-scroll-up)
+(ebib-key index [home] ebib-goto-first-entry)
+(ebib-key index [end] ebib-goto-last-entry)
+(ebib-key index [return] ebib-select-entry)
+(ebib-key index " " ebib-index-scroll-up)
+(ebib-key index "/" ebib-search)
+(ebib-key index "&" ebib-virtual-db-and)
+(ebib-key index "|" ebib-virtual-db-or)
+(ebib-key index "~" ebib-virtual-db-not)
+(ebib-key index ";" ebib-prefix-map)
+(ebib-key index "a" ebib-add-entry)
+(ebib-key index "b" ebib-index-scroll-down)
+(ebib-key index "c" ebib-close-database)
+(ebib-key index "C" ebib-customize)
+(ebib-key index "d" ebib-delete-entry)
+(ebib-key index "e" ebib-edit-entry)
+(ebib-key index "E" ebib-edit-keyname)
+(ebib-key index "f" ebib-view-file)
+(ebib-key index "F" ebib-follow-crossref)
+(ebib-key index "g" ebib-goto-first-entry)
+(ebib-key index "G" ebib-goto-last-entry)
+(ebib-key index "H" ebib-toggle-hidden)
+(ebib-key index "j" ebib-next-entry)
+(ebib-key index "J" ebib-switch-to-database)
+(ebib-key index "k" ebib-prev-entry)
+(ebib-key index "l" ebib-show-log)
+(ebib-key index "L" ebib-latex-entries)
+(ebib-key index "m" ebib-mark-entry)
+(ebib-key index "M" ebib-merge-bibtex-file)
+(ebib-key index "n" ebib-search-next)
+(ebib-key index "N" ebib-search-crossref)
+(ebib-key index [(control n)] ebib-next-entry)
+(ebib-key index [(meta n)] ebib-index-scroll-up)
+(ebib-key index "o" ebib-load-bibtex-file)
+(ebib-key index "p" ebib-push-bibtex-key)
+(ebib-key index [(control p)] ebib-prev-entry)
+(ebib-key index [(meta p)] ebib-index-scroll-down)
+(ebib-key index "P" ebib-print-entries)
+(ebib-key index "r" ebib-edit-preamble)
+(ebib-key index "q" ebib-quit)
+(ebib-key index "s" ebib-save-current-database)
+(ebib-key index "S" ebib-save-all-databases)
+(ebib-key index "t" ebib-edit-strings)
+(ebib-key index "u" ebib-browse-url)
+(ebib-key index "V" ebib-print-filter)
+(ebib-key index "w" ebib-write-database)
+(ebib-key index "x" ebib-export-entry)
+(ebib-key index "\C-xb" ebib-leave-ebib-windows)
+(ebib-key index "\C-xk" ebib-quit)
+(ebib-key index "X" ebib-export-preamble)
+(ebib-key index "z" ebib-leave-ebib-windows)
+(ebib-key index "Z" ebib-lower)
+
+(defun ebib-switch-to-database-nth (key)
+ (interactive (list (if (featurep 'xemacs)
+ (event-key last-command-event)
+ last-command-event)))
+ (ebib-switch-to-database (- (if (featurep 'xemacs)
+ (char-to-int key)
+ key) 48)))
+
+(mapc #'(lambda (key)
+ (define-key ebib-index-mode-map (format "%d" key)
+ 'ebib-switch-to-database-nth))
+ '(1 2 3 4 5 6 7 8 9))
+
+(define-derived-mode ebib-index-mode
+ fundamental-mode "Ebib-index"
+ "Major mode for the Ebib index buffer."
+ (setq buffer-read-only t)
+ (setq truncate-lines t))
+
+(defun ebib-fill-index-buffer ()
+ "Fills the index buffer with the list of keys in EBIB-CUR-DB.
+If EBIB-CUR-DB is nil, the buffer is just erased and its name set
+to \"none\"."
+ (set-buffer ebib-index-buffer)
+ (let ((buffer-read-only nil))
+ (erase-buffer)
+ (if ebib-cur-db
+ (progn
+ ;; we may call this function when there are no entries in the
+ ;; database. if so, we don't need to do this:
+ (when (edb-cur-entry ebib-cur-db)
+ (mapc #'(lambda (entry)
+ (ebib-display-entry entry)
+ (when (member entry (edb-marked-entries ebib-cur-db))
+ (save-excursion
+ (let ((beg (progn
+ (beginning-of-line)
+ (point))))
+ (skip-chars-forward "^ ")
+ (add-text-properties beg (point) '(face ebib-marked-face))))))
+ (edb-keys-list ebib-cur-db))
+ (goto-char (point-min))
+ (re-search-forward (format "^%s " (ebib-cur-entry-key)))
+ (beginning-of-line)
+ (ebib-set-index-highlight))
+ (set-buffer-modified-p (edb-modified ebib-cur-db))
+ (rename-buffer (concat (format " %d:" (1+ (- (length ebib-databases)
+ (length (member ebib-cur-db ebib-databases)))))
+ (edb-name ebib-cur-db))))
+ (rename-buffer " none"))))
+
+(defun ebib-customize ()
+ "Switches to Ebib's customisation group."
+ (interactive)
+ (ebib-lower)
+ (customize-group 'ebib))
+
+(defun ebib-log (type format-string &rest args)
+ "Writes a message to Ebib's log buffer.
+TYPE (a symbol) is the type of message. It can be LOG, which
+writes the message to the log buffer only; MESSAGE, which writes
+the message to the log buffer and outputs it with the function
+MESSAGE; WARNING, which logs the message and sets the variable
+EBIB-LOG-ERROR to 0; or ERROR, which logs the message and sets
+the variable EBIB-LOG-ERROR to 1. The latter two can be used to
+signal the user to check the log for warnings or errors."
+ (save-excursion
+ (set-buffer ebib-log-buffer)
+ (cond
+ ((eq type 'warning)
+ (or ebib-log-error ; if ebib-error-log is already set to 1, we don't want to overwrite it!
+ (setq ebib-log-error 0)))
+ ((eq type 'error)
+ (setq ebib-log-error 1))
+ ((eq type 'message)
+ (apply 'message format-string args)))
+ (insert (apply 'format (concat format-string "\n") args))))
+
+(defun ebib-load-bibtex-file (&optional file)
+ "Loads a BibTeX file into Ebib."
+ (interactive)
+ (unless file
+ (setq file (ensure-extension (read-file-name "File to open: " "~/") "bib")))
+ (setq ebib-cur-db (ebib-create-new-database))
+ (setf (edb-filename ebib-cur-db) (expand-file-name file))
+ (setf (edb-name ebib-cur-db) (file-name-nondirectory (edb-filename ebib-cur-db)))
+ (setq ebib-log-error nil) ; we haven't found any errors
+ (ebib-log 'log "%s: Opening file %s" (format-time-string "%d %b %Y, %H:%M:%S") (edb-filename ebib-cur-db))
+ ;; first, we empty the buffers
+ (ebib-erase-buffer ebib-index-buffer)
+ (ebib-erase-buffer ebib-entry-buffer)
+ (if (file-readable-p file)
+ ;; if the user entered the name of an existing file, we load it
+ ;; by putting it in a buffer and then parsing it.
+ (with-temp-buffer
+ (with-syntax-table ebib-syntax-table
+ (insert-file-contents file)
+ ;; if the user makes any changes, we'll want to create a back-up.
+ (setf (edb-make-backup ebib-cur-db) t)
+ (let ((result (ebib-find-bibtex-entries nil)))
+ (setf (edb-n-entries ebib-cur-db) (car result))
+ (when (edb-keys-list ebib-cur-db)
+ (setf (edb-keys-list ebib-cur-db) (sort (edb-keys-list ebib-cur-db) 'string<)))
+ (when (edb-strings-list ebib-cur-db)
+ (setf (edb-strings-list ebib-cur-db) (sort (edb-strings-list ebib-cur-db) 'string<)))
+ (setf (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db))
+ ;; and fill the buffers. note that filling a buffer also makes
+ ;; that buffer active. therefore we do EBIB-FILL-INDEX-BUFFER
+ ;; later.
+ (ebib-set-modified nil)
+ (ebib-fill-entry-buffer)
+ ;; and now we tell the user the result
+ (ebib-log 'message "%d entries, %d @STRINGs and %s @PREAMBLE found in file."
+ (car result)
+ (cadr result)
+ (if (caddr result)
+ "a"
+ "no")))))
+ ;; if the file does not exist, we need to issue a message.
+ (ebib-log 'message "(New file)"))
+ ;; what we have to do in *any* case, is fill the index buffer. (this
+ ;; even works if there are no keys in the database, e.g. when the
+ ;; user opened a new file or if no BibTeX entries were found.
+ (ebib-fill-index-buffer)
+ (when ebib-log-error
+ (message "%s found! Press `l' to check Ebib log buffer." (nth ebib-log-error '("Warnings" "Errors"))))
+ (ebib-log 'log "\n\f\n"))
+
+(defun ebib-merge-bibtex-file ()
+ "Merges a BibTeX file into the database."
+ (interactive)
+ (unless (edb-virtual ebib-cur-db)
+ (if (not ebib-cur-db)
+ (error "No database loaded. Use `o' to open a database")
+ (let ((file (read-file-name "File to merge: ")))
+ (setq ebib-log-error nil) ; we haven't found any errors
+ (ebib-log 'log "%s: Merging file %s" (format-time-string "%d-%b-%Y: %H:%M:%S") (edb-filename ebib-cur-db))
+ (with-temp-buffer
+ (with-syntax-table ebib-syntax-table
+ (insert-file-contents file)
+ (let ((n (ebib-find-bibtex-entries t)))
+ (setf (edb-keys-list ebib-cur-db) (sort (edb-keys-list ebib-cur-db) 'string<))
+ (setf (edb-n-entries ebib-cur-db) (length (edb-keys-list ebib-cur-db)))
+ (when (edb-strings-list ebib-cur-db)
+ (setf (edb-strings-list ebib-cur-db) (sort (edb-strings-list ebib-cur-db) 'string<)))
+ (setf (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db))
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer)
+ (ebib-set-modified t)
+ (ebib-log 'message "%d entries, %d @STRINGs and %s @PREAMBLE found in file."
+ (car n)
+ (cadr n)
+ (if (caddr n)
+ "a"
+ "no"))
+ (when ebib-log-error
+ (message "%s found! Press `l' to check Ebib log buffer." (nth ebib-log-error '("Warnings" "Errors"))))
+ (ebib-log 'log "\n\f\n"))))))))
+
+(defun ebib-find-bibtex-entries (timestamp)
+ "Finds the BibTeX entries in the current buffer.
+The search is started at the beginnig of the buffer. All entries
+found are stored in the hash table DATABASE of
+EBIB-CUR-DB. Returns a three-element list: the first element is
+the number of entries found, the second the number of @STRING
+definitions, and the third is T or NIL, indicating whether a
+@PREAMBLE was found.
+
+TIMESTAMP indicates whether a timestamp is to be added to each
+entry. Note that a timestamp is only added if EBIB-USE-TIMESTAMP
+is set to T."
+ (let ((n-entries 0)
+ (n-strings 0)
+ (preamble nil))
+ (goto-char (point-min))
+ (while (re-search-forward "^@" nil t) ; find the next entry
+ (let ((beg (point)))
+ (when (looking-at-goto-end (concat "\\(" ebib-bibtex-identifier "\\)[[:space:]]*[\(\{]") 1)
+ (let ((entry-type (downcase (buffer-substring-no-properties beg (point)))))
+ (looking-at-goto-end "[[:space:]]*[\(\{]")
+ (cond
+ ((equal entry-type "string") ; string and preamble must be treated differently
+ (if (ebib-read-string)
+ (setq n-strings (1+ n-strings))))
+ ((equal entry-type "preamble")
+ (when (ebib-read-preamble)
+ (setq preamble t)))
+ ((equal entry-type "comment") ; ignore comments
+ (ebib-log 'log "Comment at line %d ignored" (line-number-at-pos))
+ (ebib-match-paren-forward (point-max)))
+ ((assoc (intern-soft entry-type) ebib-entry-types) ; if the entry type has been defined
+ (if (ebib-read-entry entry-type timestamp)
+ (setq n-entries (1+ n-entries))))
+ ;; anything else we report as an unknown entry type.
+ (t (ebib-log 'warning "Line %d: Unknown entry type `%s'. Skipping." (line-number-at-pos) entry-type)
+ (ebib-match-paren-forward (point-max))))))))
+ (list n-entries n-strings preamble)))
+
+(defun ebib-read-string ()
+ "Reads the @STRING definition beginning at the line POINT is on.
+If a proper abbreviation and string are found, they are stored in the
+database. Returns the string if one was read, nil otherwise."
+ (let ((limit (save-excursion ; we find the matching end parenthesis
+ (backward-char)
+ (ebib-match-paren-forward (point-max))
+ (point))))
+ (skip-chars-forward "\"#%'(),={} \n\t\f" limit)
+ (let ((beg (point)))
+ (when (looking-at-goto-end (concat "\\(" ebib-bibtex-identifier "\\)[ \t\n\f]*=") 1)
+ (if-str (abbr (buffer-substring-no-properties beg (point)))
+ (progn
+ (skip-chars-forward "^\"{" limit)
+ (let ((beg (point)))
+ (if-str (string (if (ebib-match-delim-forward limit)
+ (buffer-substring-no-properties beg (1+ (point)))
+ nil))
+ (if (member abbr (edb-strings-list ebib-cur-db))
+ (ebib-log 'warning (format "Line %d: @STRING definition `%s' duplicated. Skipping."
+ (line-number-at-pos) abbr))
+ (ebib-insert-string abbr string ebib-cur-db))))))))))
+
+(defun ebib-read-preamble ()
+ "Reads the @PREAMBLE definition and stores it in EBIB-PREAMBLE.
+If there was already another @PREAMBLE definition, the new one is
+added to the existing one with a hash sign `#' between them."
+ (let ((beg (point)))
+ (forward-char -1)
+ (when (ebib-match-paren-forward (point-max))
+ (let ((text (buffer-substring-no-properties beg (point))))
+ (if (edb-preamble ebib-cur-db)
+ (setf (edb-preamble ebib-cur-db) (concat (edb-preamble ebib-cur-db) "\n# " text))
+ (setf (edb-preamble ebib-cur-db) text))))))
+
+(defun ebib-read-entry (entry-type &optional timestamp)
+ "Reads a BibTeX entry and stores it in DATABASE of EBIB-CUR-DB.
+Returns the new EBIB-KEYS-LIST if an entry was found, nil
+otherwise. Optional argument TIMESTAMP indicates whether a
+timestamp is to be added. (Whether a timestamp is actually added,
+also depends on EBIB-USE-TIMESTAMP.)"
+ (let ((entry-limit (save-excursion
+ (backward-char)
+ (ebib-match-paren-forward (point-max))
+ (point)))
+ (beg (progn
+ (skip-chars-forward " \n\t\f") ; note the space!
+ (point))))
+ (when (looking-at-goto-end (concat "\\("
+ ebib-bibtex-identifier
+ "\\)[ \t\n\f]*,")
+ 1) ; this delimits the entry key
+ (let ((entry-key (buffer-substring-no-properties beg (point))))
+ (if (member entry-key (edb-keys-list ebib-cur-db))
+ (ebib-log 'warning "Line %d: Entry `%s' duplicated. Skipping." (line-number-at-pos) entry-key)
+ (let ((fields (ebib-find-bibtex-fields (intern-soft entry-type) entry-limit)))
+ (when fields ; if fields were found, we store them, and return T.
+ (ebib-insert-entry entry-key fields ebib-cur-db nil timestamp)
+ t)))))))
+
+(defun ebib-find-bibtex-fields (entry-type limit)
+ "Finds the fields of the BibTeX entry that starts on the line POINT is on.
+Returns a hash table containing all the fields and values, or NIL
+if none were found. ENTRY-TYPE is the type of the entry, which
+will be recorded in the hash table. Before the search starts,
+POINT is moved back to the beginning of the line."
+ (beginning-of-line)
+ ;; we assign a function to fn in order to avoid putting the test on
+ ;; ebib-allow-identical-fields in the while loop, where it would get
+ ;; tested with every field being read.
+ (let ((fn (if (not ebib-allow-identical-fields)
+ (symbol-function 'puthash)
+ #'(lambda (field-type field-contents fields)
+ (let ((existing-contents (gethash field-type fields)))
+ (puthash field-type (if existing-contents
+ (from-raw (concat (to-raw existing-contents)
+ "; "
+ (to-raw field-contents)))
+ field-contents)
+ fields))))))
+ (let ((fields (make-hash-table :size 15)))
+ (while (progn
+ (skip-chars-forward "^," limit) ; we must move to the next comma,
+ (eq (char-after) ?,)) ; and make sure we are really on a comma.
+ (skip-chars-forward "\"#%'(),={} \n\t\f" limit)
+ (let ((beg (point)))
+ (when (looking-at-goto-end (concat "\\(" ebib-bibtex-identifier "\\)[ \t\n\f]*=") 1)
+ (let ((field-type (intern (downcase (buffer-substring-no-properties beg (point))))))
+ (unless (eq field-type 'type*) ; the 'type*' key holds the entry type, so we can't use it
+ (let ((field-contents (ebib-get-field-contents limit)))
+ (when field-contents
+ (funcall fn field-type field-contents fields))))))))
+ (when (> (hash-table-count fields) 0)
+ (puthash 'type* entry-type fields)
+ fields))))
+
+(defun ebib-get-field-contents (limit)
+ "Gets the contents of a BibTeX field.
+LIMIT indicates the end of the entry, beyond which the function will not
+search."
+ (skip-chars-forward "#%'(),=} \n\t\f" limit)
+ (let ((beg (point)))
+ (buffer-substring-no-properties beg (ebib-find-end-of-field limit))))
+
+(defun ebib-find-end-of-field (limit)
+ "Moves POINT to the end of a field's contents and returns POINT.
+The contents of a field is delimited by a comma or by the closing brace of
+the entry. The latter is at position LIMIT."
+ (while (and (not (eq (char-after) ?\,))
+ (< (point) limit))
+ (ebib-match-delim-forward limit) ; check if we're on a delimiter and if so, jump to the matching closing delimiter
+ (forward-char 1))
+ (if (= (point) limit)
+ (skip-chars-backward " \n\t\f"))
+ (point))
+
+(defun ebib-leave-ebib-windows ()
+ "Leaves the Ebib windows, lowering them if necessary."
+ (interactive)
+ (ebib-lower t))
+
+(defun ebib-lower (&optional soft)
+ "Hides the Ebib windows.
+If optional argument SOFT is non-nil, just switch to a non-Ebib
+buffer if Ebib is not occupying the entire frame."
+ (interactive)
+ (unless (member (window-buffer) (list ebib-index-buffer
+ ebib-entry-buffer
+ ebib-strings-buffer
+ ebib-multiline-buffer
+ ebib-log-buffer))
+ (error "Ebib is not active "))
+ (if (and soft
+ (not (eq ebib-layout 'full)))
+ (select-window ebib-pre-ebib-window nil)
+ (set-window-configuration ebib-saved-window-config))
+ (mapc #'(lambda (buffer)
+ (bury-buffer buffer))
+ (list ebib-index-buffer
+ ebib-entry-buffer
+ ebib-strings-buffer
+ ebib-multiline-buffer
+ ebib-log-buffer)))
+
+(defun ebib-prev-entry ()
+ "Moves to the previous BibTeX entry."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ ;; if the current entry is the first entry,
+ (if (eq (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db))
+ (beep) ; just beep.
+ (setf (edb-cur-entry ebib-cur-db) (last (edb-keys-list ebib-cur-db)
+ (1+ (length (edb-cur-entry ebib-cur-db)))))
+ (goto-char (ebib-highlight-start ebib-index-highlight))
+ (forward-line -1)
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer)))
+ ((default)
+ (beep))))
+
+(defun ebib-next-entry ()
+ "Moves to the next BibTeX entry."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (if (= (length (edb-cur-entry ebib-cur-db)) 1) ; if we're on the last entry,
+ (beep) ; just beep.
+ (setf (edb-cur-entry ebib-cur-db)
+ (last (edb-keys-list ebib-cur-db) (1- (length (edb-cur-entry ebib-cur-db)))))
+ (goto-char (ebib-highlight-start ebib-index-highlight))
+ (forward-line 1)
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer)))
+ ((default)
+ (beep))))
+
+(defun ebib-add-entry ()
+ "Adds a new entry to the database."
+ (interactive)
+ (ebib-execute-when
+ ((real-db)
+ (if-str (entry-key (read-string "New entry key: "))
+ (progn
+ (if (member entry-key (edb-keys-list ebib-cur-db))
+ (error "Key already exists")
+ (set-buffer ebib-index-buffer)
+ (sort-in-buffer (1+ (edb-n-entries ebib-cur-db)) entry-key)
+ ;; we create the hash table *before* the call to
+ ;; ebib-display-entry, because that function refers to the
+ ;; hash table if ebib-index-display-fields is set.
+ (let ((fields (make-hash-table)))
+ (puthash 'type* ebib-default-type fields)
+ (ebib-insert-entry entry-key fields ebib-cur-db t t))
+ (with-buffer-writable
+ (ebib-display-entry entry-key))
+ (forward-line -1) ; move one line up to position the cursor on the new entry.
+ (ebib-set-index-highlight)
+ (setf (edb-cur-entry ebib-cur-db) (member entry-key (edb-keys-list ebib-cur-db)))
+ (ebib-fill-entry-buffer)
+ (ebib-edit-entry)
+ (ebib-set-modified t)))))
+ ((no-database)
+ (error "No database open. Use `o' to open a database first"))
+ ((default)
+ (beep))))
+
+(defun ebib-close-database ()
+ "Closes the current BibTeX database."
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (when (if (edb-modified ebib-cur-db)
+ (yes-or-no-p "Database modified. Close it anyway? ")
+ (y-or-n-p "Close database? "))
+ (let ((to-be-deleted ebib-cur-db)
+ (new-db (next-elem ebib-cur-db ebib-databases)))
+ (setq ebib-databases (delete to-be-deleted ebib-databases))
+ (if ebib-databases ; do we still have another database loaded?
+ (progn
+ (setq ebib-cur-db (or new-db
+ (last1 ebib-databases)))
+ (unless (edb-cur-entry ebib-cur-db)
+ (setf (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db)))
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))
+ ;; otherwise, we have to clean up a little and empty all the buffers.
+ (setq ebib-cur-db nil)
+ (mapc #'(lambda (buf) ; this is just to avoid typing almost the same thing three times...
+ (set-buffer (car buf))
+ (with-buffer-writable
+ (erase-buffer))
+ (ebib-delete-highlight (cadr buf)))
+ (list (list ebib-entry-buffer ebib-fields-highlight)
+ (list ebib-index-buffer ebib-index-highlight)
+ (list ebib-strings-buffer ebib-strings-highlight)))
+ ;; multiline edit buffer
+ (set-buffer ebib-multiline-buffer)
+ (with-buffer-writable
+ (erase-buffer))
+ (set-buffer ebib-index-buffer)
+ (rename-buffer " none"))
+ (message "Database closed."))))))
+
+(defun ebib-goto-first-entry ()
+ "Moves to the first BibTeX entry in the database."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (setf (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db))
+ (set-buffer ebib-index-buffer)
+ (goto-char (point-min))
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer))
+ ((default)
+ (beep))))
+
+(defun ebib-goto-last-entry ()
+ "Moves to the last entry in the BibTeX database."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (setf (edb-cur-entry ebib-cur-db) (last (edb-keys-list ebib-cur-db)))
+ (set-buffer ebib-index-buffer)
+ (goto-line (edb-n-entries ebib-cur-db))
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer))
+ ((default)
+ (beep))))
+
+(defun ebib-edit-entry ()
+ "Edits the current BibTeX entry."
+ (interactive)
+ (ebib-execute-when
+ ((real-db entries)
+ (setq ebib-cur-entry-hash (ebib-retrieve-entry (ebib-cur-entry-key) ebib-cur-db))
+ (setq ebib-cur-entry-fields (ebib-get-all-fields (gethash 'type* ebib-cur-entry-hash)))
+ (select-window (get-buffer-window ebib-entry-buffer) nil))
+ ((default)
+ (beep))))
+
+(defun ebib-edit-keyname ()
+ "Changes the key of a BibTeX entry."
+ (interactive)
+ (ebib-execute-when
+ ((real-db entries)
+ (let ((cur-keyname (ebib-cur-entry-key)))
+ (if-str (new-keyname (read-string (format "Change `%s' to: " cur-keyname)
+ cur-keyname))
+ (if (member new-keyname (edb-keys-list ebib-cur-db))
+ (error (format "Key `%s' already exists" new-keyname))
+ (unless (string= cur-keyname new-keyname)
+ (let ((fields (ebib-retrieve-entry cur-keyname ebib-cur-db))
+ (marked (member cur-keyname (edb-marked-entries ebib-cur-db))))
+ (ebib-remove-entry-from-db cur-keyname ebib-cur-db)
+ (ebib-remove-key-from-buffer cur-keyname)
+ (ebib-insert-entry new-keyname fields ebib-cur-db t nil)
+ (setf (edb-cur-entry ebib-cur-db) (member new-keyname (edb-keys-list ebib-cur-db)))
+ (sort-in-buffer (edb-n-entries ebib-cur-db) new-keyname)
+ (with-buffer-writable
+ (ebib-display-entry new-keyname))
+ (forward-line -1) ; move one line up to position the cursor on the new entry.
+ (ebib-set-index-highlight)
+ (ebib-set-modified t)
+ (when marked (ebib-mark-entry))))))))
+ ((default)
+ (beep))))
+
+(defun ebib-mark-entry ()
+ "Marks or unmarks the current entry."
+ (interactive)
+ (if (ebib-called-with-prefix)
+ (ebib-execute-when
+ ((marked-entries)
+ (setf (edb-marked-entries ebib-cur-db) nil)
+ (ebib-fill-index-buffer))
+ ((entries)
+ (setf (edb-marked-entries ebib-cur-db) (copy-sequence (edb-keys-list ebib-cur-db)))
+ (ebib-fill-index-buffer))
+ ((default)
+ (beep)))
+ (ebib-execute-when
+ ((entries)
+ (set-buffer ebib-index-buffer)
+ (with-buffer-writable
+ (if (member (ebib-cur-entry-key) (edb-marked-entries ebib-cur-db))
+ (progn
+ (setf (edb-marked-entries ebib-cur-db)
+ (delete (ebib-cur-entry-key) (edb-marked-entries ebib-cur-db)))
+ (remove-text-properties (ebib-highlight-start ebib-index-highlight)
+ (ebib-highlight-end ebib-index-highlight)
+ '(face ebib-marked-face)))
+ (setf (edb-marked-entries ebib-cur-db) (sort (cons (ebib-cur-entry-key)
+ (edb-marked-entries ebib-cur-db))
+ 'string<))
+ (add-text-properties (ebib-highlight-start ebib-index-highlight)
+ (ebib-highlight-end ebib-index-highlight)
+ '(face ebib-marked-face)))))
+ ((default)
+ (beep)))))
+
+(defun ebib-index-scroll-down ()
+ "Moves one page up in the database."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (scroll-down)
+ (ebib-select-entry))
+ ((default)
+ (beep))))
+
+(defun ebib-index-scroll-up ()
+ "Moves one page down in the database."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (scroll-up)
+ (ebib-select-entry))
+ ((default)
+ (beep))))
+
+(defun ebib-format-entry (key db timestamp)
+ "Formats entry KEY from database DB into the current buffer in BibTeX format.
+If TIMESTAMP is T, a timestamp is added to the entry if
+EBIB-USE-TIMESTAMP is T."
+ (let ((entry (ebib-retrieve-entry key db)))
+ (when entry
+ (insert (format "@%s{%s,\n" (gethash 'type* entry) key))
+ (maphash #'(lambda (key value)
+ (unless (or (eq key 'type*)
+ (and (eq key 'timestamp) timestamp ebib-use-timestamp))
+ (insert (format "\t%s = %s,\n" key value))))
+ entry)
+ (if (and timestamp ebib-use-timestamp)
+ (insert (format "\ttimestamp = {%s}" (format-time-string ebib-timestamp-format)))
+ (delete-char -2)) ; the final ",\n" must be deleted
+ (insert "\n}\n\n"))))
+
+(defun ebib-format-strings (db)
+ "Formats the @STRING commands in database DB."
+ (maphash #'(lambda (key value)
+ (insert (format "@STRING{%s = %s}\n" key value)))
+ (edb-strings db))
+ (insert "\n"))
+
+(defun ebib-compare-xrefs (x y)
+ (gethash 'crossref (ebib-retrieve-entry x ebib-cur-db)))
+
+(defun ebib-format-database (db)
+ "Writes database DB into the current buffer in BibTeX format."
+ (when (edb-preamble db)
+ (insert (format "@PREAMBLE{%s}\n\n" (edb-preamble db))))
+ (ebib-format-strings db)
+ (let ((sorted-list (copy-list (edb-keys-list db))))
+ (cond
+ (ebib-save-xrefs-first
+ (setq sorted-list (sort sorted-list 'ebib-compare-xrefs)))
+ (ebib-sort-order
+ (setq sorted-list (sort sorted-list 'ebib-entry<))))
+ (mapc #'(lambda (key) (ebib-format-entry key db nil)) sorted-list)))
+
+(defun ebib-save-database (db)
+ "Saves the database DB."
+ (ebib-execute-when
+ ((real-db)
+ (when (and (edb-make-backup db)
+ (file-exists-p (edb-filename db)))
+ (rename-file (edb-filename db) (concat (edb-filename db) "~") t)
+ (setf (edb-make-backup db) nil))
+ (with-temp-buffer
+ (ebib-format-database db)
+ (write-region (point-min) (point-max) (edb-filename db)))
+ (ebib-set-modified nil db))))
+
+(defun ebib-write-database ()
+ "Writes the current database to a different file.
+Can also be used to change a virtual database into a real one."
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (if-str (new-filename (read-file-name "Save to file: " "~/"))
+ (progn
+ (with-temp-buffer
+ (ebib-format-database ebib-cur-db)
+ (safe-write-region (point-min) (point-max) new-filename nil nil nil t))
+ ;; if SAFE-WRITE-REGION was cancelled by the user because he
+ ;; didn't want to overwrite an already existing file with his
+ ;; new database, it throws an error, so the next lines will not
+ ;; be executed. hence we can safely set (EDB-FILENAME DB) and
+ ;; (EDB-NAME DB).
+ (setf (edb-filename ebib-cur-db) new-filename)
+ (setf (edb-name ebib-cur-db) (file-name-nondirectory new-filename))
+ (rename-buffer (concat (format " %d:" (1+ (- (length ebib-databases)
+ (length (member ebib-cur-db ebib-databases)))))
+ (edb-name ebib-cur-db)))
+ (ebib-execute-when
+ ((virtual-db)
+ (setf (edb-virtual ebib-cur-db) nil)
+ (setf (edb-database ebib-cur-db)
+ (let ((new-db (make-hash-table :test 'equal)))
+ (mapc #'(lambda (key)
+ (let ((entry (gethash key (edb-database ebib-cur-db))))
+ (when entry
+ (puthash key (copy-hash-table entry) new-db))))
+ (edb-keys-list ebib-cur-db))
+ new-db))))
+ (ebib-set-modified nil))))
+ ((default)
+ (beep))))
+
+(defun ebib-save-current-database ()
+ "Saves the current database."
+ (interactive)
+ (ebib-execute-when
+ ((real-db)
+ (if (not (edb-modified ebib-cur-db))
+ (message "No changes need to be saved.")
+ (ebib-save-database ebib-cur-db)))
+ ((virtual-db)
+ (error "Cannot save a virtual database. Use `w' to write to a file."))))
+
+(defun ebib-save-all-databases ()
+ "Saves all currently open databases if they were modified."
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (mapc #'(lambda (db)
+ (when (edb-modified db)
+ (ebib-save-database db)))
+ ebib-databases)
+ (message "All databases saved."))))
+
+(defun ebib-print-filename ()
+ "Displays the filename of the current database in the minibuffer."
+ (interactive)
+ (message (edb-filename ebib-cur-db)))
+
+(defun ebib-follow-crossref ()
+ "Goes to the entry mentioned in the crossref field of the current entry."
+ (interactive)
+ (let ((new-cur-entry (to-raw (gethash 'crossref
+ (ebib-retrieve-entry (ebib-cur-entry-key) ebib-cur-db)))))
+ (setf (edb-cur-entry ebib-cur-db)
+ (or (member new-cur-entry (edb-keys-list ebib-cur-db))
+ (edb-cur-entry ebib-cur-db))))
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))
+
+(defun ebib-toggle-hidden ()
+ (interactive)
+ (setq ebib-hide-hidden-fields (not ebib-hide-hidden-fields))
+ (ebib-fill-entry-buffer))
+
+(defun ebib-delete-entry ()
+ "Deletes the current entry from the database."
+ (interactive)
+ (if (ebib-called-with-prefix)
+ (ebib-execute-when
+ ((real-db marked-entries)
+ (when (y-or-n-p "Delete all marked entries? ")
+ (mapc #'(lambda (entry)
+ (ebib-remove-entry-from-db entry ebib-cur-db (not (string= entry (ebib-cur-entry-key)))))
+ (edb-marked-entries ebib-cur-db))
+ (message "Marked entries deleted.")
+ (ebib-set-modified t)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer)))
+ ((default)
+ (beep)))
+ (ebib-execute-when
+ ((real-db entries)
+ (let ((cur-entry (ebib-cur-entry-key)))
+ (when (y-or-n-p (format "Delete %s? " cur-entry))
+ (ebib-remove-entry-from-db cur-entry ebib-cur-db)
+ (ebib-remove-key-from-buffer cur-entry)
+ (ebib-fill-entry-buffer)
+ (ebib-set-modified t)
+ (message (format "Entry `%s' deleted." cur-entry)))))
+ ((default)
+ (beep)))))
+
+(defun ebib-remove-entry-from-db (entry-key db &optional new-cur-entry)
+ "Removes ENTRY-KEY from DB.
+Optional argument NEW-CUR-ENTRY is the key of the entry that is
+to become the new current entry. It it is NIL, the entry after
+the deleted one becomes the new current entry. If it is T, the
+current entry is not changed."
+ (remhash entry-key (edb-database db))
+ (setf (edb-n-entries db) (1- (edb-n-entries db)))
+ (cond
+ ((null new-cur-entry) (setq new-cur-entry (cadr (edb-cur-entry db))))
+ ((stringp new-cur-entry) t)
+ (t (setq new-cur-entry (ebib-cur-entry-key))))
+ (setf (edb-keys-list db) (delete entry-key (edb-keys-list db)))
+ (setf (edb-marked-entries db) (delete entry-key (edb-marked-entries db)))
+ (setf (edb-cur-entry db) (member new-cur-entry (edb-keys-list db)))
+ (unless (edb-cur-entry db) ; if (edb-cur-entry db) is nil, we deleted the last entry.
+ (setf (edb-cur-entry db) (last (edb-keys-list db)))))
+
+(defun ebib-remove-key-from-buffer (entry-key)
+ "Removes ENTRY-KEY from the index buffer and highlights the current entry."
+ (with-buffer-writable
+ (let ((beg (ebib-search-key-in-buffer entry-key)))
+ (forward-line 1)
+ (delete-region beg (point))))
+ (ebib-execute-when
+ ((entries)
+ (ebib-search-key-in-buffer (ebib-cur-entry-key))
+ (ebib-set-index-highlight))))
+
+(defun ebib-select-entry ()
+ "Makes the entry at POINT the current entry."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (beginning-of-line)
+ (let ((beg (point)))
+ (let* ((key (save-excursion
+ (skip-chars-forward "^ ")
+ (buffer-substring-no-properties beg (point))))
+ (new-cur-entry (member key (edb-keys-list ebib-cur-db))))
+ (when new-cur-entry
+ (setf (edb-cur-entry ebib-cur-db) new-cur-entry)
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer)))))
+ ((default)
+ (beep))))
+
+(defun ebib-export-entry (prefix)
+ "Copies entries to another database.
+The prefix argument indicates which database to copy the entry
+to. If no prefix argument is present, a filename is asked to
+which the entry is appended."
+ (interactive "P")
+ (let ((num (ebib-prefix prefix)))
+ (if (ebib-called-with-prefix)
+ (ebib-export-marked-entries num)
+ (ebib-export-single-entry num))))
+
+(defun ebib-export-single-entry (num)
+ "Copies the current entry to another database.
+NUM indicates which database to copy the entry to. If it is NIL,
+a filename is asked to which the entry is appended."
+ (ebib-execute-when
+ ((real-db entries)
+ (if num
+ (ebib-export-to-db num (format "Entry `%s' copied to database %%d." (ebib-cur-entry-key))
+ #'(lambda (db)
+ (let ((entry-key (ebib-cur-entry-key)))
+ (if (member entry-key (edb-keys-list db))
+ (error "Entry key `%s' already exists in database %d" entry-key num)
+ (ebib-insert-entry entry-key
+ (copy-hash-table (ebib-retrieve-entry entry-key
+ ebib-cur-db))
+ db t t)
+ ;; if this is the first entry in the target DB,
+ ;; its CUR-ENTRY must be set!
+ (when (null (edb-cur-entry db))
+ (setf (edb-cur-entry db) (edb-keys-list db)))
+ t)))) ; we must return T, WHEN does not always do this.
+ (ebib-export-to-file (format "Export `%s' to file: " (ebib-cur-entry-key))
+ (format "Entry `%s' exported to %%s." (ebib-cur-entry-key))
+ #'(lambda ()
+ (insert "\n")
+ (ebib-format-entry (ebib-cur-entry-key) ebib-cur-db t)))))
+ ((default)
+ (beep))))
+
+(defun ebib-export-marked-entries (num)
+ "Copies the marked entries to another database.
+NUM indicates which database to copy the entry to. If it is NIL,
+a filename is asked to which the entry is appended."
+ (ebib-execute-when
+ ((real-db marked-entries)
+ (if num
+ (ebib-export-to-db
+ num "Entries copied to database %d."
+ #'(lambda (db)
+ (mapc #'(lambda (entry-key)
+ (if (member entry-key (edb-keys-list db))
+ (error "Entry key `%s' already exists in database %d" entry-key num)
+ (ebib-insert-entry entry-key
+ (copy-hash-table (ebib-retrieve-entry entry-key
+ ebib-cur-db))
+ db t t)))
+ (edb-marked-entries ebib-cur-db))
+ ;; if the target DB was empty before, its CUR-ENTRY must be set!
+ (when (null (edb-cur-entry db))
+ (setf (edb-cur-entry db) (edb-keys-list db)))
+ t)) ; we must return T, WHEN does not always do this.
+ (ebib-export-to-file "Export to file: " "Entries exported to %s."
+ #'(lambda ()
+ (mapc #'(lambda (entry-key)
+ (insert "\n")
+ (ebib-format-entry entry-key ebib-cur-db t))
+ (edb-marked-entries ebib-cur-db))))))
+ ((default)
+ (beep))))
+
+(defun ebib-search ()
+ "Search the current Ebib database.
+The search is conducted with STRING-MATCH and can therefore be a
+regexp. Searching starts with the current entry."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (if-str (search-str (read-string "Search database for: "))
+ (progn
+ (setq ebib-search-string search-str)
+ ;; first we search the current entry
+ (if (ebib-search-in-entry ebib-search-string
+ (ebib-retrieve-entry (ebib-cur-entry-key) ebib-cur-db))
+ (ebib-fill-entry-buffer ebib-search-string)
+ ;; if the search string wasn't found in the current entry, we continue searching.
+ (ebib-search-next)))))
+ ((default)
+ (beep))))
+
+(defun ebib-search-next ()
+ "Searches the next occurrence of EBIB-SEARCH-STRING.
+Searching starts at the entry following the current entry. If a
+match is found, the matching entry is shown and becomes the new
+current entry."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (if (null ebib-search-string)
+ (message "No search string")
+ (let ((cur-search-entry (cdr (edb-cur-entry ebib-cur-db))))
+ (while (and cur-search-entry
+ (null (ebib-search-in-entry ebib-search-string
+ (gethash (car cur-search-entry)
+ (edb-database ebib-cur-db)))))
+ (setq cur-search-entry (cdr cur-search-entry)))
+ (if (null cur-search-entry)
+ (message (format "`%s' not found" ebib-search-string))
+ (setf (edb-cur-entry ebib-cur-db) cur-search-entry)
+ (set-buffer ebib-index-buffer)
+ (goto-char (point-min))
+ (re-search-forward (format "^%s " (ebib-cur-entry-key)))
+ (beginning-of-line)
+ (ebib-set-index-highlight)
+ (ebib-fill-entry-buffer ebib-search-string)))))
+ ((default)
+ (beep))))
+
+(defun ebib-search-in-entry (search-str entry &optional field)
+ "Searches one entry of the ebib database.
+Returns a list of fields in ENTRY that match the regexp
+SEARCH-STR, or NIL if no matches were found. If FIELD is given,
+only that field is searched."
+ (let ((case-fold-search t) ; we want to ensure a case-insensitive search
+ (result nil))
+ (if field
+ (let ((value (gethash field entry)))
+ (when (and (stringp value) ; the type* field has a symbol as value
+ (string-match search-str value))
+ (setq result (list field))))
+ (maphash #'(lambda (field value)
+ (when (and (stringp value) ; the type* field has a symbol as value
+ (string-match search-str value))
+ (setq result (cons field result))))
+ entry))
+ result))
+
+(defun ebib-search-crossref ()
+ "Searches the database for the key of the current entry.
+This is useful in searching the entries that cross-reference the
+current entry."
+ (interactive)
+ (setq ebib-search-string (car (edb-cur-entry ebib-cur-db)))
+ (ebib-search-next))
+
+(defun ebib-edit-strings ()
+ "Edits the @STRING definitions in the database."
+ (interactive)
+ (ebib-execute-when
+ ((real-db)
+ (ebib-fill-strings-buffer)
+ (select-window (get-buffer-window ebib-entry-buffer) nil)
+ (set-window-dedicated-p (selected-window) nil)
+ (switch-to-buffer ebib-strings-buffer)
+ (unless (eq ebib-layout 'full)
+ (set-window-dedicated-p (selected-window) t))
+ (goto-char (point-min)))
+ ((default)
+ (beep))))
+
+(defun ebib-edit-preamble ()
+ "Edits the @PREAMBLE definition in the database."
+ (interactive)
+ (ebib-execute-when
+ ((real-db)
+ (select-window (ebib-temp-window) nil)
+ (ebib-multiline-edit 'preamble (edb-preamble ebib-cur-db)))
+ ((default)
+ (beep))))
+
+(defun ebib-export-preamble (prefix)
+ "Exports the @PREAMBLE definition.
+If a prefix argument is given, it is taken as the database to
+export the preamble to. If the goal database already has a
+preamble, the new preamble will be appended to it. If no prefix
+argument is given, the user is asked to enter a filename to which
+the preamble is appended."
+ (interactive "P")
+ (ebib-execute-when
+ ((real-db)
+ (if (null (edb-preamble ebib-cur-db))
+ (error "No @PREAMBLE defined")
+ (let ((num (ebib-prefix prefix)))
+ (if num
+ (ebib-export-to-db num "@PREAMBLE copied to database %d"
+ #'(lambda (db)
+ (let ((text (edb-preamble ebib-cur-db)))
+ (if (edb-preamble db)
+ (setf (edb-preamble db) (concat (edb-preamble db) "\n# " text))
+ (setf (edb-preamble db) text)))))
+ (ebib-export-to-file "Export @PREAMBLE to file: "
+ "@PREAMBLE exported to %s"
+ #'(lambda ()
+ (insert (format "\n@preamble{%s}\n\n" (edb-preamble ebib-cur-db)))))))))
+ ((default)
+ (beep))))
+
+(defun ebib-print-entries ()
+ "Creates a LaTeX file listing the entries.
+Either prints the entire database, or the marked entries."
+ (interactive)
+ (ebib-execute-when
+ ((entries)
+ (let ((entries (if (ebib-called-with-prefix)
+ (edb-marked-entries ebib-cur-db)
+ (edb-keys-list ebib-cur-db))))
+ (if-str (tempfile (if (not (string= "" ebib-print-tempfile))
+ ebib-print-tempfile
+ (read-file-name "Use temp file: " "~/" nil nil)))
+ (progn
+ (with-temp-buffer
+ (insert "\\documentclass{article}\n\n")
+ (when ebib-print-preamble
+ (mapc #'(lambda (string)
+ (insert (format "%s\n" string)))
+ ebib-print-preamble))
+ (insert "\n\\begin{document}\n\n")
+ (mapc #'(lambda (entry-key)
+ (insert "\\begin{tabular}{p{0.2\\textwidth}p{0.8\\textwidth}}\n")
+ (let ((entry (ebib-retrieve-entry entry-key ebib-cur-db)))
+ (insert (format "\\multicolumn{2}{l}{\\texttt{%s (%s)}}\\\\\n"
+ entry-key (symbol-name (gethash 'type* entry))))
+ (insert "\\hline\n")
+ (mapc #'(lambda (field)
+ (if-str (value (gethash field entry))
+ (when (or (not (multiline-p value))
+ ebib-print-multiline)
+ (insert (format "%s: & %s\\\\\n"
+ field (to-raw value))))))
+ (cdr (ebib-get-all-fields (gethash 'type* entry)))))
+ (insert "\\end{tabular}\n\n")
+ (insert "\\bigskip\n\n"))
+ entries)
+ (insert "\\end{document}\n")
+ (write-region (point-min) (point-max) tempfile))
+ (ebib-lower)
+ (find-file tempfile)))))
+ ((default)
+ (beep))))
+
+(defun ebib-latex-entries ()
+ "Creates a LaTeX file that \\nocites entries from the database.
+Operates either on all entries or on the marked entries."
+ (interactive)
+ (ebib-execute-when
+ ((real-db entries)
+ (if-str (tempfile (if (not (string= "" ebib-print-tempfile))
+ ebib-print-tempfile
+ (read-file-name "Use temp file: " "~/" nil nil)))
+ (progn
+ (with-temp-buffer
+ (insert "\\documentclass{article}\n\n")
+ (when ebib-print-preamble
+ (mapc #'(lambda (string)
+ (insert (format "%s\n" string)))
+ ebib-latex-preamble))
+ (insert "\n\\begin{document}\n\n")
+ (if (ebib-called-with-prefix)
+ (mapc #'(lambda (entry)
+ (insert (format "\\nocite{%s}\n" entry)))
+ (edb-marked-entries ebib-cur-db))
+ (insert "\\nocite{*}\n"))
+ (insert (format "\n\\bibliography{%s}\n\n" (expand-file-name (edb-filename ebib-cur-db))))
+ (insert "\\end{document}\n")
+ (write-region (point-min) (point-max) tempfile))
+ (ebib-lower)
+ (find-file tempfile))))
+ ((default)
+ (beep))))
+
+(defun ebib-switch-to-database (num)
+ (interactive "NSwitch to database number: ")
+ (let ((new-db (nth (1- num) ebib-databases)))
+ (if new-db
+ (progn
+ (setq ebib-cur-db new-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))
+ (error "Database %d does not exist" num))))
+
+(defun ebib-next-database ()
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (let ((new-db (next-elem ebib-cur-db ebib-databases)))
+ (unless new-db
+ (setq new-db (car ebib-databases)))
+ (setq ebib-cur-db new-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer)))))
+
+(defun ebib-prev-database ()
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (let ((new-db (prev-elem ebib-cur-db ebib-databases)))
+ (unless new-db
+ (setq new-db (last1 ebib-databases)))
+ (setq ebib-cur-db new-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer)))))
+
+(defun ebib-browse-url (num)
+ "Asks a browser to load the URL in the standard URL field.
+The standard URL field may contain more than one URL, if they're
+whitespace-separated. In that case, a numeric prefix argument
+specifies which URL to choose.
+
+By \"standard URL field\" is meant the field defined in the
+customisation variable EBIB-STANDARD-URL-FIELD. Its default value
+is `url'."
+ (interactive "p")
+ (ebib-execute-when
+ ((entries)
+ (let ((url (to-raw (gethash ebib-standard-url-field
+ (ebib-retrieve-entry (ebib-cur-entry-key) ebib-cur-db)))))
+ (when (not (and url
+ (ebib-call-browser url num)))
+ (error "No url found in field `%s'" ebib-standard-url-field))))
+ ((default)
+ (beep))))
+
+(defun ebib-call-browser (urls n)
+ "Passes the Nth url in URLS to a browser.
+URLs must be a string of whitespace-separated urls."
+ (let ((url (nth (1- n)
+ (let ((start 0)
+ (result nil))
+ (while (string-match ebib-url-regexp urls start)
+ (add-to-list 'result (match-string 0 urls) t)
+ (setq start (match-end 0)))
+ result))))
+ (cond
+ ((string-match "\\\\url{\\(.*?\\)}" url)
+ (setq url (match-string 1 url)))
+ ((string-match ebib-url-regexp url)
+ (setq url (match-string 0 url)))
+ (t (setq url nil)))
+ (when url
+ (if (not (string= ebib-browser-command ""))
+ (start-process "Ebib-browser" nil ebib-browser-command url)
+ (browse-url url)))))
+
+(defun ebib-view-file (num)
+ "Views a file in the standard file field.
+The standard file field may contain more than one filename, if
+they're whitespace-separated. In that case, a numeric prefix
+argument specifies which file to choose.
+
+By \"standard file field\" is meant the field defined in the
+customisation variable EBIB-STANDARD-FILE-FIELD. Its default
+value is `file'."
+ (interactive "p")
+ (ebib-execute-when
+ ((entries)
+ (let ((filename (to-raw (gethash ebib-standard-file-field
+ (ebib-retrieve-entry (ebib-cur-entry-key) ebib-cur-db)))))
+ (when (not (and filename
+ (ebib-call-file-viewer filename num)))
+ (error "No valid filename found in field `%s'" ebib-standard-file-field))))
+ ((default)
+ (beep))))
+
+(defun ebib-call-file-viewer (files n)
+ "Passes the Nth file in FILES to an external viewer.
+FILES must be a string of whitespace-separated filenames."
+ (let* ((file (nth (1- n)
+ (let ((start 0)
+ (result nil))
+ (while (string-match ebib-file-regexp files start)
+ (add-to-list 'result (match-string 0 files) t)
+ (setq start (match-end 0)))
+ result)))
+ (ext (file-name-extension file)))
+ (let ((file-full-path (locate-file file ebib-file-search-dirs)))
+ (when file-full-path
+ (if-str (viewer (cdr (assoc ext ebib-file-associations)))
+ (start-process (concat "ebib " ext " viewer process") nil viewer file-full-path)
+ (ebib-lower)
+ (find-file file-full-path))))))
+
+(defun ebib-virtual-db-and (not)
+ "Filters entries into a virtual database.
+If the current database is a virtual database already, perform a
+logical AND on the entries."
+ (interactive "p")
+ (ebib-execute-when
+ ((entries)
+ (ebib-filter-to-virtual-db 'and not))
+ ((default)
+ (beep))))
+
+(defun ebib-virtual-db-or (not)
+ "Filters entries into a virtual database.
+If the current database is a virtual database already, perform a
+logical OR with the entries in the original database."
+ (interactive "p")
+ (ebib-execute-when
+ ((entries)
+ (ebib-filter-to-virtual-db 'or not))
+ ((default)
+ (beep))))
+
+(defun ebib-virtual-db-not ()
+ "Negates the current virtual database."
+ (interactive)
+ (ebib-execute-when
+ ((virtual-db)
+ (setf (edb-virtual ebib-cur-db)
+ (if (eq (car (edb-virtual ebib-cur-db)) 'not)
+ (cadr (edb-virtual ebib-cur-db))
+ `(not ,(edb-virtual ebib-cur-db))))
+ (ebib-run-filter (edb-virtual ebib-cur-db) ebib-cur-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))
+ ((default)
+ (beep))))
+
+(defun ebib-filter-to-virtual-db (bool not)
+ "Filters the current database to a virtual database.
+BOOL is the operator to be used, either `and' or `or'. If NOT<0,
+a logical `not' is applied to the selection."
+ (let ((field (completing-read (format "Filter: %s(contains <field> <regexp>)%s. Enter field: "
+ (if (< not 0) "(not " "")
+ (if (< not 0) ")" ""))
+ (cons '("any" 0)
+ (mapcar #'(lambda (x)
+ (cons (symbol-name x) 0))
+ (append ebib-unique-field-list ebib-additional-fields)))
+ nil t)))
+ (setq field (intern-soft field))
+ (let ((regexp (read-string (format "Filter: %s(contains %s <regexp>)%s. Enter regexp: "
+ (if (< not 0) "(not " "")
+ field
+ (if (< not 0) ")" "")))))
+ (ebib-execute-when
+ ((virtual-db)
+ (setf (edb-virtual ebib-cur-db) `(,bool ,(edb-virtual ebib-cur-db)
+ ,(if (>= not 0)
+ `(contains ,field ,regexp)
+ `(not (contains ,field ,regexp))))))
+ ((real-db)
+ (setq ebib-cur-db (ebib-create-virtual-db field regexp not))))
+ (ebib-run-filter (edb-virtual ebib-cur-db) ebib-cur-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))))
+
+(defun ebib-create-virtual-db (field regexp not)
+ "Creates a virtual database based on EBIB-CUR-DB."
+ ;; a virtual database is a database whose edb-virtual field contains an
+ ;; expression that selects entries. this function only sets that
+ ;; expression, it does not actually filter the entries.
+ (let ((new-db (ebib-create-new-database ebib-cur-db)))
+ (setf (edb-virtual new-db) (if (>= not 0)
+ `(contains ,field ,regexp)
+ `(not (contains ,field ,regexp))))
+ (setf (edb-filename new-db) nil)
+ (setf (edb-name new-db) (concat "V:" (edb-name new-db)))
+ (setf (edb-modified new-db) nil)
+ (setf (edb-make-backup new-db) nil)
+ new-db))
+
+(defmacro contains (field regexp)
+ ;; Note: the variable ENTRY is *not* bound in this macro! The function
+ ;; calling CONTAINS *must* set ENTRY to an actual Ebib entry. The point
+ ;; of this macro is to facilitate defining filters for virtual databases.
+ ;; It enables us to define filters of the form:
+
+ ;; (and (not (contains author "Chomsky")) (contains year "1995"))
+
+ `(ebib-search-in-entry ,regexp entry ,(unless (eq field 'any) `(quote ,field))))
+
+(defun ebib-run-filter (filter db)
+ "Runs FILTER on DB"
+ (setf (edb-keys-list db)
+ (sort (let ((result nil))
+ (maphash #'(lambda (key value)
+ (let ((entry value)) ; this is necessary for actually running the filter
+ (when (eval filter)
+ (setq result (cons key result)))))
+ (edb-database db))
+ result)
+ 'string<))
+ (setf (edb-n-entries db) (length (edb-keys-list db)))
+ (setf (edb-cur-entry db) (edb-keys-list db)))
+
+(defun ebib-print-filter (num)
+ "Displays the filter of the current virtual database.
+With any prefix argument, reapplies the filter to the
+database. This can be useful when the source database was
+modified."
+ (interactive "P")
+ (ebib-execute-when
+ ((virtual-db)
+ (when num
+ (ebib-run-filter (edb-virtual ebib-cur-db) ebib-cur-db)
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer))
+ (message "%S" (edb-virtual ebib-cur-db)))
+ ((default)
+ (beep))))
+
+(defun ebib-show-log ()
+ "Displays the contents of the log buffer."
+ (interactive)
+ (select-window (get-buffer-window ebib-entry-buffer) nil)
+ (set-window-dedicated-p (selected-window) nil)
+ (switch-to-buffer ebib-log-buffer)
+ (unless (eq ebib-layout 'full)
+ (set-window-dedicated-p (selected-window) t)))
+
+(defun ebib-push-bibtex-key ()
+ "Pushes the current entry to a LaTeX buffer.
+The user is prompted for the buffer to push the entry into."
+ (interactive)
+ (let ((called-with-prefix (ebib-called-with-prefix)))
+ (ebib-execute-when
+ ((entries)
+ (let ((buffer (read-buffer (if called-with-prefix
+ "Push marked entries to buffer: "
+ "Push entry to buffer: ")
+ ebib-push-buffer t))
+ insert-string)
+ (when buffer
+ (setq ebib-push-buffer buffer)
+ (let ((keys (if called-with-prefix
+ (when (edb-marked-entries ebib-cur-db)
+ (mapconcat #'(lambda (x) x)
+ (edb-marked-entries ebib-cur-db)
+ ","))
+ (car (edb-cur-entry ebib-cur-db)))))
+ (if-str (command (completing-read "Command to use: " ebib-insertion-commands
+ nil nil nil ebib-insertion-commands))
+ (let* ((n-opt-args (or
+ (cdr (assoc command ebib-insertion-commands))
+ 1))
+ (opt-args (loop for i from 1 to n-opt-args
+ collect (read-from-minibuffer (format "Optional argument %d: " i)))))
+ (while (equal (car opt-args) "") ; empty args at the beginning of the list don't need
+ (setq opt-args (cdr opt-args))) ; to be included.
+ (setq insert-string (format "\\%s%s{%s}" command
+ (mapconcat #'(lambda (str)
+ (format "[%s]" str))
+ opt-args "")
+ keys)))
+ (setq insert-string keys)))
+ (when insert-string
+ (save-excursion
+ (set-buffer buffer)
+ (insert insert-string))
+ (message "Pushed entries to buffer %s" buffer)))))
+ ((default)
+ (beep)))))
+
+;;;;;;;;;;;;;;;;
+;; entry-mode ;;
+;;;;;;;;;;;;;;;;
+
+(defvar ebib-entry-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map)
+ (define-key map [up] 'ebib-prev-field)
+ (define-key map [down] 'ebib-next-field)
+ (define-key map [prior] 'ebib-goto-prev-set)
+ (define-key map [next] 'ebib-goto-next-set)
+ (define-key map [home] 'ebib-goto-first-field)
+ (define-key map [end] 'ebib-goto-last-field)
+ (define-key map " " 'ebib-goto-next-set)
+ (define-key map "b" 'ebib-goto-prev-set)
+ (define-key map "c" 'ebib-copy-field-contents)
+ (define-key map "d" 'ebib-delete-field-contents)
+ (define-key map "e" 'ebib-edit-field)
+ (define-key map "f" 'ebib-view-file-in-field)
+ (define-key map "g" 'ebib-goto-first-field)
+ (define-key map "G" 'ebib-goto-last-field)
+ (define-key map "j" 'ebib-next-field)
+ (define-key map "k" 'ebib-prev-field)
+ (define-key map "l" 'ebib-edit-multiline-field)
+ (define-key map [(control n)] 'ebib-next-field)
+ (define-key map [(meta n)] 'ebib-goto-prev-set)
+ (define-key map [(control p)] 'ebib-prev-field)
+ (define-key map [(meta p)] 'ebib-goto-next-set)
+ (define-key map "q" 'ebib-quit-entry-buffer)
+ (define-key map "r" 'ebib-toggle-raw)
+ (define-key map "s" 'ebib-insert-abbreviation)
+ (define-key map "u" 'ebib-browse-url-in-field)
+ (define-key map "x" 'ebib-cut-field-contents)
+ (define-key map "\C-xb" 'undefined)
+ (define-key map "\C-xk" 'undefined)
+ (define-key map "y" 'ebib-yank-field-contents)
+ map)
+ "Keymap for the Ebib entry buffer.")
+
+(define-derived-mode ebib-entry-mode
+ fundamental-mode "Ebib-entry"
+ "Major mode for the Ebib entry buffer."
+ (setq buffer-read-only t)
+ (setq truncate-lines t))
+
+(defun ebib-quit-entry-buffer ()
+ "Quits editing the entry."
+ (interactive)
+ (select-window (get-buffer-window ebib-index-buffer) nil))
+
+(defun ebib-find-visible-field (field direction)
+ "Finds the first visible field before or after FIELD.
+If DIRECTION is negative, search the preceding fields, otherwise
+search the succeeding fields. If FIELD is visible itself, return
+that. If there is no preceding/following visible field, return
+NIL. If EBIB-HIDE-HIDDEN-FIELDS is NIL, return FIELD."
+ (when ebib-hide-hidden-fields
+ (let ((fn (if (>= direction 0)
+ 'next-elem
+ 'prev-elem)))
+ (while (and field
+ (get field 'ebib-hidden))
+ (setq field (funcall fn field ebib-cur-entry-fields)))))
+ field)
+
+(defun ebib-prev-field ()
+ "Moves to the previous field."
+ (interactive)
+ (let ((new-field (ebib-find-visible-field (prev-elem ebib-current-field ebib-cur-entry-fields) -1)))
+ (if (null new-field)
+ (beep)
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field -1))))
+
+(defun ebib-next-field ()
+ "Moves to the next field."
+ (interactive)
+ (let ((new-field (ebib-find-visible-field (next-elem ebib-current-field ebib-cur-entry-fields) 1)))
+ (if (null new-field)
+ (when (interactive-p) ; i call this function after editing a field,
+ ; and we don't want a beep then
+ (beep))
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field 1))))
+
+(defun ebib-goto-first-field ()
+ "Moves to the first field."
+ (interactive)
+ (let ((new-field (ebib-find-visible-field (car ebib-cur-entry-fields) 1)))
+ (if (null new-field)
+ (beep)
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field -1))))
+
+(defun ebib-goto-last-field ()
+ "Moves to the last field."
+ (interactive)
+ (let ((new-field (ebib-find-visible-field (last1 ebib-cur-entry-fields) -1)))
+ (if (null new-field)
+ (beep)
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field 1))))
+
+(defun ebib-goto-next-set ()
+ "Moves to the next set of fields."
+ (interactive)
+ (cond
+ ((eq ebib-current-field 'type*) (ebib-next-field))
+ ((member ebib-current-field ebib-additional-fields) (ebib-goto-last-field))
+ (t (let* ((entry-type (gethash 'type* ebib-cur-entry-hash))
+ (obl-fields (ebib-get-obl-fields entry-type))
+ (opt-fields (ebib-get-opt-fields entry-type))
+ (new-field nil))
+ (when (member ebib-current-field obl-fields)
+ (setq new-field (ebib-find-visible-field (car opt-fields) 1)))
+ ;; new-field is nil if there are no opt-fields
+ (when (or (member ebib-current-field opt-fields)
+ (null new-field))
+ (setq new-field (ebib-find-visible-field (car ebib-additional-fields) 1)))
+ (if (null new-field)
+ (ebib-goto-last-field) ; if there was no further set to go to,
+ ; go to the last field of the current set
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field 1))))))
+
+(defun ebib-goto-prev-set ()
+ "Moves to the previous set of fields."
+ (interactive)
+ (unless (eq ebib-current-field 'type*)
+ (let* ((entry-type (gethash 'type* ebib-cur-entry-hash))
+ (obl-fields (ebib-get-obl-fields entry-type))
+ (opt-fields (ebib-get-opt-fields entry-type))
+ (new-field nil))
+ (if (member ebib-current-field obl-fields)
+ (ebib-goto-first-field)
+ (when (member ebib-current-field ebib-additional-fields)
+ (setq new-field (ebib-find-visible-field (last1 opt-fields) -1)))
+ (when (or (member ebib-current-field opt-fields)
+ (null new-field))
+ (setq new-field (ebib-find-visible-field (last1 obl-fields) -1)))
+ (if (null new-field)
+ (ebib-goto-first-field)
+ (setq ebib-current-field new-field)
+ (ebib-move-to-field ebib-current-field -1))))))
+
+(defun ebib-edit-entry-type ()
+ "Edits the entry type."
+ ;; we don't want the completion buffer to be shown in the index window,
+ ;; so we need to switch to an appropriate window first. we do this in an
+ ;; unwind-protect to make sure we always get back to the entry buffer.
+ (unwind-protect
+ (progn
+ (if (eq ebib-layout 'full)
+ (other-window 1)
+ (select-window ebib-pre-ebib-window) nil)
+ (if-str (new-type (completing-read "type: " ebib-entry-types nil t))
+ (progn
+ (puthash 'type* (intern-soft new-type) ebib-cur-entry-hash)
+ (ebib-fill-entry-buffer)
+ (setq ebib-cur-entry-fields (ebib-get-all-fields (gethash 'type* ebib-cur-entry-hash)))
+ (ebib-set-modified t))))
+ (select-window (get-buffer-window ebib-entry-buffer) nil)))
+
+(defun ebib-edit-crossref ()
+ "Edits the crossref field."
+ ;; we don't want the completion buffer to be shown in the index window,
+ ;; so we need to switch to an appropriate window first. we do this in an
+ ;; unwind-protect to make sure we always get back to the entry buffer.
+ (unwind-protect
+ (progn
+ (if (eq ebib-layout 'full)
+ (other-window 1)
+ (select-window ebib-pre-ebib-window) nil)
+ (let ((collection (ebib-create-collection (edb-database ebib-cur-db))))
+ (if-str (key (completing-read "Key to insert in `crossref': " collection nil t))
+ (progn
+ (puthash 'crossref (from-raw key) ebib-cur-entry-hash)
+ (ebib-set-modified t)))))
+ (select-window (get-buffer-window ebib-entry-buffer) nil)
+ ;; we now redisplay the entire entry buffer, so that the crossref'ed
+ ;; fields show up. this also puts the cursor back on the type field.
+ (ebib-fill-entry-buffer)
+ (setq ebib-current-field 'crossref)
+ (re-search-forward "^crossref")
+ (ebib-set-fields-highlight)))
+
+;; we should modify ebib-edit-field, so that it calls the appropriate
+;; helper function, which asks the user for the new value and just returns
+;; that. storing it should then be done by ebib-edit-field, no matter what
+;; sort of field the user edits.
+
+(defun ebib-edit-field ()
+ "Edits a field of a BibTeX entry."
+ (interactive)
+ (cond
+ ((eq ebib-current-field 'type*) (ebib-edit-entry-type))
+ ((eq ebib-current-field 'crossref) (ebib-edit-crossref))
+ ((eq ebib-current-field 'annote) (ebib-edit-multiline-field))
+ (t
+ (let ((init-contents (gethash ebib-current-field ebib-cur-entry-hash))
+ (raw nil))
+ (if (multiline-p init-contents)
+ (ebib-edit-multiline-field)
+ (when init-contents
+ (if (raw-p init-contents)
+ (setq raw t)
+ (setq init-contents (to-raw init-contents))))
+ (if-str (new-contents (read-string (format "%s: " (symbol-name ebib-current-field))
+ (if init-contents
+ (cons init-contents 0)
+ nil)
+ ebib-minibuf-hist))
+ (puthash ebib-current-field (if raw
+ new-contents
+ (concat "{" new-contents "}"))
+ ebib-cur-entry-hash)
+ (remhash ebib-current-field ebib-cur-entry-hash))
+ (ebib-redisplay-current-field)
+ ;; we move to the next field, but only if ebib-edit-field was
+ ;; called interactively, otherwise we get a strange bug in
+ ;; ebib-toggle-raw...
+ (if (interactive-p) (ebib-next-field))
+ (ebib-set-modified t))))))
+
+(defun ebib-browse-url-in-field (num)
+ "Browses a URL in the current field.
+The field may contain a whitespace-separated set of URLs. The
+prefix argument indicates which URL is to be sent to the
+browser."
+ (interactive "p")
+ (let ((urls (to-raw (gethash ebib-current-field ebib-cur-entry-hash))))
+ (if (not (and urls
+ (ebib-call-browser urls num)))
+ (error "No url found in field `%s'" ebib-current-field))))
+
+(defun ebib-view-file-in-field (num)
+ "Views a file in the current field.
+The field may contain a whitespace-separated set of
+filenames. The prefix argument indicates which file is to be
+viewed."
+ (interactive "p")
+ (let ((files (to-raw (gethash ebib-current-field ebib-cur-entry-hash))))
+ (if (not (and files
+ (ebib-call-file-viewer files num)))
+ (error "No valid filename found in field `%s'" ebib-current-field))))
+
+(defun ebib-copy-field-contents ()
+ "Copies the contents of the current field to the kill ring."
+ (interactive)
+ (unless (eq ebib-current-field 'type*)
+ (let ((contents (gethash ebib-current-field ebib-cur-entry-hash)))
+ (when (stringp contents)
+ (kill-new contents)
+ (message "Field contents copied.")))))
+
+(defun ebib-cut-field-contents ()
+ "Kills the contents of the current field. The killed text is put in the kill ring."
+ (interactive)
+ (unless (eq ebib-current-field 'type*)
+ (let ((contents (gethash ebib-current-field ebib-cur-entry-hash)))
+ (when (stringp contents)
+ (remhash ebib-current-field ebib-cur-entry-hash)
+ (kill-new contents)
+ (ebib-redisplay-current-field)
+ (ebib-set-modified t)
+ (message "Field contents killed.")))))
+
+(defun ebib-yank-field-contents (arg)
+ "Inserts the last killed text into the current field.
+If the current field already has a contents, nothing is inserted,
+unless the previous command was also ebib-yank-field-contents,
+then the field contents is replaced with the previous yank. That
+is, multiple uses of this command function like the combination
+of C-y/M-y. Prefix arguments also work the same as with C-y/M-y."
+ (interactive "P")
+ (if (or (eq ebib-current-field 'type*) ; we cannot yank into the type* or crossref fields
+ (eq ebib-current-field 'crossref)
+ (unless (eq last-command 'ebib-yank-field-contents)
+ (gethash ebib-current-field ebib-cur-entry-hash))) ; nor into a field already filled
+ (progn
+ (setq this-command t)
+ (beep))
+ (let ((new-contents (current-kill (cond
+ ((listp arg) (if (eq last-command 'ebib-yank-field-contents)
+ 1
+ 0))
+ ((eq arg '-) -2)
+ (t (1- arg))))))
+ (when new-contents
+ (puthash ebib-current-field new-contents ebib-cur-entry-hash)
+ (ebib-redisplay-current-field)
+ (ebib-set-modified t)))))
+
+(defun ebib-delete-field-contents ()
+ "Deletes the contents of the current field.
+The deleted text is not put in the kill ring."
+ (interactive)
+ (if (eq ebib-current-field 'type*)
+ (beep)
+ (remhash ebib-current-field ebib-cur-entry-hash)
+ (ebib-redisplay-current-field)
+ (ebib-set-modified t)
+ (message "Field contents deleted.")))
+
+(defun ebib-toggle-raw ()
+ "Toggles the raw status of the current field contents."
+ (interactive)
+ (unless (or (eq ebib-current-field 'type*)
+ (eq ebib-current-field 'crossref))
+ (let ((contents (gethash ebib-current-field ebib-cur-entry-hash)))
+ (if (not contents) ; if there is no value,
+ (progn
+ (ebib-edit-field) ; the user can enter one, which we must then make raw
+ (let ((new-contents (gethash ebib-current-field ebib-cur-entry-hash)))
+ (when new-contents
+ ;; note: we don't have to check for empty string, since that is
+ ;; already done in ebib-edit-field
+ (puthash ebib-current-field (to-raw new-contents) ebib-cur-entry-hash))))
+ (if (raw-p contents)
+ (puthash ebib-current-field (from-raw contents) ebib-cur-entry-hash)
+ (puthash ebib-current-field (to-raw contents) ebib-cur-entry-hash)))
+ (ebib-redisplay-current-field)
+ (ebib-set-modified t))))
+
+(defun ebib-edit-multiline-field ()
+ "Edits the current field in multiline-mode."
+ (interactive)
+ (unless (or (eq ebib-current-field 'type*)
+ (eq ebib-current-field 'crossref))
+ (let ((text (gethash ebib-current-field ebib-cur-entry-hash)))
+ (if (raw-p text)
+ (setq ebib-multiline-raw t)
+ (setq text (to-raw text))
+ (setq ebib-multiline-raw nil))
+ (select-window (ebib-temp-window) nil)
+ (ebib-multiline-edit 'fields text))))
+
+(defun ebib-insert-abbreviation ()
+ "Inserts an abbreviation from the ones defined in the database."
+ (interactive)
+ (if (gethash ebib-current-field ebib-cur-entry-hash)
+ (beep)
+ (when (edb-strings-list ebib-cur-db)
+ (unwind-protect
+ (progn
+ (other-window 1)
+ (let* ((collection (ebib-create-collection (edb-strings ebib-cur-db)))
+ (string (completing-read "Abbreviation to insert: " collection nil t)))
+ (when string
+ (puthash ebib-current-field string ebib-cur-entry-hash)
+ (ebib-set-modified t))))
+ (other-window 1)
+ ;; we can't do this earlier, because we would be writing to the index buffer...
+ (ebib-redisplay-current-field)
+ (ebib-next-field)))))
+
+;;;;;;;;;;;;;;;;;;
+;; strings-mode ;;
+;;;;;;;;;;;;;;;;;;
+
+(defvar ebib-strings-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map)
+ (define-key map [up] 'ebib-prev-string)
+ (define-key map [down] 'ebib-next-string)
+ (define-key map [prior] 'ebib-strings-page-up)
+ (define-key map [next] 'ebib-strings-page-down)
+ (define-key map [home] 'ebib-goto-first-string)
+ (define-key map [end] 'ebib-goto-last-string)
+ (define-key map " " 'ebib-strings-page-down)
+ (define-key map "a" 'ebib-add-string)
+ (define-key map "b" 'ebib-strings-page-up)
+ (define-key map "c" 'ebib-copy-string-contents)
+ (define-key map "d" 'ebib-delete-string)
+ (define-key map "e" 'ebib-edit-string)
+ (define-key map "g" 'ebib-goto-first-string)
+ (define-key map "G" 'ebib-goto-last-string)
+ (define-key map "j" 'ebib-next-string)
+ (define-key map "k" 'ebib-prev-string)
+ (define-key map "l" 'ebib-edit-multiline-string)
+ (define-key map [(control n)] 'ebib-next-string)
+ (define-key map [(meta n)] 'ebib-strings-page-down)
+ (define-key map [(control p)] 'ebib-prev-string)
+ (define-key map [(meta p)] 'ebib-strings-page-up)
+ (define-key map "q" 'ebib-quit-strings-buffer)
+ (define-key map "x" 'ebib-export-string)
+ (define-key map "X" 'ebib-export-all-strings)
+ (define-key map "\C-xb" 'disabled)
+ (define-key map "\C-xk" 'disabled)
+ map)
+ "Keymap for the ebib strings buffer.")
+
+(define-derived-mode ebib-strings-mode
+ fundamental-mode "Ebib-strings"
+ "Major mode for the Ebib strings buffer."
+ (setq buffer-read-only t)
+ (setq truncate-lines t))
+
+(defun ebib-quit-strings-buffer ()
+ "Quits editing the @STRING definitions."
+ (interactive)
+ (set-window-dedicated-p (selected-window) nil)
+ (switch-to-buffer ebib-entry-buffer)
+ (unless (eq ebib-layout 'full)
+ (set-window-dedicated-p (selected-window) t))
+ (select-window (get-buffer-window ebib-index-buffer) nil))
+
+(defun ebib-prev-string ()
+ "Moves to the previous string."
+ (interactive)
+ (if (equal ebib-current-string (car (edb-strings-list ebib-cur-db))) ; if we're on the first string
+ (beep)
+ ;; go to the beginnig of the highlight and move upward one line.
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (forward-line -1)
+ (setq ebib-current-string (prev-elem ebib-current-string (edb-strings-list ebib-cur-db)))
+ (ebib-set-strings-highlight)))
+
+(defun ebib-next-string ()
+ "Moves to the next string."
+ (interactive)
+ (if (equal ebib-current-string (last1 (edb-strings-list ebib-cur-db)))
+ (when (interactive-p) (beep))
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (forward-line 1)
+ (setq ebib-current-string (next-elem ebib-current-string (edb-strings-list ebib-cur-db)))
+ (ebib-set-strings-highlight)))
+
+(defun ebib-goto-first-string ()
+ "Moves to the first string."
+ (interactive)
+ (setq ebib-current-string (car (edb-strings-list ebib-cur-db)))
+ (goto-char (point-min))
+ (ebib-set-strings-highlight))
+
+(defun ebib-goto-last-string ()
+ "Moves to the last string."
+ (interactive)
+ (setq ebib-current-string (last1 (edb-strings-list ebib-cur-db)))
+ (goto-char (point-max))
+ (forward-line -1)
+ (ebib-set-strings-highlight))
+
+(defun ebib-strings-page-up ()
+ "Moves 10 entries up in the database."
+ (interactive)
+ (let ((number-of-strings (length (edb-strings-list ebib-cur-db)))
+ (remaining-number-of-strings (length (member ebib-current-string (edb-strings-list ebib-cur-db)))))
+ (if (<= (- number-of-strings remaining-number-of-strings) 10)
+ (ebib-goto-first-string)
+ (setq ebib-current-string (nth
+ (- number-of-strings remaining-number-of-strings 10)
+ (edb-strings-list ebib-cur-db)))
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (forward-line -10)
+ (ebib-set-strings-highlight)))
+ (message ebib-current-string))
+
+(defun ebib-strings-page-down ()
+ "Moves 10 entries down in the database."
+ (interactive)
+ (let ((number-of-strings (length (edb-strings-list ebib-cur-db)))
+ (remaining-number-of-strings (length (member ebib-current-string (edb-strings-list ebib-cur-db)))))
+ (if (<= remaining-number-of-strings 10)
+ (ebib-goto-last-string)
+ (setq ebib-current-string (nth
+ (- number-of-strings remaining-number-of-strings -10)
+ (edb-strings-list ebib-cur-db)))
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (forward-line 10)
+ (ebib-set-strings-highlight)))
+ (message ebib-current-string))
+
+(defun ebib-fill-strings-buffer ()
+ "Fills the strings buffer with the @STRING definitions."
+ (set-buffer ebib-strings-buffer)
+ (with-buffer-writable
+ (erase-buffer)
+ (dolist (elem (edb-strings-list ebib-cur-db))
+ (let ((str (to-raw (gethash elem (edb-strings ebib-cur-db)))))
+ (insert (format "%-18s %s\n" elem
+ (if (multiline-p str)
+ (concat "+" (first-line str))
+ (concat " " str)))))))
+ (goto-char (point-min))
+ (setq ebib-current-string (car (edb-strings-list ebib-cur-db)))
+ (ebib-set-strings-highlight)
+ (set-buffer-modified-p nil))
+
+(defun ebib-edit-string ()
+ "Edits the value of an @STRING definition
+When the user enters an empty string, the value is not changed."
+ (interactive)
+ (let ((init-contents (to-raw (gethash ebib-current-string (edb-strings ebib-cur-db)))))
+ (if (multiline-p init-contents)
+ (ebib-edit-multiline-string)
+ (if-str (new-contents (read-string (format "%s: " ebib-current-string)
+ (if init-contents
+ (cons init-contents 0)
+ nil)
+ ebib-minibuf-hist))
+ (progn
+ (puthash ebib-current-string (from-raw new-contents) (edb-strings ebib-cur-db))
+ (ebib-redisplay-current-string)
+ (ebib-next-string)
+ (ebib-set-modified t))
+ (error "@STRING definition cannot be empty")))))
+
+(defun ebib-copy-string-contents ()
+ "Copies the contents of the current string to the kill ring."
+ (interactive)
+ (let ((contents (gethash ebib-current-string (edb-strings ebib-cur-db))))
+ (kill-new contents)
+ (message "String value copied.")))
+
+(defun ebib-delete-string ()
+ "Deletes the current @STRING definition from the database."
+ (interactive)
+ (when (y-or-n-p (format "Delete @STRING definition %s? " ebib-current-string))
+ (remhash ebib-current-string (edb-strings ebib-cur-db))
+ (with-buffer-writable
+ (let ((beg (progn
+ (goto-char (ebib-highlight-start ebib-strings-highlight))
+ (point))))
+ (forward-line 1)
+ (delete-region beg (point))))
+ (let ((new-cur-string (next-elem ebib-current-string (edb-strings-list ebib-cur-db))))
+ (setf (edb-strings-list ebib-cur-db) (delete ebib-current-string (edb-strings-list ebib-cur-db)))
+ (when (null new-cur-string) ; deleted the last string
+ (setq new-cur-string (last1 (edb-strings-list ebib-cur-db)))
+ (forward-line -1))
+ (setq ebib-current-string new-cur-string))
+ (ebib-set-strings-highlight)
+ (ebib-set-modified t)
+ (message "@STRING definition deleted.")))
+
+(defun ebib-add-string ()
+ "Creates a new @STRING definition."
+ (interactive)
+ (if-str (new-abbr (read-string "New @STRING abbreviation: "))
+ (progn
+ (if (member new-abbr (edb-strings-list ebib-cur-db))
+ (error (format "%s already exists" new-abbr)))
+ (if-str (new-string (read-string (format "Value for %s: " new-abbr)))
+ (progn
+ (ebib-insert-string new-abbr new-string ebib-cur-db t)
+ (sort-in-buffer (length (edb-strings-list ebib-cur-db)) new-abbr)
+ (with-buffer-writable
+ (insert (format "%-19s %s\n" new-abbr new-string)))
+ (forward-line -1)
+ (ebib-set-strings-highlight)
+ (setq ebib-current-string new-abbr)
+ (ebib-set-modified t))))))
+
+(defun ebib-export-string (prefix)
+ "Exports the current @STRING.
+The prefix argument indicates which database to copy the string
+to. If no prefix argument is present, a filename is asked to
+which the string is appended."
+ (interactive "P")
+ (let ((num (ebib-prefix prefix)))
+ (if num
+ (ebib-export-to-db num (format "@STRING definition `%s' copied to database %%d" ebib-current-string)
+ #'(lambda (db)
+ (let ((abbr ebib-current-string)
+ (string (gethash ebib-current-string (edb-strings ebib-cur-db))))
+ (if (member abbr (edb-strings-list db))
+ (error "@STRING definition already exists in database %d" num)
+ (ebib-insert-string abbr string db t)))))
+ (ebib-export-to-file (format "Export @STRING definition `%s' to file: " ebib-current-string)
+ (format "@STRING definition `%s' exported to %%s" ebib-current-string)
+ #'(lambda ()
+ (insert (format "\n@string{%s = %s}\n"
+ ebib-current-string
+ (gethash ebib-current-string (edb-strings ebib-cur-db)))))))))
+
+(defun ebib-export-all-strings (prefix)
+ "Exports all @STRING definitions.
+If a prefix argument is given, it is taken as the database to
+copy the definitions to. Without prefix argument, asks for a file
+to append them to."
+ (interactive "P")
+ (when ebib-current-string ; there is always a current string, unless there are no strings
+ (let ((num (ebib-prefix prefix)))
+ (if num
+ (ebib-export-to-db
+ num "All @STRING definitions copied to database %d"
+ #'(lambda (db)
+ (mapc #'(lambda (abbr)
+ (if (member abbr (edb-strings-list db))
+ (message "@STRING definition `%s' already exists in database %d" abbr num)
+ (ebib-insert-string abbr (gethash abbr (edb-strings ebib-cur-db)) db t)))
+ (edb-strings-list ebib-cur-db))))
+ (ebib-export-to-file "Export all @STRING definitions to file: "
+ "All @STRING definitions exported to %s"
+ #'(lambda ()
+ (insert (format "\n")) ; to keep things tidy.
+ (ebib-format-strings ebib-cur-db)))))))
+
+(defun ebib-edit-multiline-string ()
+ "Edits the current string in multiline-mode."
+ (interactive)
+ (select-window (ebib-temp-window) nil)
+ (ebib-multiline-edit 'string (to-raw (gethash ebib-current-string (edb-strings ebib-cur-db)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;
+;; multiline edit mode ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-derived-mode ebib-multiline-edit-mode
+ text-mode "Ebib-edit"
+ "Major mode for editing multiline values in Ebib."
+ ;; we redefine some basic keys because we need them to leave this buffer.
+ (local-set-key "\C-xb" 'ebib-quit-multiline-edit)
+ (local-set-key "\C-x\C-s" 'ebib-save-from-multiline-edit)
+ (local-set-key "\C-xk" 'ebib-cancel-multiline-edit))
+
+(defun ebib-multiline-edit (type &optional starttext)
+ "Switches to Ebib's multiline edit buffer.
+STARTTEXT is a string that contains the initial text of the buffer."
+ ;; note: the buffer is put in the currently active window!
+ (setq ebib-pre-multiline-buffer (current-buffer))
+ (switch-to-buffer ebib-multiline-buffer)
+ (set-buffer-modified-p nil)
+ (erase-buffer)
+ (setq ebib-editing type)
+ (when starttext
+ (insert starttext)
+ (goto-char (point-min))
+ (set-buffer-modified-p nil)))
+
+(defun ebib-quit-multiline-edit ()
+ "Quits the multiline edit buffer, saving the text."
+ (interactive)
+ (ebib-store-multiline-text)
+ (ebib-leave-multiline-edit-buffer)
+ (cond
+ ((eq ebib-editing 'fields)
+ (ebib-next-field))
+ ((eq ebib-editing 'strings)
+ (ebib-next-string)))
+ (message "Text stored."))
+
+(defun ebib-cancel-multiline-edit ()
+ "Quits the multiline edit buffer and discards the changes."
+ (interactive)
+ (catch 'no-cancel
+ (when (buffer-modified-p)
+ (unless (y-or-n-p "Text has been modified. Abandon changes? ")
+ (throw 'no-cancel nil)))
+ (ebib-leave-multiline-edit-buffer)))
+
+(defun ebib-leave-multiline-edit-buffer ()
+ "Leaves the multiline edit buffer.
+Restores the previous buffer in the window that the multiline
+edit buffer was shown in."
+ (switch-to-buffer ebib-pre-multiline-buffer)
+ (cond
+ ((eq ebib-editing 'preamble)
+ (select-window (get-buffer-window ebib-index-buffer) nil))
+ ((eq ebib-editing 'fields)
+ ;; in full-frame layout, select-window isn't necessary, but it doesn't hurt either.
+ (select-window (get-buffer-window ebib-entry-buffer) nil)
+ (ebib-redisplay-current-field))
+ ((eq ebib-editing 'strings)
+ ;; in full-frame layout, select-window isn't necessary, but it doesn't hurt either.
+ (select-window (get-buffer-window ebib-strings-buffer) nil)
+ (ebib-redisplay-current-string))))
+
+(defun ebib-save-from-multiline-edit ()
+ "Saves the database from within the multiline edit buffer.
+The text being edited is stored before saving the database."
+ (interactive)
+ (ebib-store-multiline-text)
+ (ebib-save-database ebib-cur-db)
+ (set-buffer-modified-p nil))
+
+(defun ebib-store-multiline-text ()
+ "Stores the text being edited in the multiline edit buffer."
+ (let ((text (buffer-substring-no-properties (point-min) (point-max))))
+ (cond
+ ((eq ebib-editing 'preamble)
+ (if (equal text "")
+ (setf (edb-preamble ebib-cur-db) nil)
+ (setf (edb-preamble ebib-cur-db) text)))
+ ((eq ebib-editing 'fields)
+ (if (equal text "")
+ (remhash ebib-current-field ebib-cur-entry-hash)
+ (when (not ebib-multiline-raw)
+ (setq text (from-raw text)))
+ (puthash ebib-current-field text ebib-cur-entry-hash)))
+ ((eq ebib-editing 'strings)
+ (if (equal text "")
+ ;; with ERROR, we avoid execution of EBIB-SET-MODIFIED and
+ ;; MESSAGE, but we also do not switch back to the strings
+ ;; buffer. this may not be so bad, actually, because the user
+ ;; may want to change his edit.
+ (error "@STRING definition cannot be empty ")
+ (setq text (from-raw text)) ; strings cannot be raw
+ (puthash ebib-current-string text (edb-strings ebib-cur-db))))))
+ (ebib-set-modified t))
+
+;;;;;;;;;;;;;;;;;;;
+;; ebib-log-mode ;;
+;;;;;;;;;;;;;;;;;;;
+
+(defvar ebib-log-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map)
+ (define-key map " " 'scroll-up)
+ (define-key map "b" 'scroll-down)
+ (define-key map "q" 'ebib-quit-log-buffer)
+ map)
+ "Keymap for the ebib log buffer.")
+
+(define-derived-mode ebib-log-mode
+ fundamental-mode "Ebib-log"
+ "Major mode for the Ebib log buffer."
+ (local-set-key "\C-xb" 'ebib-quit-log-buffer)
+ (local-set-key "\C-xk" 'ebib-quit-log-buffer))
+
+(defun ebib-quit-log-buffer ()
+ "Exits the log buffer."
+ (interactive)
+ (set-window-dedicated-p (selected-window) nil)
+ (switch-to-buffer ebib-entry-buffer)
+ (unless (eq ebib-layout 'full)
+ (set-window-dedicated-p (selected-window) t))
+ (select-window (get-buffer-window ebib-index-buffer) nil))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; functions for non-Ebib buffers ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun ebib-import ()
+ "Searches for BibTeX entries in the current buffer.
+The entries are added to the current database (i.e. the database
+that was active when Ebib was lowered. Works on the whole buffer,
+or on the region if it is active."
+ (interactive)
+ (if (not ebib-cur-db)
+ (error "No database loaded. Use `o' to open a database")
+ (if (edb-virtual ebib-cur-db)
+ (error "Cannot import to a virtual database")
+ (with-syntax-table ebib-syntax-table
+ (save-excursion
+ (save-restriction
+ (if (region-active)
+ (narrow-to-region (region-beginning)
+ (region-end)))
+ (let ((buffer (current-buffer)))
+ (with-temp-buffer
+ (insert-buffer-substring buffer)
+ (let ((n (ebib-find-bibtex-entries t)))
+ (setf (edb-keys-list ebib-cur-db) (sort (edb-keys-list ebib-cur-db) 'string<))
+ (setf (edb-n-entries ebib-cur-db) (length (edb-keys-list ebib-cur-db)))
+ (when (edb-strings-list ebib-cur-db)
+ (setf (edb-strings-list ebib-cur-db) (sort (edb-strings-list ebib-cur-db) 'string<)))
+ (setf (edb-cur-entry ebib-cur-db) (edb-keys-list ebib-cur-db))
+ (ebib-fill-entry-buffer)
+ (ebib-fill-index-buffer)
+ (ebib-set-modified t)
+ (message (format "%d entries, %d @STRINGs and %s @PREAMBLE found in buffer."
+ (car n)
+ (cadr n)
+ (if (caddr n)
+ "a"
+ "no"))))))))))))
+
+(defun ebib-get-db-from-filename (filename)
+ "Returns the database struct associated with FILENAME."
+ (catch 'found
+ (mapc #'(lambda (db)
+ (if (string= (file-name-nondirectory (edb-filename db)) filename)
+ (throw 'found db)))
+ ebib-databases)
+ nil))
+
+(defun ebib-get-local-databases ()
+ "Returns a list of .bib files associated with the file in the current LaTeX buffer.
+Each element in the list is a string holding the name of the .bib
+file. This function simply searches the current LaTeX file or its
+master file for a \\bibliography command and returns the file(s)
+given in its argument. If no \\bibliography command is found,
+returns the symbol NONE."
+ (let ((texfile-buffer (current-buffer))
+ texfile)
+ ;; if AucTeX's TeX-master is used and set to a string, we must
+ ;; search that file for a \bibliography command, as it's more
+ ;; likely to be in there than in the file we're in.
+ (and (boundp 'TeX-master)
+ (stringp TeX-master)
+ (setq texfile (ensure-extension TeX-master "tex")))
+ (with-temp-buffer
+ (if (and texfile (file-readable-p texfile))
+ (insert-file-contents texfile)
+ (insert-buffer-substring texfile-buffer))
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "\\\\bibliography{\\(.*?\\)}" nil t)
+ (mapcar #'(lambda (file)
+ (ensure-extension file "bib"))
+ (split-string (buffer-substring-no-properties (match-beginning 1) (match-end 1)) ",[ ]*"))
+ 'none)))))
+
+(defun ebib-insert-bibtex-key ()
+ "Inserts a BibTeX key at POINT.
+The user is prompted for a BibTeX key and has to choose one from
+the database(s) associated with the current LaTeX file, or from
+the current database if there is no \\bibliography command. Tab
+completion works."
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (or ebib-local-bibtex-filenames
+ (setq ebib-local-bibtex-filenames (ebib-get-local-databases)))
+ (let (collection insert-string)
+ (if (eq ebib-local-bibtex-filenames 'none)
+ (if (null (edb-cur-entry ebib-cur-db))
+ (error "No entries found in current database")
+ (setq collection (ebib-create-collection (edb-database ebib-cur-db))))
+ (mapc #'(lambda (file)
+ (let ((db (ebib-get-db-from-filename file)))
+ (cond
+ ((null db)
+ (message "Database %s not loaded" file))
+ ((null (edb-cur-entry db))
+ (message "No entries in database %s" file))
+ (t (setq collection (append (ebib-create-collection (edb-database db))
+ collection))))))
+ ebib-local-bibtex-filenames))
+ (when collection
+ (let ((key (completing-read "Key to insert: " collection nil t nil ebib-minibuf-hist)))
+ (if-str (command (completing-read "Command to use: " ebib-insertion-commands
+ nil nil nil ebib-insertion-commands))
+ (let* ((n-opt-args (or
+ (cdr (assoc command ebib-insertion-commands))
+ 1))
+ (opt-args (loop for i from 1 to n-opt-args
+ collect (read-from-minibuffer (format "Optional argument %d: " i)))))
+ (while (equal (car opt-args) "") ; empty args at the beginning of the list don't need
+ (setq opt-args (cdr opt-args))) ; to be included.
+ (setq insert-string (format "\\%s%s{%s}" command
+ (mapconcat #'(lambda (str)
+ (format "[%s]" str))
+ opt-args "")
+ key)))
+ (setq insert-string key)))
+ (when insert-string
+ (insert insert-string)))))
+ ((default)
+ (error "No database loaded"))))
+
+(defun ebib-entry-summary ()
+ "Shows the fields of the key at POINT.
+The key is searched in the database associated with the LaTeX
+file, or in the current database if no \\bibliography command can
+be found."
+ (interactive)
+ (ebib-execute-when
+ ((database)
+ (or ebib-local-bibtex-filenames
+ (setq ebib-local-bibtex-filenames (ebib-get-local-databases)))
+ (let ((key (read-string-at-point "\"#%'(),={} \n\t\f"))
+ entry
+ database)
+ (if (eq ebib-local-bibtex-filenames 'none)
+ (if (not (member key (edb-keys-list ebib-cur-db)))
+ (error "Entry `%s' is not in the current database" key)
+ (setq entry (gethash key (edb-database ebib-cur-db)))
+ (setq database ebib-cur-db))
+ (multiple-value-setq (entry database)
+ (catch 'found
+ (mapc #'(lambda (file)
+ (let ((db (ebib-get-db-from-filename file)))
+ (if (null db)
+ (message "Database %s not loaded" file)
+ (if (member key (edb-keys-list db))
+ (throw 'found (values (gethash key (edb-database db)) db))))))
+ ebib-local-bibtex-filenames)
+ (list nil nil))))
+ (if (null entry)
+ (error "Entry `%s' not found" key)
+ (let ((index-window (get-buffer-window ebib-index-buffer)))
+ (if (not index-window)
+ (with-help-window "*Help*"
+ (ebib-format-fields entry 'princ))
+ (with-selected-window index-window
+ (setq ebib-cur-db database)
+ (ebib-fill-index-buffer)
+ (setf (edb-cur-entry ebib-cur-db) (member key (edb-keys-list ebib-cur-db)))
+ (goto-char (point-min))
+ (re-search-forward (format "^%s " key))
+ (beginning-of-line)
+ (ebib-set-index-highlight))
+ (ebib-fill-entry-buffer))))))
+ ((default)
+ (error "No database(s) loaded"))))
+
+(provide 'ebib)
+
+;;; ebib ends here
diff --git a/biblio/bibtex/utils/ebib/info/ebib-manual.info b/biblio/bibtex/utils/ebib/info/ebib-manual.info
new file mode 100644
index 0000000000..fc0ec3fd61
--- /dev/null
+++ b/biblio/bibtex/utils/ebib/info/ebib-manual.info
@@ -0,0 +1,2444 @@
+This is /home/joost/programs/ebib/manual/texi/ebib-manual.info,
+produced by makeinfo version 4.12 from
+/home/joost/programs/ebib/manual/texi/ebib-manual.texi.
+
+INFO-DIR-SECTION Emacs
+START-INFO-DIR-ENTRY
+* Ebib: (ebib). A BibTeX database manager that runs in Emacs and XEmacs
+END-INFO-DIR-ENTRY
+
+
+File: ebib-manual.info, Node: Top, Next: Installation, Prev: (dir), Up: (dir)
+
+Overview
+********
+
+Ebib is a program with which you can manage BibTeX database files
+without having to edit the raw `.bib' files. It runs in GNU/Emacs,
+version 21.1 or higher (lower versions are not supported) and XEmacs
+(at least from version 21.4; lower version have not been tested, but
+may work.)
+
+ It should be noted that Ebib is _not_ a minor or major mode for
+editing BibTeX files. It is a program in itself, which just happens to
+make use of Emacs as a working environment, in the same way that for
+example Gnus is.
+
+ The advantage of having a BibTeX database manager inside Emacs is
+that X is no longer required, as Emacs can run on the console, and also
+that some integration with Emacs' TeX and LaTeX modes becomes possible.
+For example, you can push a BibTeX key from Ebib to a LaTeX buffer, or,
+vice versa, when you're in a LaTeX buffer, you can consult your BibTeX
+database and insert a key from it into the document. Another advantage
+of Ebib is that it is completely controlled by key commands: no
+stressful mouse movements are required, as with most other (usually
+X-based) BibTeX database managers.
+
+* Menu:
+
+* Installation::
+* Basic Usage::
+* Advanced Features::
+* The Ebib Buffers::
+* Customisation::
+
+
+File: ebib-manual.info, Node: Installation, Next: Basic Usage, Prev: Top, Up: Top
+
+1 Installation
+**************
+
+To install Ebib, so that it will be loaded automatically when Emacs is
+started, simply copy the file `ebib.el' to somewhere in your load path
+and add the following line to Emacs' init file (`~/.emacs' for
+GNU/Emacs, `~/.xemacs/init.el' for XEmacs):
+
+
+ (autoload 'ebib "ebib" "Ebib, a BibTeX database manager." t)
+
+ Note: if you do not know what your load path is set to, go to the
+`*scratch*' buffer, type `load-path' on an empty line, put the cursor
+right after it and type `C-j'. The value of `load-path' will then
+appear in the buffer.
+
+ When Ebib is loaded, you can run it with `M-x ebib'. This command is
+also used to return to Ebib when you have put the program in the
+background. You can bind this command to a key sequence by putting
+something like the following in Emacs' init file:
+
+
+ (global-set-key "\C-ce" 'ebib)
+
+ You can of course choose any key combination you like. (In Emacs, key
+combinations of `C-c <letter>' are reserved for the user, so that no
+package may set them.)
+
+ It is recommended to byte-compile the source, Ebib runs quite a lot
+faster when it is byte-compiled. You can do this either within Emacs
+with `M-x byte-compile-file', or from your shell by going into the
+directory where you put `ebib.el' and typing:
+
+
+ emacs -batch -f batch-byte-compile ebib.el
+
+ (Substitute `emacs' with `xemacs' if you use XEmacs.) This will
+create a file `ebib.elc', which Emacs will load instead of `ebib.el'.
+Byte-compiling Ebib may produce a warning about functions that are "not
+known to be defined". This can be safely ignored. GNU Emacs and XEmacs
+have some small differences, and the functions reported in this warning
+are those used by the other version. Ebib makes sure that the correct
+functions are called.
+
+
+File: ebib-manual.info, Node: Basic Usage, Next: Advanced Features, Prev: Installation, Up: Top
+
+2 Basic Usage
+*************
+
+A BibTeX database is somewhat of a free-form database. A BibTeX entry
+consists of a set of field-value pairs. Furthermore, each entry is
+known by a unique key. The way that Ebib navigates this database is by
+having two windows, one that contains a list of all the entry keys in
+the database, and one that contains the fields and values of the
+currently highlighted entry.
+
+ When Ebib is started, the current windows in Emacs are hidden and
+the Emacs frame is divided into two windows. The top one contains a
+buffer that is called the _index buffer_, while the lower window
+contains the _entry buffer_. When a database is loaded, the index
+buffer holds a list of all the keys in the database. You can move
+through these keys with the cursor keys. In the entry buffer, the
+fields of the currently highlighted entry are shown, with their values.
+
+ In this chapter, all basic functions of Ebib are described, so that
+you can get startet with it. At times, reference will be made to later
+chapters, where more specific functions are described.
+
+* Menu:
+
+* Getting Started::
+* Editing the Database::
+* Saving a Database::
+* Searching::
+* LaTeX Integration::
+* Cross-referencing::
+* Printing the Database::
+* Marking Entries::
+* Calling a Browser::
+* Viewing Files::
+
+
+File: ebib-manual.info, Node: Getting Started, Next: Editing the Database, Prev: Basic Usage, Up: Basic Usage
+
+2.1 Getting Started
+===================
+
+Ebib is started with the command `M-x ebib'. Entering this command
+hides all the windows in the current Emacs frame and replaces them with
+two windows: the top one contains the index buffer, the bottom one,
+taking up the larger part of the screen, contains the entry buffer. The
+index buffer is named `none', to indicate that no database has been
+loaded. If you open a database, or start a new one, the index buffer
+will carry its name.
+
+ You can quit Ebib by typing `q'. You will be asked for confirmation,
+and you will receive a warning if you happen to have an unsaved
+database. The command `z' can also be used to leave Ebib. However,
+unlike `q', which completely quits Ebib, `z' only lowers it, so that it
+remains active in the background. The `.bib' files that you have opened
+remain loaded, and you can return to them by typing `M-x ebib' again.
+
+* Menu:
+
+* Opening a `.bib' file::
+* Navigating a `.bib' file::
+* Starting a New `.bib' File::
+
+
+File: ebib-manual.info, Node: Opening a `.bib' file, Next: Navigating a `.bib' file, Prev: Getting Started, Up: Getting Started
+
+2.1.1 Opening a `.bib' file
+---------------------------
+
+Loading a `.bib' file into Ebib is done with the command `o'. Ebib
+reads the file that you specify, and reports how many entries it found,
+how many `@string' definitions it found, and whether a `@preamble' was
+found. Note that when Ebib reads a `.bib' file, it only reads entry
+types (e.g. `book, article, phdthesis' etc.) that it knows about.
+Fields (e.g. `author, title, year' etc.) that Ebib does not know
+about, are loaded (and saved) but not displayed, so they cannot be
+edited. Therefore, you should make sure that all the entry types and
+fields that your databases use are defined. A sensible set has been
+predefined, so that anyone who's using standard BibTeX entry types
+should have no problem loading an existing `.bib' file into Ebib. If,
+however, you have custom entry types, or custom fields in your `.bib'
+files, you should read the chapter on customising Ebib to learn how to
+define them, so that Ebib knows about them. (See *note Entry types:
+entry-types.)
+
+ Every time Ebib reads a `.bib' file, it produces a few log messages.
+These are written into a special buffer `*Ebib-log*'. If Ebib
+encounters entry types in the `.bib' file that it doesn't know, it will
+log a warning. If Ebib finds something that it believes to be
+incorrect, an error will be logged. If any warnings or errors occur
+while loading the `.bib' file, Ebib tells you so after loading the
+file. To view the log file, press `l' in the index buffer.
+
+ Note that even if it detects warnings or errors, Ebib will try to
+continue parsing the rest of the `.bib' file. That means that normally,
+only the entry in which an error occurs is not read. Entries occurring
+after the problematic one are read.
+
+
+File: ebib-manual.info, Node: Navigating a `.bib' file, Next: Starting a New `.bib' File, Prev: Opening a `.bib' file, Up: Getting Started
+
+2.1.2 Navigating a `.bib' file
+------------------------------
+
+Once you've opened a `.bib' file, the keys of all the entries in the
+file are shown in alphabetical order in the index buffer in the top
+Ebib window. (In fact, it is possible to show more than just the entry
+key in this buffer. See *note Index Display Fields:
+index-display-fields. on how to accomplish this.) The first entry is
+highlighted, meaning it is the current entry. The fields it holds and
+their values are shown in the entry buffer in the bottom Ebib window.
+The first field is the type field, which tells you what kind of entry
+you're dealing with (i.e. `book, article', etc.).
+
+ Below the type field, Ebib displays (up to) three sets of fields.
+The first set are the so-called obligatory fields, the fields that
+BibTeX requires to be filled. The second group are the optional fields,
+which do not have to be filled but which BibTeX will normally add to
+the bibliography if they do have a value. The third group are the
+so-called additional fields. These fields are usually ignored by BibTeX
+(note that BibTeX normally ignores _all_ fields it does not know),
+although there are bibliography styles that treat some of these fields
+as optional rather than as additional; (i.e., the `harvard' styles do
+typeset the `url' field, if present.)
+
+ The first two groups of fields are different for each entry type,
+while the third group are common to all entry types. You can use the
+additional fields, for example, to add personal comments to the works
+in your database. Ebib by default defines the following additional
+fields: `crossref, url, annote, abstract, keywords, file' and
+`timestamp'. If these are not sufficient for you, you need to customise
+Ebib and add your own fields. (See *note Additional Fields:
+additional-fields, if you need to find out how to do that.)
+
+ To move around in the index buffer, you can use the `up' and `down'
+cursor keys, `C-p' and `C-n', or for those more used to mutt's key
+bindings, `k' and `j'. Furthermore, `Space' and `PgDn' move a screenful
+of entries down, while `b' and `PgUp' move in the other direction.
+Lastly, `g' and `Home' move to the first entry, while `G' and `End'
+move to the last one.
+
+ Ebib is not restricted to opening just one `.bib' file at a time.
+You can open more files by just typing `o' again and entering the
+filename. Ebib numbers the databases: the number of each database is
+shown in the mode line of the index buffer, directly before the
+database name. The keys 1--9 provide a quick way of jumping from one
+database to another. Note that the numbering is dynamic: if you have
+three databases opened and then close the second, database 3 becomes
+database 2.
+
+ With the `left' and `right' cursor keys, you can move to the
+previous or next database. These keys wrap, so if you hit the `left'
+cursor key while the first database is active, you move to the last
+database. If you are done with a database and want to close it, type
+`c'. This closes the current database. It does not leave Ebib, and all
+other databases you have open will remain so.
+
+
+File: ebib-manual.info, Node: Starting a New `.bib' File, Prev: Navigating a `.bib' file, Up: Getting Started
+
+2.1.3 Starting a New `.bib' File
+--------------------------------
+
+If you want to start a new `.bib' file from scratch, you cannot just go
+and enter entries. You first have to give the database a name. So, to
+start a new database, type `o' first, and give the new file a name.
+Once you have done this, you can start adding entries to the database.
+
+
+File: ebib-manual.info, Node: Editing the Database, Next: Saving a Database, Prev: Getting Started, Up: Basic Usage
+
+2.2 Editing the Database
+========================
+
+Of course, being able to open and view `.bib' files is only half the
+fun. One needs to be able to edit the files as well. Ebib's essential
+editing facilities are discussed here.
+
+* Menu:
+
+* Adding and Deleting Entries::
+* Editing Fields Values::
+* Editing Multiline Values::
+* Copy::
+
+
+File: ebib-manual.info, Node: Adding and Deleting Entries, Next: Editing Fields Values, Prev: Editing the Database, Up: Editing the Database
+
+2.2.1 Adding and Deleting Entries
+---------------------------------
+
+To add an entry to a database, you type `a'. When you do this, Ebib
+first asks you for an entry key, as every entry must be identified by a
+unique key. Just type a name for the new entry (say `jones1998'). Since
+the entry key must be unique, Ebib will complain if you enter a key
+that already exists.
+
+ Note that if you should later decide that you want to change the key
+of an entry, you can do so with the command `E'. So if you have an
+entry with the key `jones1998' and you want to add another entry by
+Jones from 1998, you can call the new one `jones1998b' and rename the
+existing one to `jones1998a'.
+
+ Deleting an entry is done with `d'. Be careful with this: you will
+be asked for confirmation, but once you've confirmed, the entry is
+gone, and it is not possible to bring it back. There is no undo in
+Ebib. (If you haven't saved the database yet, it is still possible to
+retrieve the deleted entry from the `.bib' file, and otherwise it may
+still be in the backup file that Ebib creates. See *note Saving a
+Database: saving-database.)
+
+
+File: ebib-manual.info, Node: Editing Fields Values, Next: Editing Multiline Values, Prev: Adding and Deleting Entries, Up: Editing the Database
+
+2.2.2 Editing Fields Values
+---------------------------
+
+Editing the field values for an entry is done in the lower of the two
+Ebib buffers, the so-called entry buffer. You can move focus to the
+entry buffer by typing the command `e' in the index buffer.
+
+ You can move between fields with the same keys that you use to move
+between entries in the index buffer: the cursor keys `up' and `down',
+`C-p' and `C-n', or `j' and `k'. `Space' and `PgDn' move to the next
+set of fields, while `PgUp' and `b' move to the previous set of fields.
+`g' and `G', and `Home' and `End' also work as expected.
+
+ Editing a field value can be done with `e'. For most fields, Ebib
+simply asks you for a string value in the minibuffer. (Here, `RET'
+confirms the edit, while `C-g' cancels it.) Although BibTeX requires
+that field values be surrounded by braces {} (or double quotes "", but
+Ebib does not use those, even though it can of course handle them when
+they are used in an existing `.bib' file) you do not need to type
+these. Ebib adds them when it saves the `.bib' file.
+
+ Some fields, however, are handled in a special way. The first of
+these is the `type' field: if you edit this field, you must enter one
+of the predefined entry types. Ebib won't allow you to enter anything
+else. You can use tab-completion in this case. Similarly, if you edit
+the `crossref' field, Ebib requires that you fill in a key from the
+database. Here, too, you can use tab-completion.
+
+ Note that if you're adding a new entry, Ebib automatically puts you
+in the entry buffer after you've typed the entry key: you don't have to
+type `e' to move to the entry buffer. When creating a new entry, it is
+best to set the `type' field first, because the `type' field determines
+which other fields are available for an entry.
+
+ Note also that after editing a field, Ebib (usually) puts you on the
+next field. This is convenient if you're creating a new entry and need
+to fill out several fields in a row.
+
+ If you're done editing the fields of the entry, type `q' to move
+focus back to the index buffer. (Note: keys may have different
+functions in the index buffer and the entry buffer. `q' is a typical
+example: in the entry buffer, it quits editing the entry and moves
+focus back to the index buffer. In the index buffer, however, `q' quits
+Ebib.)
+
+
+File: ebib-manual.info, Node: Editing Multiline Values, Next: Copy, Prev: Editing Fields Values, Up: Editing the Database
+
+2.2.3 Editing Multiline Values
+------------------------------
+
+Apart from the `type' and `crossref' field, there is another field that
+Ebib handles in a special way when you edit its value. This is the
+`annote' field. Most field values normally consist of a single line of
+text. However, because the `annote' field is meant for creating
+annotated bibliographies, it would not be very useful if you could only
+write one line of text in this field. Therefore, when you edit the
+`annote' field, Ebib puts you in the so-called _multiline edit buffer_.
+This is essentially a text mode buffer that allows you to enter as much
+text as you like. To store the text and leave the multiline edit
+buffer, type `C-x b'. (This is of course the standard Emacs command to
+switch buffers. It is redefined in Ebib's multiline edit buffer.)
+
+ If you want to leave the multiline edit buffer without saving the
+text you have just typed, you can use the command `C-x k'. This too is
+redefined in the multiline edit buffer: it leaves the multiline edit
+buffer (and hides it), but it does not actually kill the buffer.
+
+ Multiline values are not restricted to the `annote' field. Any field
+can in fact hold a multiline value. (Except of course the `type' and
+`crossref' fields.) To give a field a multiline value, use `l' instead
+of `e'. You will again be put in the multiline edit buffer, where you
+can edit the value. Note that you can use `l' even if a field already
+has a single line value. Ebib will just make that the first line in the
+multiline edit buffer.
+
+ When a field has a multiline value, only the first line is shown in
+the entry buffer, for space reasons. To indicate that the value is
+multiline, a plus sign `+' is placed in front of the value.
+
+ By the way, the `e' key is smart about the way an entry must be
+edited. If you press `e' on a field that already has a multiline value,
+regardless of the fact whether it is the `annote' field or not, Ebib
+puts you in the multiline edit buffer. Therefore, you need `l' only if
+you want to give a field a multiline value when it doesn't have one yet.
+
+ For more details on working with the multiline edit buffer, see
+*note The Multiline Edit Buffer: multiline-edit-buffer.
+
+
+File: ebib-manual.info, Node: Copy, Prev: Editing Multiline Values, Up: Editing the Database
+
+2.2.4 Copy, cut, paste (yank), and delete
+-----------------------------------------
+
+A few more commands are available when you're in the entry buffer
+editing field values. The commands `c', `x' and `y' implement a copy
+and paste system: `c' copies the contents of the current field to the
+kill ring, `x' kills the contents of the current field to the kill
+ring, and `y' yanks (pastes) the most recently killed text in the kill
+ring. You can type `y' repeatedly to get the same effect you get in
+Emacs when you type `M-y' after an initial `C-y': every additional use
+of `y' moves back in the kill ring.
+
+ Lastly, there is the command `d', which deletes the contents of the
+current field, without asking questions and without storing the text in
+the kill ring.
+
+ Note that `y' only works when the current field does not have a value
+yet. This is to prevent you from accidentally overwriting a field
+value. If you do want to yank text into a field that already has a
+value, simply hit `d' first to delete the text.
+
+
+File: ebib-manual.info, Node: Saving a Database, Next: Searching, Prev: Editing the Database, Up: Basic Usage
+
+2.3 Saving a Database
+=====================
+
+When you have undertaken any kind of editing action on a database, it is
+marked as modified, which is indicated in the mode line for the index
+buffer. A modified database can be saved by typing `s'. This saves the
+database to the file it was loaded from without asking for
+confirmation. (It is similar to `C-x C-s' in Emacs.) If you're saving a
+file for the first time after loading it, Ebib creates a backup file
+under the same name appended with a tilde: `<filename>.bib~'.
+
+ If you have multiple databases open, have made changes in more than
+one of them, and want to save all of them without going through each
+yourself, you can use `S'. (That's a capital `S'.) This command saves
+all modified databases.
+
+ Another way to save a database is to use the command `w'. Use this
+if you want to write the database to another file than the one it was
+loaded from. Ebib will ask you for a filename to save to, and will of
+course warn you if that file happens to exist already. Note that this
+command is similar to `C-x C-w' in Emacs, so that after using it, the
+new `.bib' file becomes associated with the database.
+
+
+File: ebib-manual.info, Node: Searching, Next: LaTeX Integration, Prev: Saving a Database, Up: Basic Usage
+
+2.4 Searching
+=============
+
+Ebib provides several search methods. First, if you are in the index
+buffer, the normal Emacs incremental searches, `C-s' and `C-r',
+function as expected. You can use them to search entry keys. Note that
+once you've found the key you're searching, you must hit `ENTER' to
+make it active. Ebib does not update the entry buffer during
+incremental search, as this would be rather pointless: you're only
+interested in the entry you're searching for, not in the entries you
+pass along the way.
+
+ Of course, it is also possible to search the database itself. If you
+type `/', Ebib asks you for a search term. This can be a regular
+expression, to allow for flexibility in searching. After hitting
+`ENTER', Ebib will start searching the database (starting from the
+current entry, _not_ from the first entry!) and will display the entry
+with the first occurrence of the search string that it finds. All the
+occurrences of the search string in that entry are highlighted.
+
+ Ebib searches all the fields of each entry. It is not possible with
+`/' to specify the fields to search. Note that if the search term is
+found in a field with a multiline value, Ebib will highlight the `+'
+sign that it displays in front of the field value. Keep an eye out for
+this when doing a search, because Ebib only shows the first line of
+multiline values, and if the search term appears in another line, the
+highlighted `+' is the only indication that the search term was found.
+(Well, that and the fact that Ebib does _not_ say `Search string not
+found', of course...)
+
+ A search term may of course appear more than once in the database. To
+search for the next occurrence, type `n'. This will continue searching
+for the search string in the rest of the database. Again, the first
+entry found to contain the search string is displayed. Note that `n'
+does not wrap: if the end of the database is reached, Ebib stops
+searching. To continue searching from the top, hit `g' and then `n'.
+
+ The functions described here form Ebib's basic search functionality.
+Ebib also has a much more powerful search mechanism in the form of
+_virtual databases_. These are described later. (See *note Virtual
+Databases: virtual-databases.)
+
+
+File: ebib-manual.info, Node: LaTeX Integration, Next: Cross-referencing, Prev: Searching, Up: Basic Usage
+
+2.5 LaTeX Integration
+=====================
+
+Having a BibTeX database manager running inside Emacs has an additional
+advantage: it makes it trivially easy to insert BibTeX keys in your
+LaTeX documents.
+
+ Ebib provides two functions for this. First, if you're in a LaTeX
+buffer, you can call the function `ebib-insert-bibtex-key'. When you
+invoke this command, Emacs prompts you for a key from the database(s)
+associated with the current buffer, a citation command (that has to be
+typed _without_ the backslash) and any optional argument(s) the command
+allows. You can type the key using TAB-completion, and after hitting
+`RET', Emacs puts a BibTeX citation at the cursor position in the
+current buffer with the key you selected.
+
+ You can also do it the other way around: if you're in the index
+buffer in Ebib, you can _push_ an entry to a LaTeX buffer. To do this,
+use the key `p'. Ebib will ask you for a buffer to push the entry to, a
+citation command and also any optional arguments, and then insert a
+citation at the current cursor position in the buffer you've supplied.
+
+ For the citation command that `ebib-insert-bibtex-key' and the
+command key `p' ask for can be any command that you need. But it is
+also possible to predefine a list of citation commands which you can
+then enter at this prompt using tab completion. For details on setting
+this up, see *note Insertion Commands: insertion-commands.
+
+ There is another function that is available outside Ebib:
+`ebib-entry-summary'. This command reads the key under the cursor in the
+current buffer and displays the field values associated with that key
+in a `*Help*' buffer. This allows you to quickly check a reference in a
+text.
+
+ Probably the easiest way to use both `ebib-insert-bibtex-key' and
+`ebib-entry-summary' is to bind them to a key sequence. For example, you
+could put the following in your `~/.emacs':
+
+
+ (add-hook 'LaTeX-mode-hook #'(lambda ()
+ (local-set-key "\C-cb" 'ebib-insert-bibtex-key)))
+
+ This binds `C-c b' to the command `ebib-insert-bibtex-key' in
+AUCTeX's LaTeX mode. (Note that commands of the form `C-c <letter>' are
+reserved for the user, and should therefore not be set by any package.
+For this reasons, Ebib does not set this command automatically.)
+
+* Menu:
+
+* Consulting databases from within a LaTeX file::
+
+
+File: ebib-manual.info, Node: Consulting databases from within a LaTeX file, Prev: LaTeX Integration, Up: LaTeX Integration
+
+2.5.1 Consulting databases from within a LaTeX file
+---------------------------------------------------
+
+The commands `ebib-insert-bibtex-key' and `ebib-entry-summary' must
+consult the database or databases loaded in Ebib, and Ebib tries to be
+smart about which database(s) to consult. Usually, a LaTeX file has a
+`\bibliography' command somewhere toward the end, which names the
+`.bib' file or files that contain the bibliography entries. If you
+consult a BibTeX database from within a LaTeX file, Ebib first looks
+for a `\bibliography' command, reads the `.bib' files from it, and then
+sees if those files happen to be open. If they are, Ebib uses them to
+let you pick an entry key (in the case of `ebib-insert-entry-key') or
+to search for the entry (in the case of `ebib-entry-summary').
+
+ Of course, it may be the case that the LaTeX file is actually part
+of a bigger project, and that only the master file contains a
+`\bibliography' command. To accommodate for this, Ebib checks whether
+the (buffer-local) variable `TeX-master' is set to a filename. If it
+is, it reads that file and tries to find the `\bibliography' command
+there. (Note: `TeX-master' is an AUCTeX variable, which is used to keep
+track of multi-file projects. If you don't use AUCTeX, this
+functionality doesn't work, and Ebib will only check the current file
+for a `\bibliography' command.)
+
+ Note that if one of the `.bib' files in the `\bibliography' command
+isn't loaded, Ebib issues a warning message about this, and continues
+to check for the next `.bib' file. These warning messages appear in the
+minibuffer, but are probably directly overwritten again by further
+messages or prompts Ebib produces, so check the `*Messages*' buffer if
+Ebib doesn't seem to be able to find an entry that you're sure is in
+one of your databases.
+
+ Another thing to keep in mind is that Ebib only looks for a
+`\bibliography' command once: the first time either
+`ebib-insert-bibtex-entry' or `ebib-entry-summary' is called. It stores
+the result of this search and uses it the next time either of these
+commands is used. Therefore, if you make a change to the
+`\bibliography' command, you must reload the file (use `M-x
+revert-buffer') to make sure Ebib rereads the `\bibliography' command.
+
+ If no `\bibliography' command is found at all, either in the LaTeX
+file itself, or in the master file, Ebib simply consults the current
+database, i.e. the database that was active when Ebib was lowered with
+`z'.
+
+
+File: ebib-manual.info, Node: Cross-referencing, Next: Printing the Database, Prev: LaTeX Integration, Up: Basic Usage
+
+2.6 Cross-referencing
+=====================
+
+BibTeX has a cross-referencing facility. Suppose you have an entry
+`jones1998', which appeared in a book that is also in your database,
+say under `miller1998'. You can tell BibTeX that `jones1998' is
+contained in `miller1998' by putting `miller1998' in the `crossref'
+field. When BibTeX finds such a cross-reference, all the fields of
+`jones1998' that don't have a value inherit their values from
+`miller1998'. At the very least, this saves you some typing, but more
+importantly, if two or more entries cross-reference the same entry,
+BibTeX automatically includes the cross-referenced entry in the
+bibliography (and puts a reduced reference in the cross-referencing
+entries).
+
+ When you fill in the `crossref' field in Ebib, Ebib displays the
+values of the cross-referenced entry in the entry buffer. To indicate
+that they are just inherited values, they are marked with
+`ebib-crossref-face', which by default is red. (You can customise it,
+of course. See the customisation option *note Crossref Face:
+crossref-face.) These values are just displayed for convenience:
+otherwise, Ebib treats these fields as if they are empty. That is, they
+cannot be edited (to edit them, you need to edit the cross-referenced
+entry), and it's not possible to copy these values to the kill ring.
+
+ If you're viewing an entry that has a cross-reference and you want
+to go to the cross-referenced entry you can type `F'. This command
+reads the value of the `crossref' field and then displays that entry.
+If you want to do the reverse, i.e., see if the current entry is
+cross-referenced by any other entries, you can use the key `N'. What
+this command actually does is to make the key of the current entry the
+current search string and to search for its first occurrence _after_ the
+current entry. Like the normal search command `/', `N' does not wrap
+and only searches forward. So if you want to search for the next
+cross-referencing entry you need to press `n' (i.e., lowercase `n'),
+and to continue searching from the first entry, press `g' followed by
+`n'.
+
+ Note that if you want to use BibTeX's cross-referencing options, you
+need to set the option *note Save Xrefs first: save-xrefs-first. This
+tells Ebib to save all entries with a `crossref' field first in the
+`.bib' file. Without this, BibTeX's cross-referencing will not work
+reliably.
+
+
+File: ebib-manual.info, Node: Printing the Database, Next: Marking Entries, Prev: Cross-referencing, Up: Basic Usage
+
+2.7 Printing the Database
+=========================
+
+Sometimes it may be useful to have a `.pdf' file or print-out of your
+database. Although Ebib does not actually do the printing itself, it can
+create a LaTeX file for you that you can compile and print. In fact,
+there are two ways of doing this.
+
+ The first is the command `L'. This command creates a simple LaTeX
+document that essentially contains a `\nocite{*}' command followed by a
+`\bibliography' command referring to the `.bib' file belonging to the
+current database. You can then run the usual sequence of LaTeX, BibTeX,
+LaTeX, LaTeX on this file, creating a document containing a list of all
+the references in your database.
+
+ The second command for printing a database is `P'. This command also
+creates a LaTeX file. However, instead of simply providing a
+`\nocite{*}' command, `P' creates a `tabular' environment for each
+entry in the database listing all the fields of that entry and their
+values.
+
+ The difference between `L' and `P' should be obvious: with `L', you
+get a list of references created by BibTeX. This means that the
+references look the way they will when actually used in a document, but
+it also means that the list only contains the information that BibTeX
+deems relevant.
+
+ With `P' you get an overview of your database with _all_ the field
+values of each entry, including the ones that BibTeX does not use. The
+entries are not formatted as literature references, but in a way
+similar to how they are shown in Ebib.
+
+ By default, `P' only shows single-line field values. That is,
+multiline values are normally excluded. If you want to include
+multiline values in the print-out, you have to set the option `Print
+Multiline' in Ebib's customisation buffer. (See *note The Customisation
+Buffer: customisation-buffer.) With this option set, Ebib will include
+all multiline values in the LaTeX file that `P' creates. Note however
+that Ebib does not change anything about the formatting of the text in
+a multiline value. So if you plan to make (heavy) use of this option,
+make sure that the way you type your text conforms to LaTeX's
+conventions (e.g. empty lines to mark paragraphs, etc.) and doesn't
+contain any characters such as `&' that are illegal in LaTeX. (Or,
+alternatively, use LaTeX code in your multiline fields.)
+
+ As mentioned, when you use either `L' or `P', Ebib creates a LaTeX
+file. More precisely, it creates a temporary buffer and writes the
+LaTeX code into it, and then saves the contents of that buffer to a
+file. After it has done that, Ebib lowers itself and instruct Emacs to
+open the file in a buffer, which will then be properly set up as a
+LaTeX buffer. From there you can run LaTeX and view the result.
+
+ Before doing all this, Ebib asks you which file to write to. Be
+careful with this: since this is supposed to be a temporary file, Ebib
+simply assumes that if you provide a filename of an existing file, it
+can overwrite that file without warning!
+
+ A better way to tell Ebib which file to use is to set the option
+`Print Tempfile' in Ebib's customisation buffer to some temporary file.
+When this option is set, Ebib will always use this file to write to,
+and will not ask you for a filename anymore when you type `L' or `P'.
+
+ There are two more customisation options for printing the database.
+These are `Print Preamble' and `LaTeX Preamble'. With these options,
+you can specify what Ebib should put in the preamble of the LaTeX files
+it creates. Use this if you want to use specific packages (e.g.
+`\usepackage{a4}' or `\usepackage{times})'. This is especially useful
+for `L', since by default, Ebib uses BibTeX's standard bibliography
+style. With the option `LaTeX Preamble' you can set your preferred
+bibliography style. Details are discussed in the chapter on
+customisation, see *note The Customisation Buffer: customisation-buffer.
+
+
+File: ebib-manual.info, Node: Marking Entries, Next: Calling a Browser, Prev: Printing the Database, Up: Basic Usage
+
+2.8 Marking Entries
+===================
+
+Commands in the index buffer generally operate on one single entry, or
+on all entries. For some, however, it may sometimes be useful to
+perform them on more than one entry, but not necessarily all of them.
+This can be achieved by marking entries. You can mark the entries you
+want to perform a command on with the key `m'. This marks (or unmarks)
+the current entry. Marked entries are displayed in inverse video (in
+GNU Emacs) or white on red (in XEmacs; note that the face properties of
+marked entries can be customised through the customisation option *note
+Marked Face: marked-face.)
+
+ Of the commands discussed so far, four can be used on marked
+entries: `d', `p', `L' and `P'. Note, however, that it is not enough to
+mark the entries you want and then type any of these commands. If you
+do so, they will behave as if no entries were marked. To get these
+commands to work on the marked entries, you have to type a semicolon
+before them. That is, `; d' deletes all marked entries, and `; L' and
+`; P' create a LaTeX file of only the marked entries. The command `m'
+itself can also be used with the `;' prefix. If there are any marked
+entries, `; m' unmarks them all. Otherwise, `; m' marks all entries.
+
+ `; p' pushes all marked entries to a LaTeX buffer. It does so by
+putting them all in a single `\cite' command, separated by commas, not
+by putting them in separate `\cite' commands.
+
+
+File: ebib-manual.info, Node: Calling a Browser, Next: Viewing Files, Prev: Marking Entries, Up: Basic Usage
+
+2.9 Calling a Browser
+=====================
+
+With more and more scientific literature becoming available on-line, it
+becomes common to store URLs in a BibTeX database. Sometimes you may
+want to load such a URL in your browser. Ebib provides a convenient way
+for doing so.
+
+ If you type `u' in the index buffer, Ebib takes the first URL stored
+in the `url' field of the current entry and passes it to your browser.
+Furthermore, in the entry buffer, you can use `u' on _any_ field. If
+you happen to have more than one URL stored in the relevant field, and
+you want to pass the second (or third, etc.) to the browser, you can
+use a prefix argument. So typing `M-2 u' sends the second URL to your
+browser, `M-3 u' the third, and so on.
+
+ It is not even necessary that the relevant field contains _only_
+URLs. It may contain other text mixed with the URLs: Ebib simply
+searches the URLs in the field and ignores the rest of the text. Ebib
+considers every string of characters that starts with `http://' or
+`https://' and that does not contain whitespace or any of the
+characters `" ' <' or `>' as a URL. Furthermore, Ebib regards
+everything that is enclosed in a LaTeX `\url{...}' command as a URL.
+This behaviour is controlled by a regular expression that can be
+customised. (See *note Url Regexp: url-regexp.)
+
+ There exists an Emacs function `browse-url', which provides a nifty
+interface to calling an external browser. In principle, Ebib uses this
+function. However, if this function is not present on your installation,
+you can set the option *note Browser Command: browser-command. to call
+the browser.
+
+ As just explained, if you press `u' in the index buffer, Ebib
+searches the `url' field of the current entry for URLs. If you have the
+habit of putting your URLs in another field, however, you may change
+the customisation option *note Standard Url Field: standard-url-field.
+and tell Ebib to use another field for searching the URLs. (Keep in
+mind, though, that in the entry buffer, you can load a URL from any
+field.)
+
+
+File: ebib-manual.info, Node: Viewing Files, Prev: Calling a Browser, Up: Basic Usage
+
+2.10 Viewing Files
+==================
+
+If you have electronic versions of the papers in your database stored on
+your computer, you can use Ebib to call external viewers for these
+files. The interface for this is similar to that for calling a browser:
+if you press `f' in the index buffer, Ebib searches the `file' field
+for a filename and when it finds one, calls an appropriate viewer.
+
+ Just as with `u', you can use `f' in the entry buffer as well, in
+which case it can be used on any field, not just the `file' field. It
+is also possible to have more than one filename in a field: you can
+select the one you want to view with the prefix argument.
+
+ Just as in the case of URLs, you can customise several things about
+the file view functionality. The option *note Standard File Field:
+standard-file-field. allows you to customise the field that `f'
+extracts filenames from when pressed in the index buffer. Extracting
+filenames is done with a regular expression, which can be customised
+through the option *note File Regexp: file-regexp.
+
+ The option *note File Search Dirs: file-search-dirs. allows you to
+tell Ebib which directories it needs to search for files. The default
+value is `~', which means Ebib just looks in your home dir. Since this
+is probably not where you keep your files, you may want to customise
+this. Note that you can specify more than one directory.
+
+ Note that Ebib does not search directories recursively. It is
+possible, however, to put subdirectories in the filenames. That is, if
+you put something like `a/abney1987.pdf' in the `file' field, Ebib
+searches for the relevant file in a subdirectory `a/' of the
+directories listed in the option `File Search Dirs'. (Note that if you
+want to do this under Windows, you may want to remove the backslash
+from the file regexp.)
+
+ Ebib can call different external programs depending on the file type
+of the relevant file, but you have to specify which programs to call.
+The option *note File Associations: file-associations. allows you to do
+this. By default, `.pdf' and `.ps' files are handled, by `xpdf' and
+`gv', respectively. You can specify further file types by their
+extensions (do not include the dot). The program is searched for in
+`PATH', but you can of course specify the full path to the program.
+
+
+File: ebib-manual.info, Node: Advanced Features, Next: The Ebib Buffers, Prev: Basic Usage, Up: Top
+
+3 Advanced Features
+*******************
+
+The features discussed in the previous chapter should be sufficient to
+get started using Ebib. However, Ebib has several more advanced
+features, which are described in this chapter.
+
+* Menu:
+
+* Screen Layout::
+* Preloading `.bib' Files::
+* `@Preamble' Definition::
+* `@String' Definitions::
+* Sorting the `.bib' file::
+* Merging and Importing::
+* Exporting Entries::
+* Timestamps::
+* Multiple Identical Fields::
+* Virtual Databases::
+* The Multiline Edit Buffer::
+
+
+File: ebib-manual.info, Node: Screen Layout, Next: Preloading `.bib' Files, Prev: Advanced Features, Up: Advanced Features
+
+3.1 Screen Layout
+=================
+
+By default, Ebib takes over the entire Emacs frame it is started in. If
+you have a wide enough screen, however, it may be more convenient to
+have Ebib take up only part of the frame, so that you can have the
+LaTeX text you're working on and Ebib visible at the same time. The
+option *note Layout: layout. allows you to do this, by giving you the
+ability to choose between a full-frame or a split-frame layout.
+
+ In the split-frame layout, the Ebib windows are displayed on the
+right of the current frame, with the left part free for your document.
+In this layout, some aspects of Ebib behave somewhat differently. Most
+importantly, the multiline edit buffer is not displayed in the lower
+Ebib window, but in the non-Ebib window on the left. (Obviously, after
+leaving the multiline edit buffer, the original buffer is restored to
+that window.)
+
+ Furthermore, pressing `z' in the index buffer leaves Ebib, but keeps
+the buffers visible. You can get back to Ebib with the command `M-x
+ebib' (or any key bound to it, of course), or simply by manually
+switching to the index buffer. If you want to remove the Ebib buffers
+from the frame but keep Ebib in the background, you can use `Z' (i.e.
+capital `Z') in the index buffer. (Note that `Z' is also available in
+the full-frame layout, but there it is identical to `z'.)
+
+ Lastly, the command `ebib-entry-summary' checks whether the Ebib
+buffers are visible in the frame. If they are, it does not output the
+entry info in a `*Help*' buffer, but rather displays the entry in Ebib
+itself.
+
+
+File: ebib-manual.info, Node: Preloading `.bib' Files, Next: `@Preamble' Definition, Prev: Screen Layout, Up: Advanced Features
+
+3.2 Preloading `.bib' Files
+===========================
+
+Chances are that you will be doing most of your work with one or a few
+`.bib' files, and you may find yourself opening the same file or files
+every time you start Ebib. If so, you can tell Ebib to always load
+specific `.bib' files on startup. To do this, specify the files in
+Ebib's customisation buffer, under the option *note Preload Bib Files:
+preload-bib-files.
+
+
+File: ebib-manual.info, Node: `@Preamble' Definition, Next: `@String' Definitions, Prev: Preloading `.bib' Files, Up: Advanced Features
+
+3.3 `@Preamble' Definition
+==========================
+
+Apart from database entries, BibTeX allows three more types of elements
+to appear in a `.bib' file. These are `@comment', `@preamble' and
+`@string' definitions. Ebib provides facilities to handle the latter
+two. `@comment' definitions cannot be added to a `.bib' file through
+Ebib, and if Ebib finds one in a `.bib' file, it is simply ignored.
+
+ `@preamble' and `@string' definitions can be handled, however. Ebib
+allows you to add one `@preamble' definition to the database. In
+principle, BibTeX allows more than one such definition, but really one
+suffices, because you can use the concatenation character `#' to
+include multiple TeX or LaTeX commands. So, rather than having two
+`@preamble' definitions such as:
+
+
+ @preamble{ "\newcommand{\noopsort}[1]{} " }
+ @preamble{ "\newcommand{\singleletter}[1]{#1} " }
+
+ you can write this in your `.bib' file:
+
+
+ @preamble{ "\newcommand{\noopsort}[1]{} "
+ # "\newcommand{\singleletter}[1]{#1} " }
+
+ Creating or editing a `@preamble' definition in Ebib is done by
+hitting `r' in the index buffer. Ebib uses the multiline edit buffer
+for editing the text of the `@preamble' definition, which means that as
+discussed above, `C-x b' stores the `@preamble' text and returns focus
+to the index buffer, while `C-x k' returns focus to the index buffer
+while abandoning any changes you may have made. (For details on using
+the multiline edit buffer, see *note The Multiline Edit Buffer:
+multiline-edit-buffer.)
+
+ In order to create a `@preamble' as shown above in Ebib, you only
+have to type the text between the braces. Ebib takes care of including
+the braces of the `@preamble' command, but otherwise it saves the text
+exactly as you enter it. So in order to get the preamble above, you'd
+have to type the following in Ebib:
+
+
+ "\newcommand{\noopsort}[1]{} "
+ # "\newcommand{\singleletter}[1]{#1} "
+
+ Note that when Ebib loads a `.bib' file that contains more than one
+`@preamble' definition, it concatenates all the strings in them in the
+manner just described and saves them in one `@preamble' definition.
+
+
+File: ebib-manual.info, Node: `@String' Definitions, Next: Sorting the `.bib' file, Prev: `@Preamble' Definition, Up: Advanced Features
+
+3.4 `@String' Definitions
+=========================
+
+If you press `t' in the index buffer, Ebib hides the entry buffer in the
+lower window and replaces it with the _strings buffer_. In this buffer,
+you can add, delete and edit `@string' definitions.
+
+ Adding a `@string' definition is done with the command `a'. This
+will first ask you for an abbreviation and then for the value to be
+associated with that abbreviation. Once you've entered these, Ebib will
+sort the new abbreviation into the buffer.
+
+ Moving between the `@string' definitions can be done in the usual
+way: the cursor keys `up' and `down', `C-p' and `C-n' and `k' and `j'
+move up and down. `Space' and `PgDn' move ten strings down, while `b'
+and `PgUp' move in the other direction. The keys `g', `G', `Home' and
+`End' also function as expected.
+
+ To delete a `@string' definition, use `d'. To edit the value of a
+definition, use `e'. There is also a command `c', which copies the
+value of the current `@string' definition to the kill ring. Unlike in
+the entry buffer, there are no corresponing commands `y' and `x'. (In
+fact, `x' does exist, but has another function.) Yanking from the kill
+ring can be done with `C-y/M-y' in the minibuffer when you edit a
+`@string''s value. Cutting a `@string''s value is pointless, because a
+`@string' definition must have a value.
+
+ Having defined `@string' definitions, there must of course be a way
+to use them. Just giving a field a string abbreviation as value will
+not do, because Ebib puts braces around the value that you enter when
+it writes the `.bib' file, so that BibTeX will not recognise the
+abbreviation, and will not expand it. BibTeX will only recognise an
+abbreviation if it appears in the `.bib' file outside of any braces.
+
+ To accomplish this, you must mark a field's value as _raw_. A raw
+field is a field whose value is not surrounded by braces when the
+database is saved, so that BibTeX recognises it as an abbreviation. To
+mark a field raw, press `r'. An asterisk will appear before the field,
+indicating that it is raw. Pressing `r' again will change the field
+back to normal. If you press `r' on a field that does not have a value
+yet, Ebib will ask you for one.
+
+ Note that this also makes it possible to enter field values that are
+composed of concatenations of strings and abbreviations. The BibTeX
+documentation for example explains that if you have defined:
+
+
+ @string{WGA = "World Gnus Almanac"}
+
+ you can create a BibTeX field like this:
+
+
+ title = 1966 # WGA
+
+ which will produce "1966 World Gnus Almanac". Or you can do:
+
+
+ month = "1~" # jan
+
+ which will produce someting like "1 January", assuming your
+bibliography style has defined the abbreviation `jan'. All this is
+possible with Ebib, simply by entering the exact text including quotes
+or braces around the strings, and marking the relevant field as raw.
+
+ An easy way to enter a `@string' abbreviation as a field value is to
+use the key `s' instead of `e'. If you type `s', Ebib asks you for a
+`@string' abbreviation to put in the current field, and automatically
+marks the field as raw. With this command, Ebib only accepts `@string'
+definitions that are in the database, so that by using `s' you can make
+sure you don't make any typos. Note that you can use tab completion to
+complete a partial string.
+
+
+File: ebib-manual.info, Node: Sorting the `.bib' file, Next: Merging and Importing, Prev: `@String' Definitions, Up: Advanced Features
+
+3.5 Sorting the `.bib' file
+===========================
+
+By default, the entries in the database are saved to the `.bib' file in
+alphabetical order according to entry key. If you only deal with the
+`.bib' file through Ebib, you may not care in which order the entries
+are saved. However, it may sometimes be desirable to be able to specify
+the sort order of entries in more detail. (Apparently, this can be
+useful with ConTeXt, for example.)
+
+ You can specify a sort order in Ebib's customisation buffer. To sort
+the entries, you must set at least one sort level (that is, a field to
+sort the entries on). You can also specify more than one sort level: if
+two entries have identical values for the first sort level, they will
+be sorted on the second sort level. E.g., if the first sort level is
+`author' and the second is `year', then the entries are sorted by
+author, and those entries that have identical values for the `author'
+field are sorted by year.
+
+ A sort level is not restricted to a single field. You can specify
+more fields for a single sort level. Within a single sort level, a
+second sort field is used if the first sort field does not have a
+value. For example, books that have an editor instead of an author will
+have an empty `author' field. If you sort the database on the `author'
+field, such entries will all appear at the beginning of the `.bib'
+file, which is most likely not what you want.
+
+ To remedy this, you can specify both the `author' and the `editor'
+fields for the first sort level. Ebib will then sort an entry on its
+`author' field if it has a value, and will otherwise use the value of
+the `editor' field.
+
+ The difference between two sort fields within one sort level and two
+sort levels is that a second sort _field_ is an alternative for the
+first field when it has no value, while a second sort _level_ is an
+additional sort criterion when two or more entries cannot be sorted on
+the first level, because they have identical values.
+
+ By default, the option `Sort Order' has no value, which means that
+the entries in the `.bib' file are sorted according to entry key. Those
+that wish to customise the sort order will usually want to set the
+first sort level to `author editor', and the second to `year'. In that
+way, the entries in the `.bib' file are sorted according to
+author/editor, and entries with the same author/editor are sorted by
+year.
+
+ Entries that cannot be sorted on some sort level, because the sort
+fields are empty, are sorted on entry key. (Keep in mind that if the
+first sort level yields _no value_ for a specific entry, Ebib does
+_not_ use the second sort level to sort that entry. It uses the entry
+key. The second sort level is only used if the first yields _identical_
+values for two or more entries.)
+
+ Note that if you have set the option `Save Xrefs First' (see *note
+Cross-referencing: cross-referencing.), it is pointless to set a sort
+order. Saving cross-referencing entries first messes up any sort order,
+so Ebib simply ignores the sort order if `Save Xrefs First' is set.
+
+
+File: ebib-manual.info, Node: Merging and Importing, Next: Exporting Entries, Prev: Sorting the `.bib' file, Up: Advanced Features
+
+3.6 Merging and Importing
+=========================
+
+As described in the previous chapter, adding entries to a database can
+be done manually with the key `a'. There are other ways of adding
+entries to a database, however.
+
+ With the command `M' you can merge a second `.bib' file into your
+current database. When you hit `M', you are asked for a filename. Ebib
+then reads the entries in this file and adds them to the database.
+Duplicate entries (that is, entries with an entry key that already
+exists in the database) will not be loaded. Ebib logs a warning about
+each duplicate entry to its log buffer, and displays a warning after
+loading the `.bib' file when this happens.
+
+ Another way to add entries to a database is to import them from an
+Emacs buffer. If, for example, you find ready-formatted BibTeX entries
+in a text file or e.g. on the internet, you can copy & paste them to
+any Emacs buffer (e.g. the `*scratch*' buffer), and then execute the
+command `M-x ebib-import'. Ebib then goes through the buffer and loads
+all BibTeX entries it finds into the current database (i.e. the
+database that was active when you lowered Ebib). If you call
+`ebib-import' while the region is active, Ebib only reads the BibTeX
+entries in the region.
+
+
+File: ebib-manual.info, Node: Exporting Entries, Next: Timestamps, Prev: Merging and Importing, Up: Advanced Features
+
+3.7 Exporting Entries
+=====================
+
+Sometimes it can be useful to copy entries from one database to
+another, or to create a new `.bib' file with several entries from an
+existing database. For this purpose, Ebib provides exporting
+facilities. To export an entry to a `.bib' file, use the command `x'.
+Ebib will ask you for a filename to export the entry to. (If you have
+already exported an entry before, Ebib will present the filename you
+used as default, but you can of course change it.)
+
+ For obvious reasons, Ebib appends the entry to the file that you
+enter if it already exists, it does not overwrite the file. If this is
+not what you want, delete the file first, as Ebib provides no way to do
+this.
+
+ If you have more than one database open in Ebib, it is also possible
+to copy entries from one database to another. To do this, use the `x'
+command with a numeric prefix argument. E.g., if the database you want
+to export an entry to is the second database, type `M-2 x' to export
+the current entry to it. The number of the database is given in the
+modeline of the index buffer.
+
+ If the database you're copying an entry to already contains an entry
+with the same entry key, Ebib won't copy the entry, and issues an
+appropriate warning message.
+
+ Note that the command `x' can operate on marked entries. So to
+export several entries in one go mark them and type `; x'. You can use
+a prefix argument in the normal way: `M-2 ; x' exports the marked
+entries to database 2.
+
+ Apart from entries, it is also possible to export the `@preamble'
+and `@string' definitions. The `@preamble' definition is exported with
+the command `X' in the index buffer. `@string' definitions can be
+exported in the strings buffer: `x' in this buffer exports the current
+string, while `X' exports all `@string' definitions in one go. All
+these commands function in the same way: when used without a prefix
+argument, they ask for a filename, and then append the relevent data to
+that file. With a numeric prefix argument, they copy the relevant data
+to the corresponding open database.
+
+
+File: ebib-manual.info, Node: Timestamps, Next: Multiple Identical Fields, Prev: Exporting Entries, Up: Advanced Features
+
+3.8 Timestamps
+==============
+
+Ebib provides the possibility to add a timestamp to every new entry,
+recording the time it was added to the database. The timestamp is
+recorded in the (additional) field `timestamp'. (By default, this field
+is not shown, but you can make it visible by pressing `H' in the index
+buffer.)
+
+ You can tell Ebib to create timestamps by setting the option `Use
+Timestamp' in Ebib's customisation buffer. With this option set, a
+timestamp is included in entries added to the database with `a'. Ebib
+will also add a timestamp to entries imported from a buffer or merged
+from a file, and to entries exported to another database or to a file.
+When importing or exporting entries, existing timestamps will be
+overwritten. The logic behind this is that the timestamp records the
+date and time when the entry was added to the database, not when it was
+first created.
+
+ Note that if this option is unset, the timestamp of an entry is
+retained when it's imported or exported. Therefore, if you record
+timestamps and want to im-/export entries without changing their
+timestamps, temporarily unset this option.
+
+ Ebib uses the function `format-time-string' to create the timestamp.
+The format string that Ebib uses can be customised in Ebib's
+customisation buffer. The default string is `"%a %b %e %T %Y"', which
+produces a timestamp of the form `"Mon Mar 12 01:03:26 2007"'.
+Obviously, this string is not suited for sorting, so if you want to be
+able to sort on timestamps, you'll need to customise the format string.
+See the documentation for `format-time-string' on the options that are
+available.
+
+
+File: ebib-manual.info, Node: Multiple Identical Fields, Next: Virtual Databases, Prev: Timestamps, Up: Advanced Features
+
+3.9 Multiple Identical Fields
+=============================
+
+Under normal circumstances, a BibTeX entry only contains one occurrence
+of each field. If BibTeX notices that an entry contains more than one
+occurrence of an obligatory or optional field, it issues a warning.
+Ebib is somewhat less gracious, it simply takes the value of the last
+occurrence without giving any warning. (Note, by the way, that BibTeX
+will use the value of the _first_ occurrence, not the last.) When
+additional fields appear more than once in an entry, BibTeX does not
+warn you, since it ignores those fields anyway. Here, too, Ebib's
+standard behaviour is to ignore all but the last value.
+
+ However, some online reference management services "use" this
+feature of BibTeX in that they put multiple `keywords' fields in the
+BibTeX entries that they produce. If you were to import such an entry
+into Ebib, you would lose all your keywords except the last one. To
+remedy this, you can tell Ebib that it should allow multiple
+occurrences of a single field in a BibTeX entry. You can do this by
+setting the customisation option *note Allow Identical Fields:
+allow-identical-fields.
+
+ With this option set, Ebib collapses the multiple occurrences into a
+single occurrence. All the values of the different occurrences are
+collected and stored in the single occurrence, separated by semicolons.
+That is, Ebib does not retain the multiple occurrences, but it does
+retain the values. So suppose you have an entry that contains the
+following `keywords' fields:
+
+
+ @book{jones1998,
+ author = {Jones, Joan},
+ year = {1998},
+ ...
+ keywords = {sleep},
+ keywords = {winter},
+ keywords = {hybernation}
+ }
+
+ If you load this entry into Ebib with the option `Allow Identical
+Fields' set, you will get the following:
+
+
+ @book{jones1998,
+ author = {Jones, Joan},
+ year = {1998},
+ ...
+ keywords = {sleep; winter; hybernation}
+ }
+
+
+File: ebib-manual.info, Node: Virtual Databases, Next: The Multiline Edit Buffer, Prev: Multiple Identical Fields, Up: Advanced Features
+
+3.10 Virtual Databases
+======================
+
+In the previous chapter, Ebib's basic search functionality was
+discussed. (See *note Searching: searching.) Ebib also provides a much
+more sophisticated search and filtering mechanism in the form of
+_virtual databases_.
+
+ A virtual database is a database that is not associated with any
+`.bib' file. Rather, it is created from another database by selecting
+entries from it based on a specific search pattern, called a _filter_.
+This allows you, for example, to select all entries from a database
+that contain the string "Jones" in their `author' field. A filter can
+be as complex as you want: you can select all entries that do _not_
+contain "Jones" in the `author' field, or all entries that contain
+"Jones" in either the `author' or the `editor' field, or all entries
+that contain "Jones" in the `author' field, and "symbiotic hybernation"
+in the `keyword' field, etc. Basically, the filter can consist of an
+arbitray number of search criteria combined with the logical operators
+`and, or' and `not'.
+
+* Menu:
+
+* Simple Selection::
+* Complex Filters::
+* Properties of Virtual Databases::
+
+
+File: ebib-manual.info, Node: Simple Selection, Next: Complex Filters, Prev: Virtual Databases, Up: Virtual Databases
+
+3.10.1 Simple Selection
+-----------------------
+
+Creating a virtual database is simple: press `&', and Ebib will ask you
+for a field to select on, and for a regular expression to select with.
+So if you want to select all entries that contain "Jones" in the
+`author' field, you press `&' and type `author' as the field and
+`Jones' as the regexp to filter on.
+
+ Ebib will then create a virtual database containing the entries
+matching your selection criterion. A virtual database has the same name
+as the database it is based on, prepended with `V:'. It also has a
+number like any other database, and you can move back and forth to
+other databases with the number or cursor keys.
+
+ If you don't want to filter on one specific field but rather want to
+select all entries that match a certain regexp in any field, you can
+type `any' as the field to filter on. So specifying `any' as the field
+and `Jones' as the regexp, the virtual database will select all entries
+that have a field that contains "Jones" in them.
+
+
+File: ebib-manual.info, Node: Complex Filters, Next: Properties of Virtual Databases, Prev: Simple Selection, Up: Virtual Databases
+
+3.10.2 Complex Filters
+----------------------
+
+Once you have a virtual database, it remains associated with the
+database it was created from. This means that you can refine or extend
+the selection (i.e. the filter) that the virtual database is based on.
+If, in the current example, you want to include all the entries that
+have "Jones" in the `editor' field, you have to perform a logical `or'
+operation: you want to select an entry if it contains "Jones" in the
+`author' field (which you already did) _or_ if it contains "Jones" in
+the `editor' field.
+
+ A short sidenote: the first impulse in a case like this might be to
+use `and' instead of `or': after all, you want to select all entries
+that contain "Jones" in the `author' field _and_ all entries that
+contain "Jones" in the `editor' field. However, the filter that you
+build up is used to test each entry _individually_ whether it meets the
+selection criterion. An entry meets the criterion if it contains
+"Jones" in the `author' field _or_ if it contains "Jones" in the
+`editor' field. Therefore, `or' is the required operator in this case.
+If you would use `and', you would only get those entries that contain
+"Jones" in both the `author' _and_ `editor' fields.
+
+ To perform a logical `or' operation, press the key `|'. As before,
+you will be asked which field you want to filter on, and which regexp
+you want to filter with. Ebib will then update the virtual database
+with all entries in the original database that match the additional
+criterion.
+
+ It is also possible to perform a logical `and' on the virtual
+database. Use this if you want to select those entries that contain
+"Jones" in the `author' field and e.g. "symbiotic hybernation" in the
+`keyword' field. A logical `and' operation is done with the key `&'.
+(Note: this is the same key that is used to create a virtual database.
+In fact, you can also create a virtual database with `|': when used in
+a normal database, `&' and `|' are equivalent. They are only different
+in virtual databases.)
+
+ Both the `&' and `|' commands can be used with the negative prefix
+argument `M--' (or `C-u -', which is identical). In this case, the
+search criterion is negated. That is, the negative prefix argument
+performs a logical `not' operation on the search criterion.
+
+ That is, if you want to select all entries from a database that do
+_not_ contain "Jones" in the `author' field, you can do this by typing
+`M-- &' and then filling out the relevant field and regexp. This prefix
+argument is available both in real and in virtual databases.
+
+ There is another way of performing a logical `not' operation, which
+is only available in virtual databases: by pressing the key `~', you
+invert the current filter. That is, if you have a virtual database with
+all the entries containing "Jones" in the `author' or in the `editor'
+field, and you press `~', the selection is inverted, and now contains
+all entries that do _not_ have "Jones" in the `author' or `editor'
+field.
+
+ Although `~' and the negative prefix argument to `&' or `|' both
+perform logical `not' operations, they are _not_ equivalent: `~'
+negates the entire filter built up so far, while the negative prefix
+argument only negates the single selection criterion you enter with it.
+
+ If you want to know what the filter for the current virtual database
+is exactly, you can type `V'. This command displays the current filter
+in the minibuffer. The filter is specified as a Lisp expression,
+meaning that the operators appear before their operands, not in between
+them. That is, `x and y' is written as `(and x y)'.
+
+ With a prefix argument (any prefix argument will do), the command
+`V' not only displays the current filter, but also reapplies it. This
+can be useful when you've made changes to the source database: Ebib
+does not automatically update a virtual database when its source
+database is modified.
+
+
+File: ebib-manual.info, Node: Properties of Virtual Databases, Prev: Complex Filters, Up: Virtual Databases
+
+3.10.3 Properties of Virtual Databases
+--------------------------------------
+
+Virtual databases differ from normal databases in several ways. First,
+they cannot be modified: you cannot add or delete entries, and you
+cannot modify the contents of fields. It is also not possible to import
+entries to them or merge another file with them. Furthermore, it is not
+possible to export entries to them or from them.
+
+ A virtual database cannot be saved in the normal way with `s', and
+the command `S' to save all databases ignores virtual databases. If you
+want to save a virtual database, you can use the command `w'. This
+command not only saves the virtual database, it also changes it into a
+normal database, and detaches it from its original source database, so
+that you can modify it without affecting the source database.
+
+ The command `L' also doesn't work with virtual databases. The reason
+for this is that the virtual database is not associated with an actual
+`.bib' file, so there is no file to create a list of references from.
+However, it is possible to use the command `P' with a virtual database
+to create a list of entries. See *note Printing the Database:
+printing-database, for details on these two commands.
+
+
+File: ebib-manual.info, Node: The Multiline Edit Buffer, Prev: Virtual Databases, Up: Advanced Features
+
+3.11 The Multiline Edit Buffer
+==============================
+
+As mentioned several times before, Ebib has a special multiline edit
+buffer, which is used to edit field values that contain newlines
+(so-called _multiline fields_), and also to edit the contents of the
+`@preamble' command. This section discusses the details of this buffer.
+
+ Ebib enters multiline edit mode in one of three cases: when you
+press `P' in the index buffer, to edit the `@preamble' definition, when
+you hit `l' in the entry buffer to edit the current field as multiline,
+or when you hit `e' on the `annote' field, or on a field whose value
+already is multiline.
+
+ The multiline edit buffer uses a special major mode,
+`ebib-multiline-edit-mode', which is derived from `text-mode'. The
+changes with respect to `text-mode' are minor (see below), which means
+that any customisations you may have made to `text-mode' will be
+available in the multiline edit buffer.
+
+ The settings that are specific for `ebib-multiline-edit-mode' are the
+functions assigned to the key sequences `C-x b', `C-x k' and `C-x C-s'.
+These key sequences do not have their usual functions, but rather are
+redefined to fit Ebib. Both `C-x b' and `C-x k' can be used to leave
+the multiline edit buffer. `C-x b' will store the text as it is to the
+database, while `C-x k' leaves the multiline edit buffer _without_
+storing the text, i.e., the original value of the field or preamble
+that you were editing is retained. If the text in the buffer was
+modified, `C-x k' asks you if you really want to abandon your changes.
+
+ If you leave the multitiline edit buffer with `C-x b' when the
+buffer is empty (i.e., you deleted all the text, including the final
+newline), and you were editing a field value or the `@preamble'
+definition, the field value or preambleis deleted. (This is in fact the
+_only_ way to delete the `@preamble' definition. Field values on the
+other hand can also be deleted by hitting `x' or `d' on them in the
+entry buffer.)
+
+ The third command that is redefined in the multiline edit buffer is
+`C-x C-s'. This command can be used to save the database. Because Ebib
+does not do an autosave of the current database, it is advisable to
+save the database manually every now and then to prevent data loss in
+case of crashes. It would be annoying to have to leave the multiline
+edit buffer every time you want to do this, so `C-x C-s' has been
+redefined to allow you to do this from within the buffer.
+
+
+File: ebib-manual.info, Node: The Ebib Buffers, Next: Customisation, Prev: Advanced Features, Up: Top
+
+4 The Ebib Buffers
+******************
+
+This chapter lists all the key commands that exist in Ebib, with a short
+description and the actual command that they call. The latter
+information is needed if you want to customise Ebib's key bindings. (See
+*note Modifying Key Bindings: modifying-key-bindings.)
+
+* Menu:
+
+* The Index Buffer::
+* The Entry Buffer::
+* The Strings Buffer::
+
+
+File: ebib-manual.info, Node: The Index Buffer, Next: The Entry Buffer, Prev: The Ebib Buffers, Up: The Ebib Buffers
+
+4.1 The Index Buffer
+====================
+
+*`Up'*
+ go to previous entry. `(ebib-prev-entry)'
+
+*`Down'*
+ go to next entry. `(ebib-next-entry)'
+
+*`Right'*
+ move to the next database. `(ebib-next-database)'
+
+*`Left'*
+ move to the previous database. `(ebib-prev-database)'
+
+*`PgUp'*
+ scroll the index buffer down. `(ebib-index-scroll-down)'
+
+*`PgDn'*
+ scroll the index buffer up. `(ebib-index-scroll-up)'
+
+*`Home'*
+ go to first entry. `(ebib-goto-first-entry)'
+
+*`End'*
+ go to last entry. `(ebib-goto-last-entry)'
+
+*`Return'*
+ make the entry under the cursor current. Use after e.g. `C-s'.
+ `(ebib-select-entry)'
+
+*`Space'*
+ equivalent to `PgDn'.
+
+*`1-9'*
+ jump to the corresponding database.
+
+*`/'*
+ search the database. `(ebib-search)'
+
+*`&'*
+ Create a virtual database, or perform a logical `and' on the
+ current virtual database. With negative prefix argument: apply a
+ logical `not' to the selectional criterion. `(ebib-virtual-db-and)'
+
+*`|'*
+ Create a virtual database, or perform a logical `or' on the current
+ virtual database. With negative prefix argument: apply a logical
+ `not' to the selectional criterion. `(ebib-virtual-db-or)'
+
+*`~'*
+ Perform a logical `not' on the current virtual database.
+ `(ebib-virtual-db-not)'
+
+*`a'*
+ add an entry. `(ebib-add-entry)'
+
+*`b'*
+ equivalent to `Pgup'.
+
+*`c'*
+ close the database. `(ebib-close-database)'
+
+*`C'*
+ customise Ebib. `(ebib-customize)'
+
+*`d'*
+ delete the current entry. `(ebib-delete-entry)'
+
+*`; d'*
+ delete all marked entries.
+
+*`e'*
+ edit the current entry. `(ebib-edit-entry)'
+
+*`E'*
+ edit the key of the current entry. `(ebib-edit-keyname)'
+
+*`f'*
+ extract a filename from the `file' field and send it to an
+ appropriate viewer. With numeric prefix argument, extract the
+ _n_-th filename.
+
+*`F'*
+ follow `crossref' field. `(ebib-follow-crossref)'
+
+*`g'*
+ equivalent to `Home'.
+
+*`G'*
+ equivalent to `End'.
+
+*`H'*
+ show/hide hidden fields. `(ebib-toggle-hidden)'
+
+*`j'*
+ equivalent to `Down'.
+
+*`J'*
+ jump to another database. This accepts a numeric prefix argument,
+ but will ask you for a database number if there is none.
+ `(ebib-switch-to-database)'
+
+*`k'*
+ equivalent to `Up'.
+
+*`l'*
+ show the log buffer. (`ebib-show-log')
+
+*`L'*
+ create a LaTeX file from the current database that produces a list
+ of references formatted by BibTeX. `(ebib-latex-database)'
+
+*`; L'*
+ create a LaTeX file with the marked entries only.
+
+*`m'*
+ mark (or unmark) the current entry. `(ebib-mark-entry)'
+
+*`; m'*
+ unmark all marked entries.
+
+*`M'*
+ merge a `.bib' file. `(ebib-merge-bibtex-file)'
+
+*`n'*
+ find next occurrence of the search string. `(ebib-search-next)'
+
+*`N'*
+ search for entries cross-referencing the current one.
+ `(ebib-search-crossref)'
+
+*`C-n'*
+ equivalent to `Down'.
+
+*`M-n'*
+ equivalent to `PgDn'.
+
+*`o'*
+ open a `.bib' file. `(ebib-load-bibtex-file)'
+
+*`p'*
+ push an entry to a LaTeX buffer `(ebib-push-bibtex-key)'
+
+*`; p'*
+ push the marked entries to a LaTeX buffer.
+
+*`C-p'*
+ equivalent to `Up'.
+
+*`M-p'*
+ equivalent to `PgUp'.
+
+*`P'*
+ create a LaTeX file for printing the database, listing the entire
+ contents of each entry. `(ebib-print-database)'
+
+*`; P'*
+ create a LaTeX file with the marked entries.
+
+*`r'*
+ show and edit the `@preamble' definition in the database.
+ `(ebib-edit-preamble)'
+
+*`q'*
+ quit Ebib. This sets all variables to nil, unloads the database(s)
+ and quits Ebib. `(ebib-quit)'
+
+*`s'*
+ save the database. `(ebib-save-current-database)'
+
+*`S'*
+ save all modified databases. `(ebib-save-all-databases)'
+
+*`t'*
+ show and edit the `@string' definitions in the database.
+ `(ebib-edit-strings)'
+
+*`u'*
+ extract a URL from the `url' field and send it to a browser. With
+ numeric prefix argument, extract the _n_-th url.
+
+*`V'*
+ Display the filter of the current virtual database in the
+ minibuffer. With prefix argument: reapply the filter.
+ `(ebib-print-filter)'
+
+*`w'*
+ write the database to a different file. `(ebib-write-database)'
+
+*`x'*
+ export the current entry to a file, or, when used with numeric
+ prefix argument, to another database. `(ebib-export-entry)'
+
+*`; x'*
+ export the marked entries to a file, or, when used with a numeric
+ prefix argument, to another database.
+
+*`C-x b'*
+ equivalent to `z'.
+
+*`C-x k'*
+ equivalent to `q'.
+
+*`X'*
+ export the `@preamble' definition to a file or, when used with a
+ numeric prefix argument, to another database.
+ `(ebib-export-preamble)'
+
+*`z'*
+ move focus away from the Ebib windows. `(ebib-leave-ebib-windows)'
+
+*`Z'*
+ put Ebib in the background. `(ebib-lower)'
+
+ One function is not bound to any key: `ebib-print-filename'.
+
+
+File: ebib-manual.info, Node: The Entry Buffer, Next: The Strings Buffer, Prev: The Index Buffer, Up: The Ebib Buffers
+
+4.2 The Entry Buffer
+====================
+
+*`Up'*
+ go to the previous field. `(ebib-prev-field)'
+
+*`Down'*
+ go to the next field. `(ebib-next-field)'
+
+*`PgUp'*
+ go to the previous set of fields. `(ebib-goto-prev-set)'
+
+*`PgDn'*
+ go to the next set of fields. `(ebib-goto-next-set)'
+
+*`Home'*
+ go to the first field. `(ebib-goto-first-field)'
+
+*`End'*
+ go to the last field. `(ebib-goto-last-field)'
+
+*`Space'*
+ equivalent to `PgDn'.
+
+*`b'*
+ equivalent to `PgUp'.
+
+*`c'*
+ copy the contents of the current field to the kill ring.
+ `(ebib-copy-field-contents)'
+
+*`d'*
+ delete the value of the current field. The deleted contents will
+ _not_ be put in the kill ring, and is therefore irretrievably
+ lost. `(ebib-delete-field-contents)'
+
+*`e'*
+ edit the current field. `(ebib-edit-fields)'
+
+*`f'*
+ extract a filename from the current field and send it to an
+ appropriate viewer. With numeric prefix argument, extract the
+ _n_-th filename.
+
+*`g'*
+ equivalent to `Home'.
+
+*`G'*
+ equivalent to `End'.
+
+*`j'*
+ go to the next field. `(ebib-next-field)'
+
+*`k'*
+ go to the previous field. `(ebib-prev-field)'
+
+*`l'*
+ edit the current field as multiline. `(ebib-edit-multiline-field)'
+
+*`C-n'*
+ equivalent to `Down'.
+
+*`M-n'*
+ equivalent to `PgDn'.
+
+*`C-p'*
+ equivalent to `Up'.
+
+*`M-p'*
+ equivalent to `PgUp'.
+
+*`q'*
+ quit editing the current entry and return focus to the index
+ buffer. `(ebib-quit-entry-buffer)'
+
+*`r'*
+ toggle a field's "raw" status. `(ebib-toggle-raw)'
+
+*`s'*
+ insert an abbreviation from the `@string' definitions in the
+ database. `(ebib-insert-abbreviation)'
+
+*`u'*
+ extract a URL from the current field and send it to a browser. With
+ numeric prefix argument, extract the _n_-th url.
+
+*`x'*
+ cut the contents of the current field. Like `c', `x' puts the
+ contents of the current field in the kill ring.
+ `(ebib-cut-field-contents)'
+
+*`y'*
+ yank the last element in the kill ring to the current field.
+ Repeated use of `y' functions like `C-y/M-y'. Note that no text
+ will be yanked if the field already has a value.
+ `(ebib-yank-field-contents)'
+
+
+File: ebib-manual.info, Node: The Strings Buffer, Prev: The Entry Buffer, Up: The Ebib Buffers
+
+4.3 The Strings Buffer
+======================
+
+*`Up'*
+ go to the previous string. `(ebib-prev-string)'
+
+*`Down'*
+ go to the next string. `(ebib-next-string)'
+
+*`PgUp'*
+ go ten strings up. `(ebib-strings-page-up)'
+
+*`PgDn'*
+ go ten strings down. `(ebib-strings-page-down)'
+
+*`Home'*
+ go to the first string. `(ebib-goto-first-string)'
+
+*`End'*
+ go to the last string. `(ebib-goto-last-string)'
+
+*`Space'*
+ equivalent to `PgDn'.
+
+*`a'*
+ add a new `@string' definition. `(ebib-add-string)'
+
+*`b'*
+ equivalent to `PgUp'.
+
+*`c'*
+ copy the text of the current string to the kill ring.
+ `(ebib-copy-string-contents)'
+
+*`d'*
+ delete the current `@string' definition from the database. You
+ will be asked for confirmation. `(ebib-delete-string)'
+
+*`e'*
+ edit the value of the current string. `(ebib-edit-string)'
+
+*`g'*
+ equivalent to `Home'.
+
+*`G'*
+ equivalent to `End'.
+
+*`j'*
+ equivalent to `Down'.
+
+*`k'*
+ equivalent to `Up'.
+
+*`l'*
+ edit the value of the current string as multiline.
+ `(ebib-edit-multiline-string)'
+
+*`C-n'*
+ equivalent to `Down'.
+
+*`M-n'*
+ equivalent to `PgDn'.
+
+*`C-p'*
+ equivalent to `Up'.
+
+*`M-p'*
+ equivalent to `PgUp'.
+
+*`q'*
+ quit the strings buffer and return focus to the index buffer.
+ `(ebib-quit-strings-buffer)'
+
+*`x'*
+ export the current `@string' definition to a file or, when used
+ with a prefix argument, to another database. `(ebib-export-string)'
+
+*`X'*
+ export all the `@string' definitions to a file or, when used with a
+ prefix argument, to another database. `(ebib-export-all-strings)'
+
+
+File: ebib-manual.info, Node: Customisation, Prev: The Ebib Buffers, Up: Top
+
+5 Customisation
+***************
+
+Ebib can be customised through Emacs' standard customisation interface.
+The only thing that cannot be customised in this way are the key
+bindings. If you wish to customise those, you have to use the file
+`~/.ebibrc'.
+
+* Menu:
+
+* The Customisation Buffer::
+* Modifying Key Bindings::
+
+
+File: ebib-manual.info, Node: The Customisation Buffer, Next: Modifying Key Bindings, Prev: Customisation, Up: Customisation
+
+5.1 The Customisation Buffer
+============================
+
+Ebib's customisation group is a subgroup of the `Tex' group. It can be
+invoked by typing `M-x customize-group RET ebib RET', or by pressing
+`C' in the index buffer. This chapter gives a short description of all
+the options available in the customisation buffer.
+
+* Menu:
+
+* Default Type::
+* Preload Bib Files::
+* Additional Fields::
+* Layout::
+* Index Window Size::
+* Index Display Fields::
+* Insertion Commands::
+* Sort Order::
+* Save Xrefs First::
+* Crossref Face::
+* Marked Face::
+* Use Timestamp::
+* Timestamp Format::
+* Standard Url Field::
+* Url Regexp::
+* Browser Command::
+* Standard File Field::
+* File Associations::
+* File Regexp::
+* File Search Dirs::
+* Print Preamble::
+* Print Multiline::
+* Latex Preamble::
+* Print Tempfile::
+* Allow Identical Fields::
+* Entry Types::
+
+
+File: ebib-manual.info, Node: Default Type, Next: Preload Bib Files, Prev: The Customisation Buffer, Up: The Customisation Buffer
+
+5.1.1 Default Type
+------------------
+
+The default type is the default entry type given to a new entry. Every
+entry in the Ebib database must have a type, because the type defines
+which fields are available. When a new entry is created, Ebib gives it
+a default type, which can be customised through this option. The
+standard value is `article'.
+
+
+File: ebib-manual.info, Node: Preload Bib Files, Next: Additional Fields, Prev: Default Type, Up: The Customisation Buffer
+
+5.1.2 Preload Bib Files
+-----------------------
+
+This option allows you to specify which file(s) Ebib is to load when it
+starts up. Specify one file per line, press the `INS' button to add more
+files. You can complete a partial filename with `M-TAB'.
+
+
+File: ebib-manual.info, Node: Additional Fields, Next: Layout, Prev: Preload Bib Files, Up: The Customisation Buffer
+
+5.1.3 Additional Fields
+-----------------------
+
+The additional fields are those fields that are available for all entry
+types, and which BibTeX generally ignores. This option allows you to
+specify which additional fields you wish to use in your database.
+Specify one field per line, press the `INS' button to add more fields.
+
+ By default, the following additional fields are defined: `crossref,
+url, annote, abstract, keywords, file' and `timestamp'.
+
+
+File: ebib-manual.info, Node: Layout, Next: Index Window Size, Prev: Additional Fields, Up: The Customisation Buffer
+
+5.1.4 Layout
+------------
+
+The default value of this option is `full', which means that Ebib takes
+over the entire frame when it runs. Alternatively, you can select to
+specify a width (in characters) yourself, in which case Ebib takes up
+the right part of the frame, leaving the left part free. See *note
+Screen Layout: screen-layout. for details.
+
+
+File: ebib-manual.info, Node: Index Window Size, Next: Index Display Fields, Prev: Layout, Up: The Customisation Buffer
+
+5.1.5 Index Window Size
+-----------------------
+
+This option lets you specify the size of the index window at the top of
+the Ebib screen. The default value is 10.
+
+
+File: ebib-manual.info, Node: Index Display Fields, Next: Insertion Commands, Prev: Index Window Size, Up: The Customisation Buffer
+
+5.1.6 Index Display Fields
+--------------------------
+
+This option allows you to specify fields that should be displayed next
+to the entry key in the index buffer. By default, the index buffer only
+shows the key of each entry, but if this is too little information, you
+can use this option to display e.g. the title of each entry as well.
+
+
+File: ebib-manual.info, Node: Insertion Commands, Next: Sort Order, Prev: Index Display Fields, Up: The Customisation Buffer
+
+5.1.7 Insertion Commands
+------------------------
+
+With the command `ebib-insert-bibtex-key' or with the command key `p'
+in the index buffer, you can insert a BibTeX key into a LaTeX buffer.
+This option allows you to define the commands that are available
+through tab completion when these functions ask for a citation command.
+
+ The citation commands must be given _without_ the leading backslash,
+as Ebib adds one. Furthermore, you need to specify how many optional
+arguments each command can have. When Ebib prompts you for a citation
+key, it will ask for as many optional arguments as you specify here.
+(If you don't want to be asked for those optional arguments, just fill
+in 0.)
+
+ When Ebib prompts you for a citation command, the commands specified
+in this option can be obtained through tab completion. However, it is
+not necessary to fill in a command from this list here. You can also
+enter another command (in which case Ebib asks for exactly one optional
+argument) or even no command at all. In the latter case, Ebib does not
+ask for any optional arguments and simply puts the key in the buffer
+without adding a backslash or curly braces.
+
+
+File: ebib-manual.info, Node: Sort Order, Next: Save Xrefs First, Prev: Insertion Commands, Up: The Customisation Buffer
+
+5.1.8 Sort Order
+----------------
+
+The use of this option is explained above, see *note Sorting the .bib
+file: sorting-bib-file. To create a sort order, click the `INS' button
+to create a sort level, and then click the `INS' button under that sort
+level to enter a sort field. If you want to add more than one sort
+field to the sort level, simply hit `INS' again.
+
+
+File: ebib-manual.info, Node: Save Xrefs First, Next: Crossref Face, Prev: Sort Order, Up: The Customisation Buffer
+
+5.1.9 Save Xrefs First
+----------------------
+
+For cross-referencing to work, the cross-referencing entries must
+appear in the `.bib' file _before_ the cross-referenced entries. In
+order to tell Ebib to save all entries with a `crossref' field first,
+you must set the option `Save Xrefs First' in Ebib's customisation
+buffer. With this option set, BibTeX's crossreferencing options work as
+intended.
+
+ By default, this option is unset, because it (marginally) slows down
+saving the `.bib' file somewhat.
+
+
+File: ebib-manual.info, Node: Crossref Face, Next: Marked Face, Prev: Save Xrefs First, Up: The Customisation Buffer
+
+5.1.10 Crossref Face
+--------------------
+
+Field values inherited from a cross-referenced entry are marked with
+this face. By default, the face has red as foreground colour.
+
+
+File: ebib-manual.info, Node: Marked Face, Next: Use Timestamp, Prev: Crossref Face, Up: The Customisation Buffer
+
+5.1.11 Marked Face
+------------------
+
+When entries are marked (with `m'), they are highlighted in this face.
+By default, GNU Emacs uses the text property `highlight'. XEmacs only
+allows this on terminals, therefore it displays marked entries with a
+red background and a white foreground colour. This option allows you to
+change these defaults.
+
+
+File: ebib-manual.info, Node: Use Timestamp, Next: Timestamp Format, Prev: Marked Face, Up: The Customisation Buffer
+
+5.1.12 Use Timestamp
+--------------------
+
+If this option is set, Ebib will add a `timestamp' field to every new
+entry, recording the date and time it was added to the database. See
+*note Timestamps: timestamps.
+
+
+File: ebib-manual.info, Node: Timestamp Format, Next: Standard Url Field, Prev: Use Timestamp, Up: The Customisation Buffer
+
+5.1.13 Timestamp Format
+-----------------------
+
+This option specifies the format string that is used to create the
+timestamp. The format string is used by `format-time-string' to create
+a time representation. The default value is `"%a %b %e %T %Y"', which
+produces a timestamp of the form `"Mon Mar 12 01:03:26 2007"'. See the
+documentation for `format-time-string' for the forms that the format
+string can take.
+
+
+File: ebib-manual.info, Node: Standard Url Field, Next: Url Regexp, Prev: Timestamp Format, Up: The Customisation Buffer
+
+5.1.14 Standard Url Field
+-------------------------
+
+This is the field that Ebib searches for URLs if you press `u' in the
+index buffer. Its default value is `url'.
+
+
+File: ebib-manual.info, Node: Url Regexp, Next: Browser Command, Prev: Standard Url Field, Up: The Customisation Buffer
+
+5.1.15 Url Regexp
+-----------------
+
+This is the regular expression that Ebib uses to search for URLs in a
+field. The default value is:
+
+
+ \\url{\(.*\)}\|https?://[^ '<>\"\n\t\f]+
+
+ With this regular expression, Ebib considers everything that is in a
+LaTeX `\url{...}' command as a URL, and furthermore every string of
+text that starts with `http://' or `https://' and does not contain
+whitespace or one of the characters `' " <' or `>'.
+
+
+File: ebib-manual.info, Node: Browser Command, Next: Standard File Field, Prev: Url Regexp, Up: The Customisation Buffer
+
+5.1.16 Browser Command
+----------------------
+
+If this option is unset (which is the default), Ebib uses the Emacs
+function `browse-url' to start a browser. If this function does not
+exist, you can set this option. For example, if you use the Firefox
+browser, set this option to `firefox'.
+
+ For this to work, the browser that you use must be able to handle a
+URL on the command line.
+
+
+File: ebib-manual.info, Node: Standard File Field, Next: File Associations, Prev: Browser Command, Up: The Customisation Buffer
+
+5.1.17 Standard File Field
+--------------------------
+
+This is the field that Ebib searches for filenames if you press `f' in
+the index buffer. Its default value is `file'.
+
+
+File: ebib-manual.info, Node: File Associations, Next: File Regexp, Prev: Standard File Field, Up: The Customisation Buffer
+
+5.1.18 File Associations
+------------------------
+
+The programs used to view files. By default, programs for `.pdf' and
+`.ps' files are specified, which should be available on most linux
+systems. If you prefer other programs or are running on Windows, you'll
+can specify them here. Note that Ebib searches the PATH for the
+programs, but you can also specify full path names. Of course, it is
+also possible to add new associations.
+
+ Note that GNU/Emacs 23 (as yet unreleased) comes with
+`doc-view-mode', which provides a way to view `.pdf' and `.ps' files
+inside Emacs. (The files are converted to `.png' format first.) If you
+prefer to use this mode, simply leave the program field blank for the
+relevant file type.
+
+
+File: ebib-manual.info, Node: File Regexp, Next: File Search Dirs, Prev: File Associations, Up: The Customisation Buffer
+
+5.1.19 File Regexp
+------------------
+
+In order to find files in a field, Ebib uses a regular expression. The
+default value is:
+
+
+ [^?|\:*<>\" \n\t\f]+
+
+ This essentially means that every string of characters not
+containing any of the characters
+
+
+ ? | \ : * < > "
+
+ or space, newline, tab of formfeed. URLs can easily by recognised by
+the prefix `http:', but recognising files is not so straightforward. It
+is therefore not advisable to put anything but filenames in the `file'
+field.
+
+
+File: ebib-manual.info, Node: File Search Dirs, Next: Print Preamble, Prev: File Regexp, Up: The Customisation Buffer
+
+5.1.20 File Search Dirs
+-----------------------
+
+This is the list of directories that Ebib searches for files. Note that
+searching is not recursive: only the files listed here are searched, not
+their subdirectories.
+
+
+File: ebib-manual.info, Node: Print Preamble, Next: Print Multiline, Prev: File Search Dirs, Up: The Customisation Buffer
+
+5.1.21 Print Preamble
+---------------------
+
+This option specifies the preamble that is to be added to the LaTeX file
+Ebib creates for printing the database (i.e., the `P' command). By
+default, the preamble is empty. You can set your own `\usepackage'
+commands, or anything else you may need.
+
+
+File: ebib-manual.info, Node: Print Multiline, Next: Latex Preamble, Prev: Print Preamble, Up: The Customisation Buffer
+
+5.1.22 Print Multiline
+----------------------
+
+When this options is set, Ebib includes multiline field values when it
+creates a LaTeX file with `P' (`ebib-print-database'). When unset,
+multiline values are excluded, which saves space. By default, this
+option is unset.
+
+
+File: ebib-manual.info, Node: Latex Preamble, Next: Print Tempfile, Prev: Print Multiline, Up: The Customisation Buffer
+
+5.1.23 Latex Preamble
+---------------------
+
+This option specifies the preamble to be added to the LaTeX file for
+creating a list of references from the database (i.e., the `L'
+command). By default, the line `\bibliographystyle{plain}' is put in the
+preamble, but you may want to specify your own BibTeX packages and
+options.
+
+
+File: ebib-manual.info, Node: Print Tempfile, Next: Allow Identical Fields, Prev: Latex Preamble, Up: The Customisation Buffer
+
+5.1.24 Print Tempfile
+---------------------
+
+This option specifies the name and location of the temporary file Ebib
+creates with the commands `ebib-print-database' and
+`ebib-latex-database'. By default, this option has no value, which
+means that Ebib will ask for a filename each time either of these
+commands is called.
+
+
+File: ebib-manual.info, Node: Allow Identical Fields, Next: Entry Types, Prev: Print Tempfile, Up: The Customisation Buffer
+
+5.1.25 Allow Identical Fields
+-----------------------------
+
+If this option is set, Ebib stores the values of multiple occurrences
+of a single field within an entry in a single occurrence of that field,
+separated by semicolons. By default, this option is unset, because it
+slows down the loading of `.bib' files. See *note Multiple Identical
+Fields: multiple-identical-fields.
+
+
+File: ebib-manual.info, Node: Entry Types, Prev: Allow Identical Fields, Up: The Customisation Buffer
+
+5.1.26 Entry Types
+------------------
+
+This option allows you to customise the entry types that Ebib uses. Each
+entry type has a name, a set of obligatory fields and a set of optional
+fields. You can add, alter or delete single fields in an entry type, or
+whole entry types.
+
+ If you want to add an entry type, hit the `INS' key on the top level
+and give the new entry a name, then add obligatory and/or optional
+fields. It is not necessary that an entry type has both obligatory and
+optional fields, you can define an entry that has only obligatory or
+only optional fields.
+
+
+File: ebib-manual.info, Node: Modifying Key Bindings, Prev: The Customisation Buffer, Up: Customisation
+
+5.2 Modifying Key Bindings
+==========================
+
+If you are unhappy about Ebib's standard key bindings, you can change
+them to anything you like. To do this, you have to create a file
+`~/.ebibrc' and write your preferred key bindings in it. A key binding
+definition is built up as follows:
+
+
+ (ebib-key <buffer> <key> <command>)
+
+ `<buffer>' is either `index', `entry' or `strings', for the
+corresponding buffer. `<key>' is a standard Emacs key description, and
+`<command>' is the Ebib command to be associated with the key. The
+commands that can be used here are listed in *note The Ebib Buffers:
+ebib-buffers. Note that it is possible to bind more than one key to a
+single function: just add as many `ebib-key' statements as necessary.
+
+ As an example, the following binds `C-s' to `ebib-search' in the
+index buffer, so that the database can be searched with `C-s' as well
+as with `/':
+
+
+ (ebib-key index "\C-s" ebib-search)
+
+ If you want to unbind a key, you can simply leave out `<command>'.
+So if you want to bind the command `ebib-delete-entry' to `D' rather
+than `d', you need to put the following in `.ebibrc':
+
+
+ (ebib-key index "D" ebib-delete-entry)
+ (ebib-key index "d")
+
+ The first line binds `D' to the command `ebib-delete-entry'. The
+second line unbinds `d'.
+
+ If a command can be called with a prefix key (as for example
+`ebib-delete-entry' can), `ebib-key' will automatically rebind the
+prefixed version as well. So in the example above, the first line not
+only binds `D', it also binds `; D'. Similarly, the second line not
+only unbinds `d', but also `; d'.
+
+ It is also possible to redefine the prefix key itself. To do this,
+you must specify `mark-prefix' for `<buffer>'. The value of `<command>'
+is irrelevant here, so it can be left out:
+
+
+ (ebib-key mark-prefix ":")
+
+ This sets up `:' as the new prefix key. Doing this automatically
+unbinds the existing prefix key.
+
+
+
+Tag Table:
+Node: Top306
+Node: Installation1617
+Node: Basic Usage3491
+Node: Getting Started4888
+Node: Opening a `.bib' file5998
+Node: Navigating a `.bib' file7877
+Node: Starting a New `.bib' File11112
+Node: Editing the Database11577
+Node: Adding and Deleting Entries12036
+Node: Editing Fields Values13302
+Node: Editing Multiline Values15775
+Node: Copy18126
+Node: Saving a Database19243
+Ref: saving-database19405
+Node: Searching20522
+Ref: searching20665
+Node: LaTeX Integration22865
+Node: Consulting databases from within a LaTeX file25311
+Node: Cross-referencing27912
+Ref: cross-referencing28083
+Node: Printing the Database30419
+Ref: printing-database30596
+Node: Marking Entries34409
+Node: Calling a Browser35969
+Node: Viewing Files38119
+Node: Advanced Features40505
+Node: Screen Layout41118
+Ref: screen-layout41285
+Node: Preloading `.bib' Files42823
+Node: `@Preamble' Definition43382
+Node: `@String' Definitions45672
+Node: Sorting the `.bib' file49149
+Ref: sorting-bib-file49348
+Node: Merging and Importing52352
+Node: Exporting Entries53738
+Node: Timestamps55949
+Ref: timestamps56109
+Node: Multiple Identical Fields57700
+Ref: multiple-identical-fields57890
+Node: Virtual Databases59817
+Ref: virtual-databases60008
+Node: Simple Selection61101
+Node: Complex Filters62241
+Node: Properties of Virtual Databases66271
+Node: The Multiline Edit Buffer67611
+Ref: multiline-edit-buffer67784
+Node: The Ebib Buffers70188
+Ref: ebib-buffers70336
+Node: The Index Buffer70675
+Node: The Entry Buffer75718
+Node: The Strings Buffer78064
+Node: Customisation79808
+Ref: customisation79924
+Node: The Customisation Buffer80208
+Ref: customisation-buffer80399
+Node: Default Type81184
+Node: Preload Bib Files81667
+Ref: preload-bib-files81846
+Node: Additional Fields82049
+Ref: additional-fields82222
+Node: Layout82629
+Ref: layout82780
+Node: Index Window Size83102
+Node: Index Display Fields83393
+Ref: index-display-fields83587
+Node: Insertion Commands83872
+Ref: insertion-commands84055
+Node: Sort Order85161
+Node: Save Xrefs First85654
+Ref: save-xrefs-first85824
+Node: Crossref Face86284
+Ref: crossref-face86451
+Node: Marked Face86583
+Ref: marked-face86743
+Node: Use Timestamp87050
+Node: Timestamp Format87387
+Node: Standard Url Field87933
+Ref: standard-url-field88114
+Node: Url Regexp88227
+Ref: url-regexp88391
+Node: Browser Command88799
+Ref: browser-command88974
+Node: Standard File Field89315
+Ref: standard-file-field89505
+Node: File Associations89624
+Ref: file-associations89806
+Node: File Regexp90475
+Ref: file-regexp90642
+Node: File Search Dirs91104
+Ref: file-search-dirs91278
+Node: Print Preamble91446
+Node: Print Multiline91869
+Node: Latex Preamble92266
+Node: Print Tempfile92720
+Node: Allow Identical Fields93176
+Ref: allow-identical-fields93368
+Node: Entry Types93685
+Ref: entry-types93832
+Node: Modifying Key Bindings94371
+Ref: modifying-key-bindings94536
+
+End Tag Table
+
+
+Local Variables:
+coding: iso-8859-1
+End:
diff --git a/biblio/bibtex/utils/findbib/README b/biblio/bibtex/utils/findbib/README
new file mode 100644
index 0000000000..32a23b5e2c
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/README
@@ -0,0 +1,73 @@
+The simple shell script, findbib, gets a latex source file and finds the needed bibtex
+records in the physics archive at WWW-SPIRES.SLAC.STANFORD.EDU.
+
+References must be in one of the following forms:
+
+ - A SPIRES key: eg. \cite{Witten:1996ep}
+ - A new arXiv number: eg. \cite{0704.0001}
+ - An old arXiv number: eg. \cite{hep-th/9703030} or \cite{9703030}.
+
+SPIRES has provided a unique "two letter label" attached to each paper following the
+Author:Year identification. For example, "ep" in Witten:1997ep. Of course, one has
+to look on SPIRES to know them. However, eprint numbers, like hep-th/yymmxxx,
+yymmxxx and yymm.xxxx, are also supported labels. This allows you to retrieve the
+full record from just the arxiv numbers.
+If no arxiv name is specified, the scripts will search hep-th by default. This behaviour
+can be changed by editing the script.
+
+The scripts use awk, sed, lynx, bibtex and sometimes latex to generate the aux file.
+(Note that this shell script runs only under *nix.)
+
+Further details inside the files.
+
+Let me know of suggestions, improvements at:
+billnaai[~at~]gmail{-dot-}com
+
+1) Useage
+
+findbib [-a] filename.tex
+
+If the option -a is selected, the script will only add new citations. The default be-
+haviour is to create a new bibliography with all the citations.
+
+
+2) Installation
+
+After you untar it:
+
+tar xzvf findbib.tar.gz,
+
+just put findbib on your path and render it executable:
+
+chmod u+x findbib
+
+You also need to install awk, sed, lynx and ofcourse latex.
+(There is also a file, example.tex, that you can test the script on).
+
+3) Acknowledgements
+
+This script is a modified version of the script originally by Fabrizio Nesti.
+
+From the original script by Fabrizio Nesti:
+And thanks to Hrvoje 'Harv' Galic at SPIRES for collaboration!
+
+
+----------------------------------
+#######################################################################
+#
+# Findbib is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation (version 2)
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#######################################################################
+
+
diff --git a/biblio/bibtex/utils/findbib/addbib b/biblio/bibtex/utils/findbib/addbib
new file mode 100644
index 0000000000..ae3603b85d
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/addbib
@@ -0,0 +1,281 @@
+#!/bin/bash -f
+# ADDBIB 0.2, Aug, 2007 K. Goldstein
+VERSION=0.2
+#
+#######################################################################
+#
+# ADDBIB 0.1, Feb, 2007 K. Goldstein
+# (based on FINDBIB 2.0 by F. Nesti).
+#
+# Usage: findbib foo.tex
+#
+# The script searchs for new citations in a latex AUX file and adds them to
+# a bibtex database. If the latex file is called foo.tex it assumes the bibtex file is
+# called foo.bib
+#
+# Every \cite{...} of a reference in SPIRES-Bibtex standard form
+# (Author:YEARaa) or in the form of an arXiv reference
+# (arXive-name/yymmnnn OR yymmnnn OR yymm.nnnn)
+# is searched in WWW-SPIRES.SLAC.STANFORD.EDU and all the bibtex records
+# added the file foo.BIB
+#
+# The value of the variable ARXIV sets the default arxiv to search if the
+# cite is of the form \cite{yymmxxx}
+#
+# To change the default arxiv change the value below:
+ARXIV='hep-th/'
+#ARXIV='hep-ph/'
+#
+####################################################################
+#
+# The script uses awk, sed, lynx, bibtex and somes LaTeX. You will have to install
+# these to make sure it works.
+#
+####################################################################
+# How the scrip works:
+#
+#
+# Steps:
+#
+# Generate an AUX file with LaTeX,
+# searches the AUX file for labels,
+# compares them with the records in the file $1.bib
+# searches SPIRES for new records,
+# adds them in $1.bib
+# calls BibTeX on the file (!).
+#
+#######################################################################
+#
+# ADDBIB 0.2, May, 2007 K. Goldstein
+#
+# add suport for the new arxiv format yymm.xxxx
+#
+#######################################################################
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation (version 2)
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+########################################
+#
+# Useful functions
+
+ #######################
+ # randomly pick a mirror
+ ######################
+
+get_url() {
+#cycle through the mirrors randomly
+ MIRRORS=("http://www-library.desy.de" "http://www-spires.fnal.gov" "http://usparc.ihep.su" "http://www-spires.dur.ac.uk" "http://www.yukawa.kyoto-u.ac.jp" "http://www.slac.stanford.edu" "http://www.spires.lipi.go.id")
+ element_count=${#MIRRORS[@]}
+ let mirror=$RANDOM%$element_count
+ BASE=${MIRRORS[$mirror]}
+ echo Querying $BASE
+ #####################
+ eval "$1=$BASE"/spires/find/hep/www?""
+}
+
+get_labels() {
+# extract the labels from the .aux file
+echo "---------- EXTRACTING LABELS FROM $FILE: -------------"
+
+awk -F"}" '/\\citation\{/ {for(i=1;i<NF+1;i++) print $i}' $FILE | \
+awk '/\\citation\{/ {print substr($0,match($0,/\\citation\{/)+RLENGTH,length)}'\
+ - | sort -u | tee bib.labels_a
+
+echo "---------- EXTRACTING RECORDS FROM $BIB: -------------"
+
+
+awk -F"{" '/Article/ {print $2}' $BIB | sed -e's/,//g' | sort | tee bib.labels_b
+
+echo "---------- FINDING NEW LABELS: -------------"
+
+while read label_a
+do
+ if [[ ! `grep $label_a bib.labels_b` ]]
+ then
+ echo $label_a | tee -a bib.labels
+ fi
+done < bib.labels_a
+
+rm -f bib.labels_a bib.labels_b
+
+nothing_new=0
+
+if [[ ! -f bib.labels ]]
+then
+ nothing_new=1
+fi
+}
+
+########################################################
+
+# Process the input parameters
+
+if [ $1 ]
+then
+ if test -f $1
+ then
+ TEXF=${1%.tex}
+ latex $1
+ FILE=${1%.tex}.aux
+ BIB=${1%.tex}.bib
+ else
+ echo "No such file $1."
+ exit
+ fi
+else
+ echo "usage: findbib texfile.tex"
+ exit
+fi
+echo $TEXF $FILE $BIB
+
+# extract the labels from the .aux file
+
+get_labels
+
+if [ $nothing_new -eq 1 ]
+then
+ echo "No new citations"
+ exit
+else
+# start getting the records from spires
+
+ echo "---------- REQUESTING RECORDS FROM spires.slac.stanford.edu:"
+# echo "%%" >> $BIB
+# echo "%% NEW RECORDS FOR $FILE. GENERATED BY FINDBIB 2.1 ON" \
+# `date +"%x, AT %X."`>>$BIB
+# echo "%%" >> $BIB
+
+ while read label
+ do
+ echo "------------------------------------------------------------"
+ flag=0
+ echo "Searching for label:"
+ ###########################################
+ # is the record of the form Author:yyyyxx ?
+ ###########################################
+ if [[ $label = *:[0-9][0-9][0-9][0-9][a-z][a-z]* ]]
+ then
+ LABEL=`echo $label | sed -es=:=/=`
+ AUTHOR=${LABEL%/*}
+ DATE=`echo ${LABEL#*/} | sed -e's=[a-z]*$==' `
+ KEY=`echo ${LABEL#*/} | sed -e's=^....==' `
+ # add a space in two word names:
+ AUTHOR_SPACE=`echo $AUTHOR | sed -e 's/\([a-z]\)\([A-Z]\)/\1 \2/g' `
+ #AUTHOR_SPACE=`echo $AUTHOR | sed 's/\([a-z]\)\([A-Z]\)/\1 \2/g'`
+ SEARCH=A+$AUTHOR_SPACE+AND+DATE+$DATE
+ echo $AUTHOR_SPACE $DATE $KEY
+ ###########################################
+ # is the record of the form *-*:yymmxxx ?
+ ###########################################
+ elif [[ $label = *-*/[0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $label"
+ echo $label
+ ###########################################
+ # is the record of the form yymmxxx ?
+ ###########################################
+ elif [[ $label = [0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $ARXIV$label"
+ echo $label
+ ###########################################
+ # is the record of the new form yymm.xxxx ?
+ ###########################################
+ elif [[ $label = [0-9][0-9][0-9][0-9]\.[0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $label"
+ echo $label
+ ###########################################
+ # is the record some other format ?
+ ###########################################
+ else
+ echo $label: PERSONAL LABEL
+ flag=1
+ fi
+
+ i=0; NN=0
+
+ # start a loop to search through the results
+
+ while test $flag = "0"
+ do
+
+ # download the webpage from spires:
+ get_url URL
+ #URL="http://www-spires.slac.stanford.edu/spires/find/hep/www?"
+ OPTIONS="rawcmd=$SEARCH&skip=$i&FORMAT=wwwbriefbibtex"
+ lynx -source "$URL$OPTIONS" | sed -e '/@Article{/ s/ //g' > out
+
+ # increment our search - there are 25 results/page
+ let i=i+25
+ # find out the number of hits for our search
+ if [[ $NN -eq 0 ]]
+ then
+ if [[ `grep Paper out` ]]
+ then
+ NN=`grep Paper out | sed -e 's/^.*of <b>\([0-9]*\).*/\1/' | sort -u`
+ fi
+ echo $NN "record(s) found"
+ fi
+ if [[ $NN -gt 25 ]]
+ then
+ echo "Searching-----> " $i
+ fi
+ # check to see if there are no results:
+ if [[ $NN -eq 0 ]]
+ then
+ flag=1
+ echo " PAPER NOT FOUND."
+ # check to see if the label we want is on the page:
+ elif [[ ! `grep $label out` = "" ]]
+ then
+ flag=1
+ echo "Found:"
+ if [[ $SEARCH = EPRINT* ]]
+ then
+ if [[ ! `grep "<!-- START RESULTS -->" out` = "" ]]
+ then
+ echo "@Article{$label," >> $BIB
+ awk '/@Article\{/,/^}/' out | awk '!/@Article/' - \
+ | tee -a $BIB \
+ | grep title | sed 's/ */ /g'
+ else
+ echo "PAPER NOT FOUND"
+ fi
+ else
+ awk /$label/,'/^}/' out \
+ | tee -a $BIB \
+ | grep title | sed 's/ */ /g'
+ fi
+ # check to see if there are papers left:
+ elif [[ $i -gt $NN ]]
+ then
+ flag=1
+ echo " PAPER NOT FOUND."
+ fi
+
+ done
+
+
+done < bib.labels
+
+# clean up
+rm -f bib.labels out
+
+echo "---------- DONE. RECORDS WRITTEN TO $BIB."
+echo "---------- NOW RUNNING BIBTEX:"
+
+bibtex $TEXF
+
+fi
diff --git a/biblio/bibtex/utils/findbib/documentation.pdf b/biblio/bibtex/utils/findbib/documentation.pdf
new file mode 100644
index 0000000000..5b20117c41
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/documentation.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/findbib/documentation.tex b/biblio/bibtex/utils/findbib/documentation.tex
new file mode 100644
index 0000000000..8eee9ac6dc
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/documentation.tex
@@ -0,0 +1,82 @@
+\documentclass{article}
+\usepackage{times}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\setlength\parskip{\medskipamount}
+\setlength\parindent{0pt}
+\usepackage{color}
+\usepackage{hyperref}
+\newcommand{\findbib}{\texttt{findbib} }
+
+
+\makeatletter
+
+\begin{document}
+\author{Kevin Goldstein}
+\title{Findbib documentation\date{}}
+
+\maketitle
+
+The simple shell script, \texttt{findbib}, gets a latex source file and finds the needed
+bibtex records in the physics archive at
+WWW-SPIRES.SLAC.STANFORD.EDU.\footnote{
+ \textcolor{red}{Note that this shell script runs only under *nix}.}
+
+References must be in one of the following forms:
+\begin{itemize}
+\item A SPIRES key: eg. \textbackslash{}cite\{Witten:1997ep\}
+\item A new arXiv number: eg. \textbackslash{}cite\{0704.0001\}
+\item An old arXiv number: eg. \textbackslash{}cite\{hep-th/9703030\}
+ or \textbackslash{}cite\{9703030\}.
+\end{itemize}
+
+SPIRES has provided a unique ``two letter label'' attached to each paper following the
+Author:Year identification. For example, ``ep'' in Witten:1997ep. Of course, one has to
+look on SPIRES to know them. However, eprint numbers, like hep-th/yymmxxx, yymmxxx and
+yymm.xxxx, are also supported labels. This allows you to retrieve the full
+record from just the arxiv numbers.
+
+If no arxiv name is specified, the scripts will search
+hep-th by default. This behaviour can be changed by editing the script.
+
+
+The scripts use awk, sed, lynx, bibtex and sometimes
+\LaTeX~to generate the \texttt{.aux} file. Further details inside the files.
+
+Let me know of suggestions, improvements at:
+
+\texttt{billnaai{[}\textasciitilde{}at\textasciitilde{}]gmail\{-dot-\}com}
+
+\section{Useage}
+
+\texttt{findbib [-a] filename.tex }
+
+If the option \texttt{-a} is selected, the script will only add new citations. The default
+behaviour is to create a new bibliography. By default the bibliography is called \texttt{filename.bib}.
+
+\section{Installation}
+
+After you untar it:
+
+ \texttt{tar xzvf findbib.tar.gz},
+
+just put \findbib on your path and render it executable:
+
+\texttt{chmod u+x findbib}
+
+You also need to install awk, sed, lynx and ofcourse latex.
+
+(There is also a file, example.tex, that you can
+test the script on).
+
+\section{Acknowledgements}
+
+This script is a modified version of the script originally
+by Fabrizio Nesti.
+
+--------
+
+From the original script by Fabrizio Nesti:
+
+And thanks to Hrvoje `Harv' Galic at SPIRES for collaboration!
+\end{document}
diff --git a/biblio/bibtex/utils/findbib/example.pdf b/biblio/bibtex/utils/findbib/example.pdf
new file mode 100644
index 0000000000..e81bb3e24f
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/example.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/findbib/example.tex b/biblio/bibtex/utils/findbib/example.tex
new file mode 100644
index 0000000000..0b269f4735
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/example.tex
@@ -0,0 +1,26 @@
+\documentclass{article}
+\usepackage{showkeys}
+\usepackage{setspace}
+\doublespacing
+
+\begin{document}
+Here is an article \cite{Witten:1997ep}, and here
+another \cite{Li:1996mi}. Then a wrong author: \cite{Nobody:1997aa}
+and a wrong label \cite{Cheng:1996hh} with `hh' instead of `hc'.
+Then an eprint \cite{hep-th/9703030} and a personal label
+\cite{DNS:94} plus a commented out one. % \cite{pippo}.
+Then a label with an author whose last name has two words \cite{deWit:1984px}.
+Then label with no arxiv specified which will search the default arxiv \cite{0101001}.
+Finally, here is an article with the new arxiv numbering \cite{0704.0001}.
+
+Notice this file uses {\sf utphys.bst} as a bibliography style.
+Any other style may be used.
+
+This file also uses the package {\sf showkeys} to show the names of the citation keys.
+
+\bibliographystyle{utphys}
+\bibliography{example}
+
+\end{document}
+
+
diff --git a/biblio/bibtex/utils/findbib/findbib b/biblio/bibtex/utils/findbib/findbib
new file mode 100644
index 0000000000..b4332a0ed7
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/findbib
@@ -0,0 +1,474 @@
+#!/bin/bash -f
+#FINDBIB 2.3, Aug, 2007 K. Goldstein
+#
+################ FINDBIB 2.0, F. Nesti, August, 26, 1997 ###############
+#
+# This script builds a bibliography database from the latex source file.
+#
+# Usage: findbib foo.tex
+#
+# Every \cite{...} of a reference in SPIRES-Bibtex standard form
+# (Author:YEARaa) or in the form of an arXiv reference
+# (arXive-name/yymmnnn OR yymmnnn OR yymm.nnnn)
+# is searched in WWW-SPIRES.SLAC.STANFORD.EDU and all the bibtex records
+# are returned in a .BIB file.
+#
+# The value of the variable ARXIV sets the default arxiv to search if the
+# cite is of the form \cite{yymmxxx}
+#
+# To change the default arxiv change the value below:
+#
+ARXIV='hep-th/'
+#ARXIV='hep-ph/'
+#
+# The .BIB file will have the same name as the .TEX file
+#
+# The script uses awk, sed, lynx, bibtex and somes LaTeX. You will have to install
+# these to make sure it works.
+#
+####################################################################
+#
+# How the script works:
+#
+# Steps:
+# Generate an AUX file with LaTeX if not present,
+# searches the AUX file for labels,
+# searches SPIRES for records,
+# writes them in $1.bib, renaming last as $1.bib.old,
+# calls BibTeX on the file (!).
+#
+#
+#
+#
+#######################################################################
+#
+# FINDBIB 2.1, May, 2007 K. Goldstein
+#
+# Changes:
+#
+# 1. Script updated to fix some changes on Spires website
+#
+# 2. Uses sort to remove dupilcate entries
+#
+# 3. Can search for author with double barrel surnames
+#
+# 4. every cite of the form \cite{yymmxxx} returns a hep-th reference.
+# To change the default arxiv the value of ARXIV
+#
+# 5. every cite of the form \cite{yymm.xxxx} returns a new arxiv reference
+#
+# 6. Gratuitous comments added so that the script is easy to fix
+# when spires changes their format
+#
+#######################################################################
+# FINDBIB 2.2 : fixed some bugs
+#######################################################################
+#######################################################################
+# FINDBIB 2.3 : added some flags
+#######################################################################
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation (version 2)
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+########################################
+
+# The main script starts around line 351
+# Useful functions defined:
+
+# Print usage infromation
+usage(){
+ echo "findbib $VERSION"
+ echo "---"
+ echo "Usage: findbib [-ah] texfile.tex"
+ echo
+ echo "Options:"
+ echo
+ echo " -a : Only add new citations"
+ echo " -h : Print this message"
+}
+
+#a counter
+cpp(){
+ c=$(($c+1))
+}
+
+# extract the labels from the .aux file
+get_labels() {
+###################
+# $1 - the .bib file
+# $2 - the .aux file
+# $3 - flag to see whether we should just get new labels
+###################
+ if [[ $3 = 0 ]]
+ then
+ get_all_labels $1 $2
+ else
+ get_new_labels $1 $2
+ fi
+}
+
+# function to process the labels
+parse_aux() {
+ echo "---------- EXTRACTING LABELS FROM $1: -------------"
+
+ awk -F"}" '/\\citation\{/ {for(i=1;i<NF+1;i++) print $i}' $1 | \
+ awk '/\\citation\{/ {print substr($0,match($0,/\\citation\{/)+RLENGTH,length)}'\
+ - | awk -F"," '{for (i=1; i<NF+1;i++) print $i}'| sort -u | tee $2
+
+}
+
+
+# extract all the labels from the .aux file
+get_all_labels() {
+####################
+# $1 = the .bib file
+# $2 = the .aux file
+#########################################
+ # Backup old bibtex file
+ if test -f $1
+ then
+ mv -f $1 $1.old
+ fi
+ out=bib.labels
+ parse_aux $2 $out
+}
+
+# extract new labels from the .aux file
+get_new_labels() {
+######################
+# $1 the .bib file
+# $2 the .aux file
+#########################################
+ # remove old files
+ if test -f bib.labels
+ then
+ rm -f bib.labels
+ fi
+
+ out=bib.labels_a
+ parse_aux $2 $out
+
+ echo "---------- EXTRACTING RECORDS FROM $1: -------------"
+
+
+ awk -F"{" '/[aA]rticle/ {print $2}' $1 | sed -e's/,//g' | sort | tee bib.labels_b
+
+ echo "---------- FINDING NEW LABELS: -------------"
+
+ while read label_a
+ do
+ if [[ ! `grep $label_a bib.labels_b` ]]
+ then
+ echo $label_a | tee -a bib.labels
+ fi
+ done < bib.labels_a
+
+ #clean up
+ rm -f bib.labels_a bib.labels_b
+
+ nothing_new=0
+
+ if [[ ! -f bib.labels ]]
+ then
+ nothing_new=1
+ fi
+}
+
+# add a comment to the bibtex file
+print_header() {
+######################
+# $1 - the .bib file
+# $2 - flag to see whether we should just get new labels
+######################
+ if [[ $2 = 0 ]]
+ then
+ echo "%%" > $1
+ echo "%% BIBTEX FILE FOR $TEXF.tex GENERATED BY FINDBIB $VERSION ON" \
+ `date +"%x, AT %X."`>>$1
+ echo "%%" >> $1
+ else
+ echo "%%" >> $1
+ echo "%% REFERENCES FOR $TEXF.tex ADDED BY FINDBIB $VERSION ON" \
+ `date +"%x, AT %X."`>>$1
+ echo "%%" >> $1
+ fi
+}
+
+
+parse_label() {
+# convert the label into a search term
+#$1 - a label extracted from the .aux file
+ ###########################################
+ # is the record of the form Author:yyyyxx ?
+ ###########################################
+ if [[ $1 = *:[0-9][0-9][0-9][0-9][a-z][a-z]* ]]
+ then
+ LABEL=`echo $1 | sed -es=:=/=`
+ AUTHOR=${LABEL%/*}
+ DATE=`echo ${LABEL#*/} | sed -e's=[a-z]*$==' `
+ KEY=`echo ${LABEL#*/} | sed -e's=^....==' `
+ # add a space in two word names and remove underscores:
+ AUTHOR_SPACE=`echo $AUTHOR | sed -e 's/\([a-z]\)\([A-Z]\)/\1 \2/g' `
+ SEARCH=A+$AUTHOR_SPACE+AND+DATE+$DATE
+ echo $AUTHOR_SPACE $DATE $KEY
+
+ ###########################################
+ # is the record of the form *-*:yymmxxx ?
+ ###########################################
+ elif [[ $1 = *-*/[0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $1"
+ echo $1
+ ###########################################
+ # is the record of the form yymmxxx ?
+ ###########################################
+ elif [[ $1 = [0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $ARXIV$1"
+ echo $1
+ ###########################################
+ # is the record of the new form yymm.xxxx ?
+ ###########################################
+ elif [[ $1 = [0-9][0-9][0-9][0-9]\.[0-9][0-9][0-9][0-9] ]]
+ then
+ SEARCH="EPRINT $1"
+ echo $1
+ ###########################################
+ ###########################################
+ # is the record some other format ?
+ ###########################################
+ else
+ echo $1: PERSONAL LABEL
+ flag=1
+ fi
+}
+
+get_url() {
+#######################
+# randomly pick a mirror
+######################
+ MIRRORS=("http://www-library.desy.de" "http://www-spires.fnal.gov" "http://usparc.ihep.su" "http://www-spires.dur.ac.uk" "http://www.yukawa.kyoto-u.ac.jp" "http://www.slac.stanford.edu")
+ element_count=${#MIRRORS[@]}
+ let mirror=$RANDOM%$element_count
+ BASE=${MIRRORS[$mirror]}
+ echo Querying $BASE
+ #####################
+ eval "$1=$BASE"/spires/find/hep/www?""
+}
+
+
+download_search (){
+#####################
+# Download a webpage with the search term $1
+# starting at result $2
+#####################
+ # get a random mirror:
+ get_url URL
+ OPTIONS="rawcmd=$1&skip=$2&FORMAT=wwwbriefbibtex"
+ # download page:
+ lynx -useragent=$USER_AGENT -source "$URL$OPTIONS" | sed -e '/@Article{/ s/ //g' >out
+ # sleep for 0-2 seconds between searches so we don't stress the servers
+ sleep $(($RANDOM%3))
+}
+
+get_hits (){
+#$1 is a string that will be set to the number of hits
+ #echo $SEARCH
+ if [[ `grep Paper out` ]]
+ then
+ export $1=`grep Paper out | sed -e 's/^.*of <b>\([0-9]*\).*/\1/' | sort -u`
+ #echo $1
+ fi
+}
+
+find_eprint_record(){
+ if [[ ! `grep "<!-- START RESULTS -->" out` = "" ]]
+ then
+ echo "@Article{$label," >> $BIB
+ awk '/@Article\{/,/^}/' out | awk '!/@Article/' - \
+ | tee -a $BIB \
+ | grep title | sed 's/ */ /g'
+ else
+ echo "PAPER NOT FOUND"
+ fi
+}
+find_record(){
+ awk /$label/,'/^}/' out \
+ | tee -a $BIB \
+ | grep title | sed 's/ */ /g'
+}
+process_filename() {
+ if [ $1 ]
+ then
+ if test -f ${1%.tex}.aux
+ then
+ TEXF=${1%.tex}
+ FILE=${1%.tex}.aux
+ BIB=${1%.tex}.bib
+ elif test -f $1
+ then
+ TEXF=${1%.tex}
+ latex $1
+ FILE=${1%.tex}.aux
+ BIB=${1%.tex}.bib
+ else
+ echo "No such file $1."
+ exit
+ fi
+ else
+ usage
+ exit
+ fi
+}
+
+test_dependancy () {
+
+test_dep=`whereis $1 | awk -F: '{print $2}'`
+
+if [ -z "$test_dep" ]
+ then
+ return 0
+ else
+ return 1
+fi
+
+}
+
+########################################################
+
+# test dependencies
+DEPS=("lynx" "sed" "awk")
+
+for item in ${DEPS[@]}
+do
+ test_dependancy $item
+ if [ $? = "0" ]
+ then
+ echo Findbib needs $item to work. Please install $item
+ exit
+ fi
+done
+
+#Boundary conditions
+VERSION=2.3
+c=0
+ADD=0
+LYNX_VERSION=`lynx -version | head -1 | awk '{print $3}'`
+USER_AGENT="Findbib_"$VERSION"_(Lynx/$LYNX_VERSION)"
+
+
+# Process the input parameters
+
+# Process flags:
+
+while getopts "b:ah" options
+do
+ case $options in
+ b ) BIBFILE=$OPTARG
+ # Unimplemented
+ cpp;cpp;;
+ a ) ADD=1
+ cpp;;
+ h ) usage
+ exit 1;;
+ \? ) usage
+ exit 1;;
+ * ) usage
+ exit 1;;
+ esac
+done
+
+shift $c
+
+# Process the name of the texfile
+
+process_filename $1
+
+# get citations from .aux file
+
+get_labels $BIB $FILE $ADD
+
+
+# print a header to the bibtex file
+
+print_header $BIB $ADD
+
+# start getting the records from spires
+
+echo "---------- REQUESTING RECORDS FROM spires.slac.stanford.edu:"
+
+while read label
+do
+ echo "------------------------------------------------------------"
+ flag=0
+ echo "Searching for label:"
+ i=0; NN=0
+
+ # parse the label and set $SEARCH to the SPIRES search term
+ parse_label $label
+
+ # start a loop to search through the results
+
+ while test $flag = "0"
+ do
+
+ download_search "$SEARCH" $i
+
+ let i=i+25
+ # find out the number of hits for our search
+ if [[ $NN -eq 0 ]]
+ then
+ get_hits NN
+ echo $NN "record(s) found "
+ fi
+ if [[ $NN -gt 25 ]]
+ then
+ echo "Searching-----> " $i
+ fi
+ # check to see if there were results
+ if [[ $NN -eq 0 ]]
+ then
+ flag=1
+ echo "PAPER NOT FOUND."
+ elif [[ ! `grep $label out` = "" ]]
+ then
+ flag=1
+ echo "Found:"
+ if [[ $SEARCH = EPRINT* ]]
+ then
+ find_eprint_record
+ else
+ find_record
+ fi
+ # check to see if there are no results:
+ # check to see if there are papers left:
+ elif [[ $i -gt $NN ]]
+ then
+ flag=1
+ echo " PAPER NOT FOUND."
+ fi
+ done
+
+
+done < bib.labels
+
+# clean up
+rm -f bib.labels out
+
+echo "---------- DONE. RECORDS WRITTEN TO $BIB."
+echo "---------- NOW RUNNING BIBTEX:"
+
+bibtex $TEXF
+
+exit
+
diff --git a/biblio/bibtex/utils/findbib/utphys.bst b/biblio/bibtex/utils/findbib/utphys.bst
new file mode 100644
index 0000000000..969f57abf7
--- /dev/null
+++ b/biblio/bibtex/utils/findbib/utphys.bst
@@ -0,0 +1,1066 @@
+% UT Physics bibliographic style, ver. 1.2. Based on:
+%
+%X IEEE Transactions bibliography style (29-Jan-88 version)
+%X numeric labels, order-of-reference, IEEE abbreviations,
+%X quotes around article titles, commas separate all fields
+%X except after book titles and before "notes". Otherwise,
+%X much like the "plain" family, from which this is adapted.
+%X
+%X History
+%X 9/30/85 (HWT) Original version, by Howard Trickey.
+%X 1/29/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik;
+%X THIS `ieeetr' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
+%
+% Modifications: 1) added hypertex support and "archive" and "eprint" fields.
+% 2) parentheses around dates, and no "pp." for article entries
+% 3) "publisher, address" instead of "address: publisher"
+% 4) added "report" field for article entries.
+% 5) particle physics-oriented abbreviations, rather than ieee.
+% 6) added "collaboration" field, as per
+% Jonathan Flynn' suggestion. SPIRES now supports this field.
+%
+% Modified by Jacques Distler, 7/97
+% History: ver 1.0 9/96
+% ver 1.1 10/96 - added "collaboration" field
+% ver 1.2 7/97 - added a "\providecommand{\href}[2]{#2}"
+% to handle case where \href is not defined
+%
+% HyperTeX Wizardry:
+%
+% The following are equivalent:
+% archive = "hep-th"
+% eprint = "9605023"
+% and
+% eprint = "hep-th/9605023"
+% both produce
+% \href{http://xxx.lanl.gov/abs/hep-th/9605023}{{\tt hep-th/9605023}}
+% in the bibliographic output at the appropriate point. If you are using a
+% hypertex macropackage, like hyperref.sty, this will create a link to Los
+% Alamos.
+%
+% The bibtex output produced by SPIRES, while far from perfect, is pretty
+% suitable for use with this style. Indeed, this style was designed with
+% SPIRES in mind.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ archive
+ eprint
+ report
+ collaboration
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.quote after.sentence
+ after.quoted.block after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.quote :=
+ #3 'after.sentence :=
+ #4 'after.quoted.block :=
+ #5 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.quote =
+ { " " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { output.state after.quoted.block =
+ { write$
+ newline$
+ "\newblock " write$
+ }
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {blank.sep}
+{ after.quote 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ output.state after.quoted.block =
+ 'skip$
+ 'add.period$
+ if$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { output.state after.quote =
+ { after.quoted.block 'output.state := }
+ { after.block 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " {\em et.~al.}" * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.eprint}
+{ eprint empty$
+ { ""}
+ { archive empty$
+ {"\href{http://xxx.lanl.gov/abs/" eprint * "}" *
+ "{{\tt " * eprint * "}}" *}
+ {"\href{http://xxx.lanl.gov/abs/" archive * "/" * eprint * "}" *
+ "{{\tt " * archive * "/" * eprint * "}}" *}
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.report}
+{ report empty$
+ { ""}
+ { report}
+ if$
+}
+
+
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", eds." * }
+ { ", ed." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { "``" title "t" change.case$ * ",''" * }
+ if$
+}
+
+FUNCTION {format.title.p}
+{ title empty$
+ { "" }
+ { "``" title "t" change.case$ * ".''" * }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month ", " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.date.paren}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ {"(" year * ")" *}
+ {"(" month * ", " * year * ")" *}
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.collaboration}
+{ collaboration empty$
+ { "" }
+ { "{\bf " collaboration * "} " * "Collaboration" * }
+ if$
+}
+
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol.~" volume *
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "no.~" }
+ { "No.~" }
+ if$
+ number *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { edition "l" change.case$ "~ed." * }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pages.nopp}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { pages n.dashify }
+ { pages }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.volume}
+{ volume empty$
+ { "" }
+ { "{\bf " volume * "}" * }
+ if$
+}
+
+FUNCTION {format.number}
+{ number empty$
+ { "" }
+ { "no.~" number * }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "ch.~" chapter * }
+ { type "l" change.case$ chapter tie.or.space.connect }
+ if$
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { "in " booktitle emphasize *
+ editor empty$
+ 'skip$
+ { " (" * format.editors * ")" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ output.state after.block =
+ { type "t" change.case$ }
+ { type "l" change.case$ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Rep." }
+ 'type
+ if$
+ number empty$
+ { "l" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.paddress}
+{ address empty$
+ { "" }
+ { "(" address * ")" * }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "in {\em " journal * "\/}" * }
+ if$
+ }
+ { "in " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " {\em et.~al.}" * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " {\em et.~al.}" * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Vol.~" volume *
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "in {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "in " key * }
+ if$
+ }
+ { "in " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ crossref missing$
+ { journal missing$
+ {}
+ { journal emphasize "journal" output.check
+ blank.sep
+ format.volume output
+ blank.sep
+ format.date.paren "year" output.check
+ month empty$
+ { format.number output }
+ 'skip$
+ if$
+ blank.sep
+ format.pages.nopp output
+ }
+ if$
+ report missing$
+ {format.eprint output}
+ {blank.sep format.report output format.eprint output}
+ if$
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ format.eprint output
+ }
+ if$
+ new.sentence
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.collaboration output
+ format.authors output
+ title empty$
+ { "empty title in " cite$ * warning$
+ howpublished new.sentence.checka
+ }
+ { howpublished empty$ not
+ address empty$ month empty$ year empty$ and and
+ or
+ { format.title.p output.nonnull }
+ { format.title output.nonnull }
+ if$
+ blank.sep
+ }
+ if$
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.block
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ format.eprint output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.block
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ format.eprint output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.paddress output
+ format.pages output
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ format.eprint output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.collaboration output
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.collaboration output
+ format.authors output
+ title empty$
+ { howpublished new.sentence.checka }
+ { howpublished empty$ not
+ month empty$ year empty$ and
+ or
+ { format.title.p output.nonnull }
+ { format.title output.nonnull }
+ if$
+ blank.sep
+ }
+ if$
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ format.eprint output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ format.paddress output
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title "title" output.check
+ blank.sep
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.collaboration output
+ format.authors "author" output.check
+ format.title.p "title" output.check
+ blank.sep
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {nup} {"Nucl. Phys."}
+
+MACRO {cmp} {"Comm. Math. Phys."}
+
+MACRO {prl} {"Phys. Rev. Lett."}
+
+MACRO {pl} {"Phys. Lett."}
+
+MACRO {rmp} {"Rev. Mod. Phys."}
+
+MACRO {ijmp} {"Int. Jour. Mod. Phys."}
+
+MACRO {mpl} {"Mod. Phys. Lett."}
+
+MACRO {pr} {"Phys. Rev."}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\providecommand{\href}[2]{#2}"
+ "\begingroup\raggedright\begin{thebibliography}{" * longest.label *
+ "}" * write$ newline$ }
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}\endgroup" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/biblio/bibtex/utils/fixbbl/README b/biblio/bibtex/utils/fixbbl/README
new file mode 100644
index 0000000000..3e7f62da14
--- /dev/null
+++ b/biblio/bibtex/utils/fixbbl/README
@@ -0,0 +1,28 @@
+fixbbl.py
+=========
+
+This is a crude hack to fix a bibtex bug that comes up using
+package url. The bug is that, when the url is "long", it gets split
+into shorter lines by a %. One might expect this % to just eat up the
+newline that follows it and disappear; unfortunately, however, it
+instead appears in the printed document.
+
+This utility strips away the % and rejoins the lines together. It
+should be run on the .bbl file after bibtex generates it and before
+latex uses it. (Yeah, I don't use the stupid mixed capitals. So?)
+
+USAGE:
+ python fixbbl.py paper.bbl
+ Rewrite paper.bbl as follows. Any line ending in % has the %
+ stripped and is joined to the next line. The original file is left
+ in paper.bbl.bak. If a previous .bak file existed, it is overwritten.
+
+ python fixbbl.py
+ Works as a filter on stdin/stdout, if that's what you like.
+
+(NB: if #! works on your system, you probably know that you can leave
+out the 'python' in the above, after chmodding the script.)
+
+Frank Stajano, http://www.uk.research.att.com/~fms/, http://i.am/fms/
+(c) AT&T Laboratories Cambridge
+development started 2000-02-27
diff --git a/biblio/bibtex/utils/fixbbl/fixbbl.py b/biblio/bibtex/utils/fixbbl/fixbbl.py
new file mode 100644
index 0000000000..018387ade6
--- /dev/null
+++ b/biblio/bibtex/utils/fixbbl/fixbbl.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+# $Id: fixbbl.py,v 1.2 2000/02/27 22:57:35 fms Exp fms $
+# by Frank Stajano, http://www.uk.research.att.com/~fms/, http://i.am/fms/
+# (c) AT&T Laboratories Cambridge
+# development started 2000-02-27
+
+""" This is a crude hack to fix a bibtex bug that comes up using
+package url. The bug is that, when the url is "long", it gets split
+into shorter lines by a %. One might expect this % to just eat up the
+newline that follows it and disappear; unfortunately, however, it
+instead appears in the printed document.
+
+This utility strips away the % and rejoins the lines together. It
+should be run on the .bbl file after bibtex generates it and before
+latex uses it. (Yeah, I don't use the stupid mixed capitals. So?)
+
+USAGE:
+ python fixbbl.py paper.bbl
+ Rewrite paper.bbl as follows. Any line ending in % has the %
+ stripped and is joined to the next line. The original file is left
+ in paper.bbl.bak. If a previous .bak file existed, it is overwritten.
+
+ python fixbbl.py
+ Works as a filter on stdin/stdout, if that's what you like.
+
+(NB: if #! works on your system, you probably know that you can leave
+out the 'python' in the above, after chmodding the script.)
+
+"""
+
+# This code, for what it's worth, is released under the same licence
+# as python. (Basically you can do what you like with this file,
+# except suing me.)
+
+import os
+import sys
+
+def main():
+ # boring argument parsing
+ arguments = sys.argv[1:]
+ if len(arguments) == 0:
+ input = sys.stdin
+ output = sys.stdout
+ elif len(arguments) == 1:
+ f = arguments[0]
+ fbak = f + ".bak"
+ if os.path.exists(fbak):
+ os.remove(fbak)
+ os.rename(f, fbak)
+ input = open(fbak)
+ output = open(f, "w")
+ else:
+ print __doc__
+ sys.exit()
+
+ # real work
+ while 1:
+ l = input.readline()
+ if not l:
+ break
+ if len(l) >=2 and l[-2:] == "%\n":
+ output.write(l[:-2])
+ else:
+ output.write(l)
+
+if __name__ == "__main__":
+ main()
diff --git a/biblio/bibtex/utils/hyperbibtex/hyperbibtex098a.sea_hqx b/biblio/bibtex/utils/hyperbibtex/hyperbibtex098a.sea_hqx
new file mode 100644
index 0000000000..96389a2428
--- /dev/null
+++ b/biblio/bibtex/utils/hyperbibtex/hyperbibtex098a.sea_hqx
@@ -0,0 +1,6101 @@
+(This file must be converted with BinHex 4.0)
+
+:%dKjF'9b3QPL9'9B-$NiB5jcC@%!39"36'&eFh3K!!!%,Bi!!%Gq)2p6593K!!F
+!"#f1FNaKG3*Q!*!$&J"6$3dH5(P`CA*#D@*8C9JJ-#ij,MKK)'*XB@jV)(0dB@0
+V!-'X!*!8G0J!N!6rN!469%&,9dP-4!%!S1c0TkS65@!!!"l'!!&mS!!!%F%!!'+
+48#fdC!#3"ZGJ$!$eE(ffXT96MZGdXiAZP8[SYFTAlQB,l3KYIAB,@b585qM!NlR
+CV@cPP+p-6Rr6VNY[IHCj8MNecfApVTG3`KE+&m)*AaMKC"0q*Q(,b3JRcldZ#IG
+E@(66c6CE**a3`XNQP"pKK"1HC-F*@rKLj2K*f'DrcB9eK"1q8(i,lESSApRk!P8
+G@pRh#bGmi@3KYim-&X,*,H3hQ5cN&[),ZB@-&V+XThTjR6%Q--BDhQ5X(PrfciQ
+"f&h4M**)CFhCrN`kQE5-*V+*(FQB0Ck*aAS55`1le9K'6ZcSM@f9[1ilh-e4D8F
+bQKU5XVPSre$+`(TkrAGZfG6C)6!02r4diaG+(hlrlii`BI``BdYIcYTbX9djIbD
+6hTQeCJI61lX5r6PEIc59ZbXpN!#)lqDPMPJbPSYCSL1jG'pdKfdN'm[SD-YS,*0
+0T&2QRT(83(5h%8rcA@PH`Y251a,,8Jh[K9YL!bQpLSUeGh!NSd-()FR%jaTpm51
++'A`[i2XK[[1-Y4I`,H%,LGZe#Ie0GH!)chQ)MhMrSmAre%$!eiL["GqEmA95[rM
+q1EjDq8ee`K'HH)L2H2m2!!fF%"*I%ljfI1[aEF&h(&p0Qa(`0@VDK!@@0d),3B-
+202KJ(03Yq0EMDmIAp$mD@1!R"aU3!!b-q6#c*[KrjXEA*q!,`Adh-rDAd-!jcib
+3!%%J+rlKpl8AIrFMRBc`2D6iheD@1%*pM(RFc"UD&YD'YVX2K8Bi`YkBBPC9QdS
+@ja9lHe0arYMMH*@1(@`-9eK+B*&5c,jq9Q0UZqZ0Zer4#X5UGk00"imAmiV9de6
+-5q($YdY*)+hb%8m6[30ME&dJTE&!UX6D@jJK0,hSVk8`9826PTp+6LPmQir*k-l
+D&!MP&`3BSlkPF0IQd'RVGc$'-p)kLBAk0"D%!NSpp8*XRNCQEAFcHfMkjXkb$PZ
+*pcl`K[U+*Bq&@+iVeMSZh&3X"9,deG#pEDE0QEEj`A$,#q`CP38haYqUULbp5Ca
+Z*r@dPIH82a0iapNX+p4YB'c"%rKfi0X8QVCr,$S98i5C(UDH9F08erDC))Y,dL!
+c5&e"FFZ,%d+mPV"!Q#X)a4BB-jhfe)5Q5dqdMM1Ym+lXePMVZ+B9ja['Q9$iYFT
+@qBTj1!NGPpN0(M%d[H"$e64eL22[iIcEUfMSHeNeHFKGIGGicB6NRM080%SbGV#
+ekmSjp'iX["AC8f(cZJY[rC028PQ*1!YcS@RcDfA983f-'HHK`')SETEGK9p(I&8
+XQ*BeK!XAU)[J)![&&i[Z`JA&UUXEUC06H)RNZ2@cKEQ+alT6KEF5GZTk+RAPA*T
+TZi,`JG*4k8YMcKB-A[3U+k(TZMT5[2LKV"`ld"SZPQ5&''5&1)kG!Q)qD32f4jc
+P98+6kJY23Lq*R&5mV2Y*abdi+6REf9(RUR!a(a&e2#'25S3)6KEcFEM--%IG&1D
+"cKrE,lAdp(C,8j2&bh('CJQ$UEG#5KAcUlS+Xi&8rTc(ACK&pf05@0GCRcqb$fk
+BDr89,T*AL!1DA`c-N!"A&caElQ-PHEl`(PFL$`j89-'$LBFUp$PfB9@iJJCVA1p
+JkP#5#5YT[U'rFH'C%Y0aRhD#VLp4,p"AS,IH5r,FPecb%IP)K8rRL6$f#PIqpV,
+bdk5*e0AD9AMlZJFNXAF#[FbfTJT[jmr#q3*Q5er9&B@"2lM#G%"+&@E&&pK01ZE
+dC''fQhI(CiC0RaRjXqR$[h12mA2h3*PhmfF`Lpk#TJHTKb((&#C8UYDI&kaVf-9
+0(Al"+fUf&QD+U`fT`Qq`rf"L%"2TSNmk`q2BE*lA*b+E$+5ZA-"fBm3%I0i2GGI
+2AVP3Q@qIDd,c4IGKiC+Z2R99GZ-EekGKrJbQB346GSlQ',QMQ#IQd,6aE$"-mjm
+YTmQ8hmjIDfMZhJDYQEaj0MrGHEjqAYrJEYSmNT25F@Ni0Tc1l"Df#GqM()95K5p
+rQRCHUqf1CG-MQIkBP%VRT(JDD3J61p+T(1'5Sc&r-K(0XP[Nk)#8U6$P%1-dh*A
+)CK-T4F,D&KY@FlXP0CU*$L0Xb64Q9p450#2&-qRKUkbX&ahe!YEB!JM[SDf*PcC
+e8"-TN!#hIDqT*Cj)aN*8fiCL0TG*U1YcQ549ACr,iYUfJ[e*Z5YTYAYYNh4-fT!
+!L3h%-SPqUAY6b0rCX8PDhGam4p2U1ql`dQ-e2GE3MXRhh"YE)rCF1fdX+`+Xkij
+aCQ#Gf'X$8MLdEe@5U8bXEUYIlFPk2h"mY4qq!9%rIZ$`lN9I5kTp054CPLh@qcT
+A`)D,cXTlZRd&ZZ%k'(q[3jP0"*ZGGA&1k['Q+ZHrGIFjAmfrmhhY%m[[pIQDIp&
+RI[J[IYYrqm2kPGkZ-$D,ElNRlMI)2`Mp[FXT16R#lI+M'UjeHTe"36%Gf4!ar(#
+$Hkq1NF*SfH&C5-M$[4($8lfK%9GB"#jZ1Qb*'*kfY%d3%dHBeB9245)QGH%c%8*
+*(QCbTE',TjRpf!IY2LC+iFdI9*`U)INkHZM)"Sq9+SHIqq''(jpADL3N)8mqji+
+5VVf4jIimqlDhjEflA8#G1+LBJ`H9fXM(kr0-qSI6k*TB*Q4I+cVMRRJdG"TXhC&
+C#Mqa!%5'Srf8BJjNGfG(mGkVCY,pH1q2Ub-5hNrmfB"%lhH(GJcJ,5b*jT*$H-[
+$`i3A"M$akEdhL3+p+jZ&+N6q`VA,-+QDl!Nf`Ua+V6eK''A@Z+RE&c',cIDIh$F
+4`FDM-QqcF#mUIA"4Xq!"QQP"Hc-c#4kPfBVh)THb9YSmKc$XdKpl[qN1f(e1Ke*
+Rpl8l&"'[CU8'L'E&UV*)$EUfUBD)@69'$+JcMGPhY@Z'4e,ehKCbdM,ZT,ma(YP
+!Ei'Gh"XhJj&&c&3hJ,(dQYKX@!TAeEN#Y3k&P9ir`H)I2rCcb3VX#H-h&KN%Xm@
+d`,S3JbEBE(KXU+kf@EKL%0M0GS%*FDZdbh"@E'3@X$d)&3f#ClL1P,Ar'1QMS0M
+a-JkEHRbk2UA)G9f12JTGQJAVbEf+lCj(X@2@(Ae8FS*PAH#G#apL4NMB)4fB&mY
+NHI'YLQZIR$6*rSM8)bm,,0qda[#hLrTqVK88@rGH6-PC)-dZkriI-DRGcjChRVr
+CiYR#c-M-4Y$0KI8IX(V[VG)pDpN[j9r+VlmNqlX$%@PC&*dYH9ffqjQ@VM(KGF#
+rTJ8f0BKRlRj9+k#[Fe*8I-"lQl6TY!rrQGk!p+4VEqGjLm8GTXjQCM*#a%a[f3r
+&5+h&8%hmLE82NcYZX[Q4lrMC%NqDLDbZmlc45)TJRbS&hVQ&ThhA*ce2KaJlXdH
+Jl9PM8aXTE91mXTrQIkdA([3218k-XrC8,@EHkEA#a@#(E&`YmBeqbiXcQ-RG'b-
+[UF,8aLh%[&cfelSeSFS+Tqm[XhUVV2(Y'H(%aQd[BUCh`a(%+!mj6PBB"lpYZ(K
+RarS&AUr1q0*,"Q@P,*-QLdQ6Uec3C'fCDh@9Dd,SB!dqCSqBC%cYc[0XVlkl'm[
+h$NDYNEqrbMCPGl&%[ZJM26Z4,BbaL*jb&XqX`FB5p2H4lQYdal3af8HkL0!PXqk
+%6c(eE)bmhl#4*k-#%N60Dp%6Q#Z8@Q+I,CDZ*k+NLl!Ze&H!2jN$$1*R'bmBUaZ
+[VPAaDRej#Y[YRA"I,hFIBdpl'0+44FL0HEVj55hY@$RKj!2FUi`p5%LTUeB-2($
+0SAZrF+Lb9@F5aF#%bFGZ8qaie5XV[qY6&NI@8Sqk*cjT@a&QFX5P)bJ(r+5*)bJ
+""+*)L#@%S"b@1EJR(ChR(Dbm&BUKdcJf`GN!pf1Kl))EMS6+pQV([hfk-4`FSN6
+8XmLc'"d@d1%ZE,()bkQl)VN%,LS@+MkVG&Y*&XK95024$Ehd4!SZAiEFH`qPk16
+@iYY8FINU2HK1A6ND6Bl%+2rCQFi-5'ZSNN`MSk&XKBUj`84@[l@"QT3G-U[*pri
+ZK3R2QhcIU-(lB6L)XFY`Nah9NhL[`rZK(SkLPp$,Dqrb@Mfa#A8FFI`HUNQFra'
+1H!1[*+pI3"mZ484p+EjZI,(R#B-m(miElG+Ep!IL%4eKH&p(H"m$CUb-qCQk30H
+DS`E+U(d9&$")@6MQIY9iM@PG'4@mfP&M'G'SGmNlAec''+jcXj+1%Xj9p@$[P6%
+c9a&[P"&292YKTmUBA6IkQ5bMZQkJ$TC45e9c48[fS)jKlkQ@-NBY)klli,ibjL(
+9@QB*PK(aUiSeBhiJ2m8-iBNQcDL2jVqieIK%ej92FldAc+'DkaF5PCZ,KGp0$DA
+51e25lCqQM5krULCM2B246%c##GK)2*lS6m4518R0*%B4kLQa,(1%%$*'8p)eUY&
+dFQ3iaTahT8FT6Y`jQ%j@3$b5M#D6kCfaJ58G)fSbd4r0a54+#$haG")j(jpX'0,
+TDMJC6fH'Q0LR0i"aPdch$m8'@-d'R4#)q%Jbb4CZmQb@q0@*I32k)Gb1NHaZ*TC
+jUQPS$FGAkeE+3LQK[0TP&I[0cCN%lYqL55Q4L`eAJ3kH9h,P1#JlSUVT6!kkf,N
+M`%*G-eZj#KlD0rEVqjmXiSTMNYP6M1e$NRKJ98"lCK@f"'fq&EZ%pLaGNQK6Ue,
+D[(D+AdNFS2Z*MllIjS5r$m$Vpf-2fDrlI0j!(@$rf(r0jh5p!bEp@U,#p0Xh+,q
+[mJ3hdXiCYfF-*bDe8rbZCD*e)k[9,fH`+pP#TfPA,"i2['2meefqFYd4QVlmUVk
+E9VCiT%AVT[aa8`pK,2lCiZ5U31NPZLFSrB*IG8b4QTH2Yd$0iQ5jKiIdk9@FK%l
+lPcUl8k9IL*Di2ELK$lSBI-KD6M9Xj0[e628#5Ml5hR)d9Hl!5p9R+e@Aj*`k&-I
+p#PBpDm6F1Sj6-fYSZmk,P!V1Q(N"%"DF5&[jVQMMZk+0Y1r9XdVXb%E@"LCCDEG
+J@hZjhSRGeaaI!Ri,X9Xdl1238X[p,$aXDN2f!`dX6R0SqY*6A*Y$ZKUA$T!!'Rd
+c2#H`k4T@ZL`kq%`3A3'ik"EN'4ArL&98MdqFL*c"08X'MXDHrG%-EJLB`HCTHI)
+jl,(6@LpZC("NL'eFmE4%NiNXh)3VNdX2k`N#EGKmAhr0kXD93*%R#MK'T&X4kJK
+X*le3kYRZ0LIZ3`lcQA15Y!2D6P0%Y4qp(GKa1-'YRI5iYCrU5K5EJ&T*5RRSTS`
+kQBD,(IV%q5M1*ikM-R%L*XbAaE32Lk,5H)ee6$KiMGAl+DZ-e!%EhIh%MIH1m[Y
+H1DAeBQU+@K#9%0F-0ekKkEN"VZ*&IHrQZ$kk*6QkM6*EFD,FIe#Ia&pk$plJ@he
+&(CD[UR0jrfHD-RBD%lJC1pTCpBmUQa`3$L"1dFD'rVGLkYfUhhEpbpM9qHc!YaN
+ZRI0#Pk#2*d"eJAFQ*VKQ%IR)d@fecXlcJM!MF0@X8)dZXSc3(qVMeFZp%1++[S"
+PR5XUEq6h9h"RS30ciESlajLhUZ5P9cj6dV$R9p62eIQ2h&TBCpU+(lXR(Sd10m@
+M!jNQI&98qR0ia2KM9e-f-jTTLLI9h8ea3Jm1C)F!(%ie$@654+E'kC(#)cY)$k,
+0lQl+CE+$b+,fH5a`F%(%V)(c(YIhe",bP1UG8DP!fd@TF(8keZLS(Pq$Ve5)R)@
+bFh!6XTQjTi0KRNjed668-9GDN!$V1fe)G$(hQUNrq)(Zh[E"&E@KkBr[eA-B9'[
+JMhfk2qD1FRrXUrJ$qYL84ZiYX2!0U!L2YE8jeAmXjj(0-fkYU+cCBiUij96T1+C
+66HNT9*lK5ZbMkI6"bjK1)Up2kP1T)8bl@&a#IpE!K'*'QQ+2e'+M+LMf28,%5T@
+iBBm"hUblkXdDmLC#V'qaJjK!E!'r[RE`9j61CR!@XeEUfG6C*'e+p@2SIhVBc6b
+r1Plh-Mr%ICJC0UhI(-)TlT,b%8(IeJhV3hM[N!"qJk1&mJ(!Gh!cK0U$9+[rK,N
+N*PLTeRQ1r5PUhkIDf!rB"SNC4%iSX([!0-8mCjmfra@l'lJ$""2P*0)U+83A2[c
+8Z`cSbX4'G8#Y$ZL1j8Bb#"Bi4mq`e"Y,*LArM[4)cZeffcSSVq"B5rPHD'&!lY-
+[`2mI"J"GPmPXPCemlATl13h29QEQeGUeATCjRAAV0HJmVRPZ1YMH`XrpUp5c`F,
+@0,B1f(Rm+H3VkmcmcI)fh%kmK3[h84lCGLbk(#qf6lF(GhEmeQ2A`QkjZ0[-b#D
+,E!Xhh26GK$pCM1cBEA[)YNRf#YaJ(F6TGpPC15(`b!b5@`JNN!"!-S"Nb!LNaph
+('R6VrR`lPrE"IHYHGmFfVF-cYkip2lGNXjeX8VUSH9Z[lmL'[$LGp1lSS)9DqI[
+)%Z%%%YlP@@3K5dF@%`l)l5FE5JiHf@6KC"Qeb5d%NLAENS8-))(lb%%p-YMN)2R
+&#*3Xj#&Cb%)1NK%N%bj3JdB0'MASE0ECTChE@0R!JiU(C1h`1V$h%BUJhMlEPK6
+mqZM[1X6G-iVMp0F2rkp#D-NMm,d@SDp2)U606`Ih)H'[bHFV%E*RJqb[ha"$I'(
+framYDRfD"'j%)[FJ,q+R0@iqpRlUdTVIKaX3ZUhLHM5iU*(rRf(r[i%Xp2pR,!E
+mrarfIC2qrmBh,IMrmA-Tq[mI8YmNrir6r`m9mL+RYDVa2+6IC`cdlqF-VI[`rlq
+-kE`Y[+RLUbE9dZr(G3q0)IVh'8-rC-(rH`cpq2q4(p)r-pLqfNrreZaT0qPiMVZ
+[YE(e2SlMpK8EE2YXKZ*Bc(Dc9PZF0+J24Jb,MK5q%0ZRrBPfAfcP2p6ZGj9hI[B
+,af`[V2l(iTpBB6+rSJ#KQ&9%[&S,P6m%rAi)T@,dGdfT)4(MH$9q2kl9DLp&$*X
+2,c,XH"'pq1)*q"frpi92I-%@3qrmiTeIM0T(VilXNVAI(F0"1G6X'qL6EaI$%FQ
+jAILi(!VlP)"SUQQXDC!!"(2eVG&!G@1G)$cGSJ5(3ck20b+D'aYVMIKV51b0$Jl
++)E%M%)li)Y'),#TZXG-Am%4p%$!H0N,NH)eJmr[&(Tbk)IE)B6Qd8hE9#%+[,)Y
+KCmJAM1#Xb$mYLdiTj",G5SKfSqT5R0&"14#4)Y#633'2X1Gr&D'k@Y`L$`mSZ,M
+4F0MR#H#L'Q*e0Bi&"'Cmm,S`()6193HJm&q,+K%C3NIp%6N8J1SIP0H,6J9k23[
+01K`4TB",M)DKI`GplNLe%X6pf6#GZD')`C!!iJP*Jf'aA4Q8M@*E`'88lC*(lJr
+5lqh+VS#4e,*GpS[EjH'`!0$$0`95bbSq0rkXEK30$S-BmFS"-3M9dq08)+,JL'T
+BpXY1A(p&pN0(E-ECk'#IdZ+93TAQ+TVkJ#+kID&`4)6'8dH@%JjR%ikl4,m8MX#
+-f1DUV),%D1*bSEl53b&j*bj8qVfFXTj015X2NGiBD+`N[C9P(C2PS!Lr$G@!)-P
+h#""Z-&54!9[Q$DKX`-JK'!0b$4'JYLhp"Q!IaYME(`d3,&(&(Rr[&GFbp&&a2NR
+@)XfbhaG`08GQqhG,0[JZk(3c`Ddd`B`8fYi#SkV4-MJ,Y8dd`q(!lh+mKqC!PC0
+$9k)hQQKi3`P&VK@`d8a6M(YPjhB)DDHSChZj24Vdqja54,kDCiMQH9!1qGc$Qhb
+bhr9qNQ'DC0,PLh6#hY$+S,LL$(Y#XPX1b3'R(-lK28)5Q!r[K'X&2CjESh@@MGB
+*C5Z-JDUK5pj&&T&DTJhM-(Af+9h4`8T)Z6i,4*-4`fF5PKp1LPQNeG*-3PM@c*U
+EPDY6JSCA@#d`eQQc')[kr*&UAd$F"'Rb%JlN5ZM1NYTfPU+"i6#M3%Rh"(&YBe"
+aE5Z-MmPFIc8RrL6R3@8A'BPM8LJ(XK4%M,-XK+!f'JSTZkERjfDrl)E'SM3+F$N
+(UMDk-"cMcN#ME4)UdkCcjDDQd,$0G"Np@a@[&8p9G6K)&M*CkA`e&)5+jL%4-PG
+h!I)!NPS((V1e8d)@Dfj0'6,"PM)hNbS@DbXV#5LAYUpZZ9QlNGBq%Q6Rj8Jd4'B
+Pq[*b+aEBJMEdaeDiJLQ[Hk9QB!j1K["MQX5'd6Dr0b+&)Y8-UZ0q*5aANeE43Sm
+5jS*b!&,JR((!V`a)IV'pZ4r1$RI+1f&*E-J4d4N0`3,%,4U01,dijNl&ZEd03$(
+IkT2mLLFXZ(aKbHpAGRAJ`ZHM""@%$pUjXFr`P34h#ckKd#D&*9'fSJUN-f98$9-
+RPRPj4p3ANZ%HB*1D5ZSeBLqdQ3i3aj3S14K8!mSZJ`!$6(EeSckb'pM8M)STY`#
+AN[N)V!b8@UiQXHCl)Mjrf)!E9e[[aA&M[S')2#4'54a"HPD*`,BSY`6+MdTS!@Q
+fFTX5pEX#Ub*NlA$jUUpGV[IE06!BeP8Bl(jC`TM(@S2Z(5&$a29qA+)E$'+lh4m
+d#(k!*9D44KKZ!Shr#BDpdNkj*4U#rA"K-i&q!l"0-i*f@8`"DSijFG%b4!$G5RS
+f&4N@b8*F%mK!ZBr-VSCSX!8!)(b!5[!3`6k',ECK*$-YXBH8`@"%mF%ZaCh#2@X
+5B$-1ICpY`i1MJRXr4+meq43#bZEpq*9EQBqSd8$%4GG+ZSiG"+!+fT!!Db%8P60
+*CK3Al0E0*2ZKqC+&kY3X)IQd%[$3,Zr$YcFF`%,5-6q%kNNX"Q*iB1*JHq#%@Jd
+JKZA0,1B8L--43FZ[kcAFSblLTJ+q#!bCUE[Npe"E)l#pAB&EADfLJTc@eKNfb`&
+jTf4XmF,4iB"LS'(,B2D&E2H&YiH$NP-@ejTJdqePP(-58Ra3()5qc%3(FGX2"r'
+Q(kB*,aM,G6Gh"mVX0K1q5Y#JNHHR0K$T*jdDl`R5&QcmYekDlQ0)M6SM00eJlHq
+DhpQ1IMJ2ZI3'c12lHZ!qqIa-D-j6$(eqQ5H0Y*0L33RqMrARF#"A$[E5"DqidaH
+1`QVi#88CT%$X3GD$P$$EL)B"`a-Ce2jNPbbAJ0Ac)1UK*F*$EJX011'A&@cM6kb
+q*32Vh*QpV34LEdTA&9SiYJ)b$S58+&lD86PYL@1HDrJ0F*89aECHd6[RGf8!N!$
+!Sfmi24p5GXP`DMX@aSqZjr3k,3%a"(Xmlm4d2R"!i[di9'Cc"$bC,$l'jV&efb`
+f`ZE`%$4*A)M0BYTNFpLqMAX9'#A9!Cb19Xij#RNk5ipYpe"i#H"aEX&q-68!P"D
+!GbB-Xm#50j5lJD#+eqH5X`q%d80KqQC1ChZG)FA[0d`(lB2+Xj!!29)%8eAbDAH
+AY02RN5*+b!$R01U9ZHV'%bmr-J'(AQATXE"h8i!@K6+")9"-dJMreLM0J%mC(1K
+cb$FREJTfLVG!cf"q'EcP!T!!)i`4iTU6AC%h+qr#`rpf[q3a1T8!%(TQi+"&l!U
++D-"f21iP1df#H6YlFqp%qI#4p[8a)D!%k-UNbp$-F0G-a#MHQLEaaTPJM%S82c2
+2"1XDMdmHIS)3hbHCV&Ki*,,S'XIA1RUEZ``9p1LlcJ!9mC,Q)R$l2D,JVFG'm#S
+hQAhhqjc#0'XX&cS*'piaKZ+mc`4pi90ji'`'d,X"X([6*PCFNBLc'eLP@G%mNp8
+NS'`C4'21M64IPX*QlG3CFZCe%VAQ,QP3rLLKLCHpF3))246ar%j+fC[6LfBDVG6
+qES,EjDjVYdYlSk4KSdNdM'jc[,SUAirVGC841i!j1FK1"!&P"2Le@%li`QDJdlG
+M0,M63'fDp*!!TJPMjM(KGiQ%pU"-)6lP#PZ)$TTmN5ppk-2Hb,"I0JK6)E4C!X-
+KC2I!Rq0$8`MD'C%(+8f+36GB8f-`'MEjTSZ4*-U-1T-(PjF&+20XSRfBcF1GNb`
+lB2PZCR%RMk881f%2#59JF2#S*Vj9&C1U!,lpX!$cbMC&8P)STH5eN!$"m3(&3+q
+*p,b,dK3L+`Y9mE!6GK+4BdabkB+[0KD&D9IEE+#ENGXSI8GkYG0HLA`bB4H,pJ8
+94ImbR"$QCCMq'JH85aZ`d"R`0)!*+JZ86H%ldI$!!**Np$C309d3fM(V!@"66H$
+9iDeAPLE++R-T1m8TS92,Qh'&2bV1*-V,dj4DA"M5SbcePQ!3"T2`BrM-J*[4,#a
+1%@-EXmJbq3#Z,31BiHG[P$40E"(DK)YeB,cSYV@II2SGTj,Q2dE8+U-+kHH"R$d
+Y'jX9C6ZqHBl,F-+DpH!V+)IX$,6!d8PBaAJ-'@S9T`5J$cCJ$$Ak[(,B&cED[Dh
+XCCrXp2E)3GJmNke5!+lV5AmJ')@M6F-VZdLe'-(*9PrB54XAQe2dM#"S@iBBiL!
+6EFKdciG`erald6%IUcf1%ElG-Hj%(5N)3[%@$cl)3k0C#%2&4`68C&dQ!)AF1CB
+B0!j+fB#eF0URC'#%*`B%[N1lmDa)i4H2%(i[N!#"U"349)qE$(06#1"Fh(5mK'C
+V,kM*P--f0fpMZm&aA%MB2KLdYXmqK0[UhiYQqPJ&3Bc`B)Ka*qT)`4'+Yb$a3IQ
+iL)8`FRa%3&$@C8*5b0e#9$ia`XjNm85%B6R`B'2"9#FkVA[A*9pBa4+@9&0+"BA
+6+BUqYf(D&2&HJ3l3!fAhGI6aK&i%jD4"q@J[KjT%Jb6habI8YQ-)Bi2LGJkb&qe
+VE&qcVA&+""Cp-NfU6q"FX#ZdhG9#ArPS+"fPjm#HPei'XRabQ4DI6"2JNac9AG*
+Rc(DYGj*df4Bk49U0UrbmMe59GPa`M&Eli`h,'V4ff!FPIe5ZT)3k#K!5hAV+jCA
+mUiRi4'MVc-VQaC8Z*XQeqMP"+)f5D@PfhlhBSjH,5IY)TEJ,SK@+-$G%2DfNr64
+(0Rp6i3ia+D!9E9M3U"N0M)'d`fZ0#LJhJI3U+khL1FYMBCR)TqPm"8)V8&8),SG
+I9dZ`#4N"365#+l!4UeA%a&4*e*C`R%U+@+dN*UC+QK)8A%iDYPT6X`3U,01Xi+T
+UZ5!8KA2d#T@5%QC&8&e"jS+,-J'VPB5dTSbJKB(V6dC&+cKd3PJ!Kd844a1+V`L
+H&4CBNF3G)mVeTI-r%,4!UZD6&Y(*TQ'(j3K)k)aQk11Xp21YkE*!'lHp$VePb[m
+af*pR-P4`-j3$34d&B`PU%f9NNGS2"f9GS[KT@P'#*&a4LUIc6%e2%Q6jQ6VFhK[
+!1c,eCdJmaB[aSDBI((F3SiT[LUcBi9V%f(X'NP+Flc'hNqlSk1%5)j)*#J56RH&
+ZQ!-$&%*dNeqrNI!`r*C$DDTCM'@C"A%VQ4dN6h-@EAJqYLj6YVVN4cp-V)k%D`3
+"qej@j#*S%X*FD6E4PN10Bh`2J&V''#3fh"FJHS-)#KlFUreq`$Ih'*Scb+)Aq-1
+$4)I*RV)jc6lS`c3CTdVIcLD(DVd)@Y"pIRCP8cr5M4C$K"-('ST4@H'+PAIeD*T
+)C,Kf$Fc+d$(8V!#b0YJPji("TiSi&p-HmNXqLNmFZVZYLXb[f+X3HECKD4e2Gbc
+2Zp+b0XNR0SAUkL44[#[kHQ8951M8PIHVJ)SGB6b[V&B"[ckj2X39djA!iC8@6(D
+m*dJIE5CjTP3aRMSp'[,)N3aeMI8rBSj!elkER2FDI8S[&RYS#(h532EaERP3f5Q
+h$89#dRX4GmS52Yc'Q(dK#@DT$9,a&iYqHT6'%!C42-l#c&8eX*13!#`9i(Ec$*@
+H!"#lDA9`GJCS!#mqFVE8%*lRA*'6ac(Ch$PZDc35)D)4[2Rc9G(I[$6DT62&GV+
+jfZLF`lZ[fAb0d)[UaP6aaGIFcdKRM@+LeTSZqP`)9A5(l!rQlK1Q,!S6JXi4Va5
+jKC&eX"PKijf'MCG5'!NBrbcF'Kk48c!dI!SRiXB9'bdQQd8cb`l4[S83Jl1T0%$
+&d*U*3BcpAXHXQ4Gb!pQFkCUEB0b$Q-@Z++ZP"YS2&m%3&M%bFa0Yh8'S9K1qfG!
+*M!4AE5VdCj(KdRd)5("1F-IbRh,)TQNXC#P-%+S`-1#83)G,kD,8cb!*!E%KT!5
+de)B2%2a3#J'4EB4NE6A#PA1j%G[)+B1CLd[pN!!FMZAUCKN&GKULN9FkBSQ+(6P
+#PmFUhGQPf8m,Ik`Tb[F8T!'i@@2D'`DFAQ6D%b5Uj(("XPK3'ATeDB%,XU0mb#U
+JYAc%,0U99S46LLpS2%T1ddX0f)1*1k&TU1j8c`K@XPXaX00!AU0DFCkbqTM`AV4
+dB)r2#HZIM)SmYP1XK%Uj@8@@ZTZP$'cG,05hadP[HNNh!cGD&q@*GK)@(V`2"Kh
+1)E6m%S-IR%CJY6kp&UqVQ,U(QDM+TUMIhib2GA-"1$AX$2F#2`)V0Xp)V886QLf
+,,meKb3SYS!%(DV6,arcUU8M6c9NPe8NAAA3cp83@`c"(0,piKr,S6RfRXUZD5PU
+!B6AK"mSARkSY%BN9@,GjS`&3Yjhdq`D08!mG8kJh(%#h"*&Mic"lab305S(1R0X
+0ei@"pp*$QY9!JCkY2#cAS(`RmbbF"p-'haYD!+qdaZE9RR#V1PfkL64`@Jji)Yl
++61YFhr5`ZG)i@b[2&mFfi0YY!PrEr@62jAHc6QX!3Zf#(BJ$QP8@Uc4Z$X3j&XA
+Qk0-f`-M,SLQHG+(D!`89ii51i2XfJKUJDV"1!0QA,dAFLUU,TYIM5DXZUKG,2mh
+,UKF1!dS,cqBSXBbfJa$KH-4JR-T#9@PfSjS3Q!`Yq5Edd6rc+C*)4JZbKr)KZ!C
+@FC!!"*PJNVfU4L'BSA4l3bUqF(3&d84,!TaSV+&G+3RH5YV*UDV[Pb352e46Yk!
+*"H-5Da'dRe9T$kU+)Mf'p'QF*E38NF!RDF,D1&QYU$3$6X0'1)+AliE4c8imp2d
+S@GjTZq&ABCQiTFJPai`p"!4kZ8BFh8MQXqFQ%*N18XRBYVM'p@5,'m"4eD'TX-i
+eQZDQQ3'HRZ'MkI5-TXPeNrTJS'qkBqr'KRiM"CFMG#dbq#$,Nc8TG-A51r3X,J9
+D*'IRG`j1"iR2l9UH&U26GdQ*KeGLbV6j#R1$"AK@Z!@16@,B"HkiBUr01IXJii+
+BKEN8J3[bj2E%EDFYjf6E(D$XAUF+ASUQ*VQN$DHQq&#69,%)US*fe@+ZR)*Af3"
+cj5c!h2+I!k`*K'a1qHeC2m1dFq12f)l&q,0b8`kI+QqM!MK20!e61I4-5q"Zf3T
+YCl34a@!ZB9K'c%,3@dC-@lK4fV5pp&ak*13b8K`YiXE8$4i!NN8#a+6EM@X3(X4
+Kd)"MYJ#b"!c(H[N50L0jI%j-@J-1EJ2eHj6R64iFmNI$S*G2-X4%9D5B4Ni#a&$
+Gc!R)ifNF8l+VpC5ml4,&j%Tl2S9-UQ540ENH1$UXFS"@-dbAUEQ+3jH2mV#Q,QF
+K(6MZS5[FUT&$`ekDD"U@(Z1iY8X3Z0K*3BUVKmD$8C!!NCf%MjK3bc,km)9165#
+GKXj5FPX+(e0iQk,ABPqp5)4,QI-qA"Bc-`4$*%iIEKF0BR8U&Vc4G)fAV-9!AGK
+&KDRQfNR0GBZ-Eh"c#lp!bdZlR$,RBTY$U23j4U6PP`!d2'fab&H43)V6+1ATVEi
+Yb+R&$+LC(54Ea$'3!+QVJJl*!V%a`A%H*ra1@`,,$ql#Vl`*QIh4hp9&,acl%C-
+%X!+T@Ymq*CL0jA1hLld6,!C`2AZ8)+jb)&Z["1-6q9hakeNT6J&2HQ),Y#%mX8d
+ePX8YfB3b`frfY'c8XMLh1`A`Zia-L`d##X('ii5H,8`q!SmP"bLae4BJSG+E'1'
+'4)K3""9T+V%!i95#$hV+iF&j(6VS@F"Km1"SLCjXXkTV%$Q*5QDa01HrqSi%BjR
+dj4[!Sl%%,%R6BQ!pQJPeGp0)!eJq4fH#aS(V+6S5bYA6&LNE+G5'$R4i9H#T&Ic
+qD1lMJNTc!5XqE83Le$QJS8Gd*GFQ1L+l)iijqKX,2k"#mN4#3RqdrD*BiS%'A&'
+-@8GXEYEPA38aFR33c(&0q(+CC3$`p8bb-JAXTM!Pi1D%0&dN*U,"CJ,DTbDQSlU
+"2$)[Am-DCqQJ650,$2!QrHNLMRKG82QCFQ&pT'0BlDT(6*6"a(h2i+BSf)F6@4&
+0VLQF3NJD&@Fb'Pl9$RaD!X-EAKA!Kp1a5N2YE&Xl$Jp`BI'Di4F@"H-#`SVM3-N
+'X&m@Nb%b&kI`BcS&3ZCUa&ek81Ij#F8`$6-+9`6$0%fBmKLTYj+@+`m`cbB&idA
+3+fb@$GAiNdq(e#`iL-#HJUUa2Sc"dG!TQc'2,qKMYHR2Uk1`1d4X3h4`Z,1+8!e
+abrY962T(RGcJfd6a080&*ZXk`hGRC`R(F[q9"Gq@YE!&Z*dj&C'a(9)1CT4BM['
+4%F3pI'S5RjI12d(%c8FH[H0-TE3Q5mhLq5A45N8,'[NC1f`%cJm0,hCb)VF&ffJ
+rcl"3d@Q#jUPF44fFm,jX&@"&[#M(13rjX!YkRR+BciI!@!&kj6#bSQacCXrKbk#
+emG2XlU8'9VY!B1#`ddXF$dP(ES1lS#ZQQ#PfN!!'Tc5b(UbS(+Qa&c0TS`'C*S3
+-P6RfA9fmY&(5bAGq5bmC!'E,'3!KSV1"qU-AckiU"YYTk4lC#C9LS,ZLRjdC*p0
+L',aYU%$bXZjM40-bMh+DNdSfSJl@E0%)0$&3QZj@X#ic"8r)EJN'$*8ZZd$BPRS
+FU1BfdKlpIJAqJ4V8XYX,E$i0aEm6PmE$b,#iZ%mNdPiKHbQFm"!IABh9E+UkYZM
+UcGbYVkTYClG50dX[bE2CbjHZbKMPEQQ-dNhSHKMCk``ID+3Bb@9c&*2R%S#cjXq
+f3qA*mTVRTL8fC(m1-4iFFZPqD[ifZ++MpBeCXP&M[EKfBhLl,mMfT'%-EqE(M-2
+pB@3M@3dP+#-)`@G5*!KaARK"%Fi@$BQMD4$jBhCfD1)d-$qc'C!!149KlJ6@-qR
+Zf$G2(ZUF3-iL!fNj35M,6pkl-"p'U6[)EV,CDHG#!6'I0ifPY)6rZ-ISUFV169Z
+A@4KkT4AKX5R-!PK-R3A(a%a+@XUF4mI8eQV#B[C@JKa*iNaK"8jjJPL!%TH@)*1
+(aq54@Y5VS*Y$F#hfD'JMf!V5ir!$J6"9Lj-a,A3rUHRL9E+NBDHca!mkd1i(P8C
+'!Dp*9VJ#4`pdE$q'!Lii[3ZlAH!m(5mp#r)QaUD+S-p-Eq[J3DZX'IpGAldQBJ(
+J9$bk$%"J2@%l[&(3i&-ER@Fd`&(2dmEkMKIE[9pRM3d3!"9$B'T`jZKJ$JcZM#!
+4VKCh8'$2%8C$*pEJ3**@iZ+HVFFM,#h)"kj@*+T,15ji1F5)T&'Vk5jVG)Va+JA
+6CX2GZIlX"qN1B(iD*1K!'NkSKM&r*BDl4`cXd!*+X#*EbF(0,Y'Dc*,EHR8hXP#
++CGU+EmIMQ0PIr'*'H6Q!X#a9kkK&a5f"1id8*%V'Y4Z05q!!R[')T5JhFRQd`Lj
+QjZ2QEYZ'QcY@laUqZHr(laMdfI8JlE"9"HAcULTYCYUFVE3YQJmf#`VRp8*P',#
+hV9Lc#1c@VPfcS)1!%iiCE+Z9ahh[53XCUr8AdSjkqc*$a!`8ihZL,''SU,84VXZ
+)3pU4J%d2SNaX(8CXX4"Gp4f-F"Ckj5N)TcNlU5k,hQFF'b%I'haUXPf2MY4DjFK
+1GRB5NJ85BZ9bNDSb"IS49YQACk3GJhSCIhBDTX5J%TRCD'D-P5U2&$dh(JXc-5H
+Yh&!PZf3iT+A#Tqea+$XZhb`DS(!S)j%kV[ZY6FK3TeF'L`C$3!5A8U"S`ZrT)!@
+kdMFEGRNa&F#AZEXVA48P(XNQ0Y!-f4[!di+8fe,k@rkBRLjUbmNhr6%j+C6&)d#
+Dr6dcf9XTEXfQS1J#[ci92"I'A2"L0ZURJf$!J,Y5-j,JK&aa@FP94cl#GS2J"P(
+fq+8Y)TU5@JM$!E4)fX&jl)Y0dV'd%l(-65!N11MS&1!#r'!bX)YBEU8hBq"NIJ2
+RG[Nm"djQ0h"ZCGG"d%QI(3emH0FQN!#TM"('9h&V6FJ6I@b-AX,01hRSi$1e6F$
+hE[[kb`TmM[Uc!AY"d4dh*IXHUd-e@e`Z))$j"([BTG!AY6[NN3+qZkDY&L(hANa
+SmV8DJjmKME!,PKdESB`VRSh3SJAUhS*KT!)f[,bj9IifPJaXFJ#8$h!NDXH5"VD
+!K%BRC+pQ-N9Lk0jLC#-dAkTBJ%IQSQJQR"QfFFDS#)1p3UaB1-VQLPrdh-iYc"8
+@@F"*195iA"0R%@%KEQ()bL+,&KQY`Thd96lh3TUQEV9IDS2)TEpIY*IGcLV,H1G
+pD&e&0X`B[h1R#hjh-jNF-I"!YN9&GJlV-[2iX"lbI#SY4XJjTKTcJX'Em`i!+8B
+6lf3TJi*+fR5fN8&N2ED++V`p2Ea'mjjb9$!4UaiJBQ+U*$-#bV8F$Z#bce@6*DG
+k8X-K8NmY&h6+l85@RLV+2BYS66(X9&9&#AhA%F)Th!6hEEAepZAm2kHr0I&mT(T
+TfQrbUlj(26r6ljT,VYqDblhk)ArQl49Ul"qkE14hlHkAra$rUZp8S,RIE8"cIe6
+kBIjMMGQhE5I3R'mmKZEmr9VkrVJ*cGRBFKf!(VhUd0lV#26lkJ[(rchIGDSRra"
+rcFqqGKd#6&lpf&XSrfh`U&fLmhZSXk1h,qIT'hkrVm(IDe%Kq2jH!aY!(lHD[22
+[fSVd5eR!laTNYfeZ)hA*qp8pm8HHa6l$[cYbF9IUmrHQ8VpqCabK3KGmd1rQKN,
+m1ACL&"A'Y1AS2KUfqq94UeLS4L,5)5fiT*jB#app'Jjkq&eX-r`,6ik1h2+EABq
+Rr[P(rp4diVSkmq(rHaKq[bBfEpRFLY!5GKpmXlqG2V`5SC0[NIp[4XYJNrmAX-R
+hS@*8MZE`AdBhSLeS$IS0LD(I'PMlF53!hi4H"e!"rbM%Ia"pM(X6T5mEQN0S0ab
+"qacbI!Mb0+lNB6+1C(Nerc`+3jD(dI1c&40(Kprr&JNF[T6m2GI-#5*F8Glk+ha
+,N5cL5+B2T4e4`""jdhiXdbjCV)"1f5`dFK5ET9`!4Hi'FHZE+R#S(`(PP"kPh!f
+mN!#FNl-QJ9+Y%3Xap'Rm)F"Jb"3e0'$Zj""$Vi)pC+[-',e29"$AK1D4([mCeib
+qEi,'lJKRHr`""CMZ$elYXGUJBEr@e&8i&[2fSN'h,5a(Rc#%EF,JQTZJBVR!PcS
+ZpPVB0bTUQB*8fR5fVDa@C6Bi56VE)(h[TMGGkN+RMkY&mc&fqTI$I(JraNie1B8
+GiSQZB)F-G$m,REEVE40@'J!GVZ@(X)RGk8%Q3B9id[HEd"SZ16Yh(D'1S`E3$@4
+'I`eQG,%9+(11)Qj%HXMc-(S8r[jk0SrPadP&Eb!92BlfF"YQ-`ReML-'86'Tk+r
+4Sec9E*j!Vp-qA8qbIC!!G#$,TS3pUHT01%pr&+TkE$E2(FUZG+Z%IE%1,F+p3Tm
+HjZkHcHBaFJ2Jk@(SdZHKVVbM62M6DRiHYU,23irq&$dbZa84jirIEd4,q+p$PYq
+",0qGVFC`!6A6@dJphd8RSIDX(X-3e!kp&@Vk8kMmfqMabqKJjL"(*1K'NZF,N!#
+RQ!bH85MGI"[r,'$MNp$jEq4bABGcNHG8VHMYJ#"#m(rJGXj@j-Q2&(8YA-!r!Ep
+4U%&IFTT0hiRV"I`U1C'F&TFRK$2$VE&HZ"-3P@5RBd,AhB4XX`RH9K-f$T2-Z%[
+S1%Y)[M#b%L(AqS51L'4UqL4i(#4TY#GT-0m[B,dDX1U)9cr,R&mN)$Xk-cM-'N@
+,`'3!kmTL(i!!&jB#*'3A!*5fJTdKB6GJUDjJ6Rc`[DD2%I%rG&f@ci6Zf3PGTbS
+#-jpk'bJJ,0UAY4l3JJ9@DfTfb60Y"6qVJeN1D&Ua&GDM,@P@JI'H81A9T,fCQ4#
+A3PS+'8r5rj11,M),K$U1j!Y'3F+Z4F3J)6I#q5mM'bim'S,MY8SlmbPcQc!Yb`5
+TeP3@-FN)-fQSIe*B1'&T`*e&ST)T,rj)&JhM*b)`GlF-$'$X9Y)1ja*U`5(*ZXC
+$@Q2l$Z9%YhE*P-@kKP'BHVd6X)dfj*ljY*V8$6ThiYkfRPi@cDE$%p"e0%kr08l
+8GI@4#S"T!hhP%EX0'LrQ[,RAeRBhJ)i$cKDLa*'3!'11[09T3pPK9T)P$LC6V$q
+*%b)dCUkU30Vh`!B%GJ*ENSSlLUH@IDJ,e`pB69i`b1BG9JXYQp8'+D&hQjU''2(
+#,-SD2HfCEFYQej)Spk0A2H`CUaeC,[CHfUC8jKf-%DD"D9$XApkXRJ@8$G8$`m4
+X8B`e#M"BNhLLk@&3,"Vmb$E+*6FGchJXkINUHERH#jC$#T-KeYkDKC@*#*!!5X%
+N1J0@Le'eHd6p*p14%FdmjZZlq5%GK'#3!-ZmiV3YaI[*cTadfjE@`6(,,9Db[[%
+LZ+J'fY*V@T928S0VXU+ccKQ8#LE``XH`mUB@-X@cQVJ4bqaYcNQG#H'CpN-@1@"
+Y6b#0Hc4,"Jq%-TV++%Bm`CYS-0jV,eTe)lN(KBD6X'hj!'TjQR1l-3'5h90&+`B
+G%fF@ZKUi#0Zfd5lVLUhYI5X0Xq,9(HYCVBa@qGR,k4HHa&D-BIQM!&6GTjaHH($
+0$Y%R*Tl2)c-[AKGDK@8*9Y"NFY2`-IU$e18UA-q0K,C9!!R*M1bK55DQ8%)fdTc
+CTi#c`i&dh[@3!(K6,Ld1p(T,9bL6&T!!Fdr@UA[r60dNpGG*C#5A3L+fS1a"Qq*
+%TPND!Naj)AlR#B4RXH`lC)RGDB,B5dp9)TplLHk2d@K`lVB'Q(%X$2aN+K-FET%
+r4P3Ame0VE'R8&IbU(jG#P00K21Ha(Cl8JKikMeqdj"Q85V`GlZp*eAR*l-BDl&m
+@hi@%6f-02ELq'apFA6MdFZa*YV&QkJk,K(alpD8i5GN9d4aiX4SP[D"M"DAJUbZ
+k8KiJRf0!XU+GJkfKVBmMFMS@H-ClrARC'iY-5VSNGm2TJ*ST*p&TP4GbJ*-TQ`F
+%4HP3c9M2C66i2C9b+*I5)IT8dZ&TYqJjZ$PPcjbTL5m2-'8+Q8#Y##U"l(0!K2X
+R36p4625V[#N*RVTqHT1UcQYXiG[S"5(dV9%I894$$96k&YM8K5U!MRim#K0$V3G
+c8%F#h8MTda[5&iB&K)[%86I6#+JH-RU-(6r+kM"DH2'dkB+R4&1e9B4b6Rq+[+R
+E!Zf(8jdYr'jShXfQh!EZT#m9(mE2NT'pE&[(1'GjYAI-&3G*8FGpb5UVI9)dN`b
+KFBJ-mj2%%'2fPpKHR!12LpfKj8U+&RDm#UG!alXAY)BC("dZ'%19d846Uq8@bF)
+c2@q04F2$DCG8h$DPaa9)h!ZY4$CY1*GUjp0(L#)``p@D2Z3B*b*AY)K4E)`r'@G
+A@9qFT``2"EQH'KRlfRDXfFi&a"!Gl%G[-NrVh$Y0-[&j9eYZ-'Df,#6QH(cVIUT
+k@VjYlCBXF4@G,2l51+(ZQ1TXNiaM,,8fT63H"&P#6cC84#Je-E$%(9G%USDU3dj
+)#cdl#,c`4+2%BQp0Gk!HQHMbK3'$,PThT4)pRN5VmS2'AM"!S10$D&*h5U!4UrZ
+*5@*@**pQQUC"BECIUCBSQ`2JK$E"$a821hU(B*)Z+4kf"!a2Lb"f"!klFSDjjQ%
+JZS@fR*)pI2)dia80f@6Hl2qlb34`Ti2Ph&A'"XUdk"eVdZ%R"[,-K(15K4I[0fl
+`[5"DD,2VI,k`UIV0)@bVVH@TX`hljC@k4kXFlpINX6-aQYHDM,@QMaaAp4C@6f&
+!AaeYJFkT11,34QCEACJ0F@`cH93L@XpmPZ[!XL2FN!!$*#GF5SQk4Sd@fL8DE9f
+ID,#aL8Pbe2-b6$cb1RR)1a`'CKi45'3ZUMZaj8h1b"kN3fE*"d*hpA,M+,V,,YJ
+XPeDYcLK)cc5fX-Y6k,6YP03EKp`fr"4L+qf%6ZTb@F!&*6eqc%K$PEA'bmVI--%
+M3pciK(hT,-)`T5ELF1#ZGLH[)R),Hq,q)FI4SlpehFHf0G+*bA(E3NSBD'2J8qJ
+aa%c0EKNfAEKE@(-a,pUJ@*k@2F[B&ja$fE(B0%jHh#K)&p1LPHhmbMf$&V`Z9T'
+`J#[%10eS,J-B[LrYHRjk%Z1&jSjVIeR!#(hfC[,#`#85c-Y$Pf"2[3F6AAYI4M"
+j0e461kdJa40[#!Ac*XJ@"@M3cXXZQ(H`2m9Ur3B3a%db-cQZ[hB1Llq1GZ`!A#c
+9S*0Q$aj@3ZB3*eR4[mH%$d1lD@8K52G9Xf``i*DQYd(L(PJCQ#CY85J3p)SUkD@
+hX-aiqMlDADDlbdCh@mMfJm`5[9ZY8b'%8SBKIf@9$YD'IU+`IP&3[A0[E+QXai[
+MMqq*JY,b!)UAahEVRVKl#k9ZKkYGj!aF2!U'%A,P,'KXQU3fB6C8JrN5,'F(diY
+a,JpKmkiFqeqBRR&8jV-c9UjcY#NJBU9*fNSLcL15j+h+%KMF)1Xfd%kAbU$)T*5
+Y84GPRiKT$5!bC39L!Aa-Z%+C`KE)hk&#CdlD*FT*IAQR68UUTfeQV1LmV6%8lP+
+lkeXcFqmkPbRD#i,#`F3I"k3Di#8L54cMP"!FfXCG3!2'iPZ1F'i6A(BD@ej`I12
+fYQjX@[l*`eUBc&Sc#NPRSII&@Y5Jr-3dS@l`cD!ZEr,lClM1S-Q#dZ+,EB&(TY-
+,m-)ece14Qh4$B9PCBU0rAL35HT@faZpTK0fT[J0Q0jG8VCdajSJTj+[(*!U&rY9
+hE$eYiTpepiZpr6eYYdc4E`D)2cmL*a$(Y#&fGII"I'$G%&a8hP%&Z@5@E@rVE1Y
+V%ffGRHr[-4h$jFXl6FkqI'BpB3L8%*`c6empc+@M4Aldb`j$NAE$!,jb!Mi"NbR
+$m(PTNq(*D%NiC36,Laf-`FU0Yp$FT#`LSdHlGk,AjE%`TkCR2r'+E8f)98d&SZb
+9(G@RpZTE%bdJ`3dd,B0E&jUM(BrTJM[1+aBh1lCl")E2qemmIa19iml2j&A&U@9
+CJm'Y&61IB8mdRLCS4$TE%hCJ&[iQbJ2X'*N44V9VU6JjG[Mi4Vh--r,EC$brm13
+dr!TZ(bR[-,fXZqf5&bSrX9c4$1ZJS[BNqbbkZmLYAC32`1JHCLLip!")fN),T4A
+%T-Tchm0-3)NC2ED-9Dp3&id3TGZ8YkA#Ch+2*"!XP36cY-m8lTik$QQ1'GK-#q2
+hM"Q9FeC86-%J8)AD"h,Qp*b*C')&T6h3aT!!#ed%F8[-'kk0US+LFmB%iJ6$qKp
+(T,5D-E&3D"Kd%m(q0"heA#UGM4EAEMb@,%"GapP2`+l$UP`"lUjN!$kYIf#kh06
+hXjm"2i1m92dNk%-b1piGm,&rLJ!TVjmlL55Pf6Up@U8C"a,##U@c5S"DmY6Vema
+`ed`%36D058#dc(KR5mK'*8qM6Ubaeb!F#ReVkD9QFUR2,R(NqGr`Z!@HY'+Yf'r
+*Y14Fje1q),Sll9-m)3Rie)-JbDjN(TI1b6J3(P58icD$-CY"ji&2DIC+K5CVJMd
+MQC1G5Ef-NiGdd0RM#PfBi5S"iaXSI)-B-0G`JV@8M`E*)D`P5ee#Sb"+2#Zraf&
++am8&SdHKTG(RNFfCk3'Pc6&qQl2Ke5Z&'VDXP"@%B,S9CADIZ`bV0('8PfP@&Bq
+hXMk`&NjZD6f8+YZ+*fka9P0"h-U3!,*q@M+QeH$8k6SC3fl!c3%$c8ibUh9d"%Y
+*8bMQ#2I16cqGALG"(SDA6jhCibdM11@h6q&fT6'5SPJPCBQ-pJ$T8EE5i-A3E8(
+0l,mqP4f2R0dPP-P!EKBT6[HPB'I+VNijj52IT0!([i*P%M9+ckRCD)CJ-2f#Bd)
+Y@E*E`8D1$E2C3eaBGb*K%Q340@I3kLV5@LHHGQ6#DC)c61F$68G#6!#4L8P4Y$b
+*Rk%L2LHD%FCIiGA*#VHee--Y-p(*L,HAl4HdhQ5`kmP!Yd383bd46jGKaY1YR[f
+klQZl[5mYjU!%P*0mRV69BHblITF4$2TdMbMm3+FVJ'IT#"T``lV%c1'f1S4+Ha[
+56RQ',lR)Br0aVSSiVFa!L%%#)&(Rj('3!"G$!$5md&+&rB"'aXj`0dc(J5c'ekH
+G4AY2pMb"r"LJJ9S%cFX50)MQ84D*@aMk8$9B$A$`!SH%Y*fSH+*Jd4cMh5lcLHB
+SB`BEV$),h&R$d$6qf-FBDXmCHT)PQj9'GCSb1Tr4ZYG,Mb`3Aq*L5HH*@k+9Ak&
+M'GQ)B-PjAYi4pF%NUpip)X*jFLi+3hK'!45"lm,DdI2i6(%+KCr-90iXQc$'#j2
+-"QV9'*4$pViPU@-(e6UkQVXaejeVN!!bGm0G`aJGpC`*Rj45JS,Bc+T'69I5GR2
+f%QlTkHYSk@blNP0pU2E5BL[GhGRCeY,ANE(%&c[VlCGf#b$RB("-X+qpVEHMpdS
+&dF4UVi3plDdITEHZ9jHU[k[I"Y61CYPNM,@AG&pE5hY2Qlfljhe8"[r,RH6hG0R
+lQm%Ze4eYV9HbHb1ZL`hEfG[bIVYJeR8*S(YkZP[DfPSlZMDr$j!!e0"U$emR#ML
+EIQpI$k6@6B@#mpfZ-0fTLlY)0%p4"6"B8Cd+%!NBYa`BF3&D#%i,"$3hbTEPm@D
+55pZfhBr1V(9G($M'CbBd,`Zb*"54DU50G[Ybd'hVhVUeVBX0+-e-bYABVib&fr1
+l*ajr&Ac*Bq@aeU'M3P9lMcmKYpRGRrh@hYfHUFldk#!eCdH)&qjU[Xa6S&c@"h!
+bd(TJ#1pG$SHCG54$,%@$JV-imD!arb!B!bG1*cXD81-eNb+V-p2LF+ZkTCU@&P`
+![dpG+Eci-Fr(5+e$h!E*%'9i2Lf6(HDQD1f2-*V9H-F!P+aK051F0!l,P9Mf4VJ
+$"*JH4GF3RdS"LPSb"QpUT#EECQ,Nf1*5XXB[h3*l6YB8C![C&a-Z9IMS9+3laRK
+C"GC&N!!@iN'09)"jCNX!KF[BUT!!lLE8Y`m84*PI6Mcc`f&mbR(*3p@5Re"6)%6
+U9Kp!qf##J&irkJC()e3A'$b(BG,b`4,*'aKYhZH&pIE5b!ir+eHA$4#@&[1ZCr'
+%X8J#bG(!!C89BAb(l)FVDI!L301"$U8XU80,#cd`Mi$QJkAQm&&99c%PUM"D(Hm
+'0C!!Q1D!!EHdCT`Yb6'4-5`rD[V%B`lid(mMRc$900DXZl2@3Km5m@R4h0KS%AX
+l1SfJMMeHmi%I#U3'2m2ESD!NE+$!@#Ii+&&R[SQ`GN`-FL*Q!qZXBF%(q`9TTRE
+fQ`LP4hV*#JML[S)'"i5'#!TNX+0UVUR&'FkK)pPNkqaYH`mMS5-3a5F4If1AJ@1
+'D![@hm3H`XK3A01B'(9*3EbAmCjm4`ZC!+UlB*B6p[L#aXe5cAV8EYj%UBEG)fa
+)RaY&kVjPp%--R9!aiFES+XceAfD!cSmK+l%AL&Cdq$9GkYC25PLF6%KAVSqJ@ZI
+YX@5aQ#UMBB8HT3Sm)63pUrU@kfSLhR2CJ#rYRl4D8,db-E3335MfK(Na2!c$BQC
+p4[SXP%TkDEIMJ`d0''!%j!a-4&L2Q!YK1bM6'&aq+i3,'f`9E#q)YJ2%B&NANd(
+5!@6MQ[H5QJHa"*DjKG`RK3*3YRGX%k,XDL+GYY0NZbqm2BaYh+#aXlj"URXdJ*F
+EY%SM*h`l`A9Y[8jX5LG4d8+q5%%3FCILJUY)VN'K6T-T#4PEd53D4UFHhZlTa%-
+0bYC#b&AM"$3ApB$rC9brZ"Y9fJiD4P+,VQpHieTGN!#$lcX&b1&plX%-hcGXD,E
+[$JSX$*b22Gc@iCcRp-!EJa4UUcbc9BqMa0'UY-ebCE69`%P4P5JKmj'#AZ24JKG
+FF`Cr`Slj#52QA-e,EXaEE[&G@fAb+Ncmc&AM(fb&5IFdc8)-KS@3!!30*fN2fPB
+)1a*V9IM58@b(LVdhbP#%65GQNC!!Gb%j+c@bFeJUmKT-fl'd&3qM-+INqXJ"i1C
+#M'N'pR4FRqMfT@1D*SLp1CkGXb6[l9`ATF,Ac8@Sb`-kHbSaLmJ8V!8aZGicAZk
+f[I&keMlSqN[AaIAL-f#fq&66*K3Bc0362Ll5MU%9ff*%b+NmS(q&bRJk`f3d3IS
+J*fGefkLcE,m2HXGpLJk[c,N)+`I&P")dY""6p8Z,@qGNj1M&8RaEj8`f(a8h'1[
+X`N5EJr@B"ampPTFJNfpa4i#5k(BibSRj))Vb,U0jQcF&q[@KlC9(df455TfZq,'
+9TppJ*P6kA+8c0)+-c46aZ#b&$#dDR!,Vp1VLe(2ED`Y'a8TReT'G96,`0ELCBDQ
+-f-"H)@N1@dUj`ZV8BhXSZ0`#,qpfmTNaccR6L@iGRMRcD)fdRl3'XjTQU*IMe0Y
+41KaTml'f4h+G!9)JR"2VVZ`AS'9)[Je$cp$,PD",5V6X*#mbLBbU34!bXIj!cb'
+,kRap2c'[Gh`,YI0@6MQkYR[Al+P%Q*%f)dY'Y0aN`eKl%D'cB3JVJ2VFBXqSPIe
+N%rLBe*`4GL#B!@!R`[,+VBaFGi)*Y*N3pI3@6NZIb`cj'f*[ZfQ)3B5T-&&e2B(
+GYMeZ0T*GYQLJJ2*#adX&jS"4R#X,!,lkCla3r"-e1pA%T4Z("mCkm@DQ4V3b$fD
+)daaF)''-)ib$FS-$J*Pb02E%`KZI"%!)KQ-#00F3aYM523)2Bm-Fcj(5hd[[(+b
+-ckFhajcF*@d(d5@Zr$$S&*)MUr3-V',1a'+6Dj8P8pi*+c")+X5R"(AB1(Ha,')
+qc[Z1@L-AHr(eD"4X-4dD*JB[N!#BQNeAIG4#6fl5'f4,h(Yc4ST8&S4KJP[dT[S
+kN`R@IMF+6,Yaj5%d)j'9"MHK0m'PI"lB131iL[@V53h'`e%C!1`#e!-1e$+@0@R
+("h+fBXH%4r1SH,$[E9$Bi$q"YG%rrc&9e@@J$0BbDd'ac!(b1RAA,+d0Bh)JI$Q
+XZMUEhA-(T"'B$c2B5b(C&SY-I6pCD5)L"mbB05*B%Xd8Fk2CC+S`V#69#6d!8K1
+#$GUr`#5p0'i#V()GN!$c(S%k"N3ZkFpfhBSX&ar@JG!m'K,TQB8i6YPG`jl'00`
+H1Hl%JHVAL0m!ke[5NUQQU(TD$`Sjf5Qr9X'b9Mk2T,Q9(3ZP(*G0YYP3P5P$4@p
+FJef5V,dZ*feJh14T1H!"e,Gk#f0ld'#3!0lb'hTEAdZ06&P[jMaFL!E$95&FalS
+)X+VS0)p(5UfK1VH%m-@`1%U*DeS(MU(r,6f0GN'M5&I0YC!!Xp,paVHT`!QUTaC
+lrV)@EESFUJZ#H,D+0TcU-bESC9m`h5HkRGII32I&QKDebcGS-f2R8&18P38A)iF
+(J1U"1ED4%UBJ51Y10jVPjSaa"pNZa1B(qciX"I$PF%Ub+T`B#A,fqQGFm'0FN4T
+mH[)EJSNc"p!I53r8I3T12M$%aJ422%e0%,'9`G1!6!C69hlY6#rH*QpUYXDF+Sf
+(GM`dAH0&iNfS!iN2KSK'RFiTa1GH-ClH8@@03N8b2a@h0-hQXiSV+VA#CQYiPF0
+H*JF1j(-RV@iql)#lYf6[(qFF,CRKi3H*0-6EVF*c*$-l$!29eSICr,6Y!E3FQ"9
+9m*'d@3!*+JY`-BCG81X4eM)UbJX#%N*2J&cENX$QS-#1A,Q`EZFVb(rYRI%LSGA
+NjpA8(Ba(@"hmcRCqr@,c9TXGqb*f)ITj,l@TQRrlherqcCk$BZT5FX1b9'Urf(p
+lFX2DrRjal(Kb`qUaXEhNiAeMBb6`R5b`PJjmjcr6`&Skm1-XX(BA#ccFrq,HfEr
+IfhY3[2G#FN040a6meE(N"KjRZaHq$rG$+aj2EZ!fTrDEq[YMbCZLrDDa-IMqa0K
+"dlfTH2+QqDN$TK4p`2GhmIGApqM1[A*'C8(QSqH2f(ARM1I1U5`6UJ0LkN,TqMi
+*$-krRrT(*Ur)p2[FFHBI'5JK6mRd(ijGl5rH)XX,E,U'-r!22ET5lLS-%%bKT!m
+8aUETb,TI!2F$c'&P25PQ8&dbf@TYBq%F*,S98NQdf,Vq3iqY*3K'861(JH8'4N@
+K+FV%k$%TG&d!ek,1i@FCJ"A4-$Y1qa!0ZAU@3mXL[)A5kPQfB#q8+blPF"MDGY'
+C'3DPrV6QKj346qCbe#B'QMT6K"SG-k((-1dC(!R,Fji+N!#3!+Q!-mZ%RJT-C@$
+Zm`bP3a0P'2cR3eiAHeN!*M4f@r3NJ3P161M$15BdQ$hM'3*NdfMG%Y-3f$#GG-X
+5',)Ce`[c8&4RqBE@bHK1NKP$"5@H5lmq,3l3c(1A!QGba`3,"J*ANh8SHS@V3+F
+6('S3UG*hjaE$4EXI6RhhG2kb!"ZUVGA'Z#Np[pd%jkA0"DFd`1&UUB-e8pj+&Yf
+CFV!cD"UGQ%UXG@PDT2fC(G2-&qQ,RNN[fLApJ925(jNN[HKQ&"L!#c(Er+k40V%
+9D$G*klfFXPMcjA`39YNFa#D'Jhrcd(0rqG,6lrcbc+p2IIfr[rL0EarrmZKIRAl
+qldrq(5`Q'kUaF-k1J!I[5Y#T8HA*4f'*D&e8%AQ6@*qQ8&#Mq'a0,D"Y-EE*pem
+lbidhEqBJpJ#p,hlZq2qp,pl`iTkVI`q$KY&'K)V!2hIIX[%@@`rFjrl6*%hjTDq
+aqjcqVUdJYlYASl9`blX,r(6hSAI"5re9i*Ap9R54kq1+4!JTFI"5,kC(bJQme-q
+#Kr%4C%2$k$EZXdLG3GjVi2rVXiYll21L&emq4NaMASIFdbF8HJD5-UB#ESA3Tk)
+i(&ic3NJ)lY)"6S2!Q1PaN!!D&,&Q$h@!Q'PmGJNU2F,QP&Z(k-h`B#9SdVQ3!#"
+&8hK3V-3U0U-l3HU%VeaXje@5Za[1(T!!!jS-e94G!9XImU-9J,ChS,p&6GcQ(0T
+HMkHB`%6prRZi-56dNDrq#p$M,31J4"X%d(bjb)Pk2Sh+BAcGMelN&R",dp-8Xr"
+DH(T0lUlJDXeKj%i86Kh$$LRD&pMXNp0eE-dAH)cr4AijqJ5h#,U`JhEKH!ThJ@D
+-2858(I6JbkL#jlK&J)54+dKS(L(1052Be*%pM02,88HR5DGPlIEdI4'YiTF$3Yi
+-rHPJT!bL4rd,848djKEZ-2SipbcHKHlmEpPG5)D4Ub#1,bBQ'C&,6L5RI*E3HTk
+I*&a`6dBNBcNRa5+If*PSPS3&!5i#BNmlU,J4h33EiRYJXZa$2m5Sf"(1SN,-`,F
+h4(Aj21rcH-R"!R`[l-i$94[*pSj'f*AHa*L9N!!Smm'LU1k(&2EXISLNDX+,FSY
+,B8GX9iI#'qMZBaZLlphdIYi8@1RM$-L)NG+r#RET(4JTeH388SK9[B+8DGRp[i'
+5HcRpm5,Y1ZeGd9d'5Ha'"b"ph&mK%`$LM9`cUZ2qr--*kpHp#"E$Xr2a`M1f,!2
+5GG`N'89cpDh43(9MhC56+EVRm5LU2JdANf'a&kJlU-DBKH09'L6I!e%iQ8mj`F`
+l+8)+"%KkpQkFZS%pV%k'L$5E+mdCQ'0RfkU)LDU`1r0CK)DZNC)DMf*TB4kqh4V
+iA!EjK%B3Z2Ud*K#kGZb8!M@f3!6NB"DmeV$2Ak1%20F$Q2XH5HfVb6#UK@Pf#rF
+IZBpchm"B(4h,BT8N(M[`T"[%9PEp38K#KZhRX&MaZhSa%8K$'kZQlJT-Kf*Y3"#
+ZU6)qZ,B"3Y@aAN9D'ZA8LRJ8I3$%pVL#Rf+%rShK'aD41UPFcV#+QH0*Y!a0$5J
+C5G8"[a5!ibf[MFGr#!Mb1Blr9h3[BV*j&5aN4p4m3`@T80NmI$VC2$b'$&%fVj*
+4c+YN&I13!)*i)T@FBKiAL[0Y"5[QS@rr%be"*Z(Dhr%IS-8SYjHM(KlbXU3I2`m
+h(Q3T+f$lmE@T,3*$KVHE"%"1CkKrrYD8X&@"G9"a!VD(S86-h'H5pdm3LI$KD8)
+VYA`p@B-6HLp0k+UAT#m'NfQr#++@Q4m5%MbpNMYTNIGI6i#+&qB3&eT*+aV,9+U
+Npk5+m(4f2F*f9)F9kUNGUA*e2DS)9cHCBZ[!ER1EJ*HEDRUjUGLFNNXHp$Q*(JB
+%NFNjjQ3`8L2mU4Q9G@Y"#H8q$1@CS(LE,`ahf@U2)VQ%9KMcSp#XIEH,iVUeYCC
+kSEqQYmB'26VN"BQ8fm4DFehe1P0MYF959fr-[0EVc!f#@aTD,iUj$*Y--(f*e)j
+lcb53!#LQr"$I@FmU`ZdY@eYAdD[8KcHeG+f#-6'`&CYU)"ETD!33L8&XPQGC%!Z
+YCr"$pbK"3S,I@'-5+jm@@i&AKT9M`9YPa+GSPMLIJ@2l`@DiQ&+Yai$65Qr+(H'
+l9b5230*de%pe#&"8rD1Lf+Uk8MFUH(IM,L$CPQ!3a1L"F,*Aj!-SiFj!,X"*M'b
+X@B[MEUq"53%TJ!PI&D`R`RSFUQQF$6A@NSGSad2Sl5$2E&C)3N3VA0@E%EhaD[E
+GK#eLd"5L5D&R@a3QeQaN-b&EFS9j&V,@2dq@LC8N')3UcMamZ3G@fYq!,d4AD&'
+`Q6([`pGhc!`V+3kQll3V`clJ9facXbiU4F[[Ka6B`FRK+lr5lA%8'2Y(k$0fd!0
+4m%q@#&P,8-iGP0#$4CBL@)%+ITXNABaf0Tm5)HZj1I8H,-rHGD3%@*10r,S,cc"
+jBPCfK3`ebT(3q5DTD,T*N!"ST9!ZH@qDH[4@5K+"f!0-CJ`"SJTMVd90"BLTPZ#
+5+EKbXHi0U*l8)9(66S`d-`hLm5TF9USI183K%29-lX)3P2)p@350FC6IM!Q,hUM
+ADQ'"La8Rlbm(+$U'4id'cJbhC%1j1mU'jcI9&T4(UcNSckT&Q*!!Z`&[e!SDld6
+'2')[9102cRJ0`5XDeU%Np"hSlpQ*RNCI%"`Z4#85-DdfA-9Y5H#ilMLdf"3P+#S
+1TlF6f[L$jR!eUcGFc3N1)`[cE+Y6NX2QJS*S1U&8ZM'(cIVb6bNFSYQ1$P-FFcQ
+FKLE2P'MU[d)dKk2)3AV`Kpkfh"eS0X$3SVT#N!#c"qrHf#p*UGrV[(*TEK9Xq5j
+!iRSGA!5QUaYVBC-Rd5SXJR3UU!ZeMHR!fl(d#HU(*KS%c#EG%ZL#m&6#2#C1&(V
+qAY&L"'U@,f")X1"E!aH!+B`SBY&C%kA1k-+a+FCM4RS"5G,mmKV'TD!d3""5X96
+ESKlD3E8!`A[X"*AG%4Cd@)"T-kr8TC0+BH+!RYGGXrr@Uh[PB$D$R(!dQ&V)'br
+I(#YQ5h@h-c+$P9Pm'eQ!`k@Gk`aG[a0*2iSQ5`BL)#KY4,([%d@X$X0CCb6G!#Q
+"d!PPI@aU,%&"3f)aqiK3DlVF2CjQ%VfBGP5`C2,HPh8q)VlM@f1BL!6C*#iDJk,
+"LfL%XDe8DEfiXcP'aURcGq(P!JCrfk!a'!ah+6YaIdK@#13h`&c[[ha`TQ-0!9N
+hmAG0G@+E%Ki%$icMDCPfl-3cN!#EN8e53-Y`'KFD-f8,'"Y!&c4&BXYNI53i30p
+BQmk6&M#"dAbl2&!04K8%N!$-0U6+HC6"E%%GcJmd5m`jQdr90S'He@qj2&K%hNm
+(ie)$"fA"h*KZJ#5fGbAQ%8,,8I414,+#'Z(F(aKQ"[&Q)+k!,l1!9'TVTpZUFfB
+KT,LL$0MFJ-RP[qh0IU%fJ`eT$C0aPCS,`11L5V%D,-39k4Uc"YLL&@3LS!-2X5q
+m31**pJR[HQHM+9h'28&`Ui-k#[$5l'*NMJD'XG8!+JMGT"CVDVF)-&3Q3NS`#!(
+MFJMc#eSHcBjNI9'4aV"$`+P+@U0HDV(cQ&Bjl8T%dbh#fQTEN!$L4BTNBEi&(pf
+VM-LREP!B1m)!pDh"(1DGL5jha*4J-$)+MefZpPDmDQUJ#!M`UBEdTG9T+'PYM8-
+q-Nl5!+mMF15iXCkZD3EY$Y##&$i#b,e!B%aGb&D)T9&pUi5RLGDh)`"$MUD3!*e
+eA!T0If1q5(I5qNa2F)6bQLGb%+%`%-UK*dF$CE(qXI51#3#D$8@'Fh9!'5)0X+C
+Lf6H4Y+'Bk`8UGRDYcTUkBRAEa4D-`b*X@V#6@LLaD[#mG0(5LlE+I98X&0$0Mkq
+2Z$A)CNE)R9'!"H$VV,)cpe3)$a*F(U5'bVT-[@NRX2EFR!ieB0$V%P3V@(X*Hb-
+Kbe[0F0@Qa3#PYNl"#%aT(f9@m%QXVCBQDq+IjfGbiaHVfT4K6jKj5ASZB@,bS,`
+GPp+CPeNjSm*(UQ6qpeqTIX#A[[D"IX"(dGpaki"aEElGEaMqEhUS5$e4b+NH+1)
+Q#Y@U&ap)rreR&[%9p[hRl2Y6UJGF"eR1caCT*JSelbA9d+qNBrmm(I'TDi582U3
+GTIS%Vh24YKaSZD*2!!faIP3)MiqMB[Mk-RaIa4HMGDL)Uq*qM2)c[1EVi+[#90#
+AL-+XaBTr*ccJL)d@&U"`EJK)1eF5JF&""'a-'hjM*3-DB+cf3MZ!-CPMq2A%3AX
+Ad6%8DVf)IY(EZcD)FSfR"JJPmY[VJm-feXF25,"1h2i"DrTDi&BG6jR4A2EpD[C
+p(IYq(I[q1IEpH[Ep"[Ep4[Cp2IYq%rYq-rZqJAhr22[q*qcl,HclVHclRl,[Yl(
+[Yp0[Jlqb!ECAG!A%2+mQjcPPHQR'0Rh#AEQ$U*TA5K1BdqB+eNc*J"#D,A*9UXH
+dqia)Mdf8#J5ee(V5RRSMQ)U%YL+T5(%C(USBhHCXlkE$Eb"F0H-B-9T'XK9cf)m
+0(q@qZeHpG(XrLRV[6H!5#cbS*F@2'GZJGeb1Z&18qPZZ&&dHSemPSTY"lS3S&ND
+@rN`M,bPS9PpMpAbE5)F`q&5#R$fiH%dT1`5kpKDp$lZf`884+NV(JpA51ZmGA!G
+)UXKXRG-dFb,*ERI@3[PPUq&qV+$98f(UkQSJ'kCbBfT9#(-4"'[Dph!F8d+2Q'S
+CpHr#%ZZmp&XCaR390&k@@MAQ[@$)"''eUBe%@jF8cl6GkfIl2I@rqXhfL-66+$B
+@b+Zk-$flK&i8RKf,SD#cNDH#L+bD19*MHZX@@9Qi`)Z9N9c*4PiZCR)q`G+QF8*
+T@Tk49Kh92V$UVcCDP09e&NTq-`SeNjHAbh2I*)*G$LrlPJkmdrH9!bdIk62aEcd
+kK5aFj8cZJiZX@QXC+SQhG1mq%Xml8&KGIcT@SSPC,%fAKXl($mirQMcc#Z5TPpH
+G6+bIL#hN9Mlj6kT#ACdiUPV"jH'AUeT8aAV95NjF-%HeNYqlS&J9Xbc6R4Y+[$6
+rm"(R'Da@T26llQpYR0jAaZ$@3VpIDEafAb&0RUqaqmVAIRpI-ABc,KaB6,+R,b`
+I6c21F,E'HC*T)H`a-9jCfSF4ZB[8f4fNcZiMGABIUE1l5*hG4HVX,P*RGj%kZi[
+8f9fNcZiLGABAUE1l5*hG4HVX,P*RGj%kZi[8f9fNcZiLGABAU@G`8cC`'$&PC3c
+iNkF4Nh2a0U,a[H1))V68i6TLHhlQ21)bREQ2T'd9V!5$q!%B&fmPl(PAkm#m@lQ
+9D29fbc1VIB3hJM+mP`'F5eK2erPhlGe)Y1T5J#2*fIipGb8a"CdpNlKKm0-l56E
+p,Ke+c2LiF[8)!b+F2AaF-)1AhLe#NVLTZbPR9h@IUjIUf3AFjLdfm!a+AIhe2VT
+rrdVMRrE[h`H0V[I0*2qpaGB&-E8qAQG#Qr81rB[U!m-[aj!!!h(2UQ-)R6hiV4I
++c,#&[m9jHVI1I8p6!`4pip`VPK@@jI-@(h1lQh9ZYpY9ak1Q""V&ff@rYEMi"Pf
+a-F'hU2FLEXrH&5AYq3P1j20Mh+4e49PjIS,IUd8aY&+hJVI(82k$$jkc,$1rP$q
+ra(PkRqjQ+2'c%k,'`8q)Qq$MG8dJd"KqVlc5rkX4hGph[dcIaaqlYVp6+GpLqrZ
+h%2G[qlYcMR0KJhITRYlK$5-D4('SAS`'I(G45@mf!NC+(BE[fF#d1dLcR9lYGEF
+IBV[p%0[YKpKZ2m4fqb'ff`qahAk)lIC$E,FIBV[p%0[YKpKZ2m4fqb'ff`qahAk
+)lIC$E,FIBV[p%0[YKpKZ2j6$90R!GZm+HfDrGeNA0hbESEIM@`5A1Qcj[[GRp[b
+3!1[-TTmhYl[V1iL8%@clYJ2&[Tm"RMEQI!D8*qcmYZj5J+hrI!qIfrYG5@FhIiZ
+hrlIl&e2ad[E["XTcqlmXfZR-##H!'1Q[mflrcc+FZJ$%E+8(0i!#8[Rqra$GrmF
+Iqp2qIcrXrlmeNhZJ9,f8@k,9(R$Qac8DKkjiU%KP+)NAP65I-D%cjH-D[3EZl&r
+@1mTe*iY84A'pUJK#hVNiQ+p1D+5imri((cTQ1(maN8cH8PCqp[#$r+P,1bSkMPB
+dhG1!ENLF2Ke[i2ZjdEc6@ejUq8S*@Rrke9HE0TE2EGQb&p9p3fcRa$Z@E$-e6cc
+ee1Jf(XUmQl-L[Q"!9-94AY-+2UD[h&6-L@*4-IrTBSFq,a&Am68Q*(+'qB8VjKl
+8rqG0fk36BY%frX"Y[&89ebmX,PI(p1hejFKDA-i[bUZe9MS@9*BAP1K(0pN65#b
+bmhejZdIcVDIQaYHMNrbT1*T[,*jVR4F,[69Dj4Lp!b8Lh'[MH8q04[Mpbd`6ZKS
+HIr526qJ1,ci%32ZrdZ%5G`2JjLZJ4IhPIFIh(4q&qd19hKmQ3"qDI[Y0eqi2"-E
+[X2[$GhjrIc!@YLjF(dbbTfm28$ULM1kF8,9PBV"$8*T*B1FBQF&4%CXj!MfF%f$
+kMiT"E`JiZ-X-Jf&fK4KQ9iKKGS8BCPH)BAD&''CAL'&fK4KQ9iKKGS8BCPH)BAD
+&''CAL'&fK4KQ9iKKGS8BCPH)BAD&''CAL'&fK4M1)+YXi!CKbRVQ!Q&b,YiI0,j
+hI9#mPMVF(Qc2ce`HA+BcGiHXVIl@B1$`j+9"#ePPArTUii9"ipap)3D8$4!`Pim
+,f[&5J00#1Tj+!3i,TU#cC`@(rCmH&E+TF1QNB1E'&HTP5P8dYQYka-`,4%A+&!m
+6&0#j4dMJZV4B[e`4`X$bEZ!R"kHYFFBdUAd,(fSJDeL!$USY+lV0*2j#NH%c2p"
+rQGiRpT[qF*qi%Ad2lK2Acq6qC`D0DB'10fJFm!Ab`GT%dQ)TUlmRL!lAjZmjd6,
+hjqTr1&!8Dp@L5V3L&Prj'9$IIIq&PHfSCE33F5Y'J@R3Tc&2[2eZQ3PbIRD"592
+1`rrqFFhC`Y)Qk6#`!cFkk2lqK5GTb8IhIV#r[`Pfc,l51'b5IHT+i&&FaGHMDR3
+HE85Ab'B[ZZbXmTYUl2%@lp"NPjUBK!85CrZ$0-@pf1JNC(0)021!(+)DAaZ0Ddh
+'QD`%DA1!bN)T2cfSMEl868ElU-$2cM%B+U+GML@UlG`N(8(P#C0YfL0JiihA()M
+2L$dE+KrqAd3Ba,X&6VA4ra$0i@["mF$Vd$2SRGceJp(MP+PBGeDZ)%hmT)U!d6b
+cBNPNC9QfMd42#X"N&D4QR*m$$E@D!))iAS2Cd90E9`Ja%r5ZNSVGXB`b#KPXlQL
+Q$T9TkKUIbK#(V4*E2C*DDf&&91Ll0+#QkJ"Sk`#!$Md'KT`j2`,j1Xjb5rUp5!8
+MH`Fh"ph1YFD`!`UDiEK@)DV5#AVlUDUr!06+6c*Mq5"H0rNkJ'*TN5*VQ$iQ5i,
+pNEdX3%%9CVFl#E&'aD+L6hCHmmN*J$(YE*[K#0GmfbML*l"2Z$!kRp$"CSM*8'%
+h["ZB+6%C"MSG@Dh6`,)*Y2i38Q1FpEd-1&XERm%C3k(%!'L%iKrKV!XN"l31$NX
+"F,B!MQiQ!@J,C!ClGp-A!GI(0k-mf11q$T[)Yp'[k4lR0K%RCpVE39b#p[iKUB`
+rVfeHF,Xp!*5A*--[%(!jpfS!erY%5mjjS(G(Kih,Q!CD8,!0IPMYajc(RL!6KJk
+hE,88kR3S$98ip5adh[S[jLX'SKA,DYC5chAC$U5R(A26mAQX2c9ZL&LSYI2!e9P
+IKr-Z1J&DCm$,MKN-FY)a2I()DZjPaJ2GdqXC,e6F!4dG%+fMGKST6Y@4'm!0@8q
+cT@*baYaTfbA*@RiKHJ-9FU[!&dUfbaDQ*[*"XM3f&X'eDUXS324CK%c)91c81Tj
+'B6#(-Ze62#%Tk-hilq@pF5FqLSRRAM8jM!@8!80A!6@p)"-i)S#p,L`S1IX#h$V
+TTZ4c$K!kQqJ$+"pfSBHj3A5%LiQ8$@VG&AJYi[DHj-1YZm0dXf%Y%CrP`PULBSk
+%&bM1!EIf-P+X*,+hDrYj[FGT6L3jCAf(dPX`CTl1)!8I5qBHmH%K&ZXE)(G++H,
+pe"Cp+'Cp"V*5N!$e'4QRfBe)#h#kN6-M+lIC-B-[*`cGKTH,AN'A6r+2i#,,2Lc
+SCp6%8*hc&$E',KaFla6%MhU`VaTT5mU8DG3`C`1N!'jNEb!$$+5`8'F(+,"TePI
+!IjNcFGXi'rI@l!A31B(-"hifP[Ziap"FrRRdVh$rI"b0j$C3FRMbkUb)G@m$G3Q
+JRNlRVNDI3TceU40FlmXEUQSel&VCZ2,fZi)B*)bhFF(XSpMIYM%Q9DXhVPd(rJK
+[-CVVef@0[XDG-,A1ad[J-#&$1$[A5XeE`2k+4%9R3@cD#'k#j-NiPk56)PmrRfi
+!F3956CqQbNpB-Mei8PMfF9p%m`#9af%5[ZB++P-jmG2h58j5NS$1M3ee""ee-2&
+4eJ$2e3jFaZHLJ6(&k1qLqIcch(c!k0ZZB04)[2I3bH'P#F!FUUmcVQf!kcf`FB[
+P1Jh)201#bp"dq-P4q8@N"rmMVq)HjN6Z91C@V"YN$EXmDLq26SIIbI$rp*a*jKR
+HmhqZQGaKeMH@*YZQj)'q4jD-9,ZE`5V0@KYKB5'R3pMc4dr9AfkT,KIRJYEpj)[
+!11hM9J)kEq01C5l-LXj2!MTrrES*k)40VL[SI!CP"TQA%Id51TFeXFqKX`m8YUl
+k1Z(3EN"IRGeS4"+Hq"fb%h(X*V3!-Vi(-Yjr0D-6Mbrb[JRbMS1HbQqJVeh*kcA
+QBq,qE@J4M)[IKr[EIlPbIiXZ&pTc*#CBZ4+PHAjb+#+#c1'-CH0Y@06kEKNFF&)
+lPGb-fZ4@9qKJ+rpQeZQ2B[9MfX`N*cXX+%6f+6eYBKik+RNY8Z+mS+fFh[Ti"bV
+"V+Kq09I'IHVb*9PdR-rGMaGT6pP5b`j1h9U,iGYD39[fB@9+YrCHCbC[4Rk'Z(4
+9%N1(91#bq6A8d"f%LFS--P#9eP8-J94)9B5(8+-XVGPT,9eF5`3SA5e*FKi`Y'Q
+,P3A8dD*eiE4)`i,ET[`VYAL'!RG*c[F,Fh0T&0a8I"Mdm6&U51[[%#5J6,J8`p8
+dQ@K!GF3%jR*PCKRVST2,hlrYIKSYKP(p-CMGKlMBl'eAjm[Lj2EK+h-lC2R(mbl
+YC+`+[i"a3Y8ef2KYBh%J(!@BBH[k,5$6cQ9aSlGf'rl*ED[N%EL%ae9-r'!)laN
+&BiY,aIqGP!+mbS&bc*2"#PLETS[#ZMfb%mq[Xi(IMCB!k,i&+2cE+aZ8Z2YS!e!
+L9l#R#FS!B'F%m0X1*0a`LMZL9FTA5M'0c$RLl%-$LB2)NK95`#`iK@b%XAlhA-!
+2h[4N#GJCb%VZQbQClQaY!JijERS,h$3fJ0qZAd+(4UPJQ%98UPNIN@@X`hl2ma9
+$4VJXaBS*jL`F+4LII'd2PcT)2J*TZHqc!"p#(+K`'10cf+D'YDfQk`1B0Q+29&Q
+hhQqq&10X"UKE8YC3MfC*PpA#4TK1a`M6k4KK1KdM6+GM*28Ef$mhQP$UPj!!SGj
+JU38[2l$idjIk"4,3e$@q,r8cm)8A$m$(,b)YXY5[-jT0GDPrJ6[$MYD1[ZiHFVf
+%$j6Gh9[k1[SkfpJl"HrXlQ+[phChpQp0Kpl9[l@j,CehEeY24eX[Hpc9hGAAcYk
+fY,EfY2@Q)rId0hGfp,CRdZlXE@DepD9qFPf*A[a[p"IAHHM&lTl0YUk11fbj'Re
+l4+9PK+QdM$#9PK'QdM,#9&T'Q%V,#&0T'@%U,50-T@@%UE5--*@@%DE5-X*8@ND
+B5XX)8fNC5Ed&r2VI--+b0MSLl)2["q$l[q2[,52#I[Mq',`r!YqeZk@4%5''Aa$
+j1IMqja$j$Ib0ppmdET-NBEGaQmdQ[!"[Nm*Ai'f(m"$%McY(K2[`plB4i4#ZG(*
+%Z"prlaJ4$Z0+mIlEZ&*mrdYF(llr&BkI'K%Ha[(irKdFMqr2ihKmrbkZHhC%f)1
+rlaS4(XIjjND%)cJI[[m0cSI[Ii[ciIY6q([hL2!%cSIhEq*[[2q&FCXLr,9a@lG
+`$&G`H%6i6lJ#I(m49i$[,q(-q2idrVjR42JfC*`8AS'81i3['lH&`kPh8!h#6Uh
+1-r[B[q$aA`2D3B1dB85&*#qkhYT$'B%pVF,Ah42D1EQ*S9`b)(8L9*!!-"%L1h[
+PcLa4khlMR9Nq%"j6mJN#$+2NrPNA@dc-6N6-S-lm%(NR4HP0dhC!(TN@NBMNrYl
+4!dVllB`Gq6D(`RhGQA%LR0Kk6QKKTPAkQebppLI6lDY-14JbPS5k-SN1iA"YC!M
+IZ'H"Uh`IVVYaI3EaSQcdR$Gk'[1G&9"dfEU#(bq"q,(V"U#i$H*Jb6$Yf)YqX9X
+FjSeTql'a[U"SdiRRhVM$9p#(q(&RbJ'8$&Tp%BE,FedKJkP#5I&1DTUG+PeJ+A&
+mKMSrTVk2[5E,ZP@JQhd[eTH4NE2biKKmXF)QPb8(LCZZ2`**GR62#T54r@*YCYi
+(hE0mMAkaY%aA*ki8EYFT%eJRDZqG,A$Dd$ki@UhiQ!YTe@(@$TqADMDYFc[A$h#
+Ka6VlcQdZFbP!T4(2,hFX)dJ(*+3VCfN!'TV8iG+!FL-N5J"Deq)P"fLBpEXN!"4
+k2-rJm1-5)a"qfLM,rd9k8DKeHF@'XYAeJ@%IDdJZbK8pj9#1K9"-'J+*lZ$UAm3
+Cj4AQGZe@E$S06Z2JF'UH2-#fdlJAr+h-qrc`GX`)pS-Qi@0k'$bY(iK#`I!i"!S
+Ef9KR!pR`ic@((f%X5k+f!eQ&(X,Hlqb-S!AZc-300ffJ&P$e9,ZTR!URZURS"#U
+P+UR!SMBU*-Tl5(F(F9f$Z,""A0NJ,Jd[ai`eZ$Km6%--bK[%p3hL!JGaKB1N4(@
+)l4ZS'cjU0I"cJN3'J%rIEbJ8IYhJjP#PBZ@-CYY)eTc`*EQTB-j)$biNH1mHQ'R
+%"K"'KMk-J6UPff#HU3C%IBJQFNfLK@L,b[MXENE4a2,Ab011dHf&MHYeDFS'9VL
+djM+#IFJdX6aJY5")H4!&rF4VQ(rRSh[rS2ri0P"3HKmSUF6I0EU*p[`ibTp86l4
+V(%J(hjXdlQmRbTVm&bp-6-3R"(JrX$Kad,hMk0'(,5*q[rS-IKmpH[4q5ic%Vef
+@12JIT&mG[ImLcEHf*+&c5,Z2hSr'dqqr15$Y2rU`hN(IAj[306NZ(L(eIA@hhU)
+[+@TS95'0``+Df(qciac5P#+GUXLN1k$A,Vbp@$9Ke"JR92[jda[UlbeVZ&4kSAl
+(f9Ibbe4R5qmCEaVmeiB,RaT+rR6i4+,Tc@2jCF0[1`VdYjbZ(hc#2el[U(rGXe5
+e92@YjhDFU2HImCq2IA,ifEhQ%iR"CqZ&*mbR(38(+JT&Lf(hJKkqZI)'HcNA@f1
+00A2@5Pj[RD[A&TA@VBm*,DVMk0@*m[CJ,`5ZL3N,GA8PU+5&Lh'aL3@Q#LiQ0+X
+V89kL$d4Q"XCL#eB8(%p`pJ,l8heFl*1F(8`lI2eMcFF,BT9mV'$r%XfNhV6)8E#
+NG&)rAX(&#lkbZlE-P+qI9kF"pFdEN!$1S82Qf15F!lA95+eIf+T"R*MF2f!DIVB
+d[qR8r0*l5qFejIrUl1H'jLqpqj@Q5@fSc!bpr0I#UHF'Rp28DejhRr0$CrpG[@-
+bri$q4Vh@8SQd4I%5H,jq(VbpCY)-1Z6Vc$'YhU6A,)"Q2,#+LfN0e98*kqU#'-K
+mhVL#(dd8)2k4URlNQ'M0+bK**Z*KbpPP@`kAjHm[0NhHVRThm&P(iRabm*MjSHF
+FQJ2&VdkZbVmdB%A,4D3ZFQL+abGhUGjaS5"Uf*5I5U985DX*,4EEi1eaeH3YJ)L
+[Mldk&UY%P3l0rXP5p8*9XDD)8p'AYp+AYh1Ui`p-hQ$UGD"i59#2har4@baFE%1
+2kFCBd$'af$UK+ER68Kfc6KMDNiP$63r[AUAKiLY9m5*9X5U[Yb%jVLP02&l@%0p
+bL(Y`BMRARqJ[H05fqJ(q5b[c4ZFjqqf1JY@2*2,kVEFZi!mFQ3LH0,f%mU`&qVh
+eRM*hBXI2GjmYhI(MBqT2ph+&EriA3q+4[$EVV6I`XBQ2l6'G4TTL0dbBrBRcFGA
+JFqG2e+X2p0B&mq2cp+A0q8J6Ql#E5*)(5Zj)L&Cqpei4V9D[F!$LAUqV"FDjY+1
+[hcU@ahpT6U)"JIEU*V4%[6p8eT!!42R(R)QP$4I-Kma[PN`X9IGU"TmS1Cqi(eI
+k*r8%(AY9CjH@l%MXh[eQkBk[(NX$jYmr!0p[M#q4m$ZJXURBX8*RCSmh9-,6)dN
+lrb"+aK,*H2,5aE1[9DU5jS,Gr3QEI66fb1V4ep6`h'pIb1A"GpqVZU59KaPh!f6
+j8!(AEl0E9Sm@U$&LhaKI&0H6-YmDekI,r`0FrM[cid@1K56N$G"rH4RA,2jF`m9
+apRMeiDAqec14DjFf66hkb0IQ(UmqrlQQmkb!kdX@Jjm[UINVq2XA5Nbe'R5QQ%6
+MmBeaH(SNDFVAk",h["%!(f2r*jkA0"8m8*!!%1cDrXUqeD0jbF+#jX+f8EZ"*fp
+$3@3hJ*!!r[mUVl8@U653!1b9"6$$qqbMIC!!J&U1B[m)&lYAKELiDK(Ym"T$qQP
+F9GC`jYX0V&eVP[V2[1k(adIia$h1qA'hkYRBC)P1AeJ3@Z,3JIVq(dq@PKCBaZ2
+c%RI-#Fj6R9efGV*BTpF9p#b*M5iS6mba,N"MHmD16,Edj4Ah&Hc[F6ZGbdS5'[2
+R9CiRP0M%M@3HrQ*qq8!q8%cAa*,F5Y8GHR!5J*HY5p$S!ZF#L,[Z5**MV3-DeSb
+MK-Qj1)lq4A9rA[+'9`G!Fl6IcfZ5be@(%TV(br2jE8&GAR,jprS6"Bq8&paR2ei
+-Bq"r`"*bP9l8*$HTB%5Y64DTQlNB+S'XP'G2-D`-b"-!mNlZ3S[$I13#RH0S#9k
+rii$A4j*F3Z-jG20R%(FNrp-$3h(Nd*b"MDIrF$bZ+TQd1FqmhU!AY3Id*eI-Y4E
+0Q@b$MH+DSXrNmkH%9D8k[N26m)-Y9[2*,bEMNbZY&b$XceD2&Fq2jrAa@f19kUI
+XAjTB`eZ&8+4!Sd8,`H63hp`EIE)IfC'S,5SSdNaU%p`[T8-QNrQ)GL#1)-IDT,E
+jj0MUBN0HAq**+kTUIY5ZQ5c8#+bCe-YA*R3SMP3RN!#16VRVG@$2J0iH5BVFfF4
+R4mk@cYRapQFe5C&r-Y%M&)c0XDlYd53r&N1&r'T$Qe@6['(FS2S,J`Ur2'$J6ZJ
+eq8N(2`VBr+SKleDbrD$82hcJ`15bAb9JVEPKRJNjYC1h0-DXc9S6FQJRZe@(Z&K
+#LZpipmI(lKR2QqbZAF$(%PmBYGkkCdcScCYFBe)Aa5cD'hTKM&eG0'kCKek&Pc9
+&$SZ'Lq8PlC!!l5ZMcI`BejY'k9mmm$cdpZT6X*R&AfB&aIiJGVHe%k(E3+Fj[c"
+Fq,er%mRrB@cXJ(jbP&Lc@3l)1bAmY-d,&[X1+0I5pe[Y29ep)0$k"q6j9I`E5%6
+J8J&rf*MYRH-1Q'CrKp#IPD,ciRR4RrU"D,I[Ufj2MCZqNRV$9*0kUpFU"P,MCR$
+!`0qc`!eq"F6prHhTZ,A`qRHI#D6Hh@K0[8%Vf2C6H%%p@chYJG3ElB2I#Z,[rcK
+fikG5EfGLYY+BebhcV&p6rDf'iq!VmCX0b`I2[B1mq2fZCm4ED69hH*&fM6(eJkH
+r5c0mmlPXKUfH@ibTRm2r[qYkTQbeD9Pl[-UDqKR0Hh-PqQ4lr-4I)UeE'dbYJUR
+iJ+jRNdrlYi(8MaAdQrE1(j9Fk2TNcHHlSPdI6hfISZEDlkNaJ`EUDAfMpTjH`!q
+3!#&k*m!+rZMT'YkDZT6kUDU3!1p4EFkV9,e,X1QM'HINL`lJkXG[rD[QilF)d+Y
+!pq+hbFX$[jm2[h$J`UD%df'VklPeA(hHrL6NH+MU2JLXpYNk1[%!SLb[lBU+"l"
++)k3iTk14Ircr!*!$$3d35(P`CA*#D@*8C9JJ5'9XF$KK)'*XB@jV)(0dB@0V!-R
+M!*!4&J!!pYB!N!6rN!469%&,9dP-4!%!TRi"PkS66dm!!$[j!!%5J!!!'mN!!'A
+&f'fmbJ#3"V,a$3"GPmr@l&Sjh@c66EN,ZeEjbQkcKAD%RXpZB9Y#ZC[QQ8a1@pR
++k9kCQrkQACHHPZFRG`hI,H[A3%)AYLQ2F-)AYR$##6mh)fca'0PN%hjf5GKC'GY
+XXmd@#5H8F-)*hB```KHq52M##GXAArM#0L0mBEpC&d[#&lk`A&L8ZbPIfIS#9GF
+cVh0II1(,fj'&,%Fff4GCMJ`@bA*N[K`MbhTk30ICH3#-#Bba&Ar0f*hi#TCJ9%V
+&T'9Pb@"+fK50b(fTlI')(#C3+M%B,,0kYmH$#8pN8fG`[H304Z0aNBQXSl2TlR9
+V@TZ&k6X&2a4hilGrKr!9*P5--2ET$f*EemLTB#)a'%p&BR*C81k6%X(Ni%#`)pA
+6ZlQX,#C,[G&JMh`AXC5&Sl&029%T&ZdE6!B6dH#@B,5'EUreLGr(BeZ$LFh"l8P
+qQ`TZ5r8N%V'YbE,iB%T+p3HP!Vd83823LArpM6#MJ+m1Ab1qXc2-D-1h%Gm[D'H
+k*j`4Aq)"hkp+baIi+iTaI-rLH`RI5FC30f[-i3ZC05SMkTRZJ5-mjb%qi[fh%Rr
+G!qSVqXZJ!cBEAa[9LqmAm&@d-pd6M[$%3hbreX-[#)cSCC@&-8PNc)fC0F,rip0
+IYi![LRA2CZchFdb`66)GT##3!!cqicHhbYr&Q02"62iaBEPrSq-*rb"(@+TPCSS
+VKk2CbE#PX5BlHI#V1181lUhZcV2N`#,*c,,USX,LMID6Rhe*b4#V@SdbjRXfQ`k
+ER$ACY05pEi%8"G,N1H#XSE0hL+h`bJVcbMR@@-p%reMTPk9ZZ[@2'EmVfD6Zfph
+-JqT-09jrZX6,'08YGEHYpCm`hB8"Pj!!9NM-hk8`(cS3RNHe%*ZcQTND(FcL(j[
+GU[9K2I(H"ejr9cER0",,9-G@$JYPfCaATUq#kXhM$EDBZ3N-Ycc2pXHCEhASA,(
+,dSq)df'MQYEcQY+R['rCkMaKUYBl92)i[Xhie[M(,&HXYV!q`2328meamA$EaR%
+I#dP52a1P0TpehIG'K&!&BB%`j"&KXhG)Im*ClKr,2EjbQ#QC#ak(`PB1+dTfF[i
+`%c)rMV0DGcB0*D&LM9ed@[eM*CILqX02F2iGR(pM%Bhq6X6e6P*Aec9H!b'jjX4
+mMk+-l9hCG[8dDYGPcJ9fj0PFMXbjRlLP1-X4CqDbImc`LYCeh(U(G*2S`"adh1"
+aC(iFF"HaB&Si[cYcPUV`p60rD)l9N6NE0URG$94kC*bXT,K9&c1AmaTVPc2R)KD
+UqV"mpA5-+GYmd%'i19qA`Qce'(USe42fMe9@8XHcPccKJhY@GQGcRM!aH-,%FI!
+i%*04-l$IiLcI*c4eIGC4p%XL*@8R9$fTZ*+MNUf4MGTUZl2TJ&A&%h*8)S6[8$B
+GJXV%be40CK,Sp-(G8Re(ClYdq&"f)X6B4F*JkLf@j'bkYLecd5ZR6cXGQBZSINM
+U9[ZXcKq2'fUi[0+G18pD)3ldr,ahR,4DmSa@aa,5I1CYhSNd1(!6&jbBH,K&I`k
+HVHh1Sm%D8LXir%58#8YS[U'qB@&rMUQikj@Jk[HS&[4AS,0D5r6dKebH!ji$H6k
+9*m$B5lcc#l61Me&2T,D9ECNhTc3J@6Y(8-[&PA,QcI6V8,k!fG*99%@Qlcp9SGm
+MbCQ,eZGCQBSjF5KcXCeAafH'@CdCkGGMqrj*2ESCpD!c&p+R-)[1SDGlUBE09BF
+aSH5+TV4J@XE1VfPZ%Pa@a9c2p+(iI$Rc"[BI6!aLSVkSNdlm+MDEjp5*b!jjjDY
+RXGhS-!'IDd*h9efmHMBrhfCk3[0&e@(Q2EAl9*@QaT06dc"p#Y-`J#PlQHBBU51
+E*QErQ1jeAcI0IlD)*P0k)cmYSlPl1hV02'X[TXGDcmbE9$HiXV9`#')KD5!i%%Y
+X&cB)RbF2JlET$hq+FNDTD!mQBi1*hU!Nae*5+$BSpc&VFda1%5kk*GJ8MI3Nf5f
+H(ZjXU%b`+S,c2a0**XPB`GS@()LRYN[aRN623"!q4h9bF3@C&P)S%4XSX,*1903
+*@(8p),b'KKTqYDDCLT!!3Gl`qCVk8#3Dp02G"P`Q8iP)I&8U%D9EqdaEl"X@Xpr
+4UT+@1TEA5!HPPN5`,jL)p%VYDra0VFeVT+9eGAI@,,hc6KFGPY*K'HfBI-qGhKU
+ajeTSBeRXC@eh$X-)DX9Hkj@krEYUSbc1V-9YpD-p@Dd(LLr@`cFJUUF*1*`l8GI
+FBPhcSbc*jUKeRFjJ`d9PfTjZ@BaUH"pdrp`(MFd+0JYVija8BeQ4mqqUQq%Vr`H
+qAqV%q-rpq59rk3dpr)EIr$rk-(h8EhXh0SY21NEZ&ceImIr!ET0X(1'`0q'fZm,
+QX[Q%X2j!5d$mHSYMTiU4ZP&bPA-@)IGe"X5R1[f$pQiVF#(p2Q0!I0VB-%*-(''
+)chSU%0$(Cqd2%%Tb-VdpKPdmaL`(hfed-k[8[IEG[&+PHXC'RcM3iM64cEj[IVh
+PffI#j4+FN!!R[fP(*qdl!iZDdZ`19rhERl8$G@4[f1$E'ki)A&Q9CY+IR8$9a$,
+LFDp%C9`6MrP2J+dpF(&,-*(%!K!Bk1RYalN[Z6fj"HHGm85X&qIGSILJK22M[pX
+RdIR#jNep1!YcHe,4c6Kl"JB),r4KiY0jCa3AG-j[&R%Km%Al0[&3A'q*X%&Q#PG
+B)Z)@CJVTfpd"JlA1mThl4J,BH1,-95IFLjXZU+K1F!,0&*qPMZN&ClM1K(1T2Ea
+F@RXC[YTl[qhkK-0VFGZU`T8@Gf09f)T6AEJFL,U`+Fi#jDMD("F$KVJZ)1+H+Fb
+bV9%4(jARZHT*53ZjNVkK1p"#Ci%Gh4NbJ*%&$(3[JM(hLV91[!fUUV4l+kV#,2I
+$)badj8Yr)TQ!2D,l@+NS')ck%Y-X$"TIRILPcC89GF*98@#c,3)63LCTQrLkYCS
+C`IBJZLJ+cS&+kUcPfh$qK,!&*pf![X1YpLFAQ1V,k'2S5jeJ1VScE,lR-HbBPD1
+256D`V2#qGIB5CS5%(E)+mf+Kac2ReV"pPbHUpc3&T!l23ZqL0F[%2bVYqK-P%cD
+hlm58[!LN`@lDr5dQ06Da4DeRCKZGkjJ"RYNJUMQlkPdfch@VG-pbpUVR9Fm2MhQ
+DfVd"D@%2+T[l3iqPL5QaFMe1HjU@e81QS[A8Clq[C&$ADDR(qS$VGQR0#6Iqije
+Hk8RlcYBc4U1MQbSE(dm)!31G28hS'(9V$VTQrBkT#j-lT$Fh`GpTBR1G-@CPPDe
+RG$VU#2DTR2HY@lME0cATZ6[%f+NG!Qh2#MZmQYbfX-[6421r`J800QfZ1M,-'Z8
++c,`6biAc[QD2EUR%0rTeha[(6'jI(6J@&`k[ANI-Lca0&3j&+,*#kEXe9PH40E3
+a)4aC[H&lQ1RY8!3aHMCA(FdcpYmKRVqlH9@*bk8b(MXQKTGi20561G56!KGkXPc
+M@PVN'K'DfA`hX`6d(NcYeM0XTlUlkl5XJ8kTjZH2[%f2)jXMAA442e[K,3baJ1T
+bCNmY`mELDqUL[Lp6&G2!2'lULa9p5D`iiJlV1eB(hTQrQMZM!Ka%a@98(CLVj&T
+LRmhQTKa4kSZ``Yq9J6jC&4LX0cCH-"BhAV9AfF,p)KRElGe3AbGA(f021aRFN9,
+iaYcGr+##GUb8F23"VPA'(L5Ne&CKp6j`6D%lIkl3m(U9b@VeMZMGl2D`"DGji5@
+IFiIR"*C6MDSQ2QKBh-dm!EZ+)"r`JaU1)!F3L#`KjK+#I&K@a69CeAUQLQPESG9
+rBKqY"USH-jS+TK@*,PZ+&IrdkHTZhfCb4*fPcMQS-)-+Yf',K9p1e@9**9"40T2
+A@ElD[,0!US+EMQVST$T582P#q0ilb%8RY@EIT"Zl1eq$UY3P@hULJd(bIlE'%Rh
+5-VU*aZ$4N!#h3THTrNK55P)d"GdNlj!!QI6ZGlD&QI#Fh[faFT`IKS)BQi#D,,J
+pL[-+R"rUi#Jk#ChmlJ+rQdGX3L9(2(X2h8QFre'11)P6P0qI44hfX"AhYq(V`"G
+lRY$2rH'dcL,pL2j!2+SLa(G8K1Y,`!aTQ"IL*@U[1DT23qh+Si#"bm)apmGeejK
+@D#KISD*U$9'Y9XNVRk0Ka#PZPP04`ZPL2pME'QDmJ$LT)4i[eX11DjKYdr8FdP"
+YdkLp'ZUfZ#(I5rDJLQ&[aidD*UiKTR4`RiCj+'l5@(`D)P6S@"hQ"ra6c"$ZD0+
+-HRrbjeQ0$p5qmQQZeS)j9$k9N!$)CbjQI8lH,-HfbY+#kfkM[5NHM`BlqRX535N
+L*`G$S8K[*#LRT(JLXJ@QAMLBC&9qQ)`pXR50DNXXLV`8XhdQYSAXa+hpX@JHa#h
+*RQJ8FDLqZFf$m@LNYbF9P-JKG)D3!)`+UUiKKR5XD%k'BSR0c0UP&S"a&iheEJl
+fXI)@P4#)d'!dbQDYFDk9H1V%dS*k#,GT-,QG@6@HSKYDc[(&Ha0jSH43&USXBMq
+a0K%*4f5%[#+Ti%!4@-Ap5Yij$NS1aZ1a4!TpXA"&J)@UCQEY&MbdEqa@pcq2&5Q
+13m`L-lB,6Z+H@Uqb[aCEJM+j%VZ%mJ`P5C6$YE)bU4cR+BNpP*pirj%''r5p"eU
+r(h[)EPARNb*9J2eMpc@G8hS(6'TD)Xrddj2NhaGjI+YTj`aC%Z+43mTaRQXC@EQ
+D9DM*'Ha+C[m*fK@cchVId[eXPmqR1raM%ppAGp2m&JqhD-AKTT!![S-`aUD,f81
+ehY`abK2NAZDTMX28cBPRkp(0l#'YKSI8kC8pK$lY[Xh@,ZGHYKT$&Pp,&rSLZZ'
+e(*qrQQrAim8%P1G!BrfSV&AJSYYRmVGfbAEiL4$b+eMe6!($bQ%pc[k0+LpF+LK
+Mr(P!Q'mNCZ+lSTR[LQEUIDIU9@*(eV%'-(R#M8CXDbr1Xf(h0B6QJYp)l%B&qcK
+kUD4Hk"l30m$l33q-0S0rl,fRH'qH8,[ahKlU4YFip`R-DJrc9@DVq%b`fVe3d5h
+`-r,kX4C4(@lV51!8dL`*+"Tlp[[Mb"!`dHbXIr+Ef'2(P%jNC"#Z`cBHGYEh4#0
+*U!NTNrFH9Kd%fV$j[[k+bB'83*Bl#JMK89D%+J,E84Fkp8alJ`hjN!"pI1BFTGi
+"ED%T%VH-,J"f'%T`+%HG$Z@lDLHb08!YS8ij+90'PBa"a9AUa(Nra#G19AlL"25
+B,h0S(lCD`pAA@)H%[GGBAGGC2A!GX0(G6p`iEp,1phTNT406dkViF12R282'bcp
+fZBphmEbkGh0F&f9*4MH3!'GV(G(UpkQ6q%2Y34YmUmphKk@,hCRBID1RM*h!"+l
+$M[Ckr12j63k)+L#1dmD'qYGMkYfUCV[qCUJ`Rk[`VB0+,l[3&jqE1d#9hVG'4RM
+2!Ti$SaXUE+eR"'&Fi&dcS@Z8b0+KrqJq6TeF#hlHdHHaV211HPEcr"A8Q@R'A*K
+5ja"c&6[jhNXh1LRZq%ZUTc$ri9X,+r6Vm@2hK(Tk"QT#2Af*'RcMZ1P0i4$NKfd
+ebF5@4%dS'YpH%b*dIepb-i!$FNeI)NCNm4!GC"b5rA3JfZ6fQP3Lf3m[DTI6#!9
+RV*Je80jAe6de"cqPQ$2+C@Llb'8+dl&F4A@ijlYcQF$Vk1aPU!RHc1@RIGhFR@U
+MDDKLVYE$elHCiHKLlY94IG!$jGjf3489rV%VpkSq$'l,SBpGUMiZMh*pl-VV!rd
+aKkZjYX$#0k!X00E3B)[rZHC(eSdlP'aif3jp`1'4FmpL1TARRX,0IYk*A65GhRd
+4dmR+l`qT8fPq0qeL)3ReQE`MB32F&%ZJ!KY9*QcC)34-G"-5GiM3CQ9"Qq@N6@`
+JVQ)fP'dTTMjRXLb8(%#fQ+FlkFkj@%YiePeh$F3Am`P2AI0-`P2!a[0K[M0hELT
+G+AEKUmG%2iH8fk0UZP,iBMkj'%2b56K#Q5IPhRcbNDFUD42&62pCdT,BQfNr8mj
+4'NZj3!beB&8QF$)SNrQ-T6**$U3BU1e@hZ'E-dp[+CIbP8IRJXq-DC,Rbh!q&rK
+8$Kdih"cEMrP!Q8Yd80H3!-mbdUdBKeEI+'3N6I0Pj3hPA)$5A-GjQ[-KASNHPE4
+SP96N+a%RTLV4ed!C9B8m)q%l*9X(%R,+"9i2ciAPlL!'C3*Ip*dkM*Yhe0lKjK)
+Pcj3,Q!rRc%JM3%(P[N2+K3hjMIQBQLT6*LK9PMY@6*A0DD0SPl6J8p,!B"+aqU$
+8),PBPBCDAN"YLX'lkF'LNFq'68A#f2ak(JVE'NRe`kf*4hYkJheJ5!%Z*aXqd`*
+ATPf&5GAe%4PCGq6$NX'H4'prRSEbB4Ve&!3@%4eMS4"5r`dE0QaBA$Y9c9,(dSq
+5BINmf-d-%K'rbA2G&#0[0HYrklqT3&lVjM@j%68h2jdDiGPTE!L[B)qBbe-BU%(
+$q#L&iAYJ)cU)qY5N'&IMc3T5(jPhERk3!2V)2$H6qXMXRdPpC2Em1[A"@'@JZ$1
+,&fm'X$0E(ml[c"@QQChC[1HMR9P*Ne2AMqG+b%R`Mj@p[E*E5A0pQEP(Tj!!4mI
+RJqCDCY2HY`65lTbCYab+6QcC)pLZ498cXrIlZVQr@m8c4FKSFp5ZI+D)TXpYT1D
+RY(c+%(Y"iiJ@rDM322+MJ2fDKQeEaKfTI!A@%I@e#$"%03FhVDTLGSVZF(ja86H
+p+d%EmlSrEMCDMH&UBR4q6+hSPMG9IdUV3m@dNBjF)jJa50R!pb8YMa5eE%Rf`fb
+A)Rd89Q$k98hYc8aFeFa+@YEFeGUXDfPYpRGGRB"l5kmLr%`[1`5U9-e*UANHUi3
+8q)6@apF)Jr0,[*pF&CN*p,6%2eDqMqkJm`RZ$"8F+Kp53''lbhM#c5FMlb1[DbG
+04MMJPjFq`&MlDMJ$UcG`cjdBZEr"P05`3VLSRA4!,Kj0mNDmCS$[&A`Rm8f2([#
+d"#6i'+ZMFiR(JreICD&h$iL*'&DfN!"5V0aG9T8Lf%Y))rB5(Pq!+YUQ[*V5KGi
+K-p4YpN"cFe@[aRL1A+VX4UZ0hNm`@rMl#HI3GriQKAGSePRdrqAeMq(QC8*"'HD
+$Ih8IplDc5,aRhr$)5$144p,'AChbUEFd+2NqDaZ[kG(VEf23kakB&UrPA4)NfSC
+Qq6$6AN4Ic*3Hb&)QU2#f"-F[!RkrKKFjIZ%d(V1Nl#%0Vq0ir46Hp"V`)3f[*ca
+lFaU20%*CLiB[iAMN-DlK[`Mm)Je[i2LRTr(VJ6GSH#2(2cL0Gq%&N[2!NkYV!Vj
+['Shpa2+5KTi&G-X8fJJG@Tl4d'DJ9@FbMhi1k%FdG#R3d*ha8G,GeFTib@&-TbM
+6FlH0Zh,P32X*RCl%@bLHQGG(5*RPp5l-V!hZc8cXY,KCLFc%eK0ZekHC`Am95e8
+jUfBYV)qG&G)mkD%QVDkP$`0-R%FUcHAbVKG99ECIXUed+mM1#MR5b!hdcJ,kV(I
+)m)b+-VrXkkECC(L)Gkb&Y&hJ(6,dU3S`q$'G!ZV,$ZB,G)ITFNUYTm"9Sh(CVh%
+pVh'P1*H)fU&+cL0RVq$l2UmkVXl(NKr5l3I(V)jX!,[8%CSMm$$NV$a+qdpL0-C
+25@Ipb8XR,ieZ95Zh1E,[dmcfK$d(d1@ffRACdpSV(+HPYPT[TKdl3m)ZCpSAH&N
+lAY*SGjTFe8aXGMFbPj91Sk1%XR[ErX"qdRk5lTE5jZ[&0N#9,((b2$5G[U!3jZ!
+2q1N[DP%K2"d(qT2%0(TBeHVeVQ"bM1!0PI[9+B#c0J%XD[*Z5Y0HQR[A09[kDN&
+MpCehVHp%AS3Gh%Ie%%[fIVbcFG,b"$e@39k`2NVkQ5ci`hJ0j6MH*@RMmcS0lH&
+ePIcE0YPdm@dEAZNc"9hfi,Z*kp+%fG!*0ID%Pq$dNc!QQikr!60j'kVTJUiZS)1
+E+%Y(AN(f*d$"8mUq`CQi-rh6#@"US*40f8ZFi`hFc`2(Qj`Ma6P1!-0c3pRTM8(
+RaiXep-+1#9[3qCPp3PIY(c24Ld2U2N2ikAe#4&G0VaAf'F*2la2LUm"rYl$2%(j
+kRa"(JIqb0[Ae`%r[%q)1S,GTk"+JTrF*X42SHc@d!HMTI8*F!R5pKMB#66jqKT4
+`jF9fl2RdlNNfI9M1Y-9BcNr+#pf"RET0RE2##e$V10qC-6Z+$PC"ZaHi3P[T$5#
+k(B8VNReR0%kk$"P`GqPJJNiFm@C)6pULE34*#6Zqbr"Y`&IQ+G@[G@"(BER2Zf0
+il`!+JHp1lSLVAY#2ZUK#B-jk$NcIRk!qHF,)31P'+5%$(4TI8h-k8l209*hhGm$
+jY3+RXF"*AXS06Z0%JE1IXiPDeIIb$%J1-r%5p4aC,'5VXZI*2A(9P`SULdA1I!1
+[Hlf+ENrUhBSl2"F1@@FB+9rNH-X$PI!R1NNlllYjDQ!j[eXH0p1'apfNLR(D6*!
+!iF,dre1qLrcHfSYAAF8X`)I[a9c2J9BNJVhmQPkU`mYei@#+h8UCb93NhKC,4ZL
+P[')b`"`0KP+H@#S9'f$Q6IcF#J3V9HrD)q(q9#P#PIdDLBRIGFELc*5+a6QF'A&
+$T%DU"G"E1kp9fKF-4@3N$9*E)lh"18#faRU[JpM([6'm+i1Q6F-q5HY)-9IDfb0
+6ai2EHS0J@2DT6dQpb+mQje"R3j&JY!rXb9im9j1+*CKJ,q81#SpJDhG,q9e&2KY
+"$b`K*pXAh)EYiIBm#Zm$4Q2S@LqHZZ(CfEa1H*e)88f,KjNkqQ0EU8pX&MbZV5h
+8"a2G8(A-U0e`40ZD9Ch-6$I0%9)S-b3Jebe"0LZ5T#T3[6k5A#Xc(A)8BNaQFhr
+a`Jpc&akkUiSLRUAQc6A*dpXLk",l,BrDbb4rC[&kl,@Z(SmQaK)08L5%12"fD9L
+UTpFCKd-pd@5`J6+mNTfDB3HkMkkd$YRCij6X+&4@(j1(dDjKiX*"BaNZGTPI8H[
+j"E53!$m[i"GF--0j%3fVLU!Xb3dG%J6M#k1$2d[8Vmi,IRGYUL&k`KC2pfHT`r@
+2dC-EVmhmr9Xb0qYm#HBQ*#pXP92De$[L(9rX[TC,X[jY,JNTq2pqPq[rFPqj+rr
+#$h9FdG4K+GDK*RYb9p5A)QlZN32,DjSbYhQ9UQpHi)DB+hpC,6+db$`AfFY9GYa
+Bq-ekhSIl8)hc4M@9K@iJCh[cJYa8YZAQ"lQTl,DCh&3f0*1EbREHA1#eR+XRIrj
+D6NlmVpGbTZ[,*p[iZcPD`Ne*S@meYGe6fECrCei"jQAAQE0ACTM94"+BVa!ch@6
+jM9S$jU[fDNpQrIV(b0A-6pam6C!!bbICARL%V-6PZ0049m922H3F`#KB,R@XDDf
+4eXLp#(TGIqbD19rI@rNL)22BidbhCY9D2jBCZlE5Ykp[@H8(iFEeUcl6M2XYILc
+SY-266hS$MmeKK0$GA8PfZ`4lQZjD6l0PZ(Z%N`J)D,!lMk2+P`erb&C*6,35l,B
+RfGd5QeG$Gk9(f6U*,D$HXGR*!FQ$a1eQU6fB'Nc)9[A56kRI*RV!@J1d*B*E0%$
+(J03CM%DPTNfa`C6$i6"UVcQ@AX[[@UBFP9PH6jIU,rdr!*!$"J"GebNGb&Ul[%j
+ZIJ"8CZm9rGBZHbZ@VGmJVc16dd'CA4k9UI4PYqDcGF!QH4fHAQCbmk0G&VYX%0e
+Xd*QE$5bhRfHaXq[b+*pNV,04ThRCc1YYBQB$#J63dj0jA(PRAji(*3XC,)3G'8)
+b!XPX%j!!HRf6EZ@aUj%0E1AV0YE+1TUpI"$,i$kp[0cXJR`Jj&k,hhQ4KAjHjik
+G[e!llP8R@GMZ1qfb66D"Yb2`P#cA[VVpm2DAq8)MN!$X6-M*dSCN`aeC'K"qba%
+S@5,l%Zk('dkkT8hf4CEf`H-4$R30qJCppTeGJdC`3ldkm[[KNB9!!VdB1GVK!h$
+LK"!6+5Qe6'c(AjrbYi&`d4*lPrkUH2B1I0F*L9K)b-MG`DI$&mQIJi38G9Ad`KZ
+PV[mVYfqE2"R2VZ4H)%hmDGl$D[4AmZMhiMPrY6C#)KrJ%VR$rejQ+hK!eZ(rea1
+Mm[rVM8EjrhFCYl$rIf2,#2RrhpZb@rRr9hCrc2jrG(Glarq2X[r2'(M+#@BYZiI
+mHle4qEI*Q0h)r[q!&&QGaCZ'l$4T,RUe0A,j&U,mHlfa$&A`rhh'-[ErU6H8Ihl
+BhP@Qr1Z[cc0&mKaAPcdQZilMZ-BBSkA4BSb4*-Xi3BJjDY3Zma[lVMAXN4U&Bd+
+M0,JYr5Cl3X'UpAGDpJal+ZDBZCN3E6MQ[CX5ALZJmc1BpaR5,LPrkrSEpdNFVf@
+r2bS)`LQrFI`YIBfcpT+pHe[`pqL0HhkqhL+4deqHrV+jU2QRNhf4Y6rHK)X!r0A
+bjRP%Vp8a[95F5[0%TdFr4I6k('iA0D@15FfdkG05*J4F+@-bp2VlXYbHH9j(9E@
+ITSdCNjl-[UkRrQU4PJ4UDN3[cAIjr!jr`#p5Gb8YF,LU!Jim'2FPiq9iUYlLG0*
+L9Vj&Ld@Ik*dYfP2eq[&1ph5ENmkfH4ffk8l44`-qd8iG,ZVcfbTQ8Pq&eq(aAkT
+h1qei11F8Ci[1C)TIaj`1Ppdrci-fjIGCpac41e1FKflakl`iefrcHYecm21mfq1
+S+!c86"Hpb662UXkhTVHL[f0HGm"Ppl&qjkXG2UATAAUf#2959KIejFHp0UrGTpG
+2aVMRe+'89HXfVdJV@6YiYdXrI@B9IY&+h)G'X)f'[U,VjD6$kr26#VYHRaY`1Ud
+fTp2YG[PS@USTm6kDQiUGQEBjlBiNqIQpSXGTUa$aHJFpqaa,G34Map-EHTjH*1"
+8i&M88YKI[3bE@#rbLT@L9h49L0J4,0kB'l1Yfh`q4j@V4R4K2D3BDmjkh99H@if
+2jVPVa'5Dil)Rdb*EP9MQ8ElhZHHiNUN0ql*2G,*H@RSF)(ccBAfL1%r[U'5IpFZ
+S+e"6kXkUYRN6dj,BlCQQ9@jeJr4[D`TVXLBkI5,pDp8EJP92f15L@e-`Mh2eGTa
+TFpBVcQEeG(5V*8H#*DIC3PT*$[0md4HT9FG%dD--%XZJp@Da9Ei104&ViVpa6FE
+G069B(668hCD'bpM9e0B8PcL(9Q"28iRlcjC!Xr2"r4R(F)kiF6fE+,F&pADHUEB
+e4@fHSjV!hCph8l[bLc3CKeF-5@CB2V(6FKKRHciPi*'[`EM6l406l'bXar(l#9a
+Z2bSBr)a(G+(Fq%bp6m6pA2$kh&ifJ9-fId@ehZl`X8Yk+YrP&lhHJ-I2EMi'5Va
+b[`TaF(`&r[!UemI5G(Qd0AQd)hUEb`G%JEZG!0+F1#[Jm!+Na,,HbdJU,F&B!8I
+Ump`"qG,9AHij4MfZJ&kNd`ir'dmS,9X`9DQ[U"BVCZCC'6j`E(,#V8#I#BaMh#R
+DA$PXLM,RJ),BbrAbN`5&q'M5KV@6Ka%&TAI(hA-SJcfc2PCM`60*G!ANRiV@4Z3
+RQ-%-B"X@"C!!CG*TTdBC&3(GYIa'pGN19QklrLrEa[R'*C9EaB9HhGPM#KC-J'e
+jMAZeZbZ$IDYj!RiUeRMmmi$*8#VVE-&eTQ4pMX0I6@FlI!(draUhZdBCeFT3daJ
+j94b%KCVr'Z[5$#m5XH,,imhQbIQf!MjXmG&r!c"J,Q5qG5[pjrhUf3MlB5ILMqN
+!3S#XH"h`A3q%`"VH#b+%p*jh)kYS(@3EZGa$AX'k5'qXMc#SP5l5HqXK[,!1dJP
+BEL%VB$fNKH"#6pJGIS@`#%INZ--ZdKTIPI,$+B`04k94)Z1"KJUN3(LJip(1ehI
+ECMZUE(kh9i@8FLFAApG`BG!e@)+&k6EF20kVr%I35#G%pUYHfl$pm4M`PP`%i"C
+d,Q+qjiYhYpaJ9SMlfGl1lRNZZVria)CaTH6F4mL3!!eKfZdr-iL$,VXi9af#3Rj
+@V"Ych5lr$m2lDYh$rRP1dDM[HR,2p"PLK4pX@IESL0[Yl(jbd#r@B2,J033[$+H
+Q'T10ZBiIQY%L4P*mS3kE)8"(JGYa'-meNYISMTclCJh&V39NjVZkFEcEU1qmdPQ
+&d8TFZPK%N5Pr[N[dq8!MeBeXJ9'`S@!aT9&))RPcMcA01p5BS03Q1*LfJDM)#Zm
+)PY[Mm@!rT1+Hk@l-+A%KA+$3K)bR9A@ZMp[m,U1#p1+TiHAaaqJ,MdqkFB[""+(
+XQ0reea()B!0lbT+K!3%+A9l&%%-NJE'eiFF523PIXpJ$pr@Bk*q58eb5D1`XhNL
+HEA-'a-3jER"#)f``h)X6EZ!'hl")&@p*8S"BdCM-)Mh`5a)(e+1RAJ'bLF`cb%P
+XcEac(K!0dBVa8SdK3cVVEajLl'#mG)''M2[eH$3Qid4d+a5eNYRi&52#6S'-R`6
+@cpT*-pTX6&9k1))PRD!q@bAiAI*IZ&%,S)Z``E)),EB$LAD60fbdK5YL2*JJNHk
+qJ4L8i4J$+(MSK-mY5`3#Kcj@"D,Z0PVQGcJG@'#Mf5F$VJV'+[LqNYQi'j-BUX6
+Gj`rF1GPB19EBGc6Ab!%m-h`&'$8Im1,fh(VjjCJ6F6(A(fd3ac@0E++0j*kZE,Z
+0ITS-X[C0KcrCH,ATj`!0M4q+N!"Qa3JQF4#EaUZ0b3jrdL8bVqC[8"0[YRE1LE9
+2Gi`RVkk9HY@[QkY8caE10X2Tec[GFe)80,a)Z1*d8TT3VmCf'KJT*!Z#62D")"h
+h'j1lUV"6UbkGb'Pr'B$0&'ib-)6Y)$NT[`j!bALjH3JSFV"eaDZbki1q%[50SbF
+S,1ic#j,,1[(MAZYackD!`VbeU53*D"6j-q18B`A)0qiAlEN1d@PAJ&X%+8*1F(T
+T41'a0FLa+ii8DTaAA'UN0`+qClcqi'2j09E'SCl("T@el98X-bR2U+bLMk6)M!b
+P(DKap!'dF8mbG&[(kFmIlm@adTHrT[ra,I4"+f82-9("ZF)"F(IU4Se1VfiEd%H
+!e'2E6G'3!(I`j`)S)c@iJGD!3k[LmDdU&*GR-UP'PJhU&q9U$$[S@mAee$hSVQR
+[-T,X3AXBP!Q8)hJTika96#"`+3a"Dbd2)IEaV5(JE#m2)8JH)Nb-ij!!UL[M#"e
+pFaalCB*,0VbFLVk-S$V-3KkH(BBprQr6b#[`P1T2FUL9K!&ZJTV09#%[cjU8I5Q
++iLVK,'9dh*qbH6D-EPm#%Q`5%3#%qelfc5G3fT'Rq,k!fbm1B3mfbcpY86#0eRq
+m8-38B4P+JQ`+(d2rk&m+C+faQ,8@'+1[cHMr0P2-8D#3!-ab8F`!%!`X"P(6p&"
+SBU!L#4,!8p8!rA9[`1AU))44C"ime*c-5b4j)1(KA%$"`VdHTIRcRIqI[TA4Cq1
+,A4[b6pc2)[4ASZ')@eEr82c6dqUBI!E$EEQGXd@QI))m+&--b6f)&ChKLU`E*NQ
+FrE*UYe1%JT5+XL6Hc2M+46e5aQYd"mC,I3306)*H&lBJcVPCilB(R'jFU%NJ83K
+84Tf1q6Df(UdNQ9c$@S'bRl#c(LDp8!Ga%J%CCVY$eS"8h%)0e+`2X1+Xq8lDVCh
+G6UI2Sc)TLRFR`Ip`Z++4jDiG8iE@fl#Hq!EPPI-)e-Qide%a8pkHMZMT#qYPl%8
+QdMRQPP&IC%&i0KE98b+E![qU[*)083FU$A"9K(6$3Y`4U2()NSK4q4RhJBXp4'Y
+X-pPUYJ,B1VfBda8fTLbde@Ga["[*P%Q[9LTPUQ*TJDm"-PMAL[,FcBNfqlc8[bd
+1eBdfNKleUe16)bEMYkCBVYP4GdZ(SP#B(RBKBX9f%ccLmekE"kmAS((@"E8eN5C
+9GP'X*R3Q%fFf8iNRZ@'*$0@LJLPC@)V+'3!p1B6e(hF'C%NLCc6*e-$X),''Sq#
+dd*m)Q9N"28)fl(J@biRc*'K,RU,b1#i0HaL9eFm2"8r'``a`bqpfSBGHP'rlU`1
+Jjd0cmRKB[PNbUMKN2ek#eZa(QENGXH-L%cIE[['R4I$!YTT"`P!Z"(q3!&D&A[a
+5[e[S*DJP6@0$UDZSf5&Fd%f6RZU*kX0k#R@+VLTrGD)k%a$lX5bDDY!K3i,,Qq"
+*ZHbe)&@Gh4Q@P[XJ*-0*pfcXC-X$)VQPS"!lRRSj[6!@%kY2($+RP'4eUcTDCA1
+i8U&X&f*HV[Dd3LDJpCbiam'88jX3&l#M`J[d,0XrUQ)Hk51Efh!(-Dh`qV$FI&0
+H(59jGl*qmXFfk5d+,-qD5EZ4933U2UQF"1XeFXKXKY*Ufh)qP$2J&B8D#18M$D#
+0b6%qcV!GMfJi2,-"Ac@6Q@3D8B+GJZ%!+[Acj",`q#3`A1Q#0D$CQ-2j3Vp#@5d
+rEDRFPb(USf"cTadb2Z8SXcT,2Bi'r09Z,a0'R&"dZd@IB`%(0PkICQd@C9Gk!pK
+e'i#L1Ll)2)-H@B'P$L#@8h"3e0HTmM&9&JZb!0lUR&mN&2Q60NlD[$)#96kih"3
+q"U`mppCHjJ2`KRL4&eaGlDhX`m4F$eLFFSVb4L31[C*60AmTU@r1PD61FDYm5#E
+q-NXqeL8TPcUVkJ@@fXZd)Zd@12rmrI,4'TX1[i8T'CU8GbQpA'NI9)"SjFEFUYL
+`k&ieDl(%8JmBFRQ5@U,0@`%aamT+8De4&Vb`JEK(8j9r1hhkNS05d$`1858G09E
+R9,F(2#!9#2q+9[LBMB6h&bk2U+r%Ik0S3Yka#hQkA(V1lI1PG*lkcNACbplI+`)
+4jid999Gk``KG-aU1'jmB8ljbJ"DUILKj@k"+4UfCJ($j-Xl#V)4,dcf,mR,#f0A
+@I4h9P-fL`8E3ZDdFY[%+,$0KK"-`jESGB1513)E&5YS5j'328#0HcISF&3"T1#!
+0+&Q0T""+4)"Y`,%ed[(G*hpF*1b[5LCC5NV2q2m9I`1[V5#DN!"'`XIF3rLV&K,
+"mJ!4mYS)hfFriEIY)M`p32KG%B5Ir#R4V2-4cI2[%+hPDk+pBKF*'9e*3Vj*)U%
+$bNKS33X*[@85#Ahb64,kK8#%AJe%mrST%R+AKZLq@8"dRce$0)pm6A6jhj&3Vij
+S"TiJQZ66*25HViJ`4I%B('LI62MM,a*KN!")K!NANC!!jemR3X8QSYZB3V3EGh6
+1V0+dQh#V%`PhF0fra6N!C`Vb5dV2H$V#kj&1H["kr!(mGLA4(#Dk0q6IjHqQ4')
+JC23kpR9aJ,peT-Jb2NIZ5rjZh$frlYNijM2j8B-KqK(YNUK()eD6@&0cV4$0afP
+U,9[Aa8kiEiRG&EpiT6k(5%A@1N0YFVDhAkijY%Q)0,I8N88'-U,TlXc3jUe5M*Q
+3!2jFp9@R5Y+HS1BCbrGSeXBBFXfYYE&KTJMG,+0P13HVbqYbY95LXkiJj6'6KQ#
+ZQb*1m"XIHlhmbV[@(PSK["PS[f[lj25iq@Z12IVCPGmpiRlh$a[flYjl`FU("lp
+dqlMK`jpl)rVl*r-[IMcerIFqGX9r9VHPpjkj,pZr@cEfLaIZrAk$mkjA4PrrmB$
+[Rblj)2fD69GAI[[UX6@h22,Zc%IHcGmEPV&r6qiI&Z4llVYQ42pCEq4H$Nr(S4G
+EL06FN!!4CBV(&Jc'Y0adJ6PG#)ZRrPeDBr2LMCD`$j+d&AP,GEeAHCU(DCT+eap
+X-1@[-"Y)pL!Y5@b+Xc4S$a[kEc32DVBGMUkp2'3MLE9H-RCT%NfhlcG2M!TV)L6
+$m,iJN3f,"q9U,ea1LU@iK0""1VaEhpKL5#$VQlLQpcP*HeZMJBYF&C8TV55*"J-
+[k)S5PLclP%56*T3m4-QbmVLMHIZ0NY4NU#H$+0N5eGm83cFDb#J$QApKBR6YaA4
+E,GRrJ-!hCF596L9FEGMl%CUTKJPBfRG)!KPX)NEc)N&VL'HRCI1*&Yk-EHf,B@k
+J'`dN,TVR!6IkmMKLj$3&V44fKhqH5$bTijT)'"QSj5A+KCYaZ[UbfG(DVLAe@N%
++ejVKMILk@*T#$!)aQ11b0BFP-S@B*GJQpVALrbXiBXlQ503d+T6(51b1AA1kaC!
+!8[4j`49[22VJ8Q+V[,pqXlG*Q2M5jV'0+bpD0Y4B'2qE!DE&8aYLmZ[cXPEN2Mh
+YkE+kM0DX`YrYQA!VEGjGrSKT5Fcfb*6ITUiBCmY,HQ[03[IiYN4$(LI0j8,rh2a
+KF9*FZ2&@jj(E"F11Njk0GaTD%ZH3!-Dlq2@M-2LRqPV)!-c[*c'(-d4$5%%p54G
+iBV8[dNkJHUP4UL8VPKM-)AhZAfR@,T--S93b0JTjKNE#*G3PBrNZ&CC*"%IMD[-
+`Xj4QU$+3!'Q#88[-K[S@mb&YScEF3JHh%R1NKY1Xe*+d0)pjFilCdJHp[q$V&Lc
+2lj!!+&dM6Rl&DM"3RKF)4a*i3rL@(,)drVED!@C5beZ*S4b,X[-H3BXT(I")P$G
+V+8H,kXRQ5+,P%`Jj("CI&l8eKT4VcA#R2*4Yb&Z'KDf%P214**j`L`9,T#"4mb#
++jjHKpkHpJpja6$Cb@&2m`BS55eaT"Xji1M`i(ka$[i0Q2-8V[&N(2eVfMPGRL"R
+ZY1KM3"+`0(@"Q-hP2%NSef)k&FPX$S9$+SD)HVI"PKC[eK(FGe6YDqAPGTjrUL@
+Uj[0fIfcI1bIF'AQ(Imihfm*IQ2U(*EEfL0YfhqFqHHL$0EY[epeHrmV9'``lNUr
+pm[[hERaV4*[KNlf[&bkbeqejX6dcpXr,"PSH,(pqcrMM&hhekEa2lRjjrZ+l3di
+Yf*Plf[PafP@c)haTEcrhfUr#EhQJS[@DZ5F5Eb`4[TcbpA$ih6kGl4a'X6'Q5-"
+dcb6%`4LhcpT%%L@Z6Y*N[i!PZ$eE)0'DD$0QIPYk-j%S0ZHK2l)lpl25TH@0f[T
+),H@G"H4pNUX48S#KIJ5AFcHAb`ZTa#+&8d*MX8iE"j1#A$`q8Li84DmFKTelaUi
+@`jJTMa`[fh2Sj#@pMThmiTC6ZSFdMhhpc5Ge2ppp9p@heaepB-I!a6INa2TqpIe
+[HThdA2E*`LAMfLlqj,X[Tbd+0@ijX(IX(D8l2N[CFrf+B9R((h[PQj*fbq3C$ea
+HXR0Xe"22r[l8pIPl,Kk4rXfafirmpYBGkcHqHG@QKE-hI2c,k&fMF(C(GM4cNl*
+hf@0MlScZVih)#+bTjFR8kiEQT25,ZRq$lUfAMfbrlIE&ME@[P+db8*Iji-'2qpB
+Dfd,['p9UAC4)KM80b(`mmZfiapF4kfqjc@&2C1hkU2m0maG[T`Hd6ERc(3@'#k-
+MI+Ebq,AaeSIZXVG'VKY%VjPBA$[PNP6-IGf+&Ll(@QH2Z[2TqX9%k0[5e0U(#&Q
+6E*Ra8H1DGH@&YY@p3qUIV3dYNZ)5)r1&'pl90Q5d4G+lQULQR'iKUp1efUf#%"P
+HmHLq[,bL5a)riBXf#m)33b5aPdDY,41DTefbDN(q8U&i5&mY6Y6VD6R*$qNM$-'
+YZ@jbLqRi`AY*4TpPFA%NkH$Pbk6`*V*rMmejDp5'T8-2pdVDY(VYq$El%eI9C9`
+ql15pmim9h6'N,@EM0kYlhcT%fP+HNGNVpY'i`3hmP$hQphrpr6Hl2lUJEh@rf[K
+&F6r2RCrhG&5+BHpddmXIh@icrI,Q)pSTF30649["&0h-9'$*CeDf4+A-ZL-cpXe
+$cpbCFr-$Rkr-ZQKYh$0I&RrhUpMfKh9[2h&dcDlq5cjiiZ@59DH'$MRiqE9I[A4
+b@+2dlUlIQ6FFUpYGY-Idr)"0!`md6*hfEFP(&jeXhr[4M4RcGck[rcalc([cibE
+rCQE6cEEl6hl`H(cFRaiiiL`GHAp+eDbiJe0@$M[arr!r'!A$raqV#RN3ClfraH!
+XfC0FYZDDNc5b,F1l8Y$N#@6MV16ePQmHFApfk,l&YfAHfbB0l8hL8L2Rj(P2"qj
+lX1$J23rH+h#Yd[DQ4a0APqjSb(K@Q1$51-1Q4-6Zd2TRe,CTT,@'h%HVRrlqT[A
+V,YNjrkQRDUeIVG'q[H#eNFQP4kC'pRNUYCb3!1'[Yp#4KTG0*G&09UUpd&C8Zj`
+I%[l8cUb%V!&M0SL2EjhBCe#K0[*)AjrdU8QlRLamX'$4X*[#*Mbe-U(Z&0HmFQh
+r&32VYh2qp1`CQZS,2jf6X-N5mrV&&jIA6TJf2LprHBa$LZa0+bC5DACD51'qlAR
+a#GlTrIEPDP0am*q9e"*9806(%"[6C0H'e*S-Ybl@%%'cd9a0p*FRAQ"DDJ[GFCP
+QFrfL+rBCD'KGijMYEBZ'5S6EHCZfVT`IGFA561debh)(EddN5l1b9lid+'UKqFV
+jmEh-6IDBh-fpRNX,)rfi$(1q`'PA$mS`#pV$e-b[HcchTR(SrBUbPTM3&el3aXE
+FE@i-qF-JIe1)06IZXChaFjr@VR[l[GB[i&Kmpj-#dFaU+@m@2LbriEhX*@02mEp
+IGF+jk+f'c*9LjSV5aAfepj!!bmV,#k,l(Z@fRFST*rEXIH94iqfeNda*"HXZb'K
+iVSPN$YATF[GAldajQecbH1ML,-#iClHd%,Ze6m+,-3I0i5%VkrheR+!**l1UUkF
++0lbeT2A`[[US!Yf+-,jSC9(#LReNfMd&cDE@KS,A@hN0R#lhV$&&p[pp(ARF'-0
+EL,#U0lGMjD6LZ,&@XhQUpR"M3Ba!IaP(qECS+@leKX@fC83D!Pbd,lGJ'2EpK6T
+JXN1Ka""kGqYDXL5KpbU598FX*mMaq*!!#qN1mRL5rX2q3,2l5pmk1%bEHhMDB@)
+`04,Y8dXekmf0[b+,6@(DjF$"Gd3Qma2#TqGG@*!!&CZAVSe[cCXka@bm,'DPJ4q
+8N!"ldbUTAiKZKVP)D+)L&9U0,8EFZqG-DJ%NV4*$VC6Ihmc&hdT)(D(!kkG*b$V
+M%Y,)%CjV&BM9E$63")P-DcBhC3,8EJ58h8eDV*+*4#i@$&U"kmmh6V$RFB0Td94
+5(b+CLh2,6Ee)[E3)m,N'Q2ad6XM$6eHEL@!Z*ZRS[IP9LkQjk4I*88eVrD'KJME
+c&b5d2*b[MbLSLieB0ElkfIcEY'RM`cEbPTC'NpEiafR(XQXcfX`0e`iX'&%ZA@T
+HNAj,c2Bqb8m2baeQ1D(a4[Gq+,Si22a#DTjEa$rEqSH5qcD(cfVplNKMRR$([Ic
+E-CQQ",XaVj!!PrSb9Zjh@d`*C4q@'c+@1`hF-fRT6@(Ka'JYZZ,MhV%4$cpC[Z,
+)iZe6"`YdrrLk$'1[V+CAhcFdMfV9,*Tl#eNd[H(Aj1+&0r9k,T)ZXfCrRj@DC2p
+cfVB"8A-($MMF@P58qhVVSGMQK2!5deGKYiH4A82$c%90Me)265be[Xm`fI1%PV5
+8ShZrL1ecpf0EK8RM6Vjfdl4E*ack`V*eGqcZEHkh$VhIX(2YBU&P8GEk"F-M$hl
+aTrFq@(pTBrfKVrrN@Q3(Y[LCqB8&(r8I[+UhFmqmYV!RAdbjl)+blpGFV'YbMUQ
+mY['le@2'hH`,[,0SFG+i0@Xq2$bJVIH3!$QIpb[clQ2mhYAIYD4Y+fRrSQcdRZF
+2pArcaSHqZ5RkYVRAcElLqfm1(0[G$ZlK,BYIV3PVHA,mr3DAkjT[$hhed%2M0Uq
+qqmXG@cBipqpiiAGcYaCX5elji2f6[lhqicYH[[lblkkEIAV[a0`rIR[e1cHdIII
+3eK[f9RcfjDqA*m8mp-Vadfr1'l2aKTeA(bMH0`kpldKTLBTGdEiepQH26PcGkdQ
+[jrB2qF[kc6KS5GN9Xh[(*bhIchcbi6G#Xpr1+YN`cCiiiS-rIIlFNXc'TDdRkSj
+Vl!fTYrjXI[fe[l[KZ9(6%hicp2f)VpT(2V4kbQHr2c6MrJ9c+kpYqqA)QfEF2',
+@PbZ@adHqZHQ#akml[I)HliEdmFAlh1Lpm3cMHrJ(#h1b-cKk1(`E'DpFEGCUka3
+1L0`)QHAGFH#83!3H`)mrC'C&m!-*%rh$l`1JZ&!(A01!JG&5kDr*fN-*&PL(lkX
+@Y"M+bk1eYD$l`1lf'6CPK%F,KTfY'k8Skp*k(0`hF6`I`p9Ei`hDHXR8,j4)Pa*
+5$KB50rDYT#Qk2PXVm0AQ1Q$,GH9KC!HRR6!J0D(@l!PY)[8aB8eKa"KG5bJIAcq
+M&51l'X68EU)aS2mV'eS-*KUY4GZlBr#a[DdCerlbq0C(PmD%Elj&@MUbIj-HT1Q
+$e[ZM,"[V6E%Bj5iLP'HX"FN*RZ[R6BcIZcc2ANZi`rR%($ZBCRZ%e*!!Pl3Q-*f
+E4a"6"$(bVD'$K[905+r,T`R88p3+$SlchbS#3eHAaHJ0ar(J#URPe4#LLq0(PMI
+2Ec4qf&#dYED"41DXU1FYG8@*5e[MVhQAN!#QfQ9YIfbXVl-I0KEh-S4%IUJPKr[
+&B'XhD[U559*)X942$+A4f3QEl6&#3TJaN8J5l6rB1$4()V3m1ieN6hRfCkT@i#Y
+rZkd6afHVq4,`GpPqp4efH1-"jIrX,pPUDjRGeNN@()j3eii,2LdM3IXlrAhLerA
+,6$HfRcLDF`%%-$pQfV+Pj@K1[beEYTM+bSU1jX5@PC8e+$mp(crTmdfGccF&Rfr
+kX[2jYCh2E``qIh(RmeeEYZaYk2Vh[SCPT[Ef`dGc`ZjP)lL[V24S$UI8qcRmJRS
+Fd50(4fe3*[6ZSk2`"RAZ1cS+CAl#M-QG16T5epkq02J6IhP3rZ8AkcYr1l1L0cd
+Dbr2,$G,4IZB0$F0-&d0Km&&Prhc2,[p8h3fmj8lLIkKe81FfpGel#FH(i"SrQ`c
+LYUZlaUp,mIr'6S2bHLNcKq`M(BDpUPkRK8*ZC8GKFh4S%&m%1L+Shh1X'`acpHG
+Jrk@1RUi$9AYdZ3hQ#*H+B%LlJ$J'b9"-lR2FliK1R@Grcq6fUNT*'CiC#,T(JlJ
+ZV$J(Q(!ZP0PE(A$0e(HV`'2p6-M[2CiG+kc5TEJC+F0aNdY$9`TG)V9F8!qp[Dc
+"1UT+bk+U2qD&@KRZ9r!N9EX1q#QFP#d4eC6LZ!eM2!dei"5Ni,5Kl'a1Ab,4B-8
+IiGC`NGaM%)VN1jq1m4$4bRA1F"G`Gl%(Gp0J(6Tdh5ElM%QYAb!KFUeMR)&lAJ8
+-&G`9UA@[SXI(M,`lh`fBTRGp@F,%m2VX&ZPQL-aHYXFE&"Z@##TN+AVRimG*+1E
+e18cf-Jl5&3#XMhI0pV5rHdBQmEH925&@`Ze'VGbr-LcfFfi5Eb)k0SQqTlPHj%d
+fLGYp`8R!8[rqrjU%q-G`&$5LrmSSf0!8hSNcrYQ49*+*)-rNhf+Eel+C22IVi%a
+dQhY6%3X%10[0`TB)@%"Y1R"6jGlL@f6,FTKb$r9N"iC45X%[Mr*JT@a2)8FBLPJ
+mi@hFfRNEF3cP8-m`5d-j&HCZ+@G@2I*`8lP'HMlBMCd3ZD@Rj215HZcY5Jaad*H
+5SRV3mqI5,"efP'*1e!8QiS+kA3&*SEJETFZ25CcVq$MJZS[Zi1-08TDP'2LBZ9I
+ipj4GHGdV3YdL-2)DaYDX6@B#VQSPdUe8q$3bPLcQ3VJTp#c5M'j6m5*+I!($Q$1
+bU4D6&@4H3$@i'Ned)Kkk!Fh"YG&00p5V-,CLk0)GP-)0#SN29K%5IKP92*fkadX
+UCh0SQq2$DU9RNc3RHN5J6)'MTa%!35e@NXZ1QX')!fZ-1!%H!0hPj!#FC@"1P[b
+la)kdAAHcHTjr65m24@#[&-*ie0L,ic",CXh`B2DRAU%B-QlM1f3%r$lZC[)kpb"
+$Uk0ErSjX%mCaPm(pc&c"GSSpBLL!#@MD,*2djNHV"R(TRI)Td%0`K3CCX1fFmX0
+pKi"%N!$)2#EP1'6d$*!!0DJ@53(fPr-#Scmb!fLP&HaP6R3b!ba$3,'RHT!!Bm$
+`$RNa6XG'U$XVrdlA*aKjUL@5GT!!-(Cf@,k!f1NF6)F2(9SdTHY"UaY)#2m!18N
+'F$VLPD9qEBC(A#$VULq`S*j2bXMehh10(-mph)clRA%E-YfPTGDjAjm15m9Mf"T
+-1Jhi9MCb28+EMBQ&X!T8QL@9%&pR0)*h2,MX3KFD&XM"I1bU*$4LMT4U3bQ@P2G
+-l,DMY*HP+5eQ46c)BmHE+A[*'k"VK*[0lBEh(ANkG8kY+E[,1!j)@d!E55m+m!&
+M'TShi9,$YdeqPMTIEM&0hAYd%aad8hEkKiFK(*Z5`HNG"M"6km(p23-+iLB(8@5
+ajAS8M,(Xie`bLl@1Z`5e$V0EIqHKB+f1JrM5G8M[lH5iSBG'BN(`&F[%NPf+D2$
+h6MMmhI#rQ9MdZ[D#XD6@[%2'bm"TRJ2mQ(AMm10bF)pZRfecT9TFIYKFc9HEI3j
+RUY[,('Iqk%K2ZI"e8RE8UGYkYN3@Y,HCMhi$*TC,FD0)fVmLFD5RU'heSqhmTH6
+(jDZahF!SH(@bCiY',E8bfEE(,*qPY9Vf$bCBQ!PmRSkJCNZ['U6LD@f5iLFi5MX
+6![J60aeZk8Y8TkU8D+8'!lITUJkVS0KE64iphqfcq@hkIcUeX"5UNJX`jbRqT#3
+i!l3%'b9jJSj,,jbDTF[Q#-Y#ajZAbBihY4,&9`L6-d-L$$@k60hAk6+PmphEBGq
+$!E6d$0(+!)-MN!"@fG2TpNAFh')jF-b%5!B8'+aD6SFA95fr`f+UpNmAR*S-Yp)
+i0,'!6F1phH4AAA1ZR)FGZ-dpp`cRNM&ZLrDB&e&`&`e$H%)Imk$#hcePepriZb(
+S-AEL`I$Iq,[j)k0lfB84P%K()Sq-MU*#EhUNej'qKRh*6i9k6,iaDr%-[lj`@&L
+HN!#`FD2kkk9KHCN*'j[CVj[NY`I8YjIY5hJU0#qcGbDVHb8pSPqmYlEVhlYVYp9
+2krLc%DbP#Rqf+H,[ib9rPM3q`1aV@M(Kbrpbkr[id(ZN+A+0p`-cI!Lkb-["K#-
+)8f8S[VIMHbqqi4&6Z4(II`(IEm2hZr$pkrMq&i6A6#%kc6AiRL"D64@qjr%lJQN
+*Qk)qK#G"0L[K2%VY1-pM0S"68Na6#'h""$Uce9KQ'X*0-CG%06#F#e3!AKR'4bY
+d[-6*T8fR3''Ghc$0"kN-dmY*@`@,'-!'J*KfkI@8EQ)Y+5MJ@@1@$[kfh,AkMfP
+6em"d0&Vhe41YE[I-C'V"488J#b6MQA0AL1KQZJTSFF*INCU8,(FEhF%iC29d"#'
+&BB+p`lK,fciY'Uc,j-cjGZMEh*-1Hh(8-GYK"m-2reT!3k0ZD2l+&T!!Cd![Y[@
+P!-"Uicicb"%9"fS1Td@#Hjf9%BaJ-*'K#E4+-+`,bf)QPkN5((,hffU`JHJ5!jE
+C3*)MLfGPk-2BBJ&@`(EYara`#bB8ef6,RU"eKM"2m"YhfZ6IpY"XG`9UJT%!#T`
+&KT0UKqI"Y[jNXT(jdpiTqT`1N4EBj$'Kj&%B(Fqi8Ul%1`#l3h"fRI,*'dC2he(
+A2"D3!'RR+"5DC@P@TZC5+paU`EG!2J(8Pm)`f1#D30)h6dFZ"$$(-V%a*3L6,+a
+2jb'P'0Tm1*P0j4k!4@3SQVIjUPf1Q9J2AaD3!+3iDcJidlk!Kdd-cD"HKY#EE!-
+N5d0JBB5a*%rTZlK&2A(3FK!V6LZfZKNbV5ILkXl"3(PF'CFePcJ6$28@Z3RX&@C
+i("`(Gj6fQ42H'MGZ&pMFU4TiGkYG+dJe[BY0jMGlc1@BMhSc,TbM-@"VVDd&BPd
+X!a$(86GHflaKl)IMi"A&["dV1T%LZhp,$mVBaKkfB(fbr4!dB+b1EXpA`NlY`q8
+FaIF4"6@FK&-EH-&*'#9MJVJCZ'fB&4T#,#BF@[a!l,',XN4,lV(+@fIjSY!J*N$
+[AV+k%`c6B)h-feGA$U6HM0f"F8T@#ja-6,Z*&%V6N!#*JBm!M1C42-UU6FbY%"'
+C!Q9!Papef0L&Rm8+!QX2db+P23Qf8"*0A9*ShSh632+ThN%qe5`9F-Fl#E5MVYE
+#-U$EBIerldaYp%L6L9i*GKV(&4a(biklIkrECYF(GkP14ip-(c&+AjCDNQV"SXj
+@ZehLT63p,50PY'P-bSJ4'6Le@p-cdM,ePEDjPmU+TrKiT`N%#RCmQS@Gf3UJH!)
+9PTLc4Bl`h&qrLSq(AMb(Mk[lJBqI5Il1I1&jGAdhKlDB0fNNeF4fpML1dS3hYB-
+0ac0i&VGNJfDXQX6f'%1U#('P*LS%U`39&2-$c&'B[l-$ikk'ZlGD&9),l+C!@P!
+A!E$`fC*a8(d8kpaqHj&bF60+6Ul-rGJY"[R5JkeGH-Rb[Q)i`)+R!!BAjXU3!1i
+"042)VZk4-05(A[!1*ePRk8I-XILiEEED0!k$5KJQE-#VUQ2J@C2HL'iJNr#Km1J
+a6aG+8-a'#hLNY-(-9!i@pii1r1+db8UhG0!&3adKHiVL"0iU8K2%S)dV@8H`GPa
+4+R)d-SUBld%"R2-'[JpeZ+`,m"+mQfd"T`*`3FYk!@E6mj5jqC!!!6Hq9pN59U)
+baZ3H!Ll+jR@SZ!R#cm[M4',i-)ErihLYhXIeMHI[irY`(jp'rNS"icDq9@)'%&8
+BJUdPB),kEX(h6q,l[IMqTf#+GS)TfN2iV[h)Q2XECB3p2",K`q3E&!Z2L[`fQB6
+lJGh'-3)e+`3'$%4E+[J9$PJi$)pE8lGlhB$e1!X3#)0r!G5D6ZRN+B62pF*+NXE
+#8hB@)J(B$e2#X9+N,AE8NN@SG0HYkC&C!-H,dp!6KhJE[%5R&HLA$ILQ9,!B3RP
+5H6RPJUmjpTJ3)&q$UbK1NDU5Fm`I19`hpZjbZAPm'"bVHh"U169dc"[-hYP[J5L
+-2pV2H'f%V1U&lm)4IS$"QB2+M0Q(c&Q3!!6'B&kj9"#"Z!(fa9i"d(16T#$jGbJ
+U8FQk2*!!&Hb*M-)$$"53!-$$iU%RC&&6*Uic+5lblDiUaZAiU&3Kj,2#b9HBE-S
+C1IiLRa[qk@aGq+Zd+[GamcmmPlVhX9+1qrK8mKFj"&jAXSPUl*ip(!)&--081Jd
+@NX@I3SGUi-5aQGi##8c4Y0&C!@MFZ+@L&K*SBkU4,659&U)4@XZRk!1cEPNC9mF
+VK-8a$Y#K"ZqHRV0Kq,M%P%3&HP41![dca%8V0BRCe%[Q#H0-PiCkJ'9RLN10i4a
+mQN48*8EPGBNi0BHS0kAqY&TRrfVUrPjcqYcqeLS*VlI8RT4rI3QXJ'KrH!m5@,i
+-hkr!pbLqMq&l'[Ym!r!-I!mUPq2lGRcI"fh6Gq,lZk#qrfjmIa$[rM@q2i9hRmA
+h)e$3V301'XEhLr!pKZpAirX[`ZA[MIKq%hlr'Acr*Vir$!BG,UcpJr"p#)`km"A
+Bp8'`keA0((b$@Hrr,EiIa2Hr`r[2),,LPI"YH5'qYj!!%'dk[Pq,Ec$e!brK'rd
+-`N9Tm%*m2iq%K!c"0rSC4$q$Mq2l0r$p'D+&$,mD'N+3!h[KqfCmhiE[AmEhVq)
+ElV0VMZ2l8rMpFi6A4C!!%&d-[Vm$hjMhfJDLeDh'per$lcq,l`rKqb&mrckq(b'
+mN!"!Y%)5[VH5%'%8[[IJq`jmRm%hA($AYH$pHr(pI[cq3Acr*haMEpCM$pCM$pC
+2*0S`l1&kc'dpjVEq"Rcr+,irJZp2%Mim"[%GRir[&j!!N!$`C(b2irX%[[mU[Yq
+#l`rLrF2irTIirD1%KfKL-#)-hpL(5l!h"pMGNh`5Z%m'18SRIli%aJ&C5cPJe!E
+JL&')#-k+#6E)QP)U*Y`3m-Jp-V8pL["E2,3(UeaZ2+X$Ri$dFBRl+E#3!2L@4"V
+3+#UG!%E6bA$Ha'Q4J5MFEX$5$1B*M8k0!F@+3afM%kB)@Ir3V(4i*q-J4$qQfKk
+0AD"RAa(%X$AI'K4Q#2%[(&+(Ia,ZFCaP@9,PJ,4N3&Qj(%-6[KCSYpj*P8HfRi`
+AXRlS*JJkC)'B#-#M*JBjaLXVJ$dFUM23h5*-AT9e#B)j+S)21-&'Bd)1%!(ecQ8
+P,iR1XDNLdS$SL-,&)6S$C)YXm!-JLD5L,c8VeQHlRD$rXD8Q96S*I(mF3*6b9GP
+GlG*@AdSU*b5a(Y#`,#2[Jp5U-DA*KEQ3!1HMML90L)-Kfb8U"mkJ-b8@P(jp@MB
+P%LSb*KXHL'K3QRL`2$JEkX%5Df(br``4)[$P1FV81L2bVG0KfRc#2)#2IEkiUXY
+ECG1j-"F)j8c$*q9aS9b53%R+BDB`!`pad(9'hi0VFG$erbdP12jCKVeaXlDKKSd
+SV1U6LmUqI$Gp9kdP0)VE($D&mm9E#K9a8V[,S6[la4@TBpTl)CZh,#PI2T!!BeL
+1j8Yd-B(afZ$#2IMUZ#qFJRc*[cAR,K6iaR4YS1dlPiii"!qMd0IB!#m#-2!kG+M
+68)jpibB[(q8`jM#elULqICh[BNQNjRb-9ChkhjA8ZE3Bik5$cDCRip)lNPq1rc@
+G+9r&6d-jKf6b'GN`,KU!B`j9CrrlJ#fjq-#DY+rUbUh4UA54DS"40KB(V+Y)Y6J
+qkB!q0X)[!S3MBN8e`U%ajYHhN!!I54N+UKa&VHjFCk4r[([hZ6U2beF13fJd(di
+k@0qF!RA8cb(rk3"`i@Rk'b!+Ir[8lPFAq0[qpHMm%K)d'-#VrZ85A,[`HKrF5X$
+6pSR3SmcLqaIar3rar5'mqh9mIaUrIaim,GUS-'IBl`4rHacIFrLpK@rke2`YI(m
+1hrm&2#fFfkVJ-m(Mp[-9q2i*I2mPI(qBk2J2#'pKQC3#a`jQ5Z413P24@%YY`S5
+(*dB-TQ33EFJLEQA20UA)B44$&fBZaUVEj*)Tm8UX6%ZdEBVCKCDAr)ZGfM)+U%-
+pK&$K-#$24A1jk9a$a6!fT3mI341CaCR`Jf+lKLe!@M(brY"5iT&'GGh@%Erer`d
++Q@[hbhN$fhf+L-UEXdL#0L@%XEf6Z45e5b*eE+JS0NE3@YNN5-E+%rRCXr"b!VI
+l+T*Te!h3LZ0"eT*b[q)iT4Z%VXB83GQQ#65a-c*B2JBQ"fX0Cr%M@c4B`A+'XI)
+"QLK20LYkM'PXme"UV(3V+T%Pl98b%@(+T+@j5TB59+%CFYbCh88G9D$3$IC'ES%
+)9BpZL-RYf19%D[GaI[b[fUcFraGmI9kIGNM@hh4G4I#dQU(SdbT9Z1Zirh$BA-X
+pM1rIaIGr`2GRFEIA`,%!qd%KRNUVC1K$R8%*aj`fb1q5()ml!rB3d[1Zr)mAQ8-
+r"88jF`jhqM)&[9J,!5PLC,JYdbPbNeKr$6YFBm,MHjJA8&BSY4N@NjVL[BV`KV0
+b5GYK@B%P%EH3!-,1K8A-9UPk(YD`b54R+4U083kHKdKb#`jZ1Ui5F+@3!1VbcSI
++39b[6Ucc%2PqE8*d4&((%Cq)'BqdZUELeNLX`rShGYDhF(PX!kZhfJLVhT4%@3T
+--p8+&LjkRGJS(jB'+pCclj6iAk9FZ8p2HqHm2Zabh+G0(IFT@0c`lAq@qXJe0J1
+0AS2[53@PZN%TDmPH&'I%8FcG`"$@M@q"6&`[[DJfbUUqjK,p-@TCb(eRffm0ZN4
+9l!Ki$%1B3-0aRKq`dcd(&Y2YC#G-@eYF"[qlp,#bAmmrG@kr,UfApDQ,MN&pI'5
+9p*PF"EJHfe8P[`E"!0e6C6$d@G"j96A3B6dGhm!(e3#q6q2lGIKq-rbYrJlHrPe
+`#CI!e@56l'ibS)'fU[m*r2l2mIhEq2hhS,9k(64Bd()0`"ePi#&SUZk'jZT9d%a
+pNZK#2m(hTk'4ZS5%kD,`r94SSq#U![d8Y90VGEIJqahi4TpVSE9DHaaeN!$fC5f
+iKR@Yd%Ep0ViI)ES`,642d*bY,m6h'@LLhSc[Ii$Ih`pYdbe%&jk&llZJGB)QLa)
+p51TGm#G5d"6i+HMd1SI4S-253@@qk$`J8XHLbXUDZ)L0*"UNGi5T&!U1KH5H4*,
+d#[N(,Ee,XAEL!G0#1#XK)fPC@S!C)FSTC+i6&!h($'dmDdP`+6UAE+ZX,Y!'KHj
+LY&ISfac48"`+6IT@"$mq"B8`MJ"")XVp`RM$@XkkU5Hb9CQB#am&FQr$%f`Z4K[
+%&ZpNL85,$KP3%`dbajL&D2YLBqKV!ATppUBq8HT&)fGHrDB8lL0F%q-2K9dK1*!
+!5S3#jKPV@iaIS'4AT5r"V[[DF"+PTFf`5ZJ*I5,B3f!$bNY5*FN9RPYXDBYaaGQ
+&4aV6NH2(4I9e8)J9h%98Xe(%CT06I4TkTdB[504%EkIUj'JK`YQBlCHYPa4&*I-
+b3$[8+mI)E+4!a!Xc1Eb`GEk0B`e2I,80Df'SSbc5TP9ZXY&Y8DV",S#)+IIRNC2
+&86mNQf%mr11&,!eeG0-l6J(LIZ+fL$!LB'BPNKMX10MXqX'@6[h@##PRDMeG1KQ
+UP4*HfDrk(YPi$@1QPRGj`4HpfD4rcEIUUj)[13i-Z93ZR+qNQ4QMYlYX&ArY59$
+)+-b)AJiJ$!N0e36L)k4V,e(U6YV3Q2)%E[fY[!H'14%2Db1B"0&3#6F'QZ4`YD0
+rXB5,dfamK#"b5bcbUMSV04fTm((TRNallP4%JQMbdK!mpP4bUS*4)r[S&UI+ch"
+YimrF&$YhK1iJldmUKP%di*L'0N0J19FBP3`"m"5UPKXJUbZc,a`"%1*Y*P"9cGa
+,6R9k#k!KNRlB1IAE%!+`*5BT3mKl9q`89`Iq4FSP#8ZH8Bda%++kpqV0TYF1r'(
+N$SAl5#Jeim+m`&2Ei@R+d#0B*Qhj*rT"+cJM8Kj(K1!(dqqGTkB[J#(KHVp"$T3
+AMNTkqIhA$"8ABQrcqkdXX)CBj9ECI3pZ6J)c32##S2EYpJ0k4"E$qdh5Bd$d3p,
+j01bX5YHR#f2ZS03FiF%f3@q-JU%T"%d$!+dc&3Qbq-NXHU#NBaSf6$Zjcl,MTVS
+%D#hTUq10dmjNY$$KT)X5E!CRCLTZUM+VPHR'!bDNK88DXk9KdcVqGMF1%0fa58k
+qLM8+cdGiQ+%b%@B51"PhTSXXI(#DRlQ5(#`F&M40SrS!V-*MCdKE!-ZZRR1C(00
+8j*Pb-I3f*Z+#dM--,ZI#kGY$-cA'IkiK0b4JYYJ(AF(j1*!!+YD(S&0&e0'2+p%
+@$6RHDm&EV"TjP3H%KKAZiSZ"%#GlUMCc#j4@P!e1"lB4@!KG4FbZ',#X05SRc!c
+'F'jj6`@bC*!!'bZKFmTCQ1r(1&plGTc4fqc*F5l4MlfrUUT[H[TjI80P-rM0Cj&
+rZ*q#bra4UCGFU3'1%ai)cKj,3D2lLA,djkLf&qEAV0ebHVEd&K#K0(VLV4*AaH#
+)PY&rK(&kCA1'R@E'61lTUbl8R0%TSpdRPH1i4BNQD33PL-bX32!45B1&GTZ5&dF
+cIJdJD5"Gj5NPpGES#KX$6Y)VDdi(cp9KQPi16mKZ6Bd)pYfG9B3S#hfTBj!!AmY
+c+jVpE9$e!mm)qSmqXImEHQ(r,b2G,VGJIcmV-GrP+Tm$"GTqI,mDc$ACkHeJTem
+#0[UR`%Dr$@cdc83A-KiXp(mPQP!iFX#9Bkd!aF[k1,$(ebR+&`jAYLX5A#,P86`
+K"[EFMkL)!6!9XiBQPYkL4DKmLYI"JV'66LLGf)(h8&!j*VAQiUZ!-K#A%rh&c+!
+S-3E[,YKlUNH(1DmPMiaE9-L6H$hP#f$-*iK6,*ci$(XmCh1*)-6*MrU*2#Dk4#p
+UZA-AL3#i0"'`#LhK+bGEhf31XqiS5TGYr[Bpj6+8Z'DSM&4!VL0)!#hAD"@#XZ!
+5B2"fLPQ(L#1jXYBSBmM#&)&S&*ih"))LTF0dP*-J"@-qSp(j3Z`ad5j&hEQp4B*
+8V2-p0*'Tc5aj,GG9l8'Q`A35%H1p8+RB*MB%N!#$UIQ-)rT#jlJ43KY0-"hC[8#
+6e)LS2%"[!Y4[Q!1%F$UPi&mT3J%hkA"cZakl3YJXab13!0(a2VK@MGb%*EFA(J`
+GFrVZpKABB9C!@2ea"eX2E8"1XFN4d#TP*fh'Zfb$0q2,Y2FZ98+dMA')90MHdH%
+DFPJ9,TX*+B@qph3VPJr,ZQb&pZl0)XjB%@Mj*[!Z"mmmCfkija`65EK*&XICkD0
+4$m-PFk"HfZ0#Xf"p4jeZk!e!3#K0$mmd*L"K1mFF,-iSqiH6'T!!l3*i'Q`G+6*
+aIe%$1PdRV0k#"`25Sk6Ga8f&TYQ"N!#K6Ed)5J*,#EeJ0*3aGejrViaB4l0PeTc
+N"L*+&qbKLfT@0c1ZiE"@9"i4fb*5*epUhLAa*NXX[UY8C!('j(12J1[PRTJ1ER@
+cX,LkI(+p$@6QTk(`i0(ZF"k%GAFI`*1J*kCB"0d3kKC$Sd`9#!JESlFY5$G4jVL
+MdUmJ-6Q&Y*Jl&Q#URp#!3+j-'4LU!CmY&BcHK%(i*E12)Q!(a+0b#Q`r1lB'1RV
+CFiQ&2PYY!`6#GZ,8fIe@jBc"p46c49-cF!p"+N!f)KiXfSqL&ZkhZ*TT&[Cd&r1
+V5%mjMUqJfhA4i44!X6h(X%Q&VM)'13Y4'`Gc6J`&I3KDpD`2H+jG'%e0CC(XYFT
+b1QHQ!"i@p)(ei(BZ'*Zj5""@BFD6JT[M!JN90,'-D2(0S%fHa9F+2paXFKbdb8`
+0D*DJCa(C9ki@8(h)F"*),m-kQG-e'p'CkAN*qa10$Y`0faP+cL+D*5K1R(GA96(
+j6HIkaBX,!9UQ-VQACH50@d@&PcLSX'IYJrB#HYYY8D3AEk-XBChBVU%&!@rF0@U
+Um@#jbD`cJC@,bU1XijjFk%,,K*cKq0[5U[X[pY91mpDZ@i2d`+MP'jbBkq%IL+$
+fhaT92cd5c1riT$rm2[",cb2rc%f!1QX'5J0C[BS@bZN0q)C@Y3+RYFSlq2i8H+6
+-'TI(Sp-&L%368"Mj$Q`h`cE!P42J)kCKXD`!0!P6F+KS3l"e1PBVk9,BXCal29f
+BRUUkbYRK,Q@kDGHY2blfd!&&T9R!&eP1rQ&kTC`3A'8m3M+T#%!*kPjIV'*b%jA
+%j%S5R""j#dJ%c`jKQ$00'c'2#GVJ[KbU,MBP1JYUST+#`r3!Bb+Zr"3MH$&-jmV
+%bdeP!#6XJMa+p!T%`'FPR)MkV%UEhQZ0hjX6qbSdFU#MSKImX#cI8J`8"ldXhlT
+&SHT8"EP,XCjj3l*m826(Yq"(b!D)*)-5)Z*Z('%!+Qb3!!j$YJGciiKZNCh`k'e
+LD8-+(h)A(+$N5m%MhSp4BmJ42B1$`QZ!LULDLCjjr"8cP-JXr#hArlL1534d8GN
++$NiY!DR`-Tl)hVL'a-&k2,U45(6rH6)+i&hN5!N1m@$A#"&J!K9*B-[`q,QZUU&
+kqqP%P)EdFlTk4%m"J828ab[rbU(AL`Y9MqV560XG@iZ#KN89(@$,m3-kH+h#rY%
+L0)V[R+'bm!0K3B4)$LZA5d3j4I@l&UD)JQQX8H*NH"YF)Q2m9EQDa2N#205"qSP
+,*$pbJ2kcr&U68B53!(jb+'#V4CQ1JJkkPLK-Cfp[k*D"i4jbqdekaf`lS%0`9""
+1a%iYHmK&3GC&BQcdb-86&Fc'`E)"Edh+eP`Z9E+%0lS[3UPlBm2r&cl'[`(9RhA
+GLR2iG-!T1`ZYHMbLbX"i"CdL9-kJ*J6I,iB+!TVirS2irKh#GeKlUX`&&[HBB'$
+Q3lB"SFBbd*Gl6kT&c+MFYi)DV5A+&kHjAY1"@+8KFbmf*Q@E5U0)FF"5bQbLI"[
++HR"$TN1eH8NAF!2CA93m15XR*cZrF(a*BYEN!Rc[c%c@6mbj#Z&r'KCNH`IE(@3
+ik[3[[`2E*8rr4V+q0,qd))F9TAKV5$qjH,bP-(qDT64rFL&HlFNUS!["$eQ(2#U
+&1bFhi1[pHJ-HPYMK-`IRfSm-98P@"1)CBD)Fl6Rf0NP''N9B4CUrQj'U4%`!'dD
+KL+faJ0'3!$%k3!14TDCp9Z0imMH6l1B9NbqJ*b96idkEURe55V)CRp50!!L`9)!
+(a$Y4KG8SjS#ppN@lk[a+eI3)(6kKQ#%3[f3@VD)Z6qH*MAJ@$)%8,[eE2%FKEEZ
+4'YP@+MJ39LFQ($119@Vf'S)4QLR0cB-NcX@fdYN5@l+Q%Pmp'I(U1k4FZ*qTL6Y
+M895R8iMA0YpR(i%3'`J9iZR-e@M@%G*9(FXpidhp&mcJheT9[hIGj22mfNr,rL5
+,q@,!U[fJG#fV8[NPr+2r"P4FIadUVRF#Yp`2h)+mZ2h`%1Rr&2MQ+ULjS0BDR!J
+e&rbQ"pIMqqI`rIIKi``rSd(JR-%hd8m&RL0VmAdC[Z(660ki5e@Uc!&D'HSFfQQ
+C0+a!S*!!LB12!U+,pDp)"RZH$"618$(X@Q#4"5V##ALi9PTX+5`TX*41,QB!j%J
+U+!5XR+#3!)2Mm`XY"ChJj#l41h11$CXka45,`'!RM)ak%(Z!Bc+M(q*2Li!4*jS
+a%"`$'ap9S!jAp`YU0Y%Ze!r3P1-@L(G9Q(N8[1#Y5Y&pXUeji,&1GdQY4$5XUf2
+54MSBf#d5k!LQ2#!k*cb'D8FZ!$[E5C(L(P-JMc%J##IF@%ZK22LmUFjN*DPXN`&
+jmYTUX'a,m!djX@N"U*!!iq%),Kc8HkjX[B%NM049"N(HD3jJ9S5%8JMAFBj1j-&
+`h%@k3SkrdURG!GL!f&PK#*(IQZ+ke*6i6bY1(P!`"Bm*E(()hM5UUKac(j'N904
+F&53$#Qer1c9,)*p!R'+ISbLal@f55R9NNH*%PiHCk"#[cK+T&6L"%#dS@$JkSZL
+1Ca+3!+qG#Neh8%Id&V$bNTq%86E3555AC@ZB985N260G'#3X15QNf(eNh35%)rT
+#JLf8)KpPJmhM2!3EXTj#ra35hN$-lhTb2B@d3T1H&DJRrr4l*Nq8l`2dH[GCNH$
+j3%ka,,c83#l"@L"P3BVL4S"6G"jMSpK`48+iI+YpG)32B3ANc''E$"DS)%NBdFH
+hhEJ2&I-Y3!B%fJ#J!BZCI"85pB`I!lSCrKXX[I"hUFVI2E2b[$rAR1areYiI[,h
+d5ZNAFSd0J09!Uj84d*+m'0qrKHq2!!fI!4Vq-Abr%Gmr"63-&0cr-har!0rr,-M
+Z$3,Y$U,qi%Kml`EkrA'JAk633(U"YD((S(Rq'"bfrRmj4F$DX1Rir[r`r@NiCRf
+Hk#+3!-lJNJLLM8!fc8Z'i(IN(K*$IhSmIIXmHYBCJD$jd!9N'`RraB!f*YJSM4C
+j&J"K4jQI,T*a-*m$e3XVjK!U%X9K8)V+rAZ)H6VJ6qi23Y!"Pe$DJ&JjR*GQHj-
+T"E%r&G[KKRF@*I(R&)Hibb$2Ghk`4B5S5f9E&2G+9)[CK+aBHS*32N`(JHA48kq
+8%Q5mL&*$V%pTSTK5GDJm)b&lU-%*+$cG&Tc'YZiD`53M%%eJ&1mUQPaFDLNX[E5
+$B`XmdrPZG53"S`KcfH9E-qVX#b`N3)Y-2%J)BLp`lk(+K@jQDKR#hkr#'ZR-Hf0
+YGUZjBq5#9C+-mN,U!0d2p,(4daBE3r9-IQij&bDIk`3Aje06T"1@FmRedGh,hG9
+QbB+Mhl$KMbpij[!L3RNrf(Z,*jH8&1INGLa-T)A#UG0#S$lJ`q85&aH2!#(21!(
+cfTRlCBY60LQCIpiUT-,88)h$XY%A1$)'DEmlEME4(5Ej9P%,*RSD,*&h(Mc"G2#
+CidrSG%Ke09iL)CUUM8IfX1FYU,U+3RVdd(qBk!br##-dQMS%'e6iq-PbNQRilpi
+pTZJaqarZXa-!lRr4iq!iR94%K!6"1S,Tl*4T8,R@h,qDKpd58%qlEG0NR9qU6(p
+)*mGmD9DFNdU['S58iX,C@MY@`9'MDK@mC,+[4DJ@88@EBC%*a05PD8PrCQ![+$H
+@cJqJ#%!Y!K'J+mY$&$)#kIXdp5Nrr(iLS'4H*-#GqjAF6Tj))i#m6+"IF%9f*%h
+RQj&,cAqUHPei)"13!)JHK&h,9%!ES6V)FEZF,KN8(@[-Ik[J[5MmRT*Ke('X1j!
+!eUl168KZ2QjVC&($K-'flSMPJlN#84%%b6KS"XDeaJUV"*0iX!4%j4`eKk)c+BD
+H[HX`)I%a8D%G$)X-%K"8RMdNDI+kN!#S'dP%pc%Cm4LJ$Vjk,J!mcK!$dej"#c`
+cKpQ`J4,0jr(eM3kmLQEGiIPU$iYBfl)S#D'XFc'd%FMH#r6P@9V$8L@T"eDZ62C
+ZBNJXV[hM9)BTE+KqAESrRZ8%a`%"Y(KUM9GS)f`PU@`2d[RHGBie!jB5NKDMS0,
+KQ0[0BQ@1)X`CpX#9$eR(*YiU0dqAiGDrNShqYmDXm*Ge*CPNjiqjb3[qF[!,fAm
+TMri(V[($dMMf[Y)+VK*F*0)!V19RJC-m!PIJ9q$l"*5)-e$Z9+(F!FFi!0II!EM
+h$Qc#phZ3!"5!3BTL4qi*%!8!`BG*b'rcel+3!*0`Ym+X*ITQ*1@S6G"PCP`i141
+ZAMJ+L%E-0H@'LM'b!e#X6U4#+L[)+4['F%PqJG*h[#YCh!C9666q1d*BJkNFLXB
+HNY9`M&ZQdTe-,Fb,LCiTkE+aZF1ZZ1LE-M"kIVBmc"L+Dd&TM,Q!"0p)+SKMGlY
+!'p5TNG*"P!kQG#LPLC3Q8BSB%5qQp(V+9)rjJVIh-4eC[FZP$j!!l*f(hCY31(R
+9!,K$d+)e%-h"cKX%q9kGG`ZUp5bB)ie&ra0G2H`'F*BSA,"+5*+KmN!6"QDYk#j
+&U[(li0B$GKZDN[`Tkji8-ED90Q5ANh'HQmEJ)TQmfd`$k3SNVPJQMBh#-CkM&rr
+2Y3PjI$U+dVXRPhDbmRmDQLlCSKZp"A*&TLL11QfM6@-HXE5Z$HUk4A4F0-85a+e
+!fUc'Bfi-"5PM!e*VbBjEU#&)*bH@E+cE4klYeTQ%EEY,5SZKCFhF2AX@mQGp52@
+S@Y#XMVH5)"YT2Q6d+UG3MTC51-),A&c#FdQSB59e&ph#$ciCkMQ-0pRS5VJAr`E
+9r,VEAMq2(iH"(f[)&aI6-q$GB&pTP2`H#FRkN!#3!+c[3hcr!I$N4Z"**(EUI`A
+D&L4@!QiFe-,IEm!&h(K+dDCS+aImfV%!L,)VbQ2cfJJkJ#$#pQL*b5+)l3J6B)B
+-JV1--J1U`Z5L[B9d5'#!GjJ'@c6R)-pZ`*-SISka@r9VdCJ"@')&64,Q3(4@Z9q
+FaqH8J!$!"2Z8V)#j58kQh#rdKVSM1V4ZXPX+D[4NqMK9"X[i)a5hB3mN5V0D6k9
+1V,X&1@dc!Mb9CPR"*c,BD8QmE+ZDGi)M6r8$*aN%%'V)%[32`DP+@ND3!!Xi`X8
+d'GaP+XqXKYEHURTDSC3p8!8-jGU,lPD@[p"h#Zb[Mh019"dfh-cV5r-kkV99bIk
+A[!S8ji5`DKiEK@NEJcHI+k'bK(V"j$-kLZHF0q#G%AH&G+5FK+CD-!*"*4rGJj!
+!R-I8D%0Fap4JN!!Tp1#kKGRiQ*JC8DMZ'6M5"KMbeAaUj$p0'T)i#L$EYhIiTHA
+U*&0,Z53rF(hLGH6b6N-dUeF2m1[YXT0H2RR2@TB,"GA),rR!Lbp@GPdPTB`F),8
+!NA-Z"+Nip1,E8qcbSDK,NMZJ6!#*UJJ'*ZD+&3bpah%jN!"4!8)*P0Tr!bTrpkb
+NFrLVrb6`ecULjR-&X[ShDZU+[`c%pG0JlJk$ZE2F$)8L)X0'dIb8M6`4PU'N#%M
+L&Cd*GS'T"-J8F5k%HX)%AZD4"BTRk)b&,"*V'SNNZSiKfANZ-8SF4H#4)*BcfD`
+e`kJY5SKrKa*3b3J#Bfh0)`)35fi8SM13!#%hlD"i3KT-$cG3G8HNQe")#IH1pF9
+%ah5XYY5dc*LSE%Qmr&iBFa(@a()Gk(EPMGJeM+ldbJY)BX3)2AQAQ9j!Y9Jb!,h
+af8j('FXhE2!c'cMc8hMSKj3!$rmR3p2aa(FrrZ#&Ed(r-[)%S!5,TMK"S4[Q%Cd
+pL0(R(,LqLReDb"Y*YA63$%,L3-)%jbD@a(C%+e(F#8bSTDKUX#"Z9#r$c-Qi)*Y
+3`8rd&JaK4XddN!!%60c%#$hYZFVJ@S(T`F)%#lEEZUQk6c(#4I*dPbVbAUhfV)V
+H5+d$4filq-AIS*S[j)Ubmrc0'i!I0X$Jfp+kJV[j!39"91m&F[JP))S&0IFXI38
+eN!!VCbbapR8bH4)(`dkjZP%bEEY$TF%'H@2[,F#0)#kK"4abE-hYGK`EClN['#T
+3SR,),*!!PjT"%)BJC),9)MkaeNdI&#5`UkB9m@'CM9F9RTPra0Sa[D4&V0!H*GD
+SfKL*RD+RX)bCKRS#I'Y+kIpb!53UN!!l+4SScZX&85rRB&56-31CH@1V@m5&U89
+[b*j[22f1Sl3H*"!-SA+EXh)fBRRYUrG50Eq!12"b!d5+,3QdU@9cHi&!B16Mp*C
+j&48E"*pPkSB%+qZQ'kAM5QbSpP0Hm3a1bm%)D*VD1E&%#6%[2%0)c('Fp&##3Nk
+#biEb*Nc9DLpZQFQF9eF8Vdrqa!!((09#Z$Z5L2-TU*D2,MSpGkBD0(r"JcfECX"
+cjMLFVR&3R5L0%R-'C"&NNfpHdiJ,@B*-5aG*AS4a6BAPk,@BQaeUIbTb'1T)fL#
+6djBGN!$QLd63"+UV-85ZX4R#P45&LH8DLYri9DT@)TbDBZLX*$DLBcLBFpFBVlF
+YV')JLqbBQ'ME$XQ+*F0Mh!kVk!13!-T1LG'U$&p661X*TJp49G!XaB*qfBRq1UZ
+VR"Yc%ch3Q40"Y5!b*S+6d-"m086P%*1DfrFTXE2(iD3J%1[pZErFXe[1iEZ"8Z#
+ljb+5cVQdeQ$IYbPU,rLNVNA1JLT*`2Heq2iZI#1$3GpZ*2Kj(a!Kh&%Plq-raMF
+6-M22)h)j@Q+K+2j`jrA%MURN@EQFAY!Kfb13!#@j+Mp'DiVdZB+bNTN,iKq9G`B
+EIMQLfLKfAbdp-jIN2pYKie9fFkl4L),bPX9h%V`Z(B#$6kAcCLNC8Pc!#`Q2"23
+DM8ZUYfIAlGEHQZLGZLX5[[3!B)q)H)la)4)U19,mk!J[6(YEakJ$Ue554eEEfmS
+E-1['FqM-@Ba1YkDB)!%3Z-)S"B8q$Tl4T)k%AA#ILa*RCIeS%b4B($V"h6'i3`V
+#1@*cBQYPe"L,er9e#j4mMK[h-'j-6)pJr+84Ki-$3bJYpRp65Q6AlNb8@)!N4di
+0iV)a1SIp&Mb5`C+UEMT1+PD-lMcG1!6drI9dPa)$`5LX1)em$%S,0*M*GS11Bc'
+KYrp8TX'FdM*l3c&9FRkdd4'+VI%[1((KVereEhkKlMbrr4*CRjSR5JIbZ%C0KB&
+d5AdYLQj)5XMl0RrYL@9%1b5DZDj5JITH0L$1#G`lS`#LG-%&#d)@dCG0CEYbr(-
+"#SVG`PVLZQEZ(9NbMDmUXXAMEfNX+biHD6k-iZ`aJR&UP,N`m!#XJL'C%GVLhTK
+3e3LL,$L9E,c',$X1H'[C3d*i@jdbf"ka&F$`5"bTL5%j"CNRcjXBebh#'RMqJ"k
+FNVA9C*e46KJT$CG,@br4P)K2J01)V+,N&h3V%XVf1*`8i[58VR2E2jN$#0lJSE0
+(YX18MXaN0j3CkJJ'XEJL`38Gdq5f4-mq3a4Shmcm#eM9(U!29dFBZ["C"SG(eJM
+%2f3,,-)fD'6Yj%KRJNcYN4h1*rqU+RrmR%RRlR0eYTcIC#AM2EL#qe3pbNfie-`
+@qa%S!$mQXmP#+L*m58[1[Ki6GAA4U)!DKNB6G8VD*Va#3M63ahClBK#kFZe3#!R
+1B%SBX'UBe"2CX24)jZXS'A%&Z)U(HE30&4(biN4Me,4!)%F6ThY9QablB+LXHES
+&30X"1MXa[8*09E4p!T)pXC-,+[2fqAEc`h2pD!X11A,mSq2'VaDk(qcTZ"bq0mb
+j9,U)GX2N-4EU!8!JEmSN%HjN+UPNh#G+HXK9%E(Zm2mj1)rr$DMjS*YIRFHIlmG
+pfdM14QN$!Rf(QJhkl558JbGT48$QXKUqlm&pJiGTrdbS*U"ScH6D-5iq9Kq-DUN
+rlJ6(ThX)fA$k84L%e%V3!1"J&(bmQIC`Zl@),dh)$L%q[b`X#E%i"!*J-JCjQ)@
+D+NMDTJMjYc'&9Ue6IV@Y5m@rlBb)IjZLiGm'bYf,(G9hD2PG[ClRm-CXf&[dJU$
+32[NYJP`aXj!!q#D,U-Y3'X`rj4NGh*&'QQ)[fU1BTf*pP0pQmJ#*'b$k@M0S%p`
+GJIJ6MEKK591fPr!XV1JKTF``jM"P!1Pk&Z4CeEKl&[l`-I'GlhI3H"4D4iM1i,N
+Ta[a0aF)FimCa9$Z*1C&*H-hVfm4*+4fAcm*1LHH)+3)lBNqC10%$eFJXBTkDC#M
+%+d2$fP)+!rpf596$TR40LJP5LGRfYdeq)BYEj(5Vj8,6Z$@f4F-pKr[a[d'9RhV
+ZQqIe8rZ"$kiJ5Zm%*0Sq86fRKaU$Je5NX!X)q!!3`UZ8&*B$CG#m`kpai%&mJeh
+(*S63f8)QPk'44&KRQ9PL%RZ**r$eKHKaBRT9[-!+Zp18F@8`MHdJbdKG&%a9fad
+G0`rdM`-l$F+c'"mX@)Lk@9mK@X)`jPR161fTm@-NZ"$GkAakKbP-,dEZ8Tde![2
+%N!"Tj3B*IHKh"CVRF1NB+1$X[JRPTE6%U!qBfL6kTXlf*3mCS$TZ+XNr4C,bL2H
++)'CTTa[f#lfH9(bC+%dASEU(U0,8-LKYiqk%I-Q*UG519ID'h2L*DSG%mJ8r0PB
+2DqqQ[NYVVS6J!XUd8mQSb-X@TR3Kb5C1Z"!RkSBDG"BPBh08PH"R+I9YC8DGF'!
+kbU+G@C391PmYhb,13S3,BFf%$r5"C`&kHS[%ND9P5PYdhYT@ij2iSLD,&*N)X0f
+i#!JDF`%k'Q`aT3[+UZPYi4c#%#YQfXqZaX"FDNaVk&A9lk,YL1)A6TD%0ALbBYK
+,k#l1Z8&RPLp14I4XKG5Arcb!b[ifU2MXHF)jI,E"+ZYE9AiNqYB0`k8k["e!j[%
+UFNQUdZQ(m!d[hMjijrCp"Baf#KMYKm(LA!%@"iUSrJRi2S6[Kr(pVi$C[JHB$Ij
+ADk#ZAi0Nq%J)[PDh!GqrJ1pI`II(mBhdM1ZQ)Sm8X0kk2q)EGGH[K$I[Z`N2cjl
+EchVj&-(aQ3fI5B"Fd8FI3GdKMAMVfEG0l#-CCB[8DjiA[je-l*!!NL9q3FjH,eG
+H0TV@kfFcepqQi)FR9cfPr,ZSJ(@Q4f,XK+DM'N#bX8B(a@A6SK@,S-jQ"(mK'Ym
+YQ`TeA2T+lS,b*%m3MYGLP&NdrD5Rd'&Chlii8J*Ibc6@L@Z@*3T-cN("bA4AKk3
+iNf[#%NTb8SJEX5@fDXSjdB!6G"I`,TGf1a@a812%i0(KrG$AdME,d#XdQ!Z)3#)
+)9@KJ0Dk2BG--J+M'3e3cN!#TQ1Ur0*I2r14*@Nma@9qj&6&A(,IYSJRCiY"hPLl
+1bCBLACbB5#pi@4cLeCPeV%a*HJ6(k-@4f@4S9)%,(kI65BYheKJhcjBb1YXGG1`
+8ZBKQST[mqp5q'L3`Mm'c'L-3K%lAR1*2S[#NZq01(U80"4,qqee6r"Tmpm5mkea
+,@A5B6Q`B$EZAeUUEM%CTcUl6F"Fh"D',,8HCRNqZN!"Rq6+M"Emr5@2kK*j&461
+QK6%ViXG,5U!Ak%'"c8PNqGS'XL'!&$&&m!(Ed*T-IBV$jN*5N!$MS4ra(RLm(4U
+@&+kbS6AiEjCJf28'F*445!c@FXiKkd)6)m&65a(h(,UfD!X@CcLhTdeqeqRGNe%
+%A*RqEA0p-,ZbcF`2&[$@NV9Zd)EQ8I(EcU$CVNNQj,1l&R&Mb[4TZU+JeR![ARQ
+XJX)9HK9p*jF*Bi)c!j-P)kJ1ZJj!+DSF&idha28pfEkT6eC-ZG,0XY,GR9A2pbe
+)64,)SbIr,P(clehph6PqLJN00R`THApNT*!!KlD['0r)E0Yh)llIK[I)89ZpM3M
+m@M"3km&!-48#kJf1`2IR`%4G#ZETq@#HN!#PC#hmRpBfJhP#8Vjeb(Lp$LU$GI[
+"32d5'#KNa2hI$*5$MejJMNAH+HA!r#E[Y!m+-pL1`aF6PpiL3i#c0#)X8J@6!'M
+4M6-4MmC3H9MF&T!!RjJYQi1$FX0J))iK@LcMkF8FKbDlp*JNMMSPDi,*ql)qK6"
+*qCY%m#0!-j!!')+p!4TT@"%8&*(8%Ll(1+*L%@!NNNB0m%hGKQL@1rI5aV6L2,U
+8p&&`%$JR@(@pKK8M`ScP4"3"TQHZaJh`N!$+@V*'p6X[`fIK(Z-KL4,TS9HIq+#
+Bhd8*V%a&DC[eb%KH#m``8$0mcDI)GUp0Fp+2aX4T[$&R6@XQXbXA#C1k6UD)'de
+CN!$4J[fBaj+)$ESZ%lr4BeDTGcJ*ZUQXG`T5j%j'rSM9f&D)"3%c06bl0q9BIhH
+3!+1i'!8p+m%YM+)0$+e"`*ML)##iAZ#rP83Nc6-b8K@hCF@c6IpH&i50Z"V85M[
+ae'-*")+$3c!AIZ-V9G-Q60qjA#k,D34""&PN4iQ)'X8GCQBBdkNFCL-jjj(2[SU
+)Kb(1E`!1L`RG)RGFLS*i0Ii`r@YK#rK%CLjCS"#bbm9C)3P0#-@lf(-d+6+2hM)
+XV`3"%q*-pqE,9mh[id'PiK-mQ2P`C8+91*6-j&PpHbck4k'd+9I04LAZ8%3I0YZ
+10E"3-#C!`X+T6U!3akLEdJ-JSB)b34qmJL(BVURamKe4cN86Rf(0K9pU`bl+(AJ
+`Sm%qf(JcFN+#5mA+*i&1lT!!iiYDJY"C15#h'HN@L8&PIPJ`Y9ESi*+8H+&JdCB
+d5#%CiMP&BcL+CT0DkUhDiM@6`"IkdK4l5mUlPiGSN!!G#8FYr2NBAH8HYY0@I5e
+ZeIqJU15BrFrS$Rq8f+$`&8Za$H38&H'MPp)@1%'R-A8id''%Ii8b5fmeQJ`rR1I
+AeU[q9cY5c[&Vkk(D@Mp!+T4rI5-i0'3,ViiP)6amVDT2`mIUYk$UZKDUVKH"8pX
+%6ZfCq)C5G`!T8`H4c'B3UUie5!1i"QN!eii'T`DhDM[(PK5SQd2DXMYi3!%`@bH
+B0Q#CjmU4TfXXSU,40EC@R%E4"GlQlXGm,PN`1$fEU`aIM2%J[`-ibMG`&*CIITT
+-NTZ40#DUBCf%hBUbJREp5[d!H4!bJ-"haK4fq([0AS&l[kTN%k&LR$ePZKBm-jY
+QXfZF1pR3MN-q-Z&P'0BZQcNk!NMEBJ*SB#mI+Q*Hb(Nc-Zq(&ACj9XPRQF62$h@
+9SR5kp5,5)(XHI+R(ABXqilUH(Zj5iRQTCLdAQENpUQY@4)%[)ZDV)'lEd@&1%rT
+ciED&aXDLFJ4GSCBVYTQMjkjj'"ZH5X"Zj@bq42idcVaXr*hq'GDRX`3k"I3h#0E
+i+F'c1%TG#il[fXl8j2@1l2YITbb(p50`(Y3#1fS9!JB9RU+G@,c"mXeUhM6-l3B
+3ECEpT,F#jP"JrG#d)jFBb(+KLaX4D0'@4BqJ*%CH&G$F##q2`Vq'l!'Z&&2IBT8
+$FD4f#Bd5d)d)*5LP%CG)j60e5d&"4fCbH5QKC-2,cV'e+Z5FSZ,FGbDQd'Q8B"h
+3l%fBDE#"X#Y5(*!!BIhS9,"*QRU))B*Y+mDF0KHFFU@Nf#$54,AM&,"mb8Pek")
+$q0ie$fNbXii9'-LPBpM-R6mF(9USpF3)!D"P8$h5Mf*1-3(8RB,8bHASTRKA`Jm
+A4)(Zf3KJ0'chdh"cjfRS5P%GiLhPa0eK#Ki9aF2RMSUaVm(N2Fk@ScFcFSpY[30
+B)L&$jDkX`b@ZkeCMKfe(Sp#0`l!$Yelm$JVPKF41QjDpAM`*$(B50L0#%iM`APQ
+GT8ceQ51Xl(Hq4mV(NlBaFhFj9c`jNAi5'i+fFi3lqX91l*4(i6ThfGcca)T("J,
+85E&D#Q(cK*@'Z(r&qHT8YmLlFPX`H+5ESR)F%Yfjb0RCSXEJ+6bY`$[P9G1lPmX
+m8%-ej-FBiDY#K9Sh`ldPcI(6,!X5V!ZYBDbjLL!I`!kGP(QBDdQC,-`ar`lGZfA
+#iN+K*r94&G9rUI(-1IkQl`qBcP0)%Dk5A"acHDU5"e3(`$G$(rAfB#jXhddT+0@
+L#69ZSqI&"Q9[&YqCL8Rd[#RD%#"#hQUePF"LGl*"@!3)"@fG34Cr998rGY@#FrY
+4MC6c9hLi+(9jUh)RPIc8IAI!Z48T!2UHa2Fr`IH(mBhXBC,(![i%ICrJGb6`Ub3
+3$6FBhkr%pk[`23[rJ`F8Ad9I"9(9RA!![LP9Q0QK2"R90SrU%eT#4rYBa!@9,5d
+(ZSdfPdQ"5-qU6B@UXT&r$##VZijB(,E38B"CLe)GCa&,6hpJV9T8lTN1k#G@ZcT
+Ur0NRSP"p&A*2Qh85Cj666U2kU!PGJe#r@V+R#+D+I!l+j%)PXq#CK)@K1D%-HiX
+HeV2aMqVGE@GmB@Yk1DK5YR`@68jMI@K%LqMJ$)RS!K""F3DkIeA92q2+K[2hj9l
+CIh0rKm411U[b2e-C9@48khY9[5HI`6FbTe@3!,qlJXaUPGli4UBeZ5[AiIY'I0q
+#lc[`I3MIm-fS`&Zq`VcPb@KkLc*V`Ibb!XHm1$cbaUi[0P+GA2"Sc#e60X%14G`
+hCfh-MZJE"mPl*k9ZkjCGTM*)b*1RDIr)cSZbIj4bRNllpEQMe88hbq0DELClN!#
+C!GGbal!R@8D)@QkD#8p)(1'R(B``Fbp+r$kLAUPSjBG(ep0ZZ)SA0p#J[aKqaRJ
+3k$eM[K"88j+Qm`pZLL,D3QEYSjhh#Bp%2pb8f8Q4q0CBm)El2-TMp(+rr'#I5hN
+J)mHe$4ddi4I)%"a(NmiHNqb[AqAhYri3+rf#2ppah+GR)1LGVh,bmD9[Lq+J#JT
+9H$R(d#$[`2IIaMI9Y1q"!S$1eKr!lm`j"(qAkTrar3Rm$Ra8r3VIReIZ8cbfUF8
+m5BqB)RTU+r0'MXDq!5T*aSM!pX9d)+"JFNSk@Q)hVAq*DLZ61-5XlfRVB6i'RP6
+*@e9*,[fTPRb1YmJdHcC11PLkf!`h-[TNhb@(@bFee9kd8Q9P@3j!1(E%4N""5UV
+c"-0j#pF"!lSHJJ#-6RbSI@j"C1A,SFJF)Q5j'f)*@2SpKpTbUM&(L#j[BBbLZ@8
+%h5kh&')EbjGP85a8qD,(698ZEUr'%+GqjpeN@40+i'#D3I6LNJI$L[2l*fi2)11
+&GYE`l2VJ"%kYrL+U#r`%LZH8A+I9m@0'+q#0Q+Nf9)2paNrQcXQ+'V%X(l1UVUZ
+NKXkNVT4C2V(PhdG,5Ud&5%AibqV[p'RDS$)j1-*pT&hqL`IIhqR,m'iJ@+q#rm1
+l`H#lDYHl09heT'2pSmqd[6[69BpcXAIpAHr@"pqpV[2GJmVRVIKrGkimheVEQIR
+K5b-5pjdJm0X&$MX')Q`M#!#'$*`K1QmjpjT5VL)9&4H@%T*kNIcc*Ib(K")6rUp
+M)Ta*(jI)(5Cj(%FH83QK!a1fYjqULVC@$8pY2c9mE&&aEQRKYPjE"Pim21A!1Va
+ja(U[*f%iXGjEZ#dqQYBF@*GB91,NM0DUbj-jL[mEKG[SUM(AF65[jX"fr2EHJMF
+08Z'eKB(#+HdI$ir-Fl9rA,K0GpTklr#ak2jU9(MSNZX1V+[NbbH`YqbSAM4Fm23
+D6JUh$HQRG,MR11Q9pG%6rHKVp,8a#q"Uq)`a#c#cCeQ656m256+6r[LPEYh+dBX
+@%1l!r-6Ve)lr)1mp6C`ejF$m#GZfp+N8#KpTRep1b#Td[h9,(cEGZc(GTd32ZBj
+'9%Clf0h!jGKb8B3XJcX#pR3FiErQr%4-Z&6HM`1%l5LZaIC0iBU6MJ$TASd$6Xc
+hV@arf*%XecSbNQ"1q,HHK2+6Z+e)9Y!QADhVp@(DBD6A-hRSB6IZ!M-5p#2Gd%(
+FQK(`NjZjpmP)2Tj@5YG+Ma+4hNR%QrXM1m&QlPBbNY[6q6daS"b[6q2PZJe2FcJ
+er)HD[iVSAR3Pkk1&K&-[)@iD2-Ld[ck5L6F6G,0j8@i#h#2l#%[im645r2QhCZR
+i@d4FeJ4cY"H3!*mrrb`T0NYrDM0,CZQ09q@lZ!Bpm&p$lJ1R$Ahm2#Rqc%QZP6!
+R9*k)(dLiN9k`U%e-GM[i(P#dPBrN5hLTFR20!Pif3U#RE&Z$N!"Uc!IqPYAlZH0
+Rk[Ap@-m0h9"5[ZaNpK8D6T!!F(iU-H"rM%VhFrZQXrZ*keLGc2B6@hF&fVchXkf
+BCS@8RFSMdfB+82BTL[MGUpGcP'c$`(j3[I,EeIphNQZRCD!ZNmjZ0d[[c5$[%Y+
+FS,a'['*f4Gc!VVjlfPLe%ZZQI8UEa9U2GPH96@TJLrqM'4dF9AprPlaCIFF%SM2
+AQQYR6C'rQN3hqN(@(QUY(3MF)(m6-iT4q36BH2QeXBIS,JD6a[p[hLcr2i%Y([T
+T2mHK9Z(##98GPK1lL@fUcZ3Z)Kc1qk9`-XDIej,,*U43@-HASZ*9+(%$k`i90mJ
+9+maJ-h'H3c3YC8,!P6)QJrAB)#9F2f,R-S-p2YTZ6!ZZH&m"'B'[r@GlHLGb#0`
+m!Q,iaj*[8F`kRKTXTN%Ud1hmf@j(cR6E)$j8q*'c&Dl[V[$$U2#QXa8`c&6KVk$
+#fmj@Z,'l`Yp%KEphYX*0h4AHJ`SI1&[K4Gd9rK%Ur1EC#MZl+cb-#Tmi@q(QlJS
+I4iAIlpQql9dEmaQZ(kIYUC!!&V6"D9$KD6d9dP)eZ0kSF(92KE48$@i3+Yc38b%
+Y9B-EJ3VlHLUNT@T`@DK`T+G#@US'KeY6qI(@T+9UF,J2PCllX12-8M8ih)G+chh
+BF@DT'KcZ3kAR2Sadl93&pk(5Fap'ZRF+pk(5Fap'ZRF+pk(5Fap'ZRF+pk(5Fap
+'ZRF+pk(5Fap'ZRF+pk(5Fap'ZRF+pk(DFap'ZRB+dE1IcIIFKj'ZRDVL2P4llX0
+)edj9F4qU2IIKqZ"1mCMed9*,IN%(%r58`J"G+NHH3"cE"Ip6rcm!N!-0$4&)HA"
+PFN*TBP4P@#"9G'PXFf%JBQaKEQXJFh4KBfX!R8d!N""df!!#$a`!N!6rN!469%&
+,9dP-4!%!TQ0pL+S5F[)!!EiI!!-4S!!!aE8!!&)KX9@B2!#3"NYL"J$V*I-c0pX
+VTmQ0FKH@UjaZ"YQQA642CVH`D,GTRYr%MP1qGUh2"PfXShM+eHqi+eYrdqmf5mJ
+@"LQrM1A#YRQ8$d#qm-8Bj,1mp3,j#HR#&JBhi3[G$153!(+hN!$(YL#((&,ZCJY
+IH#jmBGh#YT!!rF)@YPNZ$,+&EEE3I)'kZVj22PKi(HmJ@3Ki#`'A"#8`!T)(6I,
+JHB,(b1%Ej'HbPDh-j(46lQCj+kIFK8@68dir1H9'ZCYbfTZFFXVTTTYZZY$I,#'
+2EBpbml`bZQPZpYZ&4d'fm)9Y&`CjE"Z$2*B,!cRK#emij*!!j5,K4kmYj!RC`N%
+1mS8[(153!%%1FR!If`HblF+kf-)A(P[BCJRC`KDff@B,hC666C26E-dcS+[VqVl
+[FY!JF"Q3!-A)!T)$0lM")lH!"(SJ!5@3!"+3!*lUc)%3"[cmd@jKk0mYK2%E3Qc
+qbE3E`adqaG29XRj$*k)Pa4haTejS[HklAlc#H8I%eq&S[mhV@kZXkQS2GKU&8AL
+mpK[@e$98'FEIi[KMqV'rapEraNk4GX86`[#5jHZ'Tjfrer2dhCB#$Ud3dm@3!1%
+TP2Xjm4$b$mI2b*`E2bi$IpRi[H-RCQj8eDD0k-X94ChYA5e'a$A9HDqPAqPI#hh
+m4KTpV9'%L)aAFH%1efSKLSY%TUYr4SrVeU,(ACYf9EZmlTZD'ZYFAQ5SAadr@e`
+QdN4Dp(FSci)bBA#'iU2iMH"h)2CYqLSUL`r(Kk-aq@DBK6RDKfq(-%4r4eEeT4[
+Y0e4A9GIB9c@J,&CG'4+jMJ"U#Z%h)(Z3!*-9LIFeqfG1aReSD%@cb(AGUM3I'4E
+CVX'G0plNU@kSVY3k&#h1,JL*c1*#BDj!cTTJr$aqqr!l(2Yfa05(ppBjaBAadp5
+pRPXLQF8#RBULVV8894Q)hD)%4DCeMmK@8-H8EHKF&Vd81&e$*XaRAM29[Uc40AL
+[XkkKcP[Y@1Ae0VV'UdpQCLh2Lh5UXI+jD,FMB*&6%d@eKp'$mYKaXi9kE%FXLaf
+IMrMi1e3TjqAqbSCUZeXfqGUUbZU'"Ule9HGa5bNU$9M0(PYJjLTE!%Y&[REJh6#
+H8%9DPk-SrX%eh)R+jfL1HUjDf"`rUB6`fl#`+Ak%BP!cqc1%hclmBNjBeH9Y)LY
+q$1r(SerMr["Y12U#f4*B+YqCC8'"Q)ihpLdRG[bDj[J(CP6FPN86J,ile1RDLdF
+e1BT%VLU-(p$hZpfSI)jU+LS34Q`-3m5MDaA,#P[mR)`V4Ude!m@#BKdLZVEqmG8
+$9H)D@rcI"CC%L[T#mA2q!UfIcSPq"N+'UI%KIaC&&NehpBqmM6iXXaE&cp'N'2G
+LDX,mXU2C&TL,PfVm"NdfF89J*Pl+X$LIS(dKZ4p@K5&),kDj2K4r*jb&1JjkE1M
+63A6bX0)8%GID4"Qb9(-qpKG4k&kGaiBZkBb0RfE-iSc2SQX(D9Z-44[R1IUKXAV
+1ef!-bRQkU%eNaRq+DIacp29CcY`L-f'bUq+(D+*bmCkl8LN3k6da8GC4YVGlh3"
+b[1U`jjLcl5*qbmX$KS#C)aDDcGba!69p"IC*r#a&KIE%rcepSjm$9qb*ri83bDS
+ZD42TSNc[C'9!+BSIFRFAL`VNUYNkR%@4HR-dd`jXT6T(qpTL3MHISAf*2&BZE%I
+p%SSG4r`$Rfd5rE*+Q1*[FA`ZIGAhAbclE12a#jF,rZ4b'Biq5AR3c4#f88jXLrk
+LDep"A8"9Pq#Gp39Fr@BRlcICFKmr(GrEm0lX#mNVCFZ00pA80ALVh8hZaNTj+mL
+X,$iG&j'+r,GA(S`2md@b0jrZKpY``IJFcp&EdAb4LBiBV[lTZa@,dS`TVp6[N8R
+$U!3e0Z!Df94MVm0KJ-V-8HGa3bEI)EJq+X`43eqY2i5,50l$EGL")@GSG069rm8
+LqUlCDYL'QfmT0R[3Z9Adb$XVIUZkA)YHKZMj@M5lcHL&kQ`CE4a!p(4%"r$fJ"D
+G'dR[UleeS#0cEqdY,hFE1,C-Lr9%-Y!24Xb@%HDjK[I-hI,@qA+PXlVbKLDlfhj
+MCH-UR*e(lCkfm0FEfMZlP,8eP5jP8G%L*ECSf6+VBSp%JMkP-V`aXUR,ee'Se)A
+@&bRfB&"aY`IDZMS9Ykr6el(CeeSdCde(HeHA,k6FGSG5hh+(iJbh"PV$)@A4SZ+
+5iQ9@B9K`4dfiBq0b4G&,c5X,iZ[k,Yr'c[*#TDc,Yk@VU31&VUIA6fm+GV9lI%(
+IHRjHIdHN244)[LrIe0@&iMTD0[Siq6U1A0RDd"lbP5YI,5`,q[`bmCT)q5f'#X1
+eG$I@("GjmfKLEiqIV6XK-*rB"`A#@*%ElDDhlXMeZ,6MSrM#G9hhAKlQR[1bVEE
+Dfp"Bf9K6DAGAVDPc96@ZN6YJ`(RmLhN&f%cF!lc&Zl[S"SJr6$YJ[YNkj4CE)"0
+hcfVXd*H8UPV8M*djJ0dpJ!fFhG-ZFNUZ%qN2EK$'(VYci-jKB5c(aV)cC#&$#"R
+F$hVdq(*4E-)PB!l@9JKm4`GV"VH*V!T"'lcRep4eU3ddM6I3J+XrqhRXEm6TedE
+&8Lj5H@BNmQ`Dcj1[S+JL8d9'4EUXVXJ8Za*6dDp[`rZD'J&lA0rS5Xe%$&-QHc(
+Jb(!8MBiUAV2CfGf(cAl$J1+Y0kqK6HAHEP#AdQC6d59P"T%M9YL4Zi0r6ESKX6N
+hfNq2MPDH(KQ09#JrSHhGq$$fV0IILpfF@BPB+dlY0VN$r+l""bXE'qL1EfkXUQk
+SZa(`3D1m"SE4'fk!)2UFJ9hr3*'PH*U534F60hpHl8pqR!G-!Me19V2&AP99[GE
+VYMYZmPE,Z8FG4TlX3H+b`(X324R1Ic[rEGSbH4Y%TL2Jh"!r9e`iG#*LiKShAYp
+-q!Gk2ma43%B3YCULq$kc5(a"fq#09q%HLImj4ef'Ea99lJMB8A-iNhV'@0b-KA&
+"&c[Ub1AU*-*T%iE!G-j!E)Hj$ER4T+p"eq#Z5RHeh9Z0kILBR)iqLDYdLS9!!h"
+rqZ*R(FmjRR2eIf(Yr'DU3p!QGXe*e8lDY`,9UT[1k$0NiqXP3h2d1@H3!'BiIJ%
+cl1B,IVq@Bj0K+ViH0+bR(1C%MLHd(-Xi4kI--6+4Bl1@Sj4ce-JFdBNF+l3FIT'
+&Vhc1d5@qTqABc$N@kR9)MTI%%1IB5P'B&@DBS@ABbCAq[PC&KeE&*VlcLFBa4aI
+Rq1qd(,AM19l6FM4bMLBYaqca(,Ye"%V2Be@G&aHQ"rMS69ED03CZh4!3*U+'4-X
+#K")X%")A0$'(JAfd%E"jX)R80Z3PLcTE%(X#0f-PBe1#lM'V9816V3+SR&5`GV+
+#a0@XhUf0rmAD4UmG9p#eAQ%dh)VZ@$H9`J1a8p0RdPI'ZS8HkS0*phB")h'bJdE
+H9jSV6id-kc[cDR3Q-S5,*eT["S,bJ([2AfAG49R0XDc140D@Aq5mJh+1M19d*A)
+@r#*R*H@-MZ9d$`e42rf2k,Y6lKlFJ`U3!+bhheMYNG[c!0q#JSS+bZ"a"SFZi,F
+IpIA'[NhScGCYiSZ%lQ#hKZ,[F`5`%83F4BjMZ%Q)acQLf,R-b4JJ(dH`Ne!40V'
+JQULX#YMPc82[+N(mDN5UXR"Sf(jUD$JI-8#&DN39hAE%q1Vl-qj1[U@rNRVETb-
+9`()11'SGTX+Lq'&jrm82ZrURc-'d(+JhqieE$*LA!m#@$[6X@)lPr&4ed-CSXe'
+4JA[J%(VLLah(0@!kJ#jG8aYrYcLpBJTkGdL,AXTiN[9D($[ZVN89E[ppU@k8bRi
+@&`kGkfX6$H&XqAiehL,RkS0$jm+c+9C3Ud-DAQ99",`U9$Md4i(T-LG3iB#BUfS
+9i(@MQ%X6PF5HHU02!M&lI9jcm64qIB-V8Y88S&[U"HKAd66YM@K84[3Rm[j0lZZ
+k1Sp%a@0RR-FcH!1SUmQAMbRYj@e3-!4mA'q$pU(hBpp'6G`,4Za@qVTQQq%,b0l
+"[`2bp[AG,AGbl+bqJmF[[pkabmpA8'E"2SY3K`d"*0"V,4SG)Lc4(0,4F%5V6JS
+DhXC)JFV#'K6kjET0Zaff*$[K(IV2RI!q9QC4MGX0jSb!L'mM2#&b#P%&LQ@j`$c
+f@UFi"`CljYPq#kLDBA$-S!e`-H)-"bEVL-CGU&`&6NGMYBHi#dj$)Hk-%mRYbNh
+YRKPY5L%B(NB`qY#r&qQlCUZa",q&q-f2I5Z9ajr)ma"Y98%km1SmGhAcd"qPmJ3
+6HGD1jpNhfj,+NTh)8TI!6CKP3,%XX`fGFa51$$X+4r%lJYrSX,EV-Z@Y%AN&pc3
+ZCIfDBlCNB4iZY!fp3h'Q(QFNiVj,F50Dh"RFG6VZGBU,kR(lml!(iUH"3mRlm!+
+qDRPC['VB5*H&h"E$`"Y$FS0haSZ&)m"cHL,f'r1Eim2BXYJ*&8,0iYhPMAiCfpV
+G9aXmJael-##MbJALm2lGa,Z2hep2[+G([d`[UJq$Z#Z!VkfMVrVqRmh@Z[XYah1
+4,0SDl[2cQK@2mMcfGG1eQ"2$T(LZU"'C#l"p880D,)pZShKFX6b"bHjV`aBGLMd
+!r"2IEDGP0G(YZ!MkU%ECFRQdaH2$X@r3rHCqL[U,liG5qlZUdH0XA#2h0fJmpDZ
+(hLDf"krb!B9[mmf0TiGHP"Jc-fj1jK0'MH!PJIRB5NB6EXATSJ&ES%CTG[9)rJT
+[a5fH5V[,fiL,q40Zb9r4H82)'a"0R,dCfB16f6AcTRl9MGj'MeG$X*!!QlKd#RG
+L$lL2jcLj#pjN(CF(36m+*A[aa5DlapYiFl@lm6r@NT'XjD+Jk"b["5eTER3d0NU
+Hc0r@i[qm,jZj&M6kCr2Kqf`q[NMYE'j%Cj1jIFKhj83qcZmpVNC[AFe0FT,k%ah
+V*m51rq`BYL0Z0+-TBUDpj0b,5R)rRHX[HDTG9Fl+kY9JEaNL[aQEUDkSfr@eL#L
+HZQM!U,Jf4B4k(R%h2p(UHV0qLr'qfmrQKi8*'kC#Q6V`BYUX3(Dq6EQ#AX)fIhV
+N)6"6PKI8eHIHESTm5ceE@+F8a)FTqYm1c&ZpFQHqq3$H#JdVliQ)0erqhIqj94L
+@!-N)h5i-KEK&h'qq8@rH!(!RpiZ8*lc&f2YJcecX6,G3M)2hl1hHD-c(VYppedB
+KKNeh%FeYfef2[rcBX*LjS2%kZmLmESXK6q4FqiBK6r'ZG#lS8A+TpXYX)[[A[-,
+F)X5KqKcrJ[`FaE#bqkAZfj5HH`,TAGPpGrPQ+YlmqKqrV'3m02!!X0-G48V$%pH
+TEGX%FVlH)J`jq(i!H5mA*[[2a%c+p6X$lhE,A,Ah"$!0@hF&CZD,PAFqH)m[QkT
+kqNkI5I'UcmrYERK6@,rN%UEm(6RlKDei+QVCK0mA@Kcjc8l%YMblmMGASK+T`6Q
+hHflGh$p3'KjiBql"JPej,`McY6m61BDmL(M[Cb)6qb+liEeY&iSHPr-CcJeNbHR
+lGDGUXTm@5q5-BDS#YqIQBkDqmdEp&4ZbjMTThPBH9G0rpfFLHrdCC,jFC2EGXp'
+SC&5LSf([QcpmB1#aEXb+1ep3rm-CIY-6eb&2`dTRVVQT@qNfhrAQJ(,RMp%T4*8
+6aA"(JfX6EBe(miYfZSC'AZG0F3PHAZ5AAb[U[MhGm9YihihI*bJ6SQEKE5I(cm(
+,Jrb5MjIlq+8@,j[b,BU&A`[clAKI,eq,a"0IbHp'l8ASd4TFVfY%GZc$#K[i#(U
+2PJ)cV4m5kIJ1+-d9aZ,-&hlQ22lqqj8ILYR@Uj@EPSM$MX113`FFGVG69HDf1"b
+jX`ijL,qdCVS*Ap[Y*@8LVKV0lkam,6k-rApBD6(IDEe@U4ZdiAq2ekNmQEqciEf
+-M+*QebC8YJH9j5Jh@Dm1,mffLAM)@R*eZ*!!kZQBjl(RVd4p&cjXIpLf-Hr3bqB
+"MmfXiIbZM1*QNBN0r&Q(@3ALXQHJ`k#QdhHP(9h03AHc#0hmJmc9b0GUbV),Jm8
+1,X3DX#3arkidX!Sr#i#e2FR%G0AmJSPjMMhd%pk3!2[j5Gk3!$[c8pk3!#')(e'
+KF8D%0C4#-XJDDZGk"ZNE5-``N!#iE4S[D,Q'j,H#&k5LAdIdHSdAY%@,VSQN-5r
+)RH)&NE2(f!+G+8&Zj6NHd*BDbG&TmV9dV'mV@"m1GE@!832HcrSfRkHV!abF!U@
+6JfpS#`GpK8VeCPr((8VMq[@E1MTmSI8qT5EB%TJ[+Q3&rm`QFPaVU+"C)5-XM&P
+j"9aCDe0YVA-"HIXBCP8QeH*fN!#2C524P4Q+KjJPEI2!,jc%,-1TJCRi#J5be&R
+ZjbqH!`-P%prpDMCHI0X09`1*(MRYINMaJ+1bCb!MN!!Z)i"M2Dhc3G6G*rGm8j1
+p%Q53!-6&b8d4EZ+DTh(02Rc0$'5UZ94Ybh5Ze5GVDQ%X[Y-!p%a0CIEB,BckkX%
+h8CLLVSiEJMN9AZmdDHpN-1(GFFjFH2($3!R`*-(a-1pV+40`)Ec(L#Z3!)DX*qf
+R4JM(Xe(pPUAeK52#EdhP*4[YE0lGNhP6prHrEQLXVG03ZT&6'P[@Yk,TiP"&dF8
+K4P%#c"i8[Ul#kY!a0h&14bkNiJ5ENfi#X@5FIYea6I2&R`&rkVJij-mN*X2)Km6
+r'rN3[hd4`d,EaA2meHmS'K%8(qH[+(e0'LDfJmDiJF+e*AY39(4a'"dDTPp8q@)
+p@0#)'F4[2h0!0TP4BkY4RB[[(f+(GJ"lBcFI8-'U9'qQ%IXEA@KpPZVL6D$k&N2
+IM!52m11R,lkHa*!!l['!CVcBq4Q#j2SF)pN#M14k9fe$YD[@1jlp,%ibk4Fi59d
+M-LXJD5),(1PIX*q*%ql@Ilih&dVHQ)XCL,M3QX*QS,!2%MVTHVETIU!rcSAJ!B)
+A9MK+0jqcIXrSK8$16IH$S8Df',DQHdIpihl+@X*C1bQVmEV-jhiAI$02-6LblS0
++GQ!kj5h+a@ZMc'Qm`6R,1HH$R'FAk[8$D@Cp8AhlZYkRc2TYHj(&Fdrp28'k26X
+T[h-BqCGL'cH&6GX-DJ%U#(j8`51VNK9NBR'!IP"EimI'CCq-IUVGf0GdIh&'-G3
+'d&R8C4aYr&#B'dlR$BbHN!"lmSU19LA5dJ'#*bl&F(ZR%Yl8TB6p5NG,+1!6LFX
+dh"A@$Y*`38NSPA+1dYE5UB6##[&+hmdh&h6Apr)eKm1+hrIeC2JkZYYGjRQBkU)
+C0#8&BVYBHlmk4mNBI%M"r0Gd5rk$kfaqaU'(&,ZjHqhplR[fha-kd["HjS"V%rE
+N5m4KZ'l)X-FqC)JZG-B2ESY[MfmeB%mH`1YK4'h&$MfDde1(,m9hGK*qMXPhRQ0
+Z0&jFIV$cAX+-+Ud'ULBJ$XMh5d!HmGrcIS&&brdY,IH,d(MBY2CqI`P00LUBj8C
+["0hF"Mlh2TTHI$%6@1jJBq$9F2#H'++VGRD6HiIlRXJAqQEi6Hj[EKG[$3[$LcY
+#*bN+R+#A"RGiZY'6rIcfK3,KZ4[G1&b-bp'&L`S[l%80A[Eb5`A(H2'#6DHMma2
+4BBja8brXD24C4cXjaS1Ajr9S"p"r&HdJYK5d&Z+$L(mi%ImbZXlFKAVA(EZjklK
+C90FG(b5lMLed*lC3IrajekfdY3Z%Y9$lepL035b831f3!,$+ZKa[*HUU!TXS30[
+"m5"Ap&&`@[VbS#c#@UlYk!Kh,&I'U[!4@R&TJfLkRLqNm!EKa(ed1pe(9YjhEk5
+hmkIVqE'4XA,IbFm$F$4r!2P$P2p5[V03"HiX988LrlXSqpXG`1hkN`kF[9jrLTG
+V4$4q8XFjiqrV1'Im,Ch&VE[R@hJ$q(`IpJqr04b2chcA2i`G&1A+"fRQlZRXkPM
+IdU@TKTc0qekqcMX51*hZFChl@r@cN5[3mkhN2$0AZbqNAq,H)PcqR5eppi5b)eZ
+"$A[5l`(9l)L#1,)RkcIGdaAH&)&U$(*Kb5N%&MSSIFA!Iic-YBec,4+GEFY4E"L
+IN!"U-Tm3"YbM%BHCiVL0hT1Q'Ie$#JGqAIMeiRFbIQH1JUL(hpr#EecljM[M'-m
+mc-HmIe[L,hTJ$1$h#(iTUM1-HN(hBXd,3%pE%1q@hha((1-P$r-alpq8H+%S`2m
+2$3m*!f[Zi-rGCUTT$l@LLdiX3ripCVK@p"YZ-4NEEj!!lmD2m6lCP&lC!U#bR@0
+m)PINL8FbXbKhq1YY,9d9($G$A#'+$Fdp-la3)!ThKR%$VJ,i'@lcGIKN[4m9Aa(
+0iX9d26238)PV3Gaka'9`(*B%dPl0N9FLm[T%C!H!ePYN%i`YL,aAI$Fp@pDbTU1
+eS(-q4hiCNBmL8P9jDeX,(D,ik`CIrMQaGmT-+BN3pVIlJUh*fpB38pj)`YZ1&q9
+*VH"%(ScMY(9!h+6qfY#0J0'!YKVm3M`m+@P"F-[e#Rd$&0J-S')Hi1ITP%%!-%8
+ICBi@(3$6Z@j%,[r(Z3KSZTCFbP8-H1)`j%U#f[X-[,rFEER'TSYrT'!J*HpJbYk
+1`[8+1Sd44@m)hd2ilKZV[LK63Tk!2Y%(4AGdQj4Q$@CpC",5Gqc8TBPie2MiTJ[
+c85G8JG'j%VUmN!#YLmaM"%RAV[TQKZ5c02!Aj!1VNj-D*FMa-Gr'F-FGVYA$$+L
+LNLk$!lrj$$T5*)5L,D3%JfEU-LpX(MP2T2dB%q&B0b4$)++!qL%riR4#3-F-BfG
+FJqrS+4+@L3fTUXbeS)L)l*)[4MPCNA1e$Q45[X3iMIVkP""q'd#0bG8%54jfKSC
+*hJN6ica%EmJZdMRQ1AGSC+JGmMZaSEl3m+N`j%SiJFiZe$#dX'N%SJ+)`#`kJiT
+PF-r)@B)2BT!!ZN&N5'8"+K82+4jfS8X!&*!!pkpSHI-E6`qR)09JE6"m@dY`0CB
+MG89!L-VdY'cf96)PBEd-ALIQVJD+FaXTNK4D#j@B8Y2KDr9eY+pAF*JZDULU8iL
+Km!Xi-r0cD061IhB2KI6m0UJjp603mfeB12`T!HfrJELr!P[YI0P@l0qDJINfcKN
+5AXkrP2-[3rjpRq6261@IM[c6C(kmj2!,DmML'N*L(GI6`[@X3$hIrU5H(0IJr`i
+KJ&5P)35E9!@)+"*rlA-be-38!(*D8HULHq%b""FG"$LXLmlpb#mZZTU2,cVhlEq
+ik+CrFY&9A,VS#[rfSX2e-jPN9XEZ+SqmTLS%#Hq)D"PTeG)M$A`Z,@J'",l#QZ%
+FQ'Il`pGI[$HB[L$Emdh9Z'#DHBDcZpkf)Dp[QbJ1jGL(4&H*1&CAC6GBcI%XL)M
+F-&![![18kKbcmmjkqiDm[AUHZL@'Br99MM5V)[0!Y+X+M&r@Z2rHK5!@KG,pdr1
+c5Gj'T&H-Z(pKJmM9jA*8Ad0!+m)'+4@JlcShCU'2lkC5lDjl8EZqZX5VQ(3rAAH
+mR16k-X4Z8+C"(1,9K8LjQX*0$L)8RErmI(cjYG$G&cZMhAd!BMqiqh+)(!j4(Pj
+b)Hl*"L)2@,FJVLr)!KN[MYehX62K26,1kG+ZXqV'db1$RepR8bU$`#K%4e'ICK0
+TA'Er@)(l8Kp'YpY%1jIE[ea-k9@TLmQ[AdcQrdEU&'5Sl")bP+mM3fQ3!%`F3iC
+Fq8QbC`SA!Lh'1cRTYEKHfYcbLS&!4a3%a!U(M@BrC)d)l6Uj1C46155mfR8b9ei
+RV6R*2*!!r3TId4d4lYVfp*G![eQcIe+dTp"#(9Q+MRMMK2ZU[`5UT+i-eac)C"c
+"lcl)G!6P$H,d8XmkMAe0i5a%2Xbh`0Ge+Kd[%Gj*V6PDK)FM5$Ae3mUNH"3JU12
+m11N2GbCZ`JhCMk-"FDiTMfYD5e5pf&m`HX@l9@S'+VTp4G-))9@ZNI2U9Vd1A"a
+$rmkQ4-3S#fq3!#5lAkF+bU[cQZB4)XVikYZ%#f6"MT&c)hqK,KR,NIB"EP$8lqL
+QqK8@PFL2LbSD0RRfM!cMaKPUckD+FH2dKL&PSZp-$j%5l,iAMJ`2pU"hr41peT6
+J%Z"LP2("'qkhQmH[@$hpXG13!$J$Z6)aYD!a3SV6)N$LTZV(6G@*c[3(QXa&)hm
+4B"*Nl*`+)Jd&Bd`$ZY3RX8A(9PNaZaQlQbT1S!$@,N1@PfK1'[H-R%%pJrlTpAL
+aleE3(Q2R!Lc'UM[Fhd-G(PE6H8U(8h-!fSjJGF1b,LI[J`308Q)+Nc6)&'ChDD2
+IhqR6q&IKMCY!a9VZ8eU85"LLZVGYpLRYS5jI`0GKD@U"UZ$DN!#b[L88#RFT[Lh
+VIEj@TH6AIefLi9NhYRGf%M*[-l8)R3I,r1&0!-cAF*%9BPR0TQ"39TaA&T%9945
+bj'!&a!*eQNrKL@@[$E9di4bp*9Kqbr`[*c2rl$bG1dklIq9b&2M4,mQQ%`PFZVm
+NU8i%F"Rr9c,UhqF(eHVrUrqR3LMrpf92'G)TG0'H[c!0mFjfJl`c+!F!A+[BBDF
+qC0+9UE#Y"AaPlYH`VEP*E+[0j+j9$j!!2)&#a#"@@aJh*,-#%G[f-5,@HQZ(J83
+(DJfiEbYc+@2PKVapHXC95ih(EULUR'+ebS`[(M!'&MJFe*-XkSQG#cdTeA,06HE
+D#-30H''!m8+)0!+VP&[#T3PrZq*5f9Zc-8BR3YJBZ%I-0h$K6S2N%@m8LVd`TTD
+fGqfGkp""e"G+6Q-8db9#Mcr(9e@YT-HVGa$-XJTZ`1`dmq`Bi#f`hJbJT()(4lZ
+Sh[@'IAIbT%(5K*(K*X)FNr1eqH2jDPXV-j&Z#RQ"L`2Cq*SH@!#*d5cFZDK4G66
+ki[aQi9$cC36[X1Lc("'5%84mS`p6K%J$j["%jD6N)81Z`5GB&)PrDAY9D%dYKTJ
+iF[NaAAZGaqGXb3j"T"!IaVhdB@4[%1)ZPP*l-2TBpTD+Z2%qcqRibGY+P&9+%q)
+1p&k0VjGlCi'eFLPQ,qJ-Lr6H+QqMdU`diG,d%39faha)d4f%&)Y[ATieEplDXMa
+(Mq)CY0%qH2A2-GRhFi@rLref%N3jL-hY))'V!lfjA"[%5@GX5D()mp*+dJkEEMA
+GEXSflBS2l,6GUrEERR6dfqjYf'RVYX@*DfEr)ElKAYY,pIm+[eYX1qX4rkhaq'r
+HAAe[efrCRV6pPZeHfpf8rcq0alpiYrhHcBrEreA$ijr&lqQflEBpE2Zjl5Pm5Ie
+[acpXLpYH`YHlmCZ4H5FUf)i-lmBrM1aaVZ0XI"'i52&h5R#j[cJ-qCT1FfBJID8
+pH,j$f-qBXj4-l#6)a032mQ`&)k,PMGlFL+(PB1q9N!$%b"1%26q5R3CBflNC[%M
+M#NMl[!!TRQ-PLk!09,Ri6Q'U("TpYb2AqG`6SLAS0b(f1()me2#iQ))FlJFTKi%
+FGhCFfG,!m9r2aNC"AIIJ![jm5kQr$2P@NmL2XkSiXmAUce4@f8r%,a6YV,``G8L
+TDpRXG)$QlkLh"Ba14r(8BQ-d&[fZUY4A"ScIXi-qf@4'AaT&)"Zr2T,2KC!!B,C
+V%hF8P2YEa1K`lj@Sqm'@``%5QTjHI*@bbYN')HVASSFi#`@cpaCIeAXeGEd'@kR
+l5GFQ91,ZDD,*f3CdClFYP,l%%"'Z68Y%a%K9ldE9VDC$`d+TYr(h4SHY"C',,Q4
+09hjNK@K[jD2+IT)NVGQ#L"[b9q@[G,C$2Khi5Xf@U8-9Z!kk6lNf9D34rIZ@fcZ
+%iV'I%*NY1jBD5kbB((J)f1DJrl"R#36NYVH*h!-(m**0,fdPGah!h0acU*+b[rS
+e)@M1AUfNLI6EK0'0L+D[34k9r8k2[VF840150283cj68QGX$'A%h88`je`'6'!f
+NBeCf"dj$*"PFJD+diZcS#r@@`"'[+C!!ha)T5AX3R0VGMT!!+C+VCTFX3BF@ic8
+BZA+&MHDYZ%b-UZGiYTpS%I%&,H983pK$(HJqJ6Smb2"jp9$,2%LqV4+cP5Cd`Hl
+ddET$q(V'[Y%8Z8VG%jQTpLS0k-B'[p&CL9Rql3eCa@NmQ@qi0L&ZRkbV+-ea9I6
+GPUaVhmjDFZeJ9UPVddf03'fRa&kNq`*6+R@LRmkhF%(99,lPe@E-'-h(0PRm#'T
+q`$%aED8'aB1TcmE8Cahi!DBXI!J[4G-U$,(e9&rhfa#VZeR-PY8"VIiX**QG4je
+1qejE10-*@CeLc&U0AEe38$N[YrT`IMfU[3rUf-E)RJTXX0+bq)P5%6!j(5Sk8*4
+&qfc4+H"Zfb'"KhN-Pi%SDp4AS6m,Lb%8h"h6jq@"L-hiKadfXF6LFI`2(6B6hYa
+('l+UK-&GYD`+ea[3lq`'0Rh`1!`D8()`L'pYlQ"Ukm*aF`FN4f0#blr@ULM5TX(
+83FLKC'E[)3X!mH&eE!$!b13Vd8GNCN@RKP3BkG'VN!$pmFKD`KqRh[IP0H)ZNM`
+VZSkrja64ph8&6C+RJdfD58JP"B4T,D"Y`IaYG$XD9ILH#Q5Q"YpHi&Ceq(EK[Qc
+!GaTK)#e@iLC"Q+dU*K#6MPc9R-XYk[(YakeDMfmhXMB#,dN6i$#19Jc1$#Zq!Eh
+mN!"04#j&FlUde3&%I`BLKPij+pJXUT2j8J5)H)-Ri![j0VGSJY+#$`3+QM3@34"
+E*C6I3(*bR+9ZX"i&,`e'1fX23d#ddlP"Q+)4XU,3hFQbq*3%(mj[D2V0TTfFP9`
+UC3#LTaEES(J'N!$qV"+J2dhf3lDPGhU3!"qrRM&"@S[HcPVc-)r!LY38UZmjmi,
+L,XL"U)lQ*9iHd9mFH9SQGPQ,RU-Qm!3d"EjG3&Se2S`E[9m+(H'P&lM0B1@IJ6A
+hAH8RXYHS!Rh'fb$kM+jDI8D(qc%$Gh$N'lSJGFJ",*ib$,fiA!DTL['HJL@9k+P
+GGcm`N!!lP#EN(2E+L8RD#Q#PQ1SDMqd"LLSJ)56di3dTpUSbL8f+EXC+%-NFQ!0
+mGIml6H!ef32KMqLpD45PhRBPhaaCUEGl8rd6Z4He&f4fL*eM8h$HXFI43`M#1c(
+[)HYe`NKbc-8cHS,#L@q)`MILIF'-k(1i#-SV6mNTZmYBPV'Z"KR,+p)Kc0R$D'5
+C&EX"H@ZP32c90V%F2G`cZ4Z5IC!!@FTV`RD"f*L4KraPJj!!RN(G"@,jS)HrD`H
+$U5Lq5Q6hFmKD6K(,E&lEQiKrC`pp8'YBVdaNlaG@'")9iadp,2ZNfM$bjKA23&a
+GSKpe(rILrSphBS4ZP2&0$aPf'TkS%+NH34CDcf8N1CHeYIi#9&k-qZSpYP5re+Z
+EAR%EZ+2234!+HFM'lRjZ6#VXl&B1&BT330r*2pl0X4iT888qBrF'Uq8Q@b!,eLJ
+bm4Y8mr3X[M)9)Y[kV4ibVGBqcrUV,Aj35SKKfaf1GTN,icm2d0["ALGB"2MZ)I'
+BJlbeqk+2FMaadD1-ejhSR49p6+YZAR,,16Y5HBLpRHLpN[2r,QSj(1dF4m6PLP#
+f#icTG$INEF"@q1N19pBJN!"K,@IS6f6SehChMrEpHl!j-B6IrZK$U(X`qJ$H"[#
+,Pql(aQGJN!"%pcKCS3,dECQ8[1A0XXZ4!b`@b'S05B-V*$+[U4llS(8"lTXKE0l
+PbNqX$e#qA3X`jkZ4GFKDPReele0c5'ThU"FB#0K`JH-fCjI)kJAM-b'`"hbHZ`@
+f!%E4Bp8&L-bE*#*[42eQj1G8QN1p9p*8iYZkcf&!!&8F*'PT1c2J%8kZL2`'k,S
+5RNBrAjjk8Z6q`K@QCKZpQe23[&f!&GZ+kiXbm*0k#i'%pp%Nb2[NhN*Y%LK!M!V
+#AU!XB2YM&RI0XT!!j35)P8HF!b@ik,BKUZCPb!djB!0JGk(PT4e"8e(k2**"$[4
+H9p#X2U*iXU1il1m@#c6d!))Q&,*A)Xr@EM#C6C5D$[3HE#,1"&qkrlR1B---L`5
+d[4pKL%4X64bECG%[ElN0e8E[PF*&Lh#Gi[8%q&i[5FP`bENDlje3AYL)@c`8ICU
+r(Ue$VY#8`"Ep1SfpKPh[T#X-hqj9q1jq##mHHV%MlNp%C&%QE+"bSHrbHbRfKQ3
+XXkYkG#jd)CbSpV8bLUkQR%dfZQ+hYSQPTF*6C6Aee-M,ERm0T-mMjERH@PNrARP
+6Z*Lh"8kEX3HpI8)PjZ)cH0Rj%MCD4`jILVq$V4M"prhH@[8%9B#mhN4HF,l0,Xl
+E6Y1KmkU-[e-"!a!U,q,R)lk@YXj-b,[,98"fR[hU@*Zk%4V(V%+%DLlp'HCI[r3
+(FY(iRj&pIHV2b+j1r4&p1AETeU53!&1`S!Plq`6fGSk'5jb3!0,4`0D`)j0apM@
+"+c+(pKb[F*R2UI5PEM[dr)lNjSKDU4jXM#lK6N90`p6VVSmm6"Fe-[$V8GlVV+d
+rqQ4b-ia)E164&0m#@ci`dIPrk$8fa6'JhTmKqbQklq&Ip0f+5r@GH0rlIGq8l2!
+)-@&9heY58ER*[NGfdh8[I3pVI@GYk$Z[pe6h)a+4H44hMN6q(e-!0["NQUG"`Y9
+J8S)Q@iC,#i"pG1(5elXdXJYpLLEl&0P+k%r"9G'Y1PkTlRdL+jLN)l!!8K@p"er
+9d9fSkNLqFcQ`rSH!d12DZ&hX+$C(ll9Db'E(96DaUhq$f"@H54K-mC3H[+RG$!b
+rM5HY&j0@VNfD'!i`TZ#L4EEZTb26qS$ZY-)b6r`dlUPq3Rbk(e+"c+VhImA[l&A
+K9G+83&%kF%K[p!2mINlVa#CN'dDhh0&GaHR41r$lA84V@`*Ueij06F#DqZ--*C!
+!Y#JZ["a#"&1)a@Kd'0&J6Y[442piViR*$GNVH$Zl9f6Z[j+kh-!AQX`)!#3+Jc"
+I`[fehr%FpXiS*J1$!"ha`B)#F4Ff@JFffY2ee4T$DKGULZ$H[8c$&dm!UEK-3b"
+HCk6L-#%9Q'MHHrZ8+ZlJAY5c$eC+pPVR%fT6!4l()h4E*@2+-HN2fh!M`FS3EKe
+qCq'++a!jI2X8L*PdrG!#LEjhlNl96H6M-#-I*aMjL%3lNr,bLX[([@FK1[Ap2pp
+-EpH$dj+k,G8H1(XGUNX`m@k*Q'1HqJJ0Q!p-[aalPR1&cBI*8"dkI@L1480D"V4
+Ck`1UFAF"XE#'dH%dYV`c!0Xf@CMa,M'Dh*5R18IhdfiS4Z#AdDqQSX&RjZDfkN#
+(PJc@F!qA$&B6(LH4"F*,[pe4C,mRQAhSA2*D'')V(EJ@T"j)l(UB$IjbUV*'VE,
+'mFSDk,FlQUU%aKl19l*T$'FB[bP'pq'j#d0-2(#QmUr$VA8Y)G2FGC`NHiS'GD5
+U(&J6d9G"Q`Ij,RQ8-5N2jKRlJ21,Yr[,mIC)8,KSMf#VH(Q(-fUBSjJaHD-RM$"
+Sj%TMm,Mf,q1pH&6M*)bc,'6R$HV-K4p9J9hUBdXMU*2A%VHp@%[b48ccEI%,kPV
+8mjP!+@0!L4cKk!XD%M4$[kL-4cPV'QH&l4cjRMDHYCJVmd65+,EfqIJ&ImPiI%L
+Vh-QjaA!8%,r,a1BS@46a4!`8GjjV`BXNK5CMMc,$*4-F"3YK*CCk&PN-Hr$@,lN
+9ZQVF@Vak8,FBSN*9Q'0%C&r6R'5A*Y&$C*4p`kdr(0@XUX6r-[kAd9K#UKLQRC!
+!2FNGMCpIL!Xp2Xaf@M#&pIfR(S9eTp1%&GlZKH5j*q3DY&Qr)Y*G&i'8K88TP1K
+#`LDX3,Za`hThUdAdh6GAR8II2pUVcU([5"r3Ahc([1TdrMkNbThhfN*d)FAVXI8
+dAQ%TED!"hBmr9e1F55mlARLkjRIIJf%1G124&fM#FRHUmm!kR@FY1lNb(e'l(`f
+NecmDb&(2JhdCr['Jkdh1!QiE@&kUcepf$5*EShSD)Z$8T@[Cf%,DFdCVjafGQr'
+p1G)4ASr[EIl)*PMK-KiMKK'q6fbiV4AIMPNYA8(34Kf1M4XThY&+@J$ihKc%!lm
+YlQ+R3EdVIiYa6m58h5ifLFa!6RBlD)Jq#*)Z9020TGQrYkjE"BQq8eK,$6IMC3P
+Se@@'BN3EmIVX8Q%b&!G+-r'GN4pBSM5H"DrUe*HY9a8jXff@[-$-E&Y&AX#-Vl,
+!G%58B8mCkR48lBmBSA[J8Sei0q*#mPSlCP[,D**Qm54p0Hfj'[TfL(dlrHR)D+M
+Tp1j%4V#0biac-&ACqFkF[)!B2E4Aq-mrm#-P%l'ldfC--aV5-da6-UH#"PjEDRa
+J`mbF8X0&Sd&m-4ZA02L2GaVIa5hX4EC0k+,68,aa*R8fm,[C+,JY'eqZMEJI9Ap
+-GD`[hIHM,f@'c(dl!eNhhBq,+6Yk[f*"P[Q%faBA#r2,(iVT*F8Lq`FILTa"Zp2
+QX1%em`#LpYpCM"NR5lPSM6#Y[CrjC19*0C9!rq8!e&3Q[D'VU8cZRP46#6cb0fS
+Uje3*,'EhP#$fq5bbZR&pCD0V3KF+04j5,"8LpJ5`DA+J*3FMHjiXD)C1dbJ((dT
+(e'`CV9)BpCQb9U*"0m%JadfeUUQmc&#iSPDBTGD+a4RLMJGR!rGlfdae(M-!)X)
+4Q5)92SSI8%NTJc&Cb4L,-j!!XhB0Y"lAI*h%L0FVl4ZKQ2pTb0LYE"9jUd)YYd%
+r(c+2YhEi@VTmLTB+Na&PM%@Nlj9KNDidb141I8TD!h!4Gi2)0klAf!I4VRRi#Yp
+!k&RXIIkZ(6N+eDGMX,092I)HF*PX)&[!CSKXPBRQ+Q"EAk#EZhYAaA,Mmp'G-(E
+8lkJT,a128&C"Di$+a3j+FbC6Gj,b5'b3!#kZPKb+3mb,b4MSPEc@%aSj*1[EMaF
+JfIf)1S#SrBQSrBJD)'@afUE`!UV-0P@&kbhB`'TASVZ#[YCC,3Rl6&VTl&2%[Dr
+5e@Q@%)idEp)b5Jb@3)*'BS,%6XK+BVXA`#3Ad-4HlAf'DS3!)@ZL-NfMeJF4UfI
+f5E"aSP62q$Tj&2-@4LI44H(mfj'6eY%fIE@lc+$14(@`+X,USJ0U*M#%JGd`K#-
+eZP!MP4jX%bU5Zf@maU1SFITiEF+RK)@D2Z)eY@$HBA&-eGIbBQh39'j5-b1cqfV
+$aZfcklmC-"e"YB,liJlH#KY4#p+Y'B2!l)#hH%K9L(L,94qYSKMlT988C53'pFk
+'J2)J6bCdGMMjdB1`U!Ep,jNBI51-N!!Fmb#i*mRGB85`1m6QMJ-CdTFXE"i&8m-
+m0Dp*ZF'l%jS+rES+6V(TTlEVE3EMPkX0*US$3Z'p-)&5L1fe$YTP4e"6iFM4k#l
+5YiLpKijY9X!NpGqYl)R$k*D&`8%$5PR+@Y2H1YA4!Qh9feUlfUE6bkeKb+cH"U@
+APH)U1JE#(El1m+B11&MJfKAjQ!mRFSGEJPLi+qj3@YXl)m'@1hbY8Te1'8j!4c0
+L9a(2Q"G$mml%C@,(&4BB6-3[%GY2@B6dU6NVcYARMEZ-9V5+FfmPc!MB(l+iQr(
+@69AN5UB+l(*!2`meH'-hT)H%-RU@la)LiPVT3eQj35fBe"j)[[GmDB+4&S9P,@p
+H)CJi%#a@9KPNYa4PB'YJPk4RBlYNDp2ICGL(L+2%&SDL%qbPfCNH!21-HbJX-q(
+,)cX0T)GQITl8FQ*,fcPKF-bh"cR[5QE,aecJPM#`P4U,TdMPZKJC4M0L8@P2"a'
+USpa[HGcY2(T&2H6U)c*+0R9Fd+kk5bST4C-fGC*kK1QcC8H-rQ4(D+V-4kE+jLX
+eC-e,1)KJ'%+9bIbiHKpB")PkI+pc2DY6eA5J"e3AU90UJ+f'4XkLP`04-)h99C6
+q'L(AL2J--(ZBP*(k"P,eeBlAemleq@R,LXQpDKh490L1Hh-3d%SDlc0(SDNG![H
+'LDAV``JXf0cHfBj6XB!L#LLiB(-$`L5GN39B"NV8kpYpRB4i$ZP'eU6q,$QCaB@
+MSheY"Q1B616C89FM`K`&-P,@&a`G$DH$IeS'[F"fNB[00k6ccfK,$&baBFV4GKY
+PKp!eEiNKCU9&SK%p3i9i$$QBB3(U493%882%THLjKU+SVULZ3D#r0$8hK-J2Q`Y
+(4mKQMT(,YX4m5@0Vf-TJL$MbX0Y#ZQd+TF#V8!$I6,aQiFVY'"e*EDDEA2hTZCM
+F2&D&dEhQ2C*3j@*HSTJp"GKU`96ZkG!8HafjSEkL&5L*P#q"RCd-),8dp@4AG2%
+0X$f4V-0i0E8pANBG@l8Hf)UERQ0NN`)63Ra[bAMZHe1jYb"h-h+[(Xqp5qCQ9Zi
+M%rLdbEaXmhfjN6,)M&AIk!QD@AD*8mV["8@Mjf%-b4`-MClJ@Ib`Z3J6"c&rDq,
+'pj*PPJbU-DQpP0T+PLB2%CQ%mNiDB50D@fI-D"D4T9&V@Hae"P@[EP"[QEa3M#@
+d,bd'E2`l9*I#Pec%-8#0EN5,E68E83Sf4RbKj'dRR"LP"`5$HcGJeJ9I6[6"4T,
+!qT*UEBjER04RG,e18Ye%[5kbGQI&2bD[dNkKG1ZiQ*SDUll*PF&`TbrCM)5K%(#
+S*M&$,e-*iNU'jNrEE23m&,Y5*F1,SAa%jDl-L3SbR4H+D4C#01[83X@&&fVCfa'
+QL'hNcca&pcm-bXd`fG+1"ZB"UqTBB`YX`IGkU!Up&($JCBEDS4Q$4$I2C+ZYb9I
+c9R8eH#E!hF'6NUUiNA@Q"k%Y9+BZeH2Yk!)bpmF-dGAJ-bGUH8M0)Kk[l$Nca3K
+6kK4JIPVF0e82F(iUNIAQ0a$h++NrN!#"bdS-AHQkS##01,*bE$5I`[i*p80M"hk
+Vm9Z#MENI1p5T-TX!PKNDr*R8MhLha0F(Gm0`i*'8VQQjMi$*#UAGVl5%lK$,Nd2
+mb6,BdP[A%[#9Ij@"4['T&`D)H9XVbFdY`5R'EeQ5&EIFFSZBRe4![I*[&&#rLBq
+5#8bI5#j8M,2bJHB+rhX4hS!ceGqUilBeam[&!R'lXDUld)#[cmme1"he$[rXTF*
+KFpS#TZkAP`LR`jT'hlP'LQR*RmZa03k(BjkK3fcjiZ'lhZ`qG'II0cDDHVlK0Ua
+m2AkQrTY8d4rYS)UJ`l@"kTbi32(ZlcA9R2qI*T[M-iAYGc6P95@MkXUf+Ki4#(a
+6X@hD*C@jGhAarN'0leFUHVqd'$84MqTHdQC8rU@k!NQH(Y"TGSABL2!PeDeVAY!
+lK'eKmbG463iZ2MrC#+'q,Yk#fPYc41"V+AjKTK1A-f0D+$FkZ`,I`rKHKA`q,9m
+lZV,L8PHQ*rUApA'rNh8hTqTBLMSqIANMhF'Bmkpe"hpDacfIe'()1QkkE)*qiBM
+MmJIkK51K5Ih#NA@6qS8MpAq[AkJX55U1B'S+,14H9AcQ1`A0p4ZJ'JapVb,`HQ0
+3`4SjJId0,)M9L6SaTSM@"5h,N5QY'B85M8fXCGJS-DRa,[$hAThJ#Ak3!,Q,V3P
+5+jqH'iJb!H8HIP613rbqX5SFq60Jd!NqHZ'6jKD3!"a)#JVR5j0M`XCH,c9jdG1
+UJQE@EG++3P"f1k[Ae*p3&"&0TL6[Q!cAD-aF$r1%V6!Q5XZ`4@@'e8C`&(32*52
+Yb#SHQ'*G+LXYdr*5DYbPBaaT-8)9l`Z1A!KN9a51A)Kp"epQl0(8*I@qY`ZT*Yj
+Irrc)8)#FAN4SA[rDi8A')cVcc2Zp5HCC'YbT[1r`JUS`EG4h'a'NTKSB1A9D(jB
+Q%6J`#-lTIS[02dZI(pAl"mSYi5bk3UEX&mrL$VR1$aE@qaVHX#F(&CJ%FTAf'(k
+Vm&X!2Yk3!06YGN1r3$'9H(He+JQeEUJl[k2@AE290-LBfb23fSi2Rb#ENGGXLmG
+(,V#&T[r-LXq4Mj@mdml!!Y#rirahFIkEaV5[BqHNf8h[kJRE6hVQR#QGl`GK&1S
+`DRF0(e@C%k9d[U0(NcVI8AJ,m,bKmfc"AqP+)hY%a1XpMU,K2e&Yb9KNQR90mr$
+l#3h`,(24m2Z"60PGX)ilm#9S6BSRdKJD2NTDhp'M-"Pe'&VIGr)G#pDETF)YZ$0
+U*BXh@l*[qi',Eer4$1F%FTNTEP62+iJB$QBKpQZFj9X8,Ib6Tc@f6&,GQh&TqiL
+Af'f"[RH%Va[%-l*ES3JSFm03,p65"kLD+(M)XD(BJdSCh05%qrC!ZpZ!G`6%+%h
+bf0$#*[,K%B%*RLJFGm5f%Vl22LFdak0R9pL'B6)iHTCbS1I(TA*i'[6-T)jmQ[R
+S5Hj%"$R`3Zdm9JFI)ir(hPrBV%FMDkZXi+R(Jc$ib[f'qMBBRKd&!j*aBj@JkP0
+8#rVVS'p95rZ46h-TSi)URmS$cX0Hl[`P@ZHISjk%QeBd$B0TPTL"X0N,2b(4dbY
+#`am-[B[*Gf#h,%P14E6e2df&qf%&cNC#qm8AC-cq2F1Rh9bGl!aiB1$1L,`EIZ+
+Adq1DR"jdjJ4X(U)#p24"UN%8rq0d06Xb*ra)Y%DZ#3hrP'p)fBZ+,m40jr`1,KZ
+B'1C'02E!NYB4H5&kS!-629YjqZ,lqRilfa2Z&c@(dAm[ZmqUp$5q2VB0)qpJ'lC
+Jb`l3(Z0da)DNq`MAZh#a3ZdJiDC(EZ@[%QQN+!DZ+i`62TI%bLeI+jpQAbZ1@`a
+I*Id%@VpjjbmHIbqH!bYSih3m`e`&&dq-DprXX`IE@cV&&F6NXiPl-)QlmKTG$aj
+RfdV!mCmE&iE2*#j+f!qJhXjUH&&4-m,bbK!L08!CRNrA9e%4K1i*eVHf"hdZHU0
++2'hGG&E#!""IFbIENR[,I,&BU`U)IZPRL(jCkE*#J[Aj-CFq5Li(J(42+)9A6bL
+!0p[H9Cc`V[,+K01!h1BFLp8#h02pA)eUI,U'Q#'-#6HMj*cLU45j`kXDRr+5hF!
+3iQ"0d+XDRmNSlkC-%Z'*6(e+98f4UFqU&2@1,aBBSp+61T'FMJ3i2rhB%@(FN!"
+dS6#,,"ZfjIFiJLD(A98mMVR1HA8PaRmjEI@2iX1",2G1E-Nq4(Vb-arm&f!p,a,
+c'YllBJDB5KjbU$!aK@H'L@TB$ZpJQd$)6CU,*G621Q!,8)V6l)5$*F41@-3+$#@
+kGjZ%Mj'ebrH#KpC8UjkkTTD489L9MF@*q8ZFBB435pbc#3[34%6C&mIbbaI`'ml
+NA2k!hh#QI*,IF+C`NYp`CYEP"IJ0TjrjQ0p`CX[rb@m)!%e(0Ia5L"5QI"C`llX
+)4HHd3P8%,lQf**ZANjUrZ5@i#Ic(9VDf&5kKPrB`-"T&Lfb&Z8M`&YD4)a`a[!b
+@%m`cpQi*`'HFfcCM1Vl[CF[eJfcJd6$X`rGmI0r$GZ,&AVc$bfmRq'dkCA13!+P
+i@)U(KLjXN8VqqcMLGAbemrX4e*%E)'2h-r"EL&rFHBifaSFMDGQ5@BU)qf5%mj5
+-J(k,BGLUaEb3!&*e`H@TSlEU8BLK(L9M9NI58TRQDe'eLBVbY)JmRG1+Q#`YaMQ
+@faL98BiMbAiB*l@B2BN)k[-aiT&N2FBV@XbGir8mU88eM%FpU%A0L+6V[65N+H'
+)1"R*d')kYBM8(#c6BZk*C'TCDV@)eN6(D&3Gq#PfL'dqq#h5'KRRDTb4I4fc*Uh
+eG"1-FA)ZdPH&0S6#A`mTAjT!'h2CG'B6c+,39-Uk6AjrqrTf#1U%)ahYQ`(UY8%
+&)FF&N!$aPT!!p+HT8Yd4$QlDk"1@'m1E#8i8JfFk5#$*@i,"m0GpVE1U0N@#l6!
+CYa)Hc0TpaIj`%$LIE$BXk69*F,)eh!%*Mb@b!+`ld14[KkC2X%BQ4%3VR+BB8qZ
++'a9QRF!-'LT'h2*0RAF)XjBRJBB'16lalL-XP!LPA@8LpN10(Hd"L*fd+qf`fji
+)c''m8MSR3HYJ8@j0"fN0"AJLN!#&98-#8VdL$qq0EI,qUc5$a3&,Ul"rX49)iRE
+SXcd'cE0!r-)+h",aAQ+5a2Y)P5a1CSFliJm6Iq+YHm[*U[*fc$UdP'-2bMNI0P)
+&Z$qfTHDFl"eNdUBUGDE6El15N!#GTlD@EXl@l!lMhMha9jMAXK'+6*Q51D084AN
+VaTk('[Zj@pjLGi$Ir5ejQeTA20#LqAef[mP$-9llkC%p#jfM"iK2B,l1V)kRU*Z
+$cj2ajYJHVBClj2D+3BRhp)0c,1l3k1[Q$(pfIFeUh9r05pI8mR80IAD,!3@2"ZA
+4N!"@!A6%&j6ekUqjLUA[F6ri+cMeI'VkLQdQI#X("ZL2A%TlpL2%U1m1XbmF)iY
+[4G(XK+9HBT@iN9d#KP2TqJQf#q1[cVEJp[AiCb'rPl*lilM(dFYied[0'k&SeId
+iHZ#e3$rUe&2FQhmRZh(UBHS'24)!*r$,(PT9a[*i*i6bRCLL+F!cV2N4HrmU#LC
+H0kV[J-dLQJ,B"([!)6#--'(qk!ZiBjq,NiB&R1#*(Q&j#pcK8bd%GGmV%34Hf(+
+[[jaC"*C!M"%&1-BM9d5E)AdDcL)F[Hjb#rJK1hMR2+dT8)SL3fGfp%Z)hB"*+)c
+[!pIY'GQ*@#'LmUP6m0QJ+RN18j`M0mjEIYii1IV'D6&K[p!K6`#D$(QTV,"cQFa
+D2*'e%UJ$,VV9P"[IblA['f'CZaPE-a5[adXpp``F,eK3AX&G2#l[ESPE3Pb5lPX
+)X`e"`e2UVj@Eq*hC`fc)9@peai$DZ0@G`3F[pG33JpM!CEM4$N@Ze#mj413JiL@
+kf&$r8Qbp#b@hkdHXT5[l'HT$CLQQG-#+[Y6D'!(+GKl[KPi3FVC!crC61CD'p`b
+'!30hcBHZNC(P3[r4IA`emba!*J%GICi0UU1M-#41rK@Q-eU&[C!!QNki#8YdmY6
+"5jedE[pMUXIHrh5#-Yqd&Rr'6Ik@PSf&rTE@MN,mGZ,PeLjmV1521`Xl1cCh&2U
+$N6X+r45pUV9c!`)r(5TXK@!1AMVpp0'"Mh9Yp-'dkqiSl1VSE!-@YE8i!a-FCHe
+M3ha(Xi0[QdRRG3%cf,JZc1(%GJc+U#EE0I!"eI)Z1J[9)"2Bc-!cpFf-6MA30P3
+a)f@NbqN(SSZp4jZY3F`$H@p8(-Q%&ZU0%SF4GbdG)ceb2JDL2"pEpIP!Ira3QH&
+X)BYF3$(-@%@j*I)('KjC0P!8(`Q8E$HT4Bl3k21NBfNqKCI(Z"2`+&$Irq'Vf%i
+KIRp5EL9S@q)@De8NJebdl`*U$LkUD)!Ye[+PeEMGL0R-6X`QE1JlPZ-#+8jb3ih
+0P`23&R5qUM-mA98IHIM$aI0MEF'MBqa+jfVm`TZCibKBE[G*GUAMVM&A9)kpV!j
+bidHZU,$6cc%YQEf+cFNHC6h3%j3"UMc1q$PmHGLLYl!IS5b+MHG8SE$@bjHcdJm
+9h@9@hMi,qIbDAJhc`ABTmK8MRmT""EQ&('[C'%F(AH6!4(%1mHU-B&ErI-`R9Ib
+RmD0`XG!PAQ%fjceFL4Z99'Z9C1U91-q09H)Q$`&`f*!!V+eCXE!Gd"0FMr$#c+@
+8J4TZl$XlM"IS[V&hH1NRjPRm"2E$8E)dMJQ#)kRi#E)Z,"IcLjSpcd&LPCN(NUb
+bV#Bf$hA*VbIm3e8S9T'R4C8QSTD(JGhFJN2MaekK,Q)E8#"0Vfm$@J0eYe[K,dT
+lK&TAIL2jIfU8BH%#f)1#Ff(``l5&9*f'r$#G1K8#L#MP,ZT6YmaI1&B0E"&rB#G
++q'!6'fLUr*-EU!NDA6P0R+"U%6eeZ3eA6P0KZ0QqQD'frppZjV6R%lihPhpd-`0
+fr+8QJNp6!if(8UTNQ0[%KHdJMY!ar,i+cR+GjRh`BEimSGiUqJA"-Id#B4[IbcI
+hY%rGYMP1AH,VijG)4HJecYNXG`dk()GHJT0Mj%kH@63DebUJ1Pr5[jV%,%Rk9c0
+KjGHk2DGpcM-fXXZk1MEjY[PKEA"PZCK*12heRD3j&bkM0jk)UmV&Pe0aFiY+rZB
+8R!L!&Ia2h0dJi9L@'T&pmF#CclQ,4ab+6,c!i2dr'E36%A"Qh8pN)b,`1BYfiP@
+Zl#pCSHDCrmB+M9S[am!+MEaiq30m)(*b%Kq)[$f*$d4H[Fb!kYAEV0$)-jHEC)@
+HIZCM9ZL)Z&`9+l5b9Z0ZiCVMK))a+Ba3NaQK*M0#66"#c3ZMc!JeQ4%k""fd9Z+
+Z)D[NAj4M2Q4cfrQ'G@rr)l93jjU*'Pj9LJp+4Ec"#6iS1DRQ+mc%mB%E5Z6`lNr
+jS1DH5D48Gqa&-*fqcTe+mMb(XPBdMqi"lp!lqJCeJbc)82F+X*p5b24IFdcIqXj
+riCLqY@f-BrS@Y+`XMZR`cIq&BrS@[pSFdi(,2A"-"c['1+D$VCFEi*J1lIalMZQ
+Jqa11UH2b!Kc6k*&IF8b(L[j[MZR`2h*-6p9FhS"MqYE0rmJa(H#k8ac6`Il,0A"
+-"hXZ6m)a24Am[cLQJ8mjTUFLPbIJQ2C(,br!-Fe@Nh`CjqR,!I"P3VYd[NaQjL4
+Ia[r`,rJb%ESk9[Q#T,D+DCYdFN9cI)MR`FqFpMMG'mTYSEV!i0*Cq5bNL[5SpQR
+LUTad,ki#TqCcjE(kCYC$b''d&CU'%V994e[*eTT"pme1$ERV%LpT1GU6ZaAUVYL
+YbZ@ja$D8m(De+JKek`iaM+"fM8EN9%cZSMGmIad1',4$N!!EIPL9!@G'HC5aD)D
+XD!Vjem+Z66P@Q0*%Fe6F$F`9q#0Z@'+E5@m*JFif`"!3d5H-!lZCLpa9`PKC*DE
+8e&8h9+A90-$[m3Mm%VQ)'h4ZAZib8+8+39C)C`J1Y8E1DAemM@,`[9G$'6!98A+
+XP!D(+$[S$A1ZN!!'Hp[@!KpYbiGhNS8TVbHXDc-KaEMQ"aE"L@9M,CLdej%E&Gc
+Sb#KF*L2HY5e1FHhj0!Hm5(Jr`Y2))(lKD5jf!Em4q$#T9K8J'YF&Ce%HmANY@DJ
+6bNc-F%d068U),f8e+Blm+63MZ9-Bf-&80)`aVc,Q1VGQBEVp$XcF0-QmmKkPM4Z
+l9ESMpQHchZK4p&ddA'Zf6RdIrGqhpRkml+-S6)BrpQI5feX-#T'aRcV)8``ja3f
+-[CcMEU9[iCVZQq4ZaH"8Hr*E@Qr`LNbef'PI4erJ*KP1KiQ@fPUX%MmEmBpTm8k
+1Rc8HMedbLA5b'HrLH2GB[1mYa,GUm@k+Kdq,9$b3!*9*09Tm'XI6j8XLrQl%cpE
+L24crPI(iTBMhD2&HMYmd(Jm[j)&ML1H&kN2mL[&SqZ[CUd@R)lTk,0U,13cdDY&
+q4+XVbiTq&Y&EY1J-4'2Z[2I4h)h-M%b"Nq8SM'8+1eeBl%&%ee0dj!+dJbXReAS
+jQF%bZ"5*hQ+$,4*k9NS,`I"KdV958"5)'UM0(c%--@UP-1JN,`0HSUI6P*T`''l
+eLG0,EaTamJPYdSb-4fp14-1AY!IH[aMPIafH00&2c`lZ@$A0YTfh+le96S!(VRk
+LUN3'r5IS$G[PS+c(cJ9GEFN&A@dler0DV[@FbdQS25p2bj&+l#qikNkj(p-1dHZ
+C!r!Hdi*EDMIY%I&5hK'PqfGY0-aIkiV,hMlcpTRSefAP-q(HQ6ZEAJ,4jBD&DdD
+1D+UeKmQl9G50Qf&YIQMBr5@RF%0jYV'BI#XkUmJ&@)LqZU-8PHYXqNhT*b$UAN4
+i($bG5bAjl+c'S+rILP0-cj[mpDF,8D&iLHk)GT*h%$@VBeh"jYJ)cH(9FJ[J@fq
+!J13NT'DkK[EHf-aQ(%l-@,QhHUdAf"IF&V%HCSRG$SlRkdRheqiJcFp`3Nm"kX%
+[3FHhJIGe",0(Gj@@jqY)8JYD+Yf9Q-YEm,ZFjp+(h3$[!V'@`!*mr39FdR5PX@E
+bm"a8X`4cG3)GK*2$m%rB2I9I))V1FIkF-iQ5`qPcL#R!T#`I1F-jrKc[dj(M'1G
+BccRf)dEjVakp'&`Z+$a6NGU(+qMij$hK+J!IPJVGkTjKr1Jpi84AI@mPlKR'Mpi
+6cX1)IbCacc"qp*j`4K&2crEFqQl%Mpi6cZf)[P1,6N2dk$hKp#,k4LhDJqM4Hm+
+j!0(P@V3AdG5pL0)N$,h+,Z$TN!!E,Z#M6@%akU,*Def+QlT"BrLqJ'RG`cFcGNH
+#m@h2lJQHd$V5c1BV0HKMTk)4QXY@Z'#-RBR"+ei-AKBjKDdQQLeH)d"pF[&EJYm
++r(B`IqGK$fi8Br5VYM!iMjJ3k&33(5NZ-jLL9US3-8IJ15le[PpkS3HHkiS5fSF
+jp,ie`3&QM+p!ahH3!22K4%j[)LHaP2'FhR1*R+XiQe1VqNETdPjjpikG!+j-,rE
+(#6dT,TYQN!"C!U(Kra&Uq!I3l@%6r2bfc3)RU6N!rK-B6N&bN!"NH'PfhV+abNB
+T[j9'XZM#%c3TFi!Z%q$4f2lIjP[N0aY2Al3QqF[[k#Z2-@3b1hcVq4R1!X*G,4d
+"AjHiQYJNkpXM6Hc5'hj&E0+c2qMcGcR#A9hKM5,V0[kZ3i3a6EieYJIDZUD"EV*
++5q,MYqC`4'4fK5-FEQ6JK8Qp9!Y#,r5Q+PhKmlH(S-barZ[YkhfjL)5*NV%JidT
+R'$V-D0TSf+r41C*Jh,c[)jbGE@hh"9Z4IGekb$Z[$hF)3rid4P#%R+EIj[*ETXl
+rTL!j'%3VI&Y`29bX4m(@IRXBAB-"Q[A-+V,Q41S%)M`k2%DQTbhmGHU6-48Befr
+88"pmp-,UM!cY45)DkLUp)SYHUYTT3Shd$ScV(6iaYEf6UN$el[E1aT!!5)2ZL"2
+qDhl'9&mS3-U9[j`JS'E&a0-M6hiaZQ6mQN2fFThL"'ij4JJUQr$!%YkQM&(Ib@i
++je-cFK'pJTjdKh,&Bk5%BPG@(JjY3lXf8#jmk#`ENPf@*lCH(M!,e[FPr#!$Xd%
+ISJeb)ULp-Mk($-(k`ZS3'Hp9FPr)@h+V3DV&Q$rHRjml2ap6Chk24cj4*aYm!K*
+&qSN#9#dQ-(![$lp#2mq2k4M5TL13!+a$qiSCNKcD#8&me36'R0!S0M"HQ$RllkS
+&(`MmV86fS-aZHkGCbReBKQU+,P@M263TcY$%"6S#XCV,(qJ)a,C-kJM%r*-k!M(
+[j39d"%EHrPK(`$6qGrFX@JRUV(Z@@#&mNIf9HjCh-X1hE+aN)R2Xr'4Qa8K#CVL
+'8US'-Aj40@#rDMf$k0Uepl0c,VeaVCS-mFhG5BjCqqkNIdMkJ,DFE!&IcBLTC4E
+qAPjZXDEhH%ZlFINeUqN[HB2'dR[J-$`VYPl'M6Yj"QB)[E`lD#I#*mBL`e,cQG8
+$a2NP@cE*a`8,#Qi!X8AK%*5iT$X'EFJ+89q$IA1)h*(Q``XTiY+N-l(CB(`8Tf1
+EC!@Q!dfPjf5LUi@U#f`lBVq1q#JaJk&AD)*G8-C-fVAJ3K4'XPiq(4m&mQqUqBU
+(r+)MBi#mbfheFK6Ik1`CVYVLSj%VqfUB(H6[Z'T[M@3'd9P`&ARCC@AJkD'b(-+
+kNh&ZG"fBU[QpHRbhcD)+K9eVBS+qamkai-+%EjB,9U8h4DGA,S%*m)1C(-!md3Z
+I4cA6be1Ba$ATjHQ2i4YX`D$10&DCkEC@I-E#8jCS&dD6Fd*rVRRX*9EFD1E!Q5Y
+H-%pEP'U`1"VJ5"0DK6dGl#ac8(-4$qqEi0RZP"1#cJl"#D`cD0UHKIP3Vakimi2
+VX[Lj2Qr3Y%h'$5,1(6CZ!f0N33EU5BZT9#1mpQ9M5X,Pf#%,dVR1AN6#pCBGkbk
+cX'G9c!4Q([l2%GZ8l`5Ea0Hc%MiBEkf[495D&Z2[JGGC4K@Ci#M@(@@1K!&IECb
+QrmU5r(5IcT,XI(q5*AREpcjM5BTr4YqiIdEr*riC'62ZRj(ElrracdJAG1*4eVm
+!&k1DY6,Dd@Qafm$4(#l`i+V-$,5#39!JEYAF(@DJaqR4&BJ)B-2K5Xfe20KGEX#
+99S'BF[K&fHVT9Qb4,r5CrH@5H9Mj(*bFh`6[c!lpfkT#q81X-+MN$e!f*M)%(`a
+LHaQ2fHYVJdC(EI'8LSbBMcX4S0Q&HeRIlT@UrZEIM6QZVF%Y8BeESMS)Yq$)k)Q
+Y4dCI)!qqMSGA3`@`0H[&QY8(lM+5RL$kHi1q0@d83ebYbahP6qip6KbmPfh"6!6
+Ja%hj+pZVH!ZDQ2fHL(PD[qhd,X8YSU[aaDi#+e3Fd#S(LQ3UiD*YiSk[%Y"E@3$
+[qh)pi&9mccl1V[i[pUH[`#l%MFEAX$p,ZU2PGD!hNlLSXLVA[R2KJXdP29'5R4Q
+8[B3,h"PP'CiD6'Q3!&cr&4@b!f*2$rc',S#[ejkEi(5p(eFf,L4iRN2dJJ`V2$j
+ERVpleUQF%e')D%D2HYEK(9c4H*`L@%HU"MKFPlH0k*[8-kK9)hl#-FqURN(U!DY
+KK,Vk,,Hhi(acHY!rVI)DK!EX&Y`@Z$2#6BlD139`k#&[RH)+FZXKElK%k,ee@)m
+5cVKbLRUFUZ%lp9CRdQe,&qkUAaIlFHXc2qm@ZUeQ(+k+'F3pdcR#R!19-8FL!j`
+q-JGb6i%M6T@",bRP$I36$K3YjrLiQCU+f281G`1R%a['ShL69iRS01"H*RpjUah
+E3FALLT&)Ec+b+*[[2q%,krNAll6dZBJ+[E4lK&NmTm#$fBFfVbL+`#mYX!&46Xk
+e0HfN,3*[e"G$U8&bj1)VGq9LD1jL6ie&"-'5a"EU'H5UmSXc8JkcDkQU1,b!Tl`
+hQNHNIX@BjSMj2Q[LD$@G"+Ylj9fi`L#LUHmTm$jAc5bhX'*SG8Q'mq9[$)XdTed
+U9X"p)0Ll'mL4Bbijc[2e`F'KmNlSkXKmd(EFMKXYB$pM0ZDrAG,$eed@SckM#JE
+6[[[G0Fik4m1U@RGej8efGhA9MIEDQkSE(!efA%JMQ0[*(k&Kh+jjZ(hZJMiA[5-
+j"0cNd*11BNrM!Qb61N*p`qGdl!I[MS91BP@L*Q!Xk$Gm*UpKRHS%VQCjhZ6Yq*R
+E@,8$D[5*Q0[K'V8FNc&DJhMlHDq''DMKa[%++XKcmRJ&ZCpAd2NZ1mC09V"k@,'
+8#MA,ND'QipIT)*jlN!#3!*jj1kk[&XEVUi3*2(EZJG%,+`)(PfFjkT8CqJ50J!d
+R[jT6haU8%c3b0$&"*VC&"(P-mMS0&e!G8UFH@DcG%Kh#EM%M*[e'aRd1IdMNjkp
+m$ESSF#r*9r(KalZ!ALMKU`Lc$#9SKAUYI!Tj$2(X4+@IKNI#9+9f(F)EMad'fJ(
+QAT3LX!e2$a!M-99Tp"`UEH!kPfPecNHG&CHUK%qVRe3Cl819`1EX+QmNa3"lRj%
+&Af"3Q'qe("TLE4h%F3-4U"fm,R8EH20Qk4iiS8"MC-6q&EYfT&0"DS!%FG'#rAr
+l@acYdk,"S4Q2IiB[P)C)6Prc,Dp@TF0$HSdjhEmCf'LAH$5fQ,qIe,kYpdfaaE5
+a2fI&(04a4)F@HD2fA4eEV*DBd`0&ffHUF,k)Ul$48aZC!4HRm'*8hlq&q+5Cfkq
+FM%fka-5ejAHJmiZTjGm8@@4(5,mj#aD+D9"jDJXT6,d,b,I&K*0!edQp#Rr[&`S
+8,@mP&5KZMAbU3((VcIqV!X@Y5cpAS,KeeMmS80b+,F)0Yi)m@2j8J@*9eFF+&'f
+&P`03S&#Hrc%I@Barce'm3!NVk%9a%BVB(5krFE'qJZVT%GX6AB&Z0B0jAi&S2b&
+(NNGdd-6GC)Jf92F+f4QlTRbZ8I[pYlUNr1,,V8CN*%)h(fk5DA"pQPhJUBFAFEN
+LCq@JUPBchQHYB64)Y+1#M(!"Zf,G2@rL,4FSC$KX`ZZIeZpJj4h$8+l8*&c9JQ4
+EP-kGeJV!i4T@L`HM[29pCV[5d5PrcfJ1BCrJ1f0,dU2[c+,iAdThRf6'Ylkci+V
+LDF!H&0CCRRc"ME)$L0@hD30qPQi)U04aqhE2N!#ZBX&k4mp`8i2Y(4mLE*kE'ad
+ibVFjN6C(G!9V15'2LZQH!BDZCUfc9ce2&PN#C45aVZX1l"C'j&P`Vl($ej',+pl
+fRcTBM)R3-mPBh2mp6`0Rrhee&[8rd9Zqe[IIGJ39(qBjiE4Def#fa0X5fE$2#X%
+GH!a)cc#Z['(b2)hE2935"IkJA,8&5RU5Yf3@1,1Nbh)Kh8VqCM@H#3HkZ'q8Efa
+8"@pYbV1fqZTqMTK%Ldq0-'SfKhaka%IHf"Ch6&Qf,6ikFY"412*$r(l0IQUN$jI
+k33GmaZ1,LKlUfih)Ca$jQR9r2)kBeaDK"SP@,fl8%4q*N[r,fLEbdqYP6`(+"IQ
+2qZ$cfNHa@J1NR@lT&I[Ba6Kk*EFjX3cQT3D4PIG1bNPek*YC0jeS+L-3$4faC8X
+*33e!FH8h$D3CcZbHGe,Cjh0f84Y`hEZLDH6`pM49T'fPU1)-U6(!RGDDLlcE8RQ
+K"H&UdMYQCC)0"dl#VF3mB0I`LVb0Z)8H`PeDf4(I'ab*kSTXV6$@R-M$[B1*l-E
+[irMp#Q)1Sq2EG18PkX-iMb5UkKL&Dl&E[6a,p'X`$cX9mmc0e%dU+*PE$CM'BD!
+@I9,2dIN8&#USEUFlf!m1T[1qLAU@(dM8!qaSY"l-)lC&iHKT-"dH4qCQ9&1GV1E
+0XiL"jcDTTAfN$lr2*+02cd8&XmcB(@fB)rG3+Zpcb1ZlQK33[NDk(iPjU1p[kEU
+kHH6(LBk%i3D[fTm1&0X`i,*dXbUiVQ)pBPiFbpe'lKa+f6rHIMrKc)QUEP)Xbf`
+MT0Q`&998T+SS4-`'E4T1aU"LETlNUa2@Te,cl-BpHG0V0*GD@@mferQb2fXC-XE
+H3"AcS1r`8V+b[X1)b4fV`I8%DS!D65Ym9ir'E84FKkb0pqji00cbhY3NSpYZMib
+LkVhqTSPGTAPJL`2cm*8Hb)1A8lj-#FcNGarHXk&BX0f"h2MH3MihjH9ZhXjle5e
+3H&"k"kTh1DSINrZ0$Y&Rm%YrcCc`Eq!H@EZXHH59J*2kBbNSFF*ZJTUBFkZFSpJ
+4HApr%YFme%MXURji3-8QGLj246cPVQh2I#NdFMJXKZq5Xbjli6[kG#'I%j@r("2
+DA00TC6SQ14MjCr6H6XjcIfYN8*X,0h8BRJ&I*KIrX8&fKB`qdK8bURJqqLed#$L
+%bDiV9!mLZlLbE[pb8Z5kSDUkKMBbYJPeKi,@`T(SRpUDE0JHh5TUp@@14,P$Mk0
+ZrmJcT,eM(U'YLaYSrkAp@8U[m&!,V3VcL243LjIMF(SF`8["b$-88i,B9ff(i04
+bJ3&EGMe3Sa,+L`YU2fI$C54j6``fDIQ"M1X)h&pN4V58rc)MG'0B-HSmIJJm!a9
+AJZS6961cS1NH3YS$YQN[KS(DSaV*RI(L)RK8Yh1iHeCQfp,mBAJl4)E3i,Bd2q+
+KQ*qUB@hZAYYB$8EZC!h5Gm3K$p30959'VTb'ZACK5RUIp`4m)GrQ&T((0YTiLkq
+mT2F!2Jqd!GB%3ZeEfE+&9M8)IdR-jTa3Gf`,%IGR2'mDDdpieNZdbdhRXh&9$43
+#P26`D$,[qMESZ,D&CI`k9$S@rb'Zp$Fk@L)6F9-CD4Z,bC&X)iUmMRIN3Le5*$G
+'3cfYl5h"F%"mXAT#ZQ%'ecdQCR&&#4cY+cN,imUN!Uff!mRH6Y@e)*)ai,Nq6'L
+4k0[XK9qp+Z)i0KqCeq`)P,pS9)$,dN(iHSRGr1#Fj&!!4HY+#dApr*UIb0TG#-k
+8cTV*XCFJ$e9pQIYC$5FL2Y4PI"6CqBlX#DrQXNGa#8%6TCY3R[ETd#F#*[5THiX
+X1ZG-A'IRbHUNJNZ!!MqX4p1*0QTp6UZj#M9p#mj`[H4%'eIf#qb)['1NVjGiUXr
+dASP+H6I!XlGfNkhZ"UV6#$Z*,U$K5ac1P'22%$m*lr#Z(,Y!liUKK*cI#C!!%Sl
+%`6ed,r5'i1`dGS,C*)J'HfR$Y(iS2p&TZ1LqG*F[Z#V"SF2f91`4pNAeE4!)9#G
+XhGEhHl`&B-CJDUS+QZJ'-3c,YKN-`XK[l[R9)MdlP#P'ST*AL6IF+Q4@9SQV`3P
+&48I3Q5(@N!##CKbrHGG,*il3EcGjd3V-[d(-R&mMCLe$9idjA"Y8&Q-r*SB3kVL
+if#3a,L"F1CL9[8$KhQ$m,#d+2&9UY+H%8b&X+"h$pp68N!$Pa!l!Zc*l!&F2V%3
+3["!TeICiS4[e1XAU+NER,98T+l(Le5`QUbSGUdTm*%TGB&1*`P&prmPRS)m$9pB
+*[q"1Md2XY&T,VGC&P9EViQVX8lcKGqlLkL@,5dU@APqpZ)Dqq@l&5KlQNhIm@EQ
+[UZ(IZFXU+aFlUUZ[VkQTdArjcMJV4k)'qEZ+LKRAipPXAB3q,,VH@V*d55Pq&bd
+U@9+&hkZAPPUA,80S@DQe"%dT`4A!hp*&q%9,b[L,[maI@@0GA&06LYp&Lp!(rV)
+IqSmp3SIPGc&L&eZ4#re4[eCIL(%A%DG+($2R!EIQ"Z[j0r`Gd,kcH6X,!jajV*R
+Vfc'Z,k"i-'38L80D+JM6q@aE,RR"9Y-1TpM`U0lpN!#DJcH6hK)aM&!l@8IFcbb
+hR'3Q)iZmBmYZq+!#+i+9G$m`aSK5E,A*HD@SLZkC1mep9Il-l9REXVG18G1hTfr
+,f*S'6#DJmaQ&aeM&@iNF4Z[&`je%K0T4c06p018&Pfj0i0C%C[D"HG8hq)hUAIU
+LXMkDb!@@SH45hjkHDZdGheD&+Z-B*cV1c!"VGJXYr!fm5VJBC$-$Gi@$RGNkhTh
+A&(dX%AZ!Xpd'IPcBRpN0PKc`Gp'0E'h$988q4B"id'60S[E"hUSmk&E(Mr9HMDr
+HALKBNKX)c0I(c%&r,a#!dBM-hLY4QcZ`&PpqmS*Uc'&H8KFdbm#k,Q$@YC&0V%e
+8G*!!@C[YNLFUc%[p"T6+c60`-2T2Z@0Z1#lr((kr5pP4CmL#hZ%h$'8Ze-Mj!LX
+"M'h`N!!HNIFKZSEl%&flJ(+L3cRF)5FcrVkM)IkXMIlDCEld4MY!m`A1B9#TT8U
+lRijNJQXHN!"D%)ijK2+KbM*#pS3l%9"UXIe1k0l*8E2SS-@KJaDZ4GehXkYiZ55
+aSq"N3+,@+NePBMIk8Ccq!$*@2YFlIeicI1TRJ+%-2J53!,K*[H60TdplRFb[`XC
+!,H5N3rX36Pph39(h6e$A%(bA``9Q#6MRfa!(AM+F4GIhZii8@2V[$UB[-#fm)8j
+HaM0kVj[AV$k+H[19S[J(T"[1HcqMpeh`HZ-I+%hBK+b-1mUjQZE5-qMPEmc0$GS
+qicI3*phG"[*C,Mb%SJcbMJ)@kAcFQA)Y(#p,F588He3i[@#bk)Z#Np)$peE2liQ
+I)NqJa4RXTA-bDfLmF-P,C`%TVQT9$["VP!pjXJE#GZK[j)Nd6IGiVD0@KAY`m2B
+r)kXXJKSG12h35ficECqUZR8(mr#YAcfqqfmAFl3p,#rB&YK%GUH'SbmN[Fq6'l`
+(fUYh6B'DY!XD"+%aV3F(p9TT@B#$$6B)e#R`fh!&ZJ,'9F*6#aQMSNN#aLHBZGa
+rkK8i5'k8YE#9jh*b5kR`r1Z2DRSaYKC(NU&UXDQ6f[A%%-L0qYLMk2kde2YQ+c4
+Zi9hf5@M)'#VKb1mj1Bq116qRIheNEhK+[N%PmN+qfDMeRFPXX!GBEeTiV`Z@Ljh
+BATH#5`YGH+T[)"l-3RK$KiS*)YhS3cfc"1fk@qJ135@M9C3MedG3aBa%&A"ZEPF
+"rFq2C8j8NI3+8'$-,`5QMck#fDAia*T6$NkaaBlAA$6EJAYX@2HNEUj$A!0k%8d
+L$r"RMPP8PGIG*qIbi`2BYp2"%[UZp291*P66)r)0b&V"'*IB8CK,q"qmKYG"YUh
+*&`4Z5+df84P,c"Ti4df[MVeA2PIdSK&+aNhPI,[!Q@rLdSe#!F%eb4Rc35(GNf3
+8Ipp@GiB3XIL3!+CZ-`dA3h3[Y!U%K4c!UiPA8DZT%V1KI3`QC,!MFfmY)9,#S0J
+06L2mPM[J#k$*p[+`b*!!D*&"U!hd)Mrk$TK*%8cL#j%[T&LVqc%Mi24p00GUB4e
+cD)3D6a!EJIi%iN-$B#'"fd4@!V,8eb3LSmP)FJ,VSIaU$U'HMI51Q4b5-rK4Z2"
+PeG(cq[cE&CJ6&Ab-h,1b!Q%C*LUS26KCJGkb0QGhG,Z(5fq$"kME&H81(cQ'#'q
+%@I31L#`#aFAIVAI!G84B#A6ii!dRI"[Cj!M$D`6N"b(H"[B`r,!l%Y`ZHLb"3rM
+Ma%`hMq@[Y-iA8-HmaREa**31`Q#MY&GJYZJ,0iUY%ce9A$K+DT-ZU9X"K3dU[K4
+!3bJ6RMLUe0B+1+"&(M-D9pFbhd2lJf8-YY9*e3'@lNRf$GY2Gr-RfB0!0+(`fB,
+l,i)TL8+I`'*Ea*kDb!%@9MYf2QB)'NZLPhNpq,qihk$#5h934(8*U%q2R*,6GIh
+Y3&40-+"l8ei#YP)HmU8a$ahd+pR!3,Qq$-cRd@aiMd0I&r-URBP)I['[,k@ZQ)Q
+ZD"i,ZP(c2,U4*hZ"Q#i"c`e@,fU162DL&Plj@jq4R*D4Ne"#hFSi-T!!+@KMkiX
+USCkVpVKi9B'$SpJaQQ9XfU"f8f6)Qi+Z`$$6i+f!NlC+c&d0"LXm9!4'ca"l&"1
+EaDURqc#h0l'ANA*-qQj`A#ZCY`1-fB4E@jPdIh3&F9V!5+(Z2qFDZRlSlA(QDZq
+HQ!(C&jF*S1BkddfS5A'"cYH8`iVUKH"hfSbJfYH3!"1hPDkZqD2UJTcc-P'Ib[N
+!TRN)G5lj4ChB+,&M0&2Q1GSirfV(C&Ad`DXUMKlp+"B-BXPqQ3"@KZc3qaV0d)A
++'hp4146L-D(`Uk(ZYXJlPh,c#P"eVli813YC6a,b*IP2D[NIQXM#5e@pThC$5Rp
+1FiR"LJ3Zp#Kp!EF+iKIS@2bJTYB0cN2m&2`b2&9l+Ri#Xq@8H'2mi+#(-8lJC!T
+,e"(hMrRKMar8QD,8F3"M1S6G%f)PLQJd)R&4c93)5H3*fLa8FpV,ML+LP2&p"+Z
+m+(jkGbKqFMRdKaj#('-e!l8(PHdPl!SB!Pf`#m+&q!1NZ03C*1C$C4-TGR5(#IX
+VY0!9QRiDMY'mdAHr$'Bfm+1'bMm6CLplc!E+$qbQqhG3`C(LXYj9[D[N&jQZL2"
+&rcPQ1KMGcAKL0l)-D`T0Q'cdqI1N@-",FKPTbP#(DCKI"R9X6*K0e'3D),k5cM'
+)b(lF[(Xe4K2ajAl*Cd,-`K9fU)Z`hM,dJ)cNINDj'$&EHRZ$6qMeCJYa,1!)3$5
+a6@MfBJE@SHqrL@Tk8H%*r1jG4GdiK)Jq[*lNem2pSILlc&Vdl`r&Ml$6%EV*2V5
+`#HSH([)0*mS6PKk!`V0a1hU"rqVE,-5+2%f&`1q9[`eeI9`$pChi+Bk!YY"-U-,
+J0m`EI6rBdBESe6H#4Vm''Ih#c-XeRb9a,mB*#Md)*0I*U*M1N!#+*j-FXc%S[B+
+c"q%-B&KH*r*J2LlL#2Z52-JH,BLXpK4)CD#ffBaU$P)GL"00PqlH@B3m$mD)Dch
+@Iq$jAZ3`XM9X$r1Q1YJ6,,2!GpbJC,JE1mK2#6#0$G+l(2A6jK2If*iE5ke'G0-
+q(c"+(pV)e%+kA-V[(*9RHYV+,!&`GPAX)mf""IA9IMM%AT!!3BSe,E0CfBX[QFQ
+X09X2PFADbU&i%"V[hPY[%lS-p"-GN`lDD+)SNkPqCN6,bLf+jk8f83DQmeTGI8$
+aYSJ&R(i([pM6TppQE"K)!#ISp,[NSN-amkmrrI0MTIFXUa9'MlF#12KICG5Zl3,
+ehS4RZleZVaZS%1Iq(l+A+4lSA6RhSQXf9[3mDFT4%k()V(L)r`r(+-,T3IEMa@A
+G1@*@p&p5Ve5@iPc56B$h[)(PU13KVhiGFA-8jlTYmZ)m!qr89A2(BpNPLBe3V#M
+dGFr!*Iik933G"Kf2L&HFSEpiZcJGA43()@SR$5qRUfiNi5MEcU(mK+NFi-1NA'I
+E1F30ZFTaqLcPL#9bN!!Tm)RTQ-MCL@bLLDqc[F5hT*fY"DUFjPNimhQ#RC4d'4k
+@@6NaLD`$(BLmNkB!hlM5)[30l`63`1Nb`(X*h@3lJ&E'k,Z'lQ&mPcY$jpmQ&N&
+pImAlpY-Ai#jlk1f%jj6#RjqPfhciE#Q8C4qd[9JGK*-%l0Q1Rrpl+lJVbV&6qE2
+dGT(Yja5(QJcJ-&)6m*S&ppT2rhbmTTDCL3V5Y2bYee4M2TS5ZKI#1f5(@3m3hJF
+P6[bM-TU+dq0caJbi$amcI!(adbILNaFBI*NVA3MmIPIAKT!!ER9FS)j"fAiBqk'
+LafUK'`CpZf0XLkMSKFU%eSmMhr#MY2c#I'0K2[6"*eH#NhPlABM*QlRjK9-B"D3
+[%-fRNVXLVdNU64(hJD)QSXJk5Fi`8AKXrjUYrhBe4GEhIiAm%J3LM2d@&a"Q5IR
+1fQlb8616VLe2l,#M8%blT&B,l%PcJI3p!rB1Q!kXM9F@eGl#AZM+CB2Rd&5+Ec8
+YE8$JSBLi9PH#r$DaIpc`Aq,FMVY''&A!Xri6H*4bfE48S%-[Gd"&$f`8B9kK3Kd
+0CDm&`2"IpL+kPe3+`5[m([9$kFUmdS8l'GeUfI'44Ye*6C@'D(8rABlm9rUD2Ch
+k9G'fP&JH2A1*il%E6Reid5&+@2lSSGQ48@`Jjc#fia82cd+BZYqCfpFQJP!$dYe
+3#-kI[UV2#rQa-TY!$F"TEi@5ThF02!JihS"2#Np)'&j0qD5i5kb&-FL3!#J4*3E
+`@Ufm2D4*C4KfDiT#`1XANpFS-UKdKJ8CdDp`MMXT!MHMG1%[(d8@f+8b-UmJTLC
+e%TEU'F9633lh#&V6$[)iKaHjP9f"QJj"'2f,f!mK8AqR0Jr&b5Lir&'kY02eHK6
+Z!TD@m*pkrJN3Y9iG'CGmf$+SBIC%C9)$G#F62BRe)22ZC'B(-VHeFPmF!5ZqR(!
+!L(bmHRjS'XXFI9mY'1rZX-VpeBc#9FPpdIXkGY*9Y*1q"3dUfHTpDTP@SdbbAF2
+6kYca'MHSFY2Upp0[bEP*)R*D'e'VaJkRm+jKaVZ!PXP@N3b+fb6DRp3%8,k*Y%I
+#T%+G8L`@j)dl!!U+@QhfQSBaAD*VRS&fE9"ZEmAl'APGdkX-%"UJX@0J!IN@dXS
+Ta"lRGUL%1`qPB%C0U3cij[r)-*!!VJl@QV#LS$hbN@-*(BV'XGMd$a#Vp5m3bff
+Db2X)BTp-a0+pB5*f!f*&c`5B9("X6rNL8"dPXa"G!L*r-*86kMiIJIm8T3a%pXZ
+mQm(A*CFk@MQ8jBJXeHj0US$&`0cYCC3p+Zr$HAHaLiLZUB1X3BHTj'rXBAPKAVf
+!UqJEH6KbKFiUHDq1q93(A'$dNR-Llrl8,,5lqTF6HcaE9jj+KaqHmLa-*M0Y5fE
+bJ@%crf&Q4!+M"*TDJ4TC,6$D+em"X`!UN!$Fphcr5&QLeJDp,YpQa1h@kU)qK9A
+A0Y4&0aC!TeKC`dj-d!(LENB2-bjD6Vh6lf#AkBL)41R*N!"1H*rj5,i@&C%aC#"
+p"0T2&RX*e3*e*lXX5VSHi$eF4IliZ5YbC'Fmm,jNGFCl!M1f%jdK1e(ZeMC&VfA
+NX-lQq`(8FHDrSf9IVRIEZ`04,fP4B"VB05(ZDKGhHcI28Fh&3DT-ih1EPG"&U%U
+8J1@fZedSV2J$*e(F'kAjY$Fi"b1$K![PiKZXQ,"8eH,FKH[!PFZ&BJ9L12@P940
+6H69FDkQT6)11!2+"a@cebr-fqT8Pqj@f1a%&pYE9SeV82FNZHTjbpCIZ4"ITEB-
+Z0l4Dh@YC5Jhf8ArbLU$2$A`0%ZBHZr!!%"K1*ll"q*!!Gb$1mUiFkbJG!8cYe80
+MhR1ZhUVe`*RU!HSY-f([MqlS0$![VMUYlHM@clZ4c)JHAl8I[Fbme)%l5F&8CXH
++S"UjhC1bBl)RlP#U&MK#Z3TZ@YUm00ZBa[PZU0GScGq3!!VADpckDHAX#QfDpLS
+Hf)Kcb@X@aBl@HCG@*j&3ADFE&ma9QDKc9QSI#AkRjV!AlNM+DQ4HeaZT[*MEHB1
+Ij19PbVc9b"[8mMk3!-S,$c(c([dNVe2,Lp[bUVHd[$HPmN*lFTik1D28(jTAVme
+S[9*6)0R91YU&hXiMAUq(&,hcH!B4lBkT9NYbdep91MBM9q'QBZe1m,EY1Kl!AA)
+-G8!*UJKBc4Rb"14IZ#dY[+N,(R*m#lFCfd2+#,&4%h9NDR8mP+UM#R8m,"h"iJB
+j#-k!Jhh5k)["QCTr9aCbFIi6ZF56jI!T,4Gi6&BZ*aaLANRqV"+jA*aVMjB,Z*5
+Gkb(NSRji)THEFffAZ4`R8lP@B22h)KFFFGAheciMQ8CkASR(8#-#&hI+mj'eICc
+jNpYRRY!Uh*bXd!&%X(3AkJ+r#"9@5L`hGV3A#0l)BAT494krkl-U&CDEU[,+lfK
+98Q2+UK,AGLRTEXf3!$dR+d)Tq`U5S6-DCe)C+ecpLmq16iQ`1dk(Y&cd*f2P`ND
+iJP54%VNZjPb9@Ui(NlQ-3H5#rPREFZeLfdH4Z-2f*6@#%TZTp,'acTE+DDj*9E-
+@eG!CU0bUSZ["2&6V5f5pPl0Q*Y3JCb$Q$SS4R#'PY3ImCUDZ-Qkj`Y-k1($*dHR
+Vk,VMLaUVYVRD#F-LlEkTC!hhK[E@VVCTC#kNaV1q)a`-mYX5qHEM$*!!rc'Q-%%
+cRE4'4IY(BEY5JEaRe(D%[fkAr[!bi"p[TIBfD98)IN4Zeejpj!#2A6"-@m2`dZ,
+G,1[dYXP[UDH*a*!!T2)Q#","33YHU%rdBf8Mb5L+R[j!-!a$*,3m!RN`H82PERD
+4BSJVpGNB94d*G$+jH'8Vpf55rVUiE90SJk&`kZCfhpIjc8e9'MANCP628%&P-0c
+TdamAJD"m"p5)V2FUhf4%%KSh-MIk1MY"L9dRR)@TX5P)M8h"q0J8T%C5h[5S&X$
+Qc,9Eb+b+m3jUa-L[l#M8Lb[!V"8NjU"JFhYR1q6K#kL6H050,4K[ZIh+0KA3j1J
+#1&5X4fCA5T!!NC-AMUBmF&V9!`GBAQ3e&#5@4S%fjJADf"I3%T!!40`akS(VU)#
+YbM4hY)3krD6BUKIBECLB0'kb9qZQ#ceaYVFb-ecTX06h(jK$,rApVh5PG#ZJmZV
++K&F#`51K@!lYESYh#RGjG9DkbmN8RJE'D4#-daPU2V6@pNA[8@G*c6AXB+UZ[8c
+U5I#2f6jbU$HAGMR3dB3k*ejlhUbJk(f-UH0GDA+#%5c1%0U@-$B2l6IPkFe#jK%
+j$6abaFRLT8Y[G*S2%Cq,$N'AQ6F!kl-UkjkKZq,5@JRL`q'X`S(&SeEDHk+eMEY
+LlP-*0F*TB,L#bkZ8@i')i9[9#Dp%@Qf3!"KYm4P@'i6[5-P8-()ZQ8Qk-B@ka[R
+EmaJ3d5`J8eZ8T[P0l#5TB15$f'hD0klh#XYMYR#"R-*FI1@Z"!XM"(9rRe6e"ir
+#3dT18YhhU#k&IqqTQ[!,BBMk29$q$l+qqVqR,b*C#I`jpT5')PX)-K6",3aCqC*
+@paYBCA6I"2ai,U1ja*AKBYLqe#B"5lSFq0mBHM%*QZ@AhrXT#KaB2BB#adK"fFV
+j)()ZrDL5cBLUe#TC+TAP`3FM1aGZa$"TiY4#GJRBCBV9+F`qf8#k"Ybm"F6[IPA
+Hh([ISAMe&MfULQR2Th)KTZ!3BipEY9Z6f"f3!-'LA3P0B6)[Xr8ZUHQidTM8LU6
+'FBE@+r4i0cL9i4&`iZ8PPrA'J8&a5c'h-#5)"dN%PEV8[S&+1VF)SV"[M'Q%lqJ
+H"9DM4iASd4d6(5SmmDX1PDS6(I+61m'X'1N!b@lkXeeb+Q5#-!AIBpH*Bhf+INm
+9@GY6b2ecV[lVJ*jS$8XVDKHLlY0Q&NjcaVZd#EhYKfjAVmkXMCf5c&V"1`F3fCH
+)l0-L"c!pcc$R%eUHXK[a"F8$M5``'RM`M%-fVhf&IH5NAJGF-ChN1Ni1iT9e*,V
+NaqE+2d'BCQ+2b(CB$Dl'Nc5[4ZieE5)d3UbNV"KiD6$&M1PN*D)p0S5AhJV@`Hl
+j05eDUTCSkE#1*T09lj[rf-V9A+#+UF3-YAUa#VeB4MMFf+aF2[15MM8%9e3YX91
+bE[!UU24Me3%('2RN4QZC9))Ce`R0KLjSANSRe)2h("9D5,*PhP"R5R48h[bN`+E
+H%Si2HJT3Eh,qdhHlqZF6HPDRp8`89@058GAHia,E048pRV0PBJIj5PBJ@qaeVTY
+ii9V8"cF*GRe`S6@(m$qk',FhfGa(jPKS&VcJl5@L,VZGI)M&6R*&qaQ[C8A3`I$
+#8D99NHm09hm"i9r&c-YJchi!6(-,f")Rp4RclVi'8EKRLGfLKZ&h88-5fk-,Z,`
+pNe[2"d`ale&pkaND%d$eT[J$V@0d`*&&(Kl8lDFcSmYja(raBip"5HPbZJb6RFh
+[NChPR2*Dj$jlUMR-1NKmCqri!R@qNh$bJIe3hlrr3A!U`"#aD[3#`EpdL1mDM9Q
+VUI4#SrC58[iDReE[[BM6r"p1UNIV[ii'KRmTDANVph@Spq6l9*[R0RUPTS[DGJG
+1SJ[!@(81-!KD46STd$#(aPN2[)SFqDP1J49iD41U@6Sf3A-DVQNHqH2*ECKf&[b
+Glr'9UrIVkei`%NE[Q0I*md3@Y#5r"ql&Bq"([*!!V0@cbp8rMr$[NV&DmplrUeU
+KBahlhK@i"`cS3UGY598"Ij+c56eXV)U(rUU+KBNUS%'GTQ9N&@R(8!AZhcB0"p9
+90(pD"G@9G49N*HMHra'l(e3-HA!Kk+c2UJf+`lm'rKGdI%@&V'b[TN)'Ci"k#ak
+QAeA(r`4[S9,PGQ$4V`+GKUpBTDFZEX1JIHcHQUTY'QVEJGSUYGU@D,@KYqGVHhj
+8U`eZ8@*(@'-Yd6&Z%ef9qhZSUPEI9pCeJ9pHBlbMPXXkA($&`HZ%M+MB(VUD-"P
+2dPdSZTIJ!)cUAN)("cl6+U$Uc[d!Ei!fSN#YHIX0H%U*C1A&rTLf+YATLl#AmRD
+"Br&YdJiIBfV-3[r(VJ%A%*!!@EX5ed#5-H9k&C(N2fL%3Xhjl#$0H8[HH!bf!G&
+mD-QFf`"18[pp*JIpfBfV@+Ra1crJMA!ald6iC'%hjd*p&"T9[12SH8e[LQG*TGQ
+H1fF+rh$0G[9rLI#2dHhlDfpmZS@FN!$0YAX3eRV3`Md)TfU&5GPNVG4+d,8kRd@
+YG'-)9llfI@mBYIY2Ah@lj*`l%fi0T"p`'-b,#+q2bG[LIhL3!(N8[F4K1RIpbb[
+cfCM-6XB%P+Vp6P)U6Nb)TG6e6,HXl(pdM[A2!GqK0MrLN!#V2jmiRZ$JhQ9B+,A
+di6kZjhH5(J*L&k*+)Ib&8NG18!Bk2af14BPY-dLH0,4R2[#YCL)#cUe3Rq6Z0Z1
+Zii@Ec&$lZ2pp[[Yr6hC5H1,N`!K+Bf1YJKQ*HJ9a-6K-3!HQ&DI,ZPL*p1#Vk06
+A8#2F%0Qe+#a9mLI3(cdeC$2LGP*UAG22JcF(TR$XT@4r4U[L('b2rEEfHK)-eGq
+RE$e2*r#",,`-NRC*DaCHKZJ&UM[`3k(QlcrFVC*2(A,pZ`3l9%5-iT!!jT2V@85
+4#mbS'e0F$lKJb#6R&aDa)maQNifVIX(lb%kiS9[*C)'`[`@QGPH)U3Rk`$J64&-
+0-XKmQUBD**JJNpL1QJA1*aJKrm)&!Im+IYiqfr@I1#'@ER@#'j,JJCcPIU4i)@-
+-Ml2mMM%f5)TM3)p!e#UbA#kTl@MjF-HY%pAi1EAXc%NLeGcq-95)SG%R20f,lT*
+BqSahS!a`!AjRMQ9kYRl-093Ja6@K+YVjqP&YidI98V[!UTB+RkbfAGIUf`rp2IA
+bcGP*[$T9pD3a9JZFG8)c+UA&pX6&Xr!qh1mS[$MN+"c'Eiam8AVM3"a4+j3NS1p
+5F*%dik![0F2#E2J"BX0$V@"M`,`-m50R+`UKaY&qF5JD6m@l%3pej[J&1"DP+PX
+"R)k55G8q$2@"QGj8*LFbc8$IqpPVm"!T9455$PG[dNP*3S--6()S+EL5LN#B'LI
+kIe%Hk3,"i38FM5LPEHMfNFp[+rNqXaph%26#PC+XT9NfJMX#[mQEC16mf%dbFKj
+X#1SFICedf(!pJDmhI4Xaj-%h$#[,KS&Tf2Re(F+FDS*9,FUV54lT,`4L65ZD,jk
+%pN3B2MV!%$1(BcAk#afdS,SCX@TSXhPBQqfJlZ8NVaNjChqDNbTrdk$rTV3cQ,Y
+c+[bA(YJq6Dhk0"rRlm2pX@V5,-IX&Pim&c1LR`(+!&f5Cf-108Ylfa9cS*S3US'
+6U4'T0&4FJScLqfXQDjEH-q(l5qjTeP)ZF[MQZhClVU`(0a9lNieUJ(j`CXkcD#@
+[F%0kUY9Cr(U"pUTUbTD[SpU%EY"')1cJ@(B&f3#d0VlF01*!krYIC%D)TGQFdMq
+SJ,E$)r"6$0f[+(5r4!Q"#P(3ir&m"hT!CG"pHY",qk-iSkHDrHNiSFp-A`636EE
+IKeRjkF0Jlb59G8hX+I%KGSkp3r@%6M(2aV2p+06$S0EBXdeckl*A9kVLl9id$@b
+KFPBKJUFXk$K#Q3frIE&[3r80,e!MrE+m2+M!K5a3C*FXF#mL@F![!F-%+Q2QDHL
+B4G(c([N'dBY3Y!rA!cAMh49Prb`HfdjBNcN8H`$Z)L,KXr#YJ@miM,!Uh6UQm$"
+p,f%CKTPFGX%r"cV9m`eGD`UH2AA8Z'ZbZdR,LpkfY)FCHN6kMi9Ak6XUTH`L$Tk
+DH+Y5CfVF-3QGUGaX#j!!jbTka6JN0jYj+NDA%QG!H!D@Ia*GK`H+JVh4Hj*+($r
+BMG`l50F6EP%IA'N,,eP&,rH4*dZ(NGfA9r,AXqc(I$Gr2F%4KqR0Z3$j@c!RerR
+cS@A8Yb$6dH5!$`eHDfGld0+'1f@lTL'DVQQ)TL-,82N22B,X8(X`liV-5'U)1U&
+b4'CApU#Q)5T+%Y*Rq1'iY!IqVZNJKUS(lh3EL!`Mp6k)**5XU%S)VNFhN!"a9U)
+dVD#Jr@"b,NlFcDaJ2HhX`E4AD0V0-pSHHRqkqU2%aV'UU%!9PH`d&5k#G4pk1D[
+5+K6p!M$8qT1+$KH@NH+)e@RKlMb,2[I$)bFaSAqXrIX(`22pZM@$(D,4(4UCJ&R
+U,&E`H820SHcbiQ1q#&k8lc&LC3ETfm*jCcFd9mh$[9I66@L52Mmd'de`S-ehD(+
+lLFQdR&jh`GdkG+ck4Yp*qAFCQhfi38p@a#kSLSJYM&9%PbB('9qf0H1N`e$#(I-
+!-kB60de+kSEe1pqfd40H,LCME9!(X3jPC91$[Fj&)Uk9M3e9p"fZmpSEkLVam!P
+A9E@lSFj9hEM+5jpK$-QLUXBe#&hFL0Kk6l8#%1eD&q@pcYfiUUND,e$QTDIKR0R
+Bmp39Yh5(mjUJNZl`cm&G$Zd2DMbT@Id'A0pDLK[ID)#[""hh05L0dh%9mYA"BaH
+dZX3V9K-TqeL[Q#(JGe&iSNSJ*Pqh%@DT%*1T4c'EJd"BE5p2,6@+4h1G*C@S0p3
+"PpTMGI`[K0eEG6`d@BHe,e39qZfkFA9"U(TVE@hVjEbZrL#bfPiL61L`C2ASYkh
+5e-cmL(JFK[R%Xa'fPd#k%CM%@R5CB'2#AaYmC8r(V)A!hFSLj8Z`-h[c9qC%J9F
+b5MX)62L28qUGa)EX5QBN+UQQR*b3!(#$C,+DZ@U*M"CI3X"jk[[cJU4CrG6c`Vb
+'2DFcTqMe@pUk4blj,419DPb&@4U6Pl95qkN3#NhH5mT2dr3B@rI*4`JDY[C1hEQ
+jVI#8-jCIFRQ3!#ZNENl8k0"8Yl,d60"iNNc!H3YP&ULX1q(r8YjH4%Cij*cG*CC
+N[#+chEhk`!%M%'$bqFXV9lNpY2&lRS$Q2(hh@"%E+D*S4R4P5Te*("ZUL9-AIr`
+8G06Ub-[`l+CP'`6'(&qj)QFCTPCd-@d&9-jk)LH3!$"S%`ZDSP`33@Z9$&iSVY,
+6j68diEr-fr1(bCbF6X@caS3'ppH'mj-9b!jRRA"Z4mpTp)&3hrr#(Th&R(#jU$C
+UA,[1iP#i5GA3maEm@cLPfPZL8bUAqDk@dhmTjjmJTfXL*fBTEkbrm#`mEm`$f5a
+mcA+6h[6@fi8#jQAjJcERbiFHC`mq4UK%UeJF"H0l2p3J3rJPLXKhkYK3D3-cKGV
+GBTT+VilB`BEhFXGR8qI,eEih*hXbAY&1lZ5ISTUdbHlrrCbq0M'RMNc#9YE-'Cq
+8!0@Sr2M4kI`6`'4#[)1XRCqU0G&KA#NK68Xb8k[DJkV9,0k%MRN[G8a&9ZQe32Q
+I[LNc2ZZT9CfD6R3f0e@Mc)6U19P0ZV)C[qT)E#ikN[lj$*fYaKcm9694fNIqX@V
+%%D0[XKlSPCG,GcRU5dfQkLRillRl`CTI8i"jci+c39AC8kKADA4k*MYZDH@C5i!
+S3IZ`p4FG4fmmY([%mdJ'h%mPDeIE@qhI41FFU3Y$8"h1Z$LiNPIYj`U+aGBdLXV
+8q'bUbeMPcJ$bBZdN+jGk9ERJK8VAK8cDp`SG5&`LDe,AFJV60d4bEq!Zbh"fXc[
+Lqk"-Q"%#+c@T6&J*Rk@c4"'8(#Y&JeJ0%kZV4CI3h,l%V0#!9brYUNYlf33FA,f
+F9*GV-eDS@ZA,L!T8AEhFUj+')&qH"SG(c@Xar)UTM-mN*LT#LZCZQkNKN!!$,$!
+(b")F@E60a@qqAP@m+&'9NDJUAkpUa+YA06+B(6)e3PRH8J`1b4[jHmE*UjcH"QC
+$i5%abCh6D%Zd%Hm$-d9e!IY&Aai4afHh!cC(KTK'HK&3c,6dA(QAC10hQZc!J([
+LiNce),`K9AqLkQ6pL@[rc%ZrkJ%3!rS%mj'2LT3f+A42Aje!#@,NF*,HUNEe-qf
+1%-@1$qb*Rbf(IdViYJ4RSI9fLSS,LXSRla4T`2U'SqX@@1#Tf6"2!E2Z'&MAak"
+eVP`XRC6F[[5%'T9jNVb,5c4F58X'U+-V4#LG&HRK`rX)-1#DdSc8A'+h@hU4JN0
+8PjLB,l''q",1TCri*&8-8XqBlJJh[E9aiIM,-(bJe`8d3p8&VJ"`#iq1KLJQSl%
+2rYih#"Z3!-r+`&,XT$X*VcEZiUplm98-pR`0iJ*VE!%AhZNXLTiPK-PZ`Rq6Bk[
+1)$IK14IUqX#0q5SqYfr5'HUa8hKY`'XD[al'DbAG%I*+"e1Pc+IQ+l"BacbGKa[
+EKpFF[+Ec+jM0ML`i$K'A'm4FcPlV*EM@Yq&D,mAff'jh1l)G[b'DfC'mmEUmNpU
+d66Zd9hkIcTZiXNqAb8[*UV+Y,D&@Ue6ik&)9lk,-Ki[YCSUTmZ"&+E6SZdU3!)l
+%K561(mFhRaA(DDV[IqEC#K22m5&p`j*Rr(YZkN1VVJB$"G9rqeJ54jLHi)q)QeA
+qbPr![bR%MLPZppfKL#pZhE*qXpTb@kY[Bb$F[Z&VdQ@)c68C8jI9R)V,eq#f%Np
+[m62J,faM0`CEQ-Z`NlrJ4aX4pr(EXq"@`)1afjEf%h`VhN-PIfhPq'Tqiik"ecj
+(K'0@Fm`+rVU*[jCUm6ZjXU2mp4aLPJG#q&U"5&ajq'V($U#,)#+RrCUD"6F)R@Y
+Va1J2i(lEF@p5jEB9lK#89[fTHN5Ze9m(+!qe+R6H%l2`hMbQHrY-+*,@eqc24dB
+iA4$NNYj[V*GTA"-l!Y3cU9BESPHJd8ij6lJ*0%riIjhhj@C4#[ba6mpJaeqQ-cf
+rkd6mbkQZ`,qqm4)kd-mpUm,V8iN1H',[D&a!H+2hh)9Bk'+V6"&bNA'2R[I-CT8
+eGP90cqDSK&Z&NRUeC1KT2@A*d0qQ`RHlhB0RF3ZcLKeU58+,E#(e8$bZj4'(f*Y
+CrhL!Y2(TQ9*hKkKDB$[l-ahcF3F@3PUNSch8C@U(%"Nppd#jhm)feD8*9*QqLI[
+c'dJA8IXR1!'[5m*H5Nar$&FdiZKcD23#R3RH[h*U$Ym9AF+*ha)i[UGcIUG+fmm
+(Me`0IViciYdUhb*I2G3)2`8*(q'KVfS@X$qPHF!f%Tc-mM8Zf)X5bp@)i2F06&)
+9ZpAL`e"HPKEHp0A#Q`ZpYr!VR96*3c8RPaF5@[9,XjkrQTQXiY6DU[H+SQ9rEG+
+kq%Ii+)&6kjP2cLRD55kYmC+V[D6F@i1T,a'&qIE2[9c$ZE0EDBVp#C`lZr0h9YK
+%*Nd#4+AGL2!K1K$l%&%KTERa3jVMbRm"4YLG@Ae!A$j,p9d'GEVFPH$kqH(c2Pq
+a)F1PbNCXL+eQLfY6r4EMI4[b`FMBqR30922+"Ia%rm("J*Rk8Q`TR[T%$fTcbbi
+JfT([902Cal5"ep"4QmIQ@%Z-LT,p`#,Jf2S+1,U$ZkmmR1lT!8Fpd)!1"6&`DbH
+9&LqQRBbhM2cEjq,0#3V@G!Ij!305MebK3#DLh)Mbi0Z&MAfE-%NRe"eCdZ(e9*[
+)i&U#QVpVc`bUb5Hp@LqAVqR5KhAmUr!IlHj6eX$CG+0pX9eNXH[UR((AeAldlG#
+-0Q#LNaC[-CV&p2SYDHFh9U(b),*$Sq(AN6hFZ'K,ePU4&mPm5[A2AG3QPSLC6fA
+iCehE*Qi@eQZh9E[VEK#c)`C%Hq$@-eY-ac4f+AAj3%!UpTqmfr8QHGb"LEc3baq
+LVL+4rB-24FkJh@Pcf2#DH3"4qqmXaKac+m"VYA[YrH5eH[KpqiGLVYAXD#S4*qU
+@'0b1TFDIhT!!hrMB$qBf3J%rFmP22&Aq)DAHFE2(i4qbrX$K!1YMXZ'!p5kiUXC
+mJaAir6-$U#&Xc4XFJ),YKBGHALVffS,'TBDM0kLQ*FSh@cb9YerSX3I-'l-2fBi
+k&q-+lKK5MBF'&KX`pG1rP&PF4mi8A9mNMpB6ChM*4Q9l8&Q1FT2ek["5)*(aN!#
+ej1T`)GA6-FpMcep*RGYZIpLf-Hr3bqB"MmfXHH*`C43hLdaFmCpeQ08cq4BVlqJ
+QfmC-C*bbcaBd+AEA)*c8qL[5(2DF[+@'Ya`j2jKEGrJ(K`im$'IH&ea,r@NajVa
+0Hf1HC5jhBmp!K`%kGILZY'0q1$YCQ+(3lf@Z4Y@YTL`lZ1Z,F-'Z!858M5kiD$i
+Q!R$%rAIj(C2qU%FcRq@rfYkjEAr98rrDArA%%@kmrl'6lNY9r(A9iFmQCk)-ppp
+@[BY1Sk1T+EMXEbSH6Xb4F,(e$!f2CbriIrZ9F@RUIlA**MK`&rk2@q6b[jf![kf
+Jm'mGLrr+iIJ%!Kl&G6hCU#FV93ri,ESH-&jd23'aMUYU39A&Rr3R-e82r4EQAkS
+mN!$NljKRH'lS#&AfM[Bk0*abY8Y2,q,U#YANM2NjaeY3Hi0U"AXMAmX5[@qKl*L
+q&IMQ*PZ&M$iYBc[kXZ*5AkBR1TMe9cI"b[p`%f3L6j!!*pF[[+P+Pb,cUNqQ*$9
+eCkHqpHqh4()DcPEmkEqY3(Hedk$jBErY2r6@bXEjqYYXClYjmGpFNH))PPkTSA9
+L&)$r#iF0)FC)ir@f$8[J+pAR[,-#Q2h3)DKHh#FC(UFc5kikAZHappP$CZR,kp8
+eKZ[0"Q*Y((i[B()rT(j2QG&cEcN-RJ&KQ&&-6KJFV+F!MFC"2a`d!,6#ecIMFAK
+eN!"SaG9#G-deYA&dSGBF-,SI`MB+MMR4XPLLC,k!53#A@cA(VrM)0hSYHJP%r5"
+d6DQEB[69XN[@BSHGVS&-Dd68fh9rlR$9ZerMRFa0m8lFlPVe!1NA##pL0V#)`MJ
+FbbCG[@rlQ+h5HQZ(B@rY,I"P$CA`bPc+@,NKEjqHFG95il%EULUR@+db)rLaE3X
+F$ZT*&[A%cS@HP'UjjLCcd3FJ[+&Vja&`1EjClR!B5jBr9lb![hN,RCd)dDc"G*P
+[!"'Q-U"feXkBL)03XGSlek'$U#rTUrfRG4"C(UrMc*!!V)2-NE%k*LT`AhpkpH8
+2h0HI[M$T[[ldX8RhpDF2Ael!IIeE`BrGejrarhIhpH)NjlclqY1[Ac2KS9l2Ab+
+cbJIhBiQmF!p$,BVKTSAirYqmfkZkZ`4mHN'*ZB[91,4$Xe0q18haTV%H12*R3+9
+QV8pTle4DG&N[H$@$fS9f+)JU#Z(JpQB&V%$&*DE$&IDN*kTN%k1$HbGa$k@lfd-
+Y`9B`#Y5PikATQhCTqQD3!,rI'CME,P*"9[j"TF[a(E-YY+1+pd[A3[J@[4A96pG
+Fh#TGT$B,06X2(0mEaX,5r3,m&5GaeR3@*l6Y"Vh)iN-X9#DKHTH)I3faCBM03J@
+-*kIX",l"fAI!hjfGjb[)%p*U##'@L[j@,(3J6j&lAXC#Ie)FU9La5a(lHV)q(qT
+hl-5h4e1pXr,!Vm)T1(#fmrJ4hi,[),kA3Q1LA$Vh9YNFF+T`kLj0%6)A'B1NT2d
+$QpG@fSemHIVV8[QHJr`,ar2$qFBTeRp'rYR)(p)c0R"'Jlb@kJTda!&Y#U'Q+P-
+)Cc*f09"f(+$q@ld$kG9i"YrN%6fFbN2HjMlN#G'd)YkREX0A30f-rSK1ZCA*1)a
+-1lAq6%-fZ0GR2p#*@[NLRDe!hV,a[2FKlfSYl`cNK8iKXdN2GBpe4jf1+E6&Lh-
+hN!#A1A6QcFhiKSVlQb(m2P'mA*4,2h4[2['V1j[l,Y4p6EA)6bQH6+1lf,ML#k!
+EUFe(QERda'X'VpAE@Qp'P&Gl#ph@(KK2Cf5244M6m5UQ4P9D)b[jEU4hYV@3!%[
+KG,CN6GNjT@ZRe1M5)X'@pK"dbC3hb(0BGDAC8C[`'Jj0%IR9hTrIj,XB2S[HGXT
+04pf@Xqc6l")SiEH"&`[CK,h6kh%Yi5UNKePi)$(JpD2[#AE![BYGSX5B"eS-RYe
+Dh(dEQ!9k$li+`!+Y3T3I,0"D[1HVj&54[8)p,5&kbh9'$0eAQ,Y912@A9bHr0QU
+[ERkPGcfqq[KeR[BDiPG40X&VQ&rKTP&H&r+Vh$93a,N*(RcLe%2P"V5fP[88MEL
+4r!8UCj1mF5TCTDD!*'S+T$a038+FTN"6TbQ3!1)d"ESd6B'8TLR3K'P%F3rS96U
+la4A%&+iSEQ5r(SB"ZSqiXY)e4e&",EU8rA[J)X9%'qc6d)YVZdpNAI*T#1pNXRr
+T[NeVpIf`68if,hmefCf'[k[Jk93&XcqU`2Ph&FM9U5VSrH#M#Par9`'mAYJ9l2b
+S!R#CrlS#FEpR93"dG,b#Y,qVB&1UJKNI9H$jZ`USZD3Vq-Yh*bYS`N4M(rNRr4m
+fBpGiUlGdq8+YK9-V`k&@AkM69jMKiIeIN!!*Ta(YX$S,XjHI31KDqHDYki*afeX
+,TcM#`GE#G#KPIMC5++BdbDY!r$mDfq&ZK5TRm60JAZi[XhKUkmNpJVJ-E2ZJ[XD
+IH3hFCZ-f*VEL!qS&rBEk68,8[Tl8eLLp,mQ&V%A[eT!!iUcLF`E!RbH((QT@i2,
+pF!8jc)!#'eh6Ml&TcYiRYU0Al'+q&FfR0d`2G)l&@B+HS$+iK90Sa[b(5GhRBP`
+9h1F&6YI3NK,J2RT2qh42&U*)4$rJ@YX[@jh(maB4MXJ8AH1X"@Ur%T19M,'Q-'H
+YY*Ll6L($Z,GYK'PX1Z1&aLPFp0i#%Fp`9eKChq%M`lJk&G%RH%,dkZldr2##f-`
+BDkh$+pf%AHlKfiRH[U2`,S5T+Yr2VV6JJP"04'1YG!$HI@qCCEmhE#b&IMD`eT!
+!rb"AN!#r[%bXq`j3q1FSpPrM5MR[@%fFb&(YUc)J2G)+bX6C,)mGCcmq9,keBTE
+&MVZ4SH93bZ8#03[CaF`#F!qS[D0GF4E%MV-Li-2`%ZE!AQ"-3q`i&"ES-mZAm'R
+TFB)I@Q@E4@k8UrfhXYZ`kHae%mL-D&24kjK46(TU!q3*hRbe$)kES'G5pe*0S!L
+H(D"4T[4mU!`SGITLak(%0S!VhdXH6R9(CX@1epH%@ah`*L@1Dq(kp[)QH)h$c&-
+[$VidbeI8mXc"D8hm20AkNIU*L8-26V-U(C3rC5jBee*-K@KJ3[[Y"DiX2k'SKLP
+)+ZF+[`%U*e4er")jSU-H)jdpdFmF*Kal&*X2bPi@lmMbM-2l1IiU[+mP&8(4Pd(
+%"e+p'F3fK,IT+`pJFYhSj6"a91!$cj61X&$jRMYrq2)2U@TiR12X`p'3!)k&p`S
+U4%,VUeXkje--%pZa+eKE,T[0PQ5aL&TBFdFCI#6iVER3F5KI"ZkX0E&V5pKI!Yb
+G)E)%N4k*!UUYSIDYq#B!rl*Y,Plm[([pkKcL)KKCkQamEm4h&Vl$q!lJf[#Vk6,
+DfVa!-V"&cbYA@UiV01p!r2B,TS&Y+Vp8k-1Y8&UZB4TJek3`$6Jp%Vq+U!k+b`V
+AZ"VHb&+iKUfK6AG(#c&ammFGblc'+S63AL25""f!ZR!k[%R8M3jl*&)#j6EJU0`
+4f+V3HG[B9`#[m%3@!S`a+'cK,Xi3iLf5C+qrifZp22VrqeShMb3FipU6"*l3%9`
+ppd65jA`NI1NAPf-@3AA3eaI8f%ZH+VF`Vk1k*-2jmMH'4CV6AQpRI"rZGq$IE$Q
+Q*$ITH&-fMUXMmd(EF6[eD0%CXj'mF3TfRmAhCGDBBpaThrhZ'QHGSf&9VEZkmLD
+lZlVU4R[Y6G80MJBlZJGGAqA,IV4rPSETAA6EU"d!T@$jeATj*FZe(@$VjHNGJ0P
+(6EM!d'mJXPIar#IB%GEmmp)XZm!DkcX61T5)+6fX)2&B$I1'IPR$dkL"HZ@*#VD
+4,lla#TlpC39V@I-q98'$BLN9DTBM3dh(Vp0"U[*"BMM-fh&pY6"HAb9-F1,2Zh$
+8!9T%iS2NS#8U*5BJ%d5d6hie-PK-@`F602)*-KK*)B0A$[-'YC@5i4`cJYeL4N`
+T0k,`adQ9i1,93!CAXaBkA6f&@10P1NrCFjMP,VR6NDH3!"(%abj9UV6Ul8VY1J*
+84`cqa9UK94h9r%+GIP#&XpY8T9&#X"ZicQ@bcU*A85FF5Bj@@I#V+U0!m+'KRUL
+b!*1@NpKRB+)i#Je+,LQT8m@mM3(E-'Xh%"d30i+@[Z'GVI!P2AIi06$(2MlbQQ1
++)`-[JC%6d"mp"6m[Kr#EG)8qFK6[rA!1F`LrKk2Gj%JpHK$+-[(KlmrI4PIF5$p
+H(4Grha'mZ"GkfSrD6eem#[0kK,cSidZ8PZ3EA[4(SSJm*,hSQqrUA[6eLeZkd*H
+l*8KU((4j,lF,(H*[6ICNU'M5PckRUL6K5jq[CH5cL(N&Ve&jhcUIFTBr[+*Tp*e
+Yj#cr1%89Tdmibdp,1D*rkb9NH9k[fFTNqH%[JFk"jBFIHCr(I11#5lU)9h(`hP&
+8m)Q,H"9p*k,p-VV02G'2AlL(GmfQqF0h&[(5jF92XbS[Sl@kF9%@N[m*(kEe$mP
+K&"ff4`qbbVpL5qKFp(F62BMIEf"2(D0IA#lLK&kjhaH96,MBYfZ$rdjXdC2Q+CU
+qj*+FM)3VR&VGTihFF19d3c(Ek@(D,h"KF`KZfjA[GRTaKl+dMM%6-9(fdQiB5bl
+9@jDSGhkUhX,aHX-`5IKHRGh%C$P-RRK-dC'felD1VXk&i!3@M1UF3&'`FVhb#GF
+X4mi*('pXi!SFF*C$CkAhdHbJ3qdARm)[84#p5b*RT1rqN5I*Glr,PB`mY4CjPr!
+ZI43[G&L'2UZU5U$FP5P@f%HKiQf#ke##Uk-YehjUq,A+8dPd&eQcY6ikpYVmdfA
+Z#fh$h`GI*JUNk46P(1QIb'NF(GXhm,P$TcD[DmjrF*N8mrecPL8)CY'pT)Q69h8
+0d$'*D"mj"MmTq"*'Rfm!2PDjb4P"GS0XLa9dMq21'+Z`'"9+6e5&YHJJX%Yl$k(
+IG-p&2fpfa18(f-A2#ELBKAZVa"30j+MQb4iheV4RlSHq-&cXCf2A&3arhcp29XI
+1)brF2C6YZVTjq2YDG"DQF"+Q*Q$'DdehPBeQL226LS[#X8ef@KcQ`bQTH5`+CaA
+Q-5!b9D1Rm&8lHKT1C+T(r``Adh&fZRmLZUYLZF&"fY0JHpA#Srp*Dq(``3e1b3b
+D-lHL,"-pQ!-h&h0ZaKXZ[MRJ3-ja&5mh%&B+YY!FakrB3Uecd)h*``2Q$0U%Q9-
+dPi5cdS-LCq5-1K[4k4p&Ha$Y(cR$0j'MVqN@QPV4BH80*+TUm2'bS("i3*m5p2f
+BR!LLV$-aK6rDJ9iHa5ipYTDB8mMeZLe5dPF9cYP5SNk(frqMNA8p`H%"61SaZ)#
+BKJS'VDE"i-MC#K(*H[N8A&h`ZX319KVPq1U6lYia2G$U6MJq"iScA3MGDriNZR4
+YTrH@KiCh[0c[JDId2AQkRPL`#MR&Y81M,p`"IbG[ql!kkq$qABIfdh@(pLKi*5G
+-"Y2lli1k9r[KEUPZ4mpGXmi8*AhAdkhp@RR2[lP1pr%G0RG%"ZpFD"YjADNPpr9
+Z"HlV#l'6Zp+mH''@I(24aGr(KD+ph-rD[@$-bcdcd-ZpeZ"kdkJl1')ecLfSJHr
+jUR%VSH3G``Ipm&CM-51M"q(ATTSZClJ*hN[mYUA!Xk-(L9AKbaiq50XlqX0a(rM
+%Ym8(I[3JEEI5eba&`cq%%j!!*B862[$"Gidm)6hIpfRDYRhJl-#4e(SirKE2pkA
+h58rI)dq4Tqq4+(Zqj`BYe$ESXpLJ-NX112Ulj*N##hZYlaMq[NL((rVM8%1!BhX
+Mbhk+%0b4IRhrAaLkq2Z'l2R9m,6V)9rdk-5$k0FH[%SIqYpQl%Adip#4!kKh#,m
+R5EFFk#hG#MM`IP4cTB+1`ep4i3MjYB%ZQ')l)%G9l2LmCLJV$T%M[1J!r!B0Z$%
+pa2jLCmK0,I4PHq"4S@0iJ#qN1VkebbX6NeIdZZl&4AJ0df1Vm#eq%DAU,V%2e6i
+Z*j-Z@AUm'LGP1KJPQZY!PplBk93CBfl-CH`eG2LJ'CQJq$h,@R4aVh0!m5!Vr$C
+HA![Y-hL5ZrJ'i#JCBclhf@mpTDXL,RJcq4CV,m+[423eG#)2VNkkiBSl5!c*k'[
+D(,f!UGJrjY2HB5@RpM!"D"QQPcmBRLpH$*[b9e9D&bh#ip9`3BmhIXXlhaM22"-
+*r)N[qR'[pRX@@d[)22ke5dSVV5@P5ka9bkTJb2lDDPLVAlaN-AeAPjBJLVqPT8X
+jVU4QX@i!r`TlUAeC5BfeFM&UNaTJ%Gr18lb8DN2q+q(P[S30k#pD9PQpL'ZH@lV
+dHVM#Pec9TDLMG+R9DPpLAh,pdKSVR1-RiNSVUfS@SAfPeEpHM9UUX5p3rp`P5kU
+VV1*p4-f6A@+eL,+k9P,&[kLFFA#4VkUf+LZ4lqLB6!#k+YpP5kSGGRTrTeT9+bD
+MV2TkT2j*cGI+QY4dcEArqZ)PeUAA@jI+lbZVPeUAMRAi#YRedL9M%i-h6-b99P)
+m%#eIiDZ!kd1[`EaSmMb5j`m2P3[VRcG-$m",L'-kDqk#+B*pR%HX)GZ$UPELY63
+QY+p,+2BV,b,`'%#RGY!Z&'Ie(RijS2YmcQYb3XX9H`q1(h1*63hIcA'iIB%$Cl#
+D`0@l!kVfl6K,JEJJMkLS`Nd[e5hK9C!!,SA&'rl[8$llpAlC2khp5Sr1l0S+kTU
+iPEICCBSVmc22jaGh6AJq[lMe(cbI#kFZJ)Y$,MVc[(6311UA&HaqA&[E+HELjY(
+cc+J)-U-LU+Ye[1Y*$M`+m)q)pF-*!hPKi[Va)MJ(0-q6MUR#)d6pSCYZ)F8DJfF
+(-[Z%0@DjVcGfJY8A*aC0R$+Bi,YB@FTLakm*MH+i)JX$9b0qa8RkAG**ZRN3EqZ
+PjeL61@p**)Y1"-LCK2X8br&!'*jViG`4V#cFBiSTF'L1aBfZY)JiU8K,j%8PpBq
+(XqL0deqB#m@%S6(H,Y"iqP"2H6`AP3CX$kSLLq*#cp8dPF)kV"[h`%jq1,X96(K
+JKm2YP*2fQBFrpX$1UQhrkr3)*plVP4*U`Rd`HU(p,CUYl,Y$HDQ%Bc"U)Pc5)6H
+PmL+"ZZ()'S`$I5A(VF4)8&-bdqfSR31ANi,84!GVS4*RKQG"ep$XU@A(&K*(GaG
+6pSXIJH@PG$C&B3,IU#44&c&0U3ZGR3'[&'4Xc(aPc1N)qcUjSEf6e#1eUBIF+bk
+pjm+M0cf2Z$,4FmiAF-U`&mUdm0p0I+NbJpL'5@DLhM$6,H$kikU0`dqfMUS$Xp"
+bJMm3IB%F$E9QjD4,c,[Y46![U#@I92UR2eYpRfJq(I938qa$LmP@)6c%L6r1QZG
+D,rr%cEb9"L3hMeHle!fR3Ue`FmY)V4MD4jF$f(A`eLdZLd04H"k+RfC@9eEXH$,
+DmN)0AL&M@qLL8-b[DmM0p##8NT'(f)6`"q'j9f%6+3a"9Chb-Smq3qP&p)58pM5
+qDpVL4k+r6EK",R!$rN),1UVVh#ZA+,b(2Rp+Q-[&[mAA#pkJU6aA,85'ZTIaAR*
+Gr*e$YVfe3E-H8B')`cBekbAiNepM+JFc80KGc!80q9GeMpX"kjhX9KV13Z5b`S6
+TYrXT$RjX*3EIpfZGfKIplB46%kTXTcVE64[6iRGK*Tk,2USle4EI(YL%8'N94pc
+U5raUpj0IE83HMT+VBEM@9PR'A@eE@IC&(ed)MhMLC&[mZCP`3%9r[[MD&50h$Y&
+jd!5,$rGj')[e35XQLr4fUX3FQZPSh`CKBNjFS!6AkHi0SZ%@cEqp4'1fKF-4k-i
+JV,h9e*dHJ)FAA@XPUA'S5BFE2AVD"i0@2'Q`cmNBjHh@BRPLRSl`CN30X9&bq8Z
+HTqA&'09QGb`(,k)bEDR5Qr!$EF6K!eI9(AZ0TqPh)mZ"@Lmb,$AhVKkJ(0"b)92
+-FRbKR1e$19IaP238+MDaD#h8YXAI#CXmf#CdedlAU2BQ9je6('1IZiTCa8IUUm*
+B$Y4JKaS&&DVVrN4cZ2bK)$N#9RKT+q46&CS!rBFq4meb8c)IQEc4Nf$b3QZ%A&j
+HS(!-a*YaV'EiV$FrP#UqGU4FTI%r(cd0cLBF$rcRE[ZC6',LpqNhf`Y`YY@"IXC
+1Z@Y81&EqH3A`eRbqJNCbb`-Rme%iQBqVMPUpGr#6A4H%Ea4@#+If6j!!RfGdmS3
+$HXl'JrTPErf+VfTiqpI+lh$BmZ'YZ-(!R$02ie+MFhlYTrl#@q%[V!rF4YY22DI
+#kLml``lCYlAiEF'&3DrZEl*fFk+h`R)'+m1)ZrD(KNqJIkYaA9GUp8Lhrkpk-!d
+YBR58mX41Xk2l2SUZlrm62hfcTkRH+lE)-6Rp'L'bQ)Y%01Mj2[k1lJX%HqMeHFe
+4q111(j0)4K)KdFjYi1k!#"%mUZ8`MNeNi1LYm-Ym%2Gd4a`1H[A'1Mkq2H#01Jk
+hCAB8VNmeaf#5H1*JAH'kH"3llEMk%[5Lrdc6T$P%ZhA%LIaqc)+m!Xr1L0,&TV@
+M&@T%6Veb$5qqPmMRe2d#%kmI6T!!R+J9E20T"BCXA#F4M9(q'I-863&('2Yam+b
+'Rj!!D!a4B1M[&b4p+!YAa-pAaMlX'(%q4dp"l++k+-9I-5lT9#5ZSRq2keYa8Z5
+k4K@+fp8P"KJc4kq5V,qRL*@Zm)IX3p)ebSGfNhi,U`'A!CaR`DJp!qQi5pcG'3(
+0Tb%Ff!-aNZR+iCQM,pT8C5qV5h$M&fZePhj51f,XfTGSYG0"0K331'Z@Af`05S5
+RDqm0(@&`3kJ+%4r8Y!f#d-(("D08caacT!Zh5al@N5i(U@UH),rdYNkipQL2Lqb
+%a`BZ$TcG9iM(-,R&'H6,[[+jh[N&c5#f"`,N6*))aU4HiN[4D5"I*r-V0+GB6GL
+,@B4D9ra-Y2HDj[JIk&K"c3#d!`BI4&c0bk5h$%FZ0bk`l2pQd&3iTB!8ZJ+pea8
+dUpp"YIN[2Zi(Xk$La@Qp4jU*23$PJ&c`a+&qJPNVM*0[Xrh!'"T@NbF!)"6dpAB
+$1hpKVpqSK`2V(fX)S,I`iLcSJqJ&d%p&$paTd59$C5#k(&Xk-C(h5VGB29!0XIR
+'SJBE2df13#BZF*`Y'`9A%Gi+bXQ0)la(ddpffcSS$Y4"8BLZHqL*)U`fAI+2[6$
+T(M[R-06RchV(TJXh1XG@6K,JBmE@i4G&pqJ5hF()U-GT@p[6dN44U0)4ZLYX[dr
+DlA6)DLCrGC`0p5,k$$Rk[#ABa,M&aEFdG$K#m,+MF84`Cq4bJ!Ypbl@`&pc9VGJ
+9m(qFG#[0+#$P@D@IZ*9'V"YU@PQc2h%VcEcc%!X,9HIF5M-@f[a62rM8TkD,Z,p
+@G8H4CG6rXa[XfUc$QTIIHe1Ci-ab+[Pr6Q3#2T!!eDYPDNPQFP&0UjNa$J6!QS1
+%iJKB2R"*6h4lmR5J#r""4*Il0ST`%2IIS,U&%B3KB(#$l'D+&cpF6-+("Ad`U([
+r0+jZA0lLe!*1lC!!@cZNMViVVimTEj2M*PcKKa+qhUREmQEa00VNkSj(&kD4PiY
+mJEYaX"eDCI&cB"f"raL(ebNUU33l&PM#1FU8`BFmhI"K6eGqrG$XpR1r%6r9YI!
+'QJ(RZZ3-1-%lc56rGh"[&"e8UXLR%9N1US[LAk#$p331mcC5ZJ(`%NK-BHSM#58
+"[YE)#A1-TUU$DqY-mRpXL!0bNLDp-SqdGdl5[4fHaTGGDiSPS+BQ`4'Se9`eR4c
+$-M,hm(3!bA##'@(08!M1%U,[8TpR%Z2I,kpr1Y-#cRp5I9#C"NGNHL-i`1I1I&6
+V9lfFRNP,i1a1Cd98'GdT`+k$FQBF"FQZ1L+Bf"*dG32Y!qb,@F6PMRF(&S#lr9[
+XcUN1,q'!PAhr@M9M"fE1P68EF%+QSm!1cG5F,-2hVaA&R6#X46fT4aR`H6hPk#A
+I[qL(F3$GTrpVq[E4q(ZIG*TXqBGQPZh)3UpRYFPG"`IEqc5%!fjr*j1E5#,HiT&
+"4D,L6UjNGU),m0imCGdPhlmjL*(j(p1*b*Pdr'YC[U2f+C!!$!rHF8U21jYc9E9
+hTN'[bY8BmKPGBGd9(3aMI#cFk[Z-PH)S6043"jkS9V06[ZN@NeFjIF3VAlc@ibM
+G`2,!QmL8[2B6RRLAI1CNPr@1QGK9[E8pkl)YqP&hFY61lYqlb-AQ9IHEq%l($5F
+ZNba28SUK)00E4BjK6EJARG+PE3!2lKei3Je#rc*jQc%+Pek`pC2EM,(Bhd(RTlH
+CNj3DV5c`AKR-(hF0bbMXK'#fPTXX96M-jfBk30NYlpA)ii3Ed%RNrh,TK2)6[$*
+i`["aRBSKpe(bJP8b$HirKId)Kh4&m(a'Tk5XldrZ3dCIp'Rk%VH)PYp8eJVYSdP
+Eq"jj5EYFi#NXMMN*CHR1'S'Z`Mf9H85TPEH3!%PXF(MlC'h$Yc'VBe#b1[5Ge-Z
+X$X1`5eEbTd+TR98!4e,d#)I0Lq[P",!3FD4U`J0V21PA&E&aq'*8XA'i9E9M,p)
+pC2e`#lcUT-9)Ca3H$"dlCG4h5"H8cVYdAafh`FF'r9r19M`GF6L"R-ASA3lG03I
+JZ)ep9TPI1i2EJ8UP9QBia`aSpjm*r,fq2a0mGX&PIdMqPelEE,BiZk&6G)*iaHB
+*1,&UZL)dqUGL,YAf(IL&-4l%rSG2FeEh+K"IikjNG3Emj3ASrQY*lLKpEm!eG3D
+jDDG(`&kmBp0N&)*l#TFh9LCU9q(bY*&TaFi,ei)P)rbm!frTVV0D8Ni8AcNfi83
+ap0(YNESmFSKcEQrPm%DXC885(lmkaUk,UC59'rq@8!$LEC)`GA&mf0X'49bVi2$
+kPK$T[LdR2hI*5q)RIJjYcmLL)`iP,2qET#B2rEQR[%(F`h`Tkklh"Sd1ljL@125
+p`18jbbJFGb*(0frJ2bF8hF`,c#6#e3dXPqVE$ZL)8j0322%jFLpT%Lj62'!reFK
+-Z(0RX#jA&M3E8!Rh-"Jkf-paQdVE8a`QkiK#fKQ[2+pT@kQUS@ePmCL`1d3P`+j
+r-Y9[p&bURdj6,GmR*eA#EA8hb518r%B&q(9r$-8IA@-cim0KVVl`EkT2lT!!2hi
+Uj@d,Gfbk#q2Eb[)l[J&@K[iV[if"XbPZ(2KDUUV[Xb+43LZmm(026UF2V[88iNQ
+rMHFF0PV3Xe5F92-#8e@T3q[+9UFUfk*9YN6kM$lfL-i!9lIEQ*G'Um$h2*I"#Hh
+ERXZ1rEAR-[UfdY`+HSq1J$d,4*8HCE3Hq,hb3S6I&UP0k3'Pf!4*E(DCZ6$q8kP
+%V,)*ca'jdHq6#GC#q"2@!TcY-0rX0X2dcjb,YH6Sl,E%A+6mZF4aCjphS%11R1e
+!jqEi"qJcf!5X&$Mji@ASR`&@Nlci46fpA04Qb)lr&2bU#*3cH5PqKZimq[clT#h
+3a%jcI(#RXi5pkBM2('-I8'G$l1HhCl"GrfGm2iIA$IK&([M0)H-(A0D8`jaqZX2
+!k,,fiP&5J0Q[qmJajq,ea@4dc)(hh4aCMjGZh6Z6kLfQ@V["qG%JG0,T"ZFH2B-
+GAk"[bY0"&8S@GQ8hUQYe4cHa2@U$VZD%hb`S9p+[9NL2`66V1NHFD[kR6Qr8E((
+UF8QIelGlhj&0llJMQfM+NBfqJ8eJmSMlQ5-EkL4@5dFf'D5rri%MQcml0H()*UJ
+CXV(mf(6V#cEKaiB4ihjXaPcBe$GZDh49Ei2dliDU1Jq(8*`eVh-q[l9#lB5eI,+
+3!'459-Te2VT"efZQEY4Y+dm3Ffd,NGESQ1qEh!R*P&abFV2%ep&*0r!94GEri16
+QLVrhEd-R0R4N3`Fh06EceI9`D0-f(9qHJ1QC-YAm4*QD,9mI+i1cQh,f6*rdEI1
+qraZTm,Bjh93p%D!GYk2@$pcI6'6UjfBL$JFe%lliRjP!`FR-4&bqC#B8FI6brlT
+XqGqGVC`Kr4IYE1A-k(pcYR+ki9I19NiAAAl*f8T8A#l!fFV)LjGEF,CbCY[P$jb
+YR$Nak@cPc&Z6cPE1[(*j!@FVT`prl'aPC1lP#CbYR0RercKEL8cr4fFV3p"[RKM
+%fFS3mErqaYR+%2PIHFrCbK$jhrmlCbY$5cphYM)dkh0R+fq0rVfcPEIHqXr19Yk
++rU1cPEID,LrJE18Yk[rI19XC22X2cPB'$rjACbZ$2Ir9fFS!H@3%EfLJ&EmlNmj
+@"KkjA)LcPI-H0YjmpammE&LUKF3SS,-f3c,(qiD+`,Z(FQ&Jm*i#ffm2%iFP"aT
+p+Ac!FSCV-FDSiS(+5qGBq*kD!pAm5I&4lIBbLk'*F'SYr!VkF-Y0`TkY4MaB6U2
+aC9Sm@&JYma!I[K5ISmA$HkefaB!lC5CFXrE"Qq1S6YBj*af+5bHZ9J5c8'K)hhI
+JaF1qN!$3jBfk!ZmrrAR2!#BiJPNKSqkrP2*KDp*651Bl%S1iYpVPGGr8e&MRmNS
+%!M-,9KTF*D5E#Vcc[*%GIcM!rPdqZZih06ddA+heQakUVICk+Yh9e5j(RGIMD)3
+TPkDrbVpGcpm*2CI%h9Zrk6j8X-MYEPa$K,12ZfAeVb93,G'Ga-AB$'mDE[!1ZAq
+SIJMPNIMCf,FM*UKpQAlFYI'h*'X*,`GCXdclhKC90qelQfr+plCNq9e`QPjM6T1
+pFlCAZHeV()eVlI!-8eq&8h,4UJCY)X#GJZ[dkc!h8"S595lfJ%j#i,0EqK$aNlk
+)lE-EZX4"fJ(CUh@GV3S,kcGJBp*KTZJQV0!e2-&-m4AX9"V@NZT,(meB*ENQa3a
+!C83Z)AV[chDM"LJS0$CahN[J2b5SUiHaIeqb9e@YmS"jdPapSd55,S+V'D#ck"T
+aUR#QZaYqBYNrf8mA(*T%k1a+'VaZEk2(#bV6G93*()9V04Qia08++p$qHB3L#Xf
+2N6G,1NH"rL1pRZ2khN5UMENf[5lQ%4m$kXURrmf!'ekA8dSZAm)ZU)GV'lUjNCV
+T2CMFb!"f3FK4-hY'HDie&eMH&8*%#[[XU`IfHpR"Tp[Y9BrYpiDUT-X*E1!V90&
+4#1ehTmFV1m2G8CcE8d[1Ql@[lK@XdQ%M-F9`jicVVS!F8ScPY$1@6'4Xp%iSYeR
+pXkB[4TF2CfB8@D%[&kJT+r9i+#MM&kKU2!G-BUTTB8V!hi2D"2h#-aDh+9###jC
+!TFf[H"GK%S"5J-QZBm(2[b!2X6iYeJ-&*bK[M&9RlT-mjGKS2Cb&D'6)M$@RjJq
+D3Ir'8qeeV2,#")Kd-*4Hf4*Dl`Z+M#UI[f96X)Y3*[%`FEkIPKSqA3LTLLY4XG@
+M'k%Q!f9@D)8SV9*(E2eiPkbF`FqkP2*,mLAdD,'cZ[)'E'R$C'`-dCa4jr2FR(&
+[5'r%IEM85990e"Pl0Y8Em1fR[Nhc)aT4UM2LA')dirT8CkBcQT8T)brS)NFD4GR
+5cfr29j%GQ[VMfHHPXU01HrDXh3%2+rHKVihfUVT'1B$`j+jk5lrqSZ8CJJqBB(P
+kC!Vil$IL!QiA-eQaJMf![KqViP[@"iUP(1i$N!!DE+IGYEIL1Rm"Nm([0P0jZMU
+(,aMY"Gr%IM$2i(i*3DNJ'M#@TdY(-hCRX0@q6$IHY3h9PGlU+RfcQ9$kp&*Ap&8
+qjGRCfP9qZ6Fq4-U%jM(ie6I%%kJfb09#p`'pK"j#clFC@m6mm)+LFi@4TfC"#3X
+CU*5jd@QVYpeN#q4S[RU*kXjID3XX9CfN&LSe)'Id+E9dl$h@#[IiU'SdjVK+Y`#
+BkfUIU,LHqk(TjP5cT@UJH3aU3-Y`jH1k#Te%jbdN4XpN9CfpSE'@qSl$9K3'Y1,
+G`p!e#T&f+'C%EZJ[8T,&Z"Ya-#T'NHE5iYVUKSdGj5aIY-'SbjP&UZT8TP,-@M#
+HKj11pECKjZSD+aYV+ZhZUM9e,[KD8PIS)&F2Rc++pD,ialJHYS*G28LmPPE5f"[
+#5i"IU,C"RFe"9VM5QC-D9jM[KfjXA)h*CTXEUa[XhVV9eGl'XCV21HMR0S)HUE-
+XGm)R2kVf"dMAfB3Z4d6hb`q2rC%MQ%)MNf0&lmcbcJq[[X2[fU6He`,SPZk[*QI
+pqkY))mebdkqkG'mP))TVh6#TSZraAVhhjX2S[FE9iq6H4YcGL!Yc+%&4h3[IJe,
+PLe%bEiPTk0@bN@dq#%p!3IaLSmAjRP!CaZEP!GN*06%BRFDa@6Q4b+T9p103)"V
+UB`d8Q4e%d#R!F,*5NfjSRG1UP'M4Z6S9d+,UI)"8E5V*-6pC13p!Sk9I4aR+,I8
+eU`IbTa%Z"if93XR3aMDXJJCMT-"6ZLFqj-$diYF&eb0d0r8'k6TLLJDLld#9+a)
+(mkEP0XUUm$ip(FGLhbBZ2RCc([J@J3"jcGQ)63T0`2J(d5H"HVhKceBmLfS&B@L
+1q([U,'cDS0Q%fj44RLd'9EkiYaUNZapSQF*h2ZU'RU291qLA+d@TYHBTR*Nh[9Z
+VJNa,$eIU!E@8'TC0e`,A)9)NepXISSY(`))r!KI"6C9r+Y`4E!2PeehdK$%TEpd
+QN3PXLU#14V(A3*Tb9Y33-mG5lGq#rIq*TYU'4SHp3@jrK@YC#Zc%TD!1!J@XlTp
+)MNH#(hmIH1J0MClUmHaN3T!!cipG#Plm+[&-N!"FF39`6HaJVH$F[L!m#CrM3G`
+[ckrV'efZ4Y`B$GkEZ"V4m46RcSVKF4iA`kd(96h1aDFLDDc&$Lf`$($kX3(DBVI
+S@-qp6DXm6[hZP-SXr@KehBeNd9bZF@(RIm9G@emEVX+QVPi&IE(2[dVA@S9`ea,
+U-iD*B9G%NKIG@M23Q,f8T3L1NJ`4fckQ(Ie[QYc9G)3dep490e4a$hCT1T'""H`
+86'P)B1+ZG63a3Y0FDPDmT'j%,F0`-h(Kpj!!9hGIG,ALGH$PmJdL5hTaJSE%e!$
+dVp[FZ#A[`1pD[*(T3B8bA!1S)`rDaLH)Ka$fBJmrKGeJE`iS%&Saf"H@iRbm$jS
+BKZ'BiS@5a5kY$ZJAfj@!l4$[CCd-mMEJJKUUQNlHe[(S@X)-U&VKD)0V&F1`($[
+9-+c$2JhLHbfqT`D@i1X#X++Hj+MC8,m`a#RdVK(['AKlJ11#((H!EQ48Z35Z'#i
+MEjCJPU05KiJ5)MkGd9-2jTEA-A8QAP+UVIGSMS"!i2paeQ,&Qqr&YYZMk6-bEi8
+CHLXZd6eIT%&&bL8V8&GBqQPFqlK(Ie%*[H"m8-NZ9(,IAe85(-qcA[92C((+,+&
+N&ZPDX9SZmH2%"%32b"bFJaCPFMkLck6Q`aPG2D(3pN@[XlUQVJ'RQH`TNe5Vj"j
+SJCkR+!McXP9l8Ge32HX*`4+F[DSa!9jCU2,N")l5SjCDkU[mIUK*!FrTZ6QkSBb
+9BS&&22Ic(FXY+kVM*h#CPHQBLQaDHNijLBh[`FBImZGaEPa8c2imS9Ti`ikm9EZ
+h6S32k$KAmVi'VRCI9@-+IY,hbYZXX!5+6(`ZaAA`[ME'GGKLEfU#qcB,3,D4%kU
+2A0%'4BKXl8iLlS8cUp'efYk`#V#[C,)G@%#9!Si9P1lq#lVM--Hcb#,Cl`&1![Y
+[NT81`D&(JVZ(c!lc&2&!c*qa5[Ba`J&0mJ9$E9&iKaEXLqJ6*XMN@`@[pUf#R8T
+&3MmlU,U$93BaKHEjQ!S(A#I"D)5k@HYXX*,)0-0PE"l9G)5H"DrZk1LSUL"fYKC
+l4)Yp'&aL%qMa%A)F"hdHhQiD[c-I`@9ZeU0c8&HPaSbT!K@5hTLa([T5Y9MH`lh
+%mdFYX@0*lF[4HUS[eI1N#Ve@1`28J-bjPc*XJH*MP"3biDX+RXMAL&&L9+[jQb2
+a#GXMfK4Arj4lkBEHhd1UQHBaF[e5+9@#Q5qI+`SeRKk"H`'U[#6`Y)EU04MAaQS
+2D"AB-EkdX0p[$"21HCj4miih0F9Mp(EV(Y5XEI2P*V[(-lj'`&TpNM'5kkJ[Y8h
+qkD5hbXl%(iDQ+A#af$k*c@NmMrk*9(9(j9DVa@APHKhEG,i*LQ[`UI!Sq8[Tq4I
+PP[T[%Zq*AQjD49S[jFG1D!Jb"ap+dKjX'Np%B$+Ll$'PYRL+jTD%+)S4!mG2UVJ
+1fGX,Ta#I!aVAQ50RU9EA86J1'BJpXE"jj))rXl`-QQ"'@Sh$4&P`e3U(6MNhFQ4
+6$,E!38heeZUNRcT*jUNh6hS!K#VVFh60a&lNVcqd&Sf3!!r[QN!Zhj!!ZIM+C$3
+R5$lG`&,p3mU[G2makjZJ@PNimZ*i$&3bPH0!&hcVZ"qYKeU98Jb@''!'lVY,L%d
+-TeV!RE1hJ"N9ffG"&IMp3f+bR&UL`YQ1bZH%)aLh&aMmfhN'Ci+rDq8"9ZmZ4*l
+3&X0i$VKK`G4!0l3c$Jaq!c%RL&X-Z&I!BBjk'haG6T`$k"!Qb)d*+Nh06+Bq-fN
+Ik*iAj(8*+CJ$DpqK0,%hTjVk2F$*a9NklLKiBk(M-+K*pI(&"NmHB3pQf3dr8DK
+DH8ljbeHSFULVSJYdd15!(cG4C830ZCi+E$99#DV)Y'+[cB8rDr$RJ@fY!IY-(#l
+iG-a%HZG#l`T6[3XQHLGiKY8lphI31i@5H8MlclNC1Xf"f*Ai$4GR4cZM6FkYjk(
+E'$XBHi!lX*IG#-(h#hlhd8d8HaZA%*AU!LUdUf*J9TiaUp0P,[eHJ5alb4A,$I$
+58S+hhDK@CRiRP!Mb4"TT#[F-BjXpa6fS)6eHZ,TjLQIb+6elDlR8ZR8X3+BAG,B
+8jT@HE1aC3epH!(XjQb2Kf4`q2"!"2VHI()Q)%[bcCK2Q9Hp&dFlQ"ViH2IpYc+#
+imeG+"@T'A+5i5*ech)242I+kFT!!Ml%RZCV955c`5e@00cC@3G8*B+aa9lT89$9
+dKNbJ%eEd9SBUTAmHrrU@MYDaYirlrC!!-B65iGT02J'85kSSKdML,F'UpTCJ1+#
+XVDPd+BZ+V%9,#T9&Lj3E@qjJm5LS5XeG9VT-U@VTk0SBhY69TX$D6lX[i"2r89&
++hSV%%er*lrk&$K3dS1J,[1F$U$S"`q3ep40YU&[bBRp%dh#,1ID@HViP+rB(kTN
+@8q`2eC08"hE@9cCNjMF$!p[KHK2iMJ21(4qrUC&3kQE`SQUSRTKL@GZiS5!Ep-A
+I02M5V@@Mdm"Q3TDLdUapNhP@Tc[J3aaHbp#KZ30CI4'KD8rGQEA[LINh09D8CQ'
+[U+a&jYLSYl'L'Ikj'*h[fV3%V&cfPVfTK*1T8&l1eF91E*2V%A-c00NG&FELc"G
+qGPN-$pP3hX)pGA-iQaK%b"RDC`mDA@p5j[CdMpem*p5NdKm`$lkFlc`dJ"V3'kA
+40Uj%-[hrd0X*AXC!EfFL"-@FRb[Hr&*YaK"CjpAT3Y#5pY`M@E6JDrDj[ZEkQLU
+Q2NreS%"ib``h[$PJ,TKkaYN0cDhpN[rmieM0MIjaV1ZAXF$A2SKprCHaB2Pp%([
+SPl(D2q'2BcfrM&hibpMLMf0V%EXD6(dM-`XUi#dQHMQIa3H80[d--IV2jU%@R9`
+X2[02r0KmLIID22q`CqG%9+G36G"i#H6NlEdkF2ifikTZ0kiM4QF@LkNFR40)hf[
+fAe!bC9aRh0fGNaGJG6kSQ`hX-rJ[D*%'iN*Dh#$&0Hh8XkTU8)H6qc#NCfa*4ai
+r9m6E#jPE6dXrpSb%Giq0LShL-Um1T1IQq8p&K)`'jk8Jk`adF*l)1U2BC"AK6&4
+a3Um#EjPM[CMMc$VM8&bE)R'U[,%EABM),L`q)3cS(F5#3XKcriq8c"P#QDTh+'4
+@6@CN`&k0!0P$l4**$ek1f'R+%Hjf$BRTr&,%MK,kj'kpa86E-4HhMe+)G'K-iIK
+f3XB,KC,aC2imTj+4lb'mEdF4Ar%I&Bk'djRGF&H"@GlXpR@#E(TpTe50"3GiXTP
+d41m8bm%!4b8ikqi5DqpA#l)ALm+)m+HlUlF)U%h@$ljb4@F%T2h'UNKmX+D[eQp
+b9k[TlYVpYD($eLN0lfALPJF'AlpTSl1bVXZh89B)8'Hm3[13!&CKS9CK`&hGMfk
+ejIm[GEj-HGU"04V`-N)d-HC[ZTmb9KC)9iF+cBmeSGrp3',4Mbr@qVTN2kJdSkE
+'brf3!&j8,aIEC$F#k-BNG-2TVR(ApYH'c["l($T,eGCdG"I-4DZlP&a@h@8eNkf
+SaMmA6'p@&$YA+VBDZ+,TLBVJ'Z6CfL!TY&3ACj(2[TCjk+4[ia%)mRV9R#Yr6a9
+0JV+e`)m,XP@r@"-kk5KT%JfRXmq!ifEhNC8EXaJHQDr3BaL`"8ARed,iH@84-bE
+B%EVbdEbd&FY&d3jm,bZ9IFkPhVrf`lNeUYRp,IFZDp@EVrlZDhj6a+"10mrSb`Q
+Fj1iIM)L'pl*jSVrNkHU!q2ekL&@JkF*B&1BP(A%!M`h&cq%VLaep!#-8hQ8rHi%
+BK2,U!(ll06lJNr&cB*-0BpZa+[4c-F!EUQ*BHm+9Q-[S(Qe(K-f,)m,C6FVINBC
+kQrGq2mhTj4%4S%drJlH#H#b)lLVkPYb&dHraq`-4!lE!(RMSi0DlV416Zab)N@b
+pHm&Pi06kXMh#52[%0Bpc2N%kmRF*Z+N&L[8A1jA161-6VDQh1HlDPc`EbFQFFal
+TaRSBmGq$hKc'Ulq)f!4`&4NCM"L!6m2rJ8R+lBL2+r8#'%q@IalKV&,V`ZfLkAj
+eHUUkI+i16"mR[)1CF(R$@XaMpFJMH5XjVqrc[)lhd8pAf)PH#'TT2S&H8*QCRF#
+Eq4hZ3SLUF4bQDNEkIeR0YV+bY2J5i,+0B%)Z5)r9c@e@X[c!d4H3!%lleYLLZFh
+`f!pplCjIarYGQLV8J5,5R6GLLiYfm6h6L0L@BZJDa9VV"HN6A'M,1NFpKDX[4)e
+XJjEl0YUrI)fUm[916$qB)C[U#l21"@C52Cf'35J&5-BRd%1il*4plj*ab,bHSJ*
+&BPdFRJ%3#a`pXTPliBJBQI-kfefP&XNZ4GD4#YV5q`0cLJRGI%(28*5&H[!L(E`
+1,QqZ!iGjfdB4hi*1&iiqJSjQaQLLi,mPHYk+leG1Mqk'aj@(5d+Mprlip1LM#qY
+'(hAm9M%Z4cMJ5#GR)ZBMd@R%E5LD%Yf`h1,mem4AN!!Hd"m**dCi#jc'5'(jMYM
+5l65MrNpR%YI!m'K))UCID!T(5,MAf'93[J$QM@[,PLeeSFf3!0GG3GEN+#J3$[(
++#lG$DRj0C&0%k2(0i8M5H&`Lh)k[)kHGEbHJk2M+8(K6S#dC[Bl#dBY241Mk`(C
+plLrAjHmNr2Q-Yf#P[%'LpqR-kddEF893MXEkFp+Ir@VrZ6-RrN+*2ah3`Rr3c6r
+hTq*hm0r'6riB$5G#%d(mX3N"k2pBDM&3`l,me,qVp`K9paJljk)c"((X4T9hUN2
+$M@r+6fjkYqiRe`mZj*LIh,6EK8KLG@11FX@M&kp8B@$JDVP$jl"QfeYEbBEH@Pp
+RH&2(HTrLEfN2`LeZ5Q'G[[@EE-YXSk2Z)"cb2&j4#(l9pI1D%4G`frS3)jiVbr+
+RV5B03,MHf80+kNN2B'%200H$dPPPqXaFF"L00&,f%rAhAD6ZSVLlikTZjab,SIC
+b`e4Q)l8NR,J8%)[4#l34cJG,1EBUTHe16''Dl,S**HeV`24+X1f#0rT#QpJTVdM
+Zbk`)Fd+a)1AU6$0*Vhf@KVLj2+Pb0qB',UNV#Elb1lU5R)N&"52(A2hTEd&AFUI
+'5`[m0ee*pqTIk8Uk5dPA-Y8(pU!%2DKjH@mh%!aU6Bjk1dXT0S@K03NN"&`2eA[
+2AXc#$%fcTNZ3!#B'SaiQrJfFHNf#9c6EMkrM@A$*S'kId$ThYH%h6r+FX2RK#aF
+A-CfhP,IjJX!9BQ"CZrVUQk8,+9q4%#0rcT`BA(,19jKK+Pa'mVLSE0QUM,RmE#9
+Aa0`iiMr4cY[*HH&'@19YRiPC!0H,+SKU(X$b1XkZMq'f%8bS!%f0mq6#0Eb4`H(
+$0e6hi9+4ZY`GF+4SB1[+#aP#qKZFSYK4CMT",d-bjdpbj-J`p"aP2bNQp55Q%*G
+3Fp("a[+b%L(IE1iJkVZmD3413Q0$d!8e"#ld6K2hTaCmR`(HZPR%(b2[4r('a!F
+fqZkiR@SFZBq9A(T9H)b+(Q9(U+am+IXr-e1ZZ0%E%pGi$$k(`+F6c4APJd@Qjk3
+E($abif1RJYr6ZZ&fld%eb-CZN6XE1`X1d22S#rMeL-,-4)pBpm",B-I`%GBLi-`
+-`"-EjJ1rI9cC9Ud#6)YmAb,RV4%6#NG2-Mpk)[*4BhREaY!Qi%jQe))k6`5`N@-
+RBLm!4GdHJbT9l)4N[D)q1j0`3Eq+$&qMHL03XB!h3hSDJjFJ(3-h!l(c-A$4pIY
+qIJFr4Vq$Imhkl2HR'Nm2[j68i4ql!DCpj1[42UJKhB)e&liad*'k1$ld95RM(ql
+XJ[4FQklQrkQ[9,*(CpiRNV8Fb[Ui9&"*45'[5bXKY2C[!`B+[aHf,[pPPh+$(r@
+qc2lFrmL(qS$C*2aNA#,G8,X[bU5A(5mmAI1llm($#DkR4epJp`ZEeAP3**eR,6Z
+j-Kp4Zam0T0Fr'XK4cd2a0IcM396,,"XGT!UMEV-[Z`D4V9%p[4P!",CdbmD@p@h
+iAY&j4qGQI'q'mB"EmEh0(pQNi2Z4Vl8Up(eL`ff`-!(()VGd"6IJZh,M4SThY')
+'qEdjL!Gq@lFkd0'lmk'fhfR+EKHES,@5QGeZh#`bJ8f$+4!UcIkpGG"LM+Y`M9"
+QZ"N[5i$bLhSqhQUKTqmf&!G+0Ihm8UAa,2KCTljX[DV)Q@fcj!9QCYXU`(2!9eP
+J1L,+!X5L#+*UI`6+r*eTUK([`-59jRl(E'XC6G)XRU5[TMeA3pm1X@qR2adC`B$
+JZa-CS@JVZ[c'c(`Rf!['k+'p`RqHq!L)hFfq!M`CTLQC8h(lL9*rpVK5[iq8qX%
+cp#,E*ZN+i01iM0$[rj!!MB,EX[(PfJMRAkSrTMV@PqlldCFb3qDqRB'XQql(0Xf
+1hUpBN!"PrZ9m92BRS0#XrfH1fUm8b5FU8%Q1Cehq3#ACP*V)5C9NNc@48bV*jYj
+r8%Qfe6k*rK%aAPYN3AHr%*bYC!`qT'Pp1L0Ik-[eCcPbIrr(iA1HHp8c%UX4IkZ
+'q#IL85$VaK4VdE+LdMcqZSAZ2TajT6$58PHSe)A@!e3"21RirQjKk0q0LRjE&,r
+lk-aANAFkZ#hHYC8h9Q'm+iQbKqqGGE#'JH2!5H4ET*h00&l$8#,2-NFjQ3r&Gbh
+*"q0lbE`kR)D'CBLDk[rASP)4"HhmpR@a@K&&Ak'h56m5pbKLlIIT,@1Ik&2%drq
+8hLkm@ra2L[MppqKYbNlaVa9$a6qM0pp2a#R&X)HKA8i,lcajb`5pcEKk&le0@b$
+D&,%BTae-[[lhiJ&&K#l5fi`Ra@mViMH[SMH[6AaA%6dhd&[*(iLh&F-p2qCmAa!
+I+)DR-qMYfNjaP5,QPG0Eq+HL!'m[dP[AEiPrJh`ITcGhQeJQa*ITr13EFPf+hJ[
+Z1i+T@LH+rhLZZ&Yd+U,XAh,F*[%ELR$J(%8[QpV#AbGdhq2aYA5XEdZ[JD,Xp5'
+c)`MEcH'Q$YpQa3iii$HdJ(VBY9%"ENSN(jQHPXfqbNdG(5"+AaF-hpB5l,bL-SK
+UQVU3!&*(q'Xf"B152Te3Jdkq++Y*H2'#08C61"Q8X0%(jGTEI9NeJ)#[lb4A-!%
++Ufb"IBmeSFi-5X5FfQQ)[iV-lNKl-P+NE+p'B!K1`"$T6SIQqq2r"`!'`2Lk6YP
+&C4ihmkbMh-1cPCPjA$m[ZdihXpI,BqGeRYGH-hkaR4fRjNP0b0Bd[JkBAdRiZYP
+Qfi9eZI!6XXhf#cGNC%0'p[Np)j!!46BN2*FML`I*2PTGV&`d1fmK#bH,!jGMDlG
+6H0[JKUc&M["E1*3X&!MJqlV5h*i&+GR`&@jiYSmY(GPNk53(b5d%NJ(!K[3kHFI
+b9cE0lGQjXT8EcH2Kf@fekh+JqpM,,HBqpVR3V)2lb%)fiE5hP*pRYl#e-Lqb)@%
+,JIcJF5L22#3,JFH2h#D3!'cbm(GXHa&1ET1&($c#&Rl`j'j'0S(N0Y`$Z#&2D+G
+3,Yc5jFL5EA,`0,j%)(R)ZcM`T-ZX0qNd'pPYMr+cFq%j@IMP!81#TbH!!aYJ!4-
+08Qr3YAF+AiAiaP24e5HCRIXQ`HcrLGm6[NQdALfBeYl*Iej%p28CMr+0+FpGq2q
+a`krm$V1Vr"e5La`f(XIB39[Z4kl9QLrc#&(T#H8@Qf4'&9K!aZ(rJq38rapd1[R
+rajbRf2r[R@VQrrrhUFq*rdpqlJIXriZIQc,r[mMq(bLhUBUpVCM93r`HG)UrU8l
+2%IErflR5SACEBr@rDLbkrSr'5hrV&)Qr"jepm!,r0cVlf2qp,iJr8pJHka0rB`p
+h0*ED&1@3!+I&FdK4P#2,R+iM,ZHbA-ke`fjI0ZNX[LrMA2&JqHGc4q`[fBrNeRe
+jdcf4UUjM(c[Kq[b06belU3f9Z@SamVeF*9Za(C%I3,i2d&41I1-UR@GbLUfB[Ep
+SYpYIc6Kh2l$#HIXAk!YIq$5q&qrkr+prc*@MerlLYEmifA1b4c*64&5@$fY#mQ8
+kaT*DbKdE#'V[82XbXAJX%p25MPZd9$UQ*p6'KTD'V5&(8rfHE++qCE2$mDPf26Q
+@LN@(-QT65mZQ1[CVLGVEf9@RGLE#$3jA2+i'Q(PH$@KT,A9!Lc3ihJSpmr$$kLf
+KH#bLHK1Ce*MD%`V[$d8eELEa,flBV0EAUl[dP*T0DqT),$1N$Z+4XYB35NA863f
+0DLJ48H1KM*CUB,iK9DhUTTYiDKBcJj9MD[Y3+TC@Jd0kDML8U&0Gb@4F8p[ei@3
+@AL9eAhZB1EXPT@PU++h'p858rGkRCpApQTC8-d1D1KK,T60U1MDUaQ-*,DhUJc#
+$`(CSk63bPidP-U&`TX'"P1AeB8dGeL1a`9JiP%%Z`8Y,4(-iN!$9*QeB2k#jik(
+%rLi@4`CTb'C#UDL@B5(X9,[(S!Zb@L`-GZPT4dT,DU%-YpUDMFIpJi0T,916dM,
+C9+*Dr!bii`$HDJYqf`ECcrT'PX&f94Z0CG6T80JaHpXm&%SaAeRK1EX"i81+14Z
+Y%*RiKBM)9@KGEi4")@l4iPT'Qh@"AVH()"qb'h5FH+&-d3XR#VA)HU'dP238LQb
+0&SV%%Y(HC#Mm(hA'@Ff1$-93&)U*c622QEG5kM4a1N0a-X)N0DG#+,bM@5S,b5H
+U,+(cZ5VN*%`@'kc)Z,9S,*'!Klarm'qUQ"5T(B@B,e3ibUqD81"kj(jD0rhb5#5
+d+K(jQAK)09,JAaF2U8CEk!jqAF96EE"b-"2jS$jG*$(269Sb$S-D%8KJC*V5,PN
+ZK4N(JX%eK`Cq'PP(D1!RBIN33UQ['XfN3[qTVTq4F8j9RIp([T5[9p9l@U048M(
+9$A%YP1K,#QAGV-9M`l'-&ZQ+T611#l*)[2GVrRJe,I9mQ*k"4'#HD0J!Fi,'4%D
+,DLNaG9LMMlMeE#*5ei'a"ErF'Sr!e4lYNQ,AD52#%'4Rr0BlR8*mk-`iB(I'"EU
+cd3hiXcl3B@LD9a0k"N-1G)*jbf)!BUbAQ6&'4TmU"%+4iL5Q)kMcp(0-0X1SQP3
+@8X++IX1R@a2#6dXL2B+8j))S&2G`(cJaf4BkS+NDiYQY49J#fa+`EBXd1)e@j)L
+MQR[F'Y2LN6r%)!9'5Qd*&"d1B@m-Bk40'JB[Zc)06Ll$8Z3ppDQ3!$%D-N&G53G
+0fGj`+TE%T!SQ2aNfXi'T8p[JQ%K+(R-R%X(Q)5fmIkmfjSM'p3&ND,ZZ*hI&3p'
+k!p`E2TAUa0e`4a8Fjd803pR%rKVR'QFGc+4dJc4fMl'JF#JL!6fH55(e+&Ld#U0
+cGT!!h'`LK-'5'6aYMV"kEU1KqQm6KS*S'f41eqMKrGj85NpjBU'i(Ndl)V&d+"l
+A4jMNGkHb56DJ-[iJH"13!+P9[B(RR,$%fV0,5r"T(#N5c$G&(GP%(&&Rdf%-e0S
+G!aLKq9V"5S3BX6bd$LFcB`e1-Gr,lF*m$3acV+6Pf[9%*TE)DNk@PlE-pS+"PBS
+482hV3YQF6D84!D4N8cBpjTM*KQ5k0Cl@(1'iRYCZM58LqNKDGIDN-"6Xd'14kFb
+Z4,Qi-m@,V-Y[Aq**q#d)MD9ZXJ-1YfYKe)R@dBb3!*'YA'8TST!!X5-`FdkIXRi
+eJKSJVYfmD@KKCNE*)rAM$6'[8-2-@8XmKHR@2YD#jP&55FRN(H*5J*3ph#l%kZ3
+1Uc'aLl8aD3BNhY*2fcKJfi0jiRjS$3)Z06rYZLX5U40@f&q[3p+kXm0$L8)i`bU
+'31,3(NGYSf")Qb4X5Lpk"iPXa8[X%!8%KSR4TUMUl(!EU`k`'!!+c$[R5d@[j0%
+1QL-b)LeiLi)ZBRef+l)J%*5JY)#8jqe',!&566'*)--f-3MV#I5E1d33C"'R)E#
+5pdV6bITeZHKU++N$4TFmE#UQ`T3CG'05f589dK[N@p*XQraE%$H3!r"L4bLPe'!
+RNAF0$+5d!cA#9kf9A"bLY+Aj(#$eX#PNQ(&+6G#P`Z9,[8Y9@YQaT%[NR#8*h+U
+jQ+15F-,1adFJ15V%BBX$"Ti04Bb%0ZY-A[h1iNDJP$05&[CQd)ANrerU+*!!XjR
+VcPQjDBR8(aE0&GN-GRhBkVe+58@GJmPIVZh[e0)S44p89+a#NL9*dZQ+'59!CkL
+E*Q1MKG0UmF2+@3`N+'3MVCd$lT,U@9`JL*)G12Qf@XjB9*!!F@!,0mC)lCS2cN[
+ZhGl%G&'6b!i2X,%[P"UcGKCkV2e*Y3lcKTkcSaGG[e@mMd@95+NNSY4YT#6C45L
+9qDKNKF8H4KClGE6aDN#j0q'S!r8qcT)182%,LC,#HlD!52f8MYc)NDeX2"*KX6d
+3Xq%@)IC5EK0-G0fY3TL810Q[Y![@+pEY8YTHkaR5D)+Cc(5e$N0HZaU)`B,qB8C
+p(6qAd-&8PRYb9ll6fTFCc#E#E2"PLiVV9m1G1p1j`[5BmQFf45'KR"JaS2%FKbr
+Kq!KG9FUQ-bNcaQEGPafZiG(@X@M"Y,EeTXeX-YeVrUQQ6FdA8X'4B`ApVDbHdDU
+GkYTekfYUklEIFDG4Nk(U05!'XpEPUr*f,4(&+`4R[8"Z)&"8F8FSKSeKLTpUS(&
+4MTqdd-iDDkFlHI+D)B8i19!,eG1q&qDpIF2i0`ITm8"8+SII+PJC`NS"jD@0Edr
+IU$UVUd9ZC)@SfZP+A(!"dQP*QDX(,C!!9`G'V$PX'P8l@FZp48IMJf99e!8ZH$d
+1&0q5'$-U$JjkYmHe+(+2iS0YEYK%[p&F@`+&iiG"XH+VR@Z4Pp`kpQ-"qe($IY5
+b(`(l8Fpqh-GqI+N3`hTXU8'FZ2r5%N8QB--**9"3SLYL85rL4f+LBa%Vck'hBSV
+GD*D)kKTM1QkmbPcF20HD55(I-T4!RA&NQ-#JUBkA$jiP39cjE"c,'YI8'AmbQ%p
++8V(f4&Q-4RA&J5EZ2i6*,3kmi`f%ihAT3Z("h54I9CjfcZMK4qBk(K33P!22,h#
+6!&0(E!)`!m&,fN$jY%kf#$@$Gf$#,4I`PHY,XXdlFXi'Ub,SEMN"GM('1k%%Qfb
+*CCb&'meeQiC3)Uc&Tq-+``6Ym&D*$6+dN!!3"mE("@PfLl"R,3Gq8l`Z)H5Z-!A
+BSV2jL'famN-S@jN$XA3@0@#rVJpcH@HLI2dM+QlGqadG@MV$CbfZKJ91ER%MpTI
+Del0G2G`X`AS"LMF4JH#K1XY%BT-'H80bCBCCU+caA!)$XFhmK68Q'J9&9GMXIlF
+-SL'45Tp-$VbfT)LF9&IrqP,rU1@GP)B0h'!Z#qf#kBLJ(,pFPU4M`%*"Zm!"hr+
+4Tp*-m(KMJ6eNb@Zpf!hL#4Hf%Dpf(LhTrDVceU&3jN,$3*eUXHf!jKCm3J(kY&R
+GQb&+`Sa!L-!U`E8r+ZD[TJhFqEdV,"r8)Z"$'L)RHk4!BINS#0DNhQbJiNkcAB6
+#U-#P'6pZb+33p[(#%Uk%*IYkh$CS#9f#!eh%bV!&#1diTp@&8L5++AB6hEYdrHY
+[e[%Z2FPbRY5ESK#,m`8rD#aYhUJ%-iD`&9!(CJ`qNm99ZZ%&*&9Kc-$G0K4mV[8
+S"c9K[K"hrRV$H+&RadXaQLD-Y0j&88@Le6ZQ#+l`Qb&#6r%TcVflfP5PSb(&[4j
+9SG8d65Cb09D0*[98KJ-e&YDR`9IVbME+B!FEc-1S!kX+C,f91bCc3)Ud4q*DbPK
+1YhCBL,,$UId4,PH4,p[I!P*@)+CJHGl,0IUibi$*T3(,#Kf`"MqF([%JHf#S8ka
+8S!d6R#Y5U#cBU9S,biC)ZXBN!Zh-K1)m3QTNlD[3HH)'F*f1C1rH$c`+aNPB(Xl
+D2'2$UC!!ip+')F32f,kr#rpmh2c6VXC$bdH1B*LaU+%"j*dfD(D(cLKp%&)qSbF
+[Pbr-c9B)Xc(Y4mY98e"UlI5U%T8GFZ1NR'%p@XPS,rV59Y@jEKelcD)%3F-+6AQ
+l@"GKM"mfXEJ&JQ-fkN[D8#,0k'$RI%M3PPX9JAm@$$Z#',G##K#3!-Fe81Nbmil
+q#"%8)m8djaV3SHD9f8b'JDLJHk*##0CB)GHRY%%-hD$2j[VBh5C3Z`D)""D2T'p
+jZlqlfqX,B[ZN,61cIp+I&SM$P8ZraSJqH(V%!bbU-9`YA9eN2bZM[#MR1K0ZAGq
+2A6%VSX!Ue%92$6UfEQJD0H)2kY"Q6@-d29a'5aeDQ)f[hca)J[k,8BkQ"(0,LRC
+j$G05ZdATDQUjk51pq!E#eE#)a59c,5U2A#Q6LV`"*91%KV0@+MCfe[YjVRqUfhD
+L3MDP8-1mi`C5(R-EQ#9"3E3m%Ga-FN-QkBR#[LDXkj3$U(#fAB)DZ(13!093U`V
+Z2(DNSfbH!fYlf#3DEk*CkS%AeL08+&l3)b*akB3kDCdY%5HD4HYYIGL1GjX-kQN
+0PUAB#i@pTe5L69%a2#JA)'P&6r5FRYP$S#m8#JIQ!5TKf+F+6p&G@@Ca%`[&qXi
+D%EAdNf!,GU`pm59,a*XKI'j'*%f42`L@Acb8cZI$PPrSFU)i60@95,SVVQT35!X
+Ef%@K*SQ-Hq2Z@B(N&*6I&KI*il)@9Q68!a@mSKb59AK&S8"MS,h0!dq4T,#G5jl
+A6EKk%"FJirY%5C3HpKUHTfZXqL1KT0ZfrGA,&K@V5dJP,pdD&kkk@KQjF*1&fi*
+aR'@AIPB&-TI%FB%BCeEIFl9mSC5G1$fKjh)dRS53!1irN@kXS45*IDaC#Xe$EmD
+qSH!I*aK)q%a6aA8eh'+Q99RAB0jR,%FA!iBC46P5UAbLMpaHlcje1jD"RA1FEd3
+Zqk45A$qhKJNqBXHB6dm),$ECj5m-%T8#5@(,lT!!$PLkNc632PF-4$#$Rh2NKpK
+lVC!!FLpX)5)rY%d$3j`D#R04#)IphD`0cZ!+d,Zd9@)GaJ'2(SYTGX"#9fKPAed
+A%R))l&$"0U`ipZTc0!#VGDkbD)cBGZI`F-MS&+baBP$KE[F(2,hQrRK8k9cdr5A
+2,8B"0XeA`#i+JjPqJ*@"@F'@eQpPBi"hNP83$`eSmF)+@&`B5c8+C5+c4JR(dSZ
+TU0Pe-1r9q$!9jP3%TFL0&e-NaEQVN!"NlK*HaqJmk+0fGJ('+i"V(-`0cNI&bS(
+BHM8jS-8k5iaHIMT#(d)"2qldHMU$rX"dAIC80XN+G!p1&"mf$#EPClZ&K030V32
+8E1cRYqK@1dkTNR,+A8&8,(eN@N&4Ma)3eI1`T4PXB-hDK`+3!1bB-D-Ap1Lpb4j
+Zdf@3!"C93&FBSbTK#f1)`-#",a["UU'3!0"X0Xf#DNKbN`f,k,eVY5*NI4266&S
+$@`DT'FRYdC&#)(0[`+jCDlU1,8fR`BZE-(T[m'likl-$f-L#F9RJ6d9$LGK"cUd
+)1K2T6#b6j@mE`N1kMNh0*#R@HCL@JXQ&a042Mc'5L%0ELGFER)Xfl+9Z%E[)E"a
+@K$2S%Mp-K&JX$!YDPpCK#d-NRQYr4-K#pRLK,S2K6S2D$LN3(mChf9pSL-AFGQk
+pS`Pf"*jFbaHfcK3IPY'SAVUpKAL(Tl3Z*jZ**`[MqG9%LFGX*CEU-FQT,50@Vk)
+FSC(Nj'5j2*m8%e!a+f'JTp0bZPbH6d`B8M%e8E#RNh1bYTj2M3QSQ*J#Lkih,@4
+NYrC,'fKBeMBaT$p9BGF1aQ8,beN5(P8r@$NYli"Z$M-5J0QfFFpZX%rCh*R!`R#
+(5cK!L"e'&$39'K#+%&hPY9!U2'5j!%SCp4S"YSA&'kC`&1PSr$NQRfY$`JQYp@-
+E!QJ36(iL4A6e'9ibERMJJ4j'X'Cha+`8EJJ'1RflX9&Bm16@#p1p`X)U5%Qk[#A
+F12arYi6EZ'-%bN2llIH%fI*@++F$6EQT$'a&P3(bL(lhA5J4#$+Rl8j1C1K1PRK
+bE8jNL@KMQ!hDIU%Yq5+rK%*lVH*`2ZS+*BHMf-,@E2DbM9rD+BGd5QpVNlr[mTD
+GN8!%a5-EGp1!MG)H$9'0FbImc4P`G`Kd#QJDA5aaVfJ#,+E1"'+6Kp!kMmEQ#AC
+T+`VpZ+e%&keGZ"Q*YA$+K,Kc2AR!Hh,bE#TS(!DQThmYJ'UQh%BL@`&Kpff[,V!
+#+iZ14lj8+U5b`$YY5TK""c4+m8U[Q9$-BlZmk6#j%&`aDMrE,iSH"[Kf4JG[EUc
+hbfTJa-d50E@"&5G50m`B'l@CiBQE3&!NcSeU3)A%2D'#XG@mQB+NbNd6N!!FSe#
+bp5Uk1#rhFV%*ae88`l8ABr"T,4)AC6Z[bc%Hfr&b[G34LL-,$DhU-DBUla'E,CT
+lAdql#q&mm0T#9Xed0-$!ZP!kS(E3`4&mk%@NK(!+MNki`%!V3'H%!(Zc"4Z*-L9
+N6edMFQpDU+DZ#dSl)aa[ZZ5RLZ%FRG&&*2'##$kp%aZa-'Z"4KIJ##eQpdr#XIY
+5K@`XV1FPM`B4h'6ReAFjlp$[R&-33FHS&Yq,`JZpV-Y4[I0GdaXP48'FA-eLaV(
+TZ+,aXddf,#mB$C0k@ERhhIN2U`ePK9VYeBaZ3&1"(PXbi5%hD+&`,BcTEqkYV6G
+R,V%fZa-)mS),6hJI""H0YZ!J%YR$298dHQZVVkZ`F2%PBfUR,951%9(6jK"3Gf%
+ZjJRcGPaB([r$35RPb`$#RMIY[pd1R)34`GU,2EPX5F,8`$,Eiikl'fa-eKYa!*@
+XE9)[JIfZ(EVhGGh%,M$H5[TM!4[jlaJVa(KXkcPFr``c8Ca"Z#e3kk3`NV$jL0T
+IM+2E13"cB9PA#S02&Z`[i,NC0-$MUKI6Rc&8)6qRHdr5DlXGSM4)fm51V#&eK9$
+Dl5kC&mAZ4SpfbPNDZN3$4eZ55E0T-h(0MjZ*F'cR6aBbIV[2)4Tf@Vjd5"HBC%V
+(i2+))fB(Uj+UcJimXZV#!TF6D+M&8*p`!YJ1T%X9Q!ahci!9!)9V!Y,,'9`JJ&U
+(+[-bM+e8!8j42e*-"iJZ9,T4GB5"jmD5#2"$,(C"a,HP2D`"C`)mG69J@$Z04#V
+"jrZ)kabj6`E&PJeIC0(AlYKmXc8k-6E,YQbpJVqRZ&bNBD("p!9XKJ2M2'`$FCD
+(@F9e-jaNdj`N@`184Pleli8NGYE#'BFBqD1)d#(+1(3-64bijV-&l$6fhJXlrAi
+#+SrEY30B)IE$#c+TEj`C(jLqd-L`RNeU++jmGJ#cH+!1,KC9QH-amk##8c-9XT%
+0HB[ElQ[q'f@I"afKjT`3i`T04@CKI4*mq4deQfVIKR68UpfK-%X+l,)(1$QJRMh
+J1jMCc@rflRU"BTTkUPYk2dBBLdN$qM,MlkJ[a-U4lL&*#'a,4a+8E+Ar`,3BQGP
+Skrj,Y0d4$@DL'+d645*@Ba8V-d1A$-a[r2p192%V[#FZp!2p`)@@&GfZhZ$drCI
+a0rDH$e&a2NC&KeqM&3pmNbVZ1N%9Z8HSk$IlD-@rraB96hf'9N`fdX+2(bClj3Z
+dk,((kDSYce2T3hp&5fVqP-SHr61kZRb-PRlSSl3XpQ'UL!l6XYpk(beIV9*&fNh
+,hBr5L[p`N!!@2VQ29Q3qb'1HhGj0C9mGSL)FZ6M@8d`9Km50QDHr#AeRqHp*Zem
+@XA`bIFR(l0@2&pkQRk9&Ic$bLrLQI@lp6hh-rV@*5cEMGV$l1FZq2YT$&Ik'[cr
+FF1V'jbrC62b5R5Sf[2$,5!jdGIB'TfrkV"5A9-+YRq03(#UT+%F,F2FR[00A8fb
+qD!(I11TalIEbZ1KES2lD!XGq#2R(jqlk'QV5e-CqZQF08GQhqYGFAd1djQ"rdf,
+NkSkHr[jrM[IPCrY[#l84EAqmIk0MP#Mc3[qLUj!!`q[6rClDKiR@GIHVKj(3PSC
+qc9C(e$I4[r(`%&(PF,pk3ch4DRGr*S)irMr1iE[$[AHhalJ[',j*I4hL!HF3$a1
+TMllZVRLDDM,H+Ac,hGdZh$NlUFqbJ-MSTpc3Hqb@hSq6b!rQ!Vq,Bi8STRb'jqd
++fNfd+S*T538Y8`j6XDfDEU#pY&(CCi8aPNVaD`T@`bU)MAjahi%h6H8m49i@mfI
+k15HiR%*m8pM"J,8"'2`#R"d@[qJC5*Kl%V(EXB3!Y`6+03J)jS30L!$6m-diI!C
+HYqR$kIeM@fjQ4b%!KkP4l#)6SX"JcI,#&'kJD@864GLZ3V!LC3$J&$$&4ipj4KQ
+#J%,[%(9Yh3bR6m)`LhqK'aXB($B$@cbiA,`j(X*`R2F5GZrIaY-(l#NiE!-1qj4
+!0XHhYUaaTG0kf$Lr"ChJSDjCN!"YlK4,(NiG&I3%VE+YTaX8$4Vm(d+!00mN$I)
+D#m)55)UTV*UCIZ!I*NpU$HF3[BEN8a#BU+QCRqD%Se[++[X#6KPXE'lP@bUJ(A!
+Gm)0P-5TBM@c(XBQ`NE,(Z26'*l$b#9TS+kD0U#+rJ3aqp28U`JY1B5(KfZ%,5A)
+D9EaQ3a8P2JT2YZ`*Ap!H-Bi`")Lbh1&+HcU8T$fiHaE3Zm""lB!Cm@!0lp`FDlB
+VP%jI$)rRiT&&Ee'M!d2i[)MmHKiDlDaLFQ#Y%QV+!ViTLSD"`3c'Y`@'&MHBa@X
+(YZcEf%fh%JZ[2ba!FKHBE(S)&m0LR3"0Q$D01R34L"b[`!QJ9C,39hiMZi-"Jm,
+$"mS5VNb5!`Vq$5Ji2kIJjPJQ2PeqpR!FXe-IeXT)I@B&#a3-DD0c'UV0T31j'D,
+!k#b[948mE)Y&S"&Blh*EXLBE3p*N@MiNN!"Z2eQNpV+VGU9-jM0ME!9FLL(VD(-
+S+35-2ZQi!,LG!IIhi1#K45T+*q32PT(f*0(CN4'Ab8eXA5Dr6F63fK"Y81p`h6Q
+-ZVBjp)EH0Y(9k,[bd0[pd*YTk84[3Qmk96*C,5(Z#6US8SA60LSTTZ)ZN8k1$P9
+,*de&*9!5,M8`l8NUMP-T&(Br&2B`I@*@BCm(qULrRc*jf!F[Q0eG$&R&*a!AdS'
+VEYYd5&$bJR%0*18HZSERj0[)bIqFcFPYHM`l20rPFI1-3Gl$(EQ9++HClUKRmUK
+r6Kp5eXa'cDYpTk*Z5kI4Xrmbk-SF9E+S+cX3pBlCU0F#fJKV$A&p'lK1e*FqGqb
+&J@rB1h&#RpidC)1iH#21*b,MdApb"KTDGTer"M@[F$")I)PJSHJ19CSG6!pTU3R
+QD`eTU,IB90"4@X(epa$d9qS`eZ0f9*K&(8r,,VM*TRM[,iS(B&4E',d8(mHj9eH
+(aT)34lj1j6e2AA0prHBYEpEM!h3G1Xb(8Bm2cA@Bki$F'+j"G1!@T)$1U)Ce-HM
+4S"16D3a`lUAPT'P'fR%Y)aAa(d,m2k@cXr($%5J85,%N)3qrPHhr4hJCCapG$6*
+`Z5eZRS)A1"##b`6f8GImk1L3!&-P)bc)ff2S1@&b!jQMHQ4+-pc)ZfdXM5+#TC6
+6bPfT5"LbXJ10V!b0Q%d[rE$FB91X*CA,U&SKTC&+&3reIeVX2Z&FNZFllBJK9!r
+jhFKZ'3#c9RG'C0CBpDC9,L%!aK9Xmhk#ki!Vd-jN2IV1-%D6SfJXk1rAN!#a#,c
+!$QpVLUd2`Q#4e!Xrf#r&%**MkG"Y,1)hL3Uc0mDkHYb!YhHp*[8N)#rAa"HKLGq
+Ie355&,)#TH"&!Eq%X2#H-&T-@A!HFEk)J3%T"JK9V4'4ij8aYbATI)-UGC!!5S@
+YNGD`fPZTd2IQDVqCm5J'Y4I5NF-&$XcpSG9KjMqhSRI&NY,#X,,4E6HRbh9k&Gj
+Se`Fc-r)-h4a81DJ@Q"`C)IY4K`P4e-S0)FpUJ*mUMXJ$1jIC)mhXT&L1&RX9BN"
+834qK1PjE[iRDqPpQDb[5FRe445cEkq@8iCHF@,SbJLJZh-V$!M,H"*0fXBp4!mr
+-IdCQIM'EQA9`AXS-'VfG(EQ9LCIfcCk"28eS)&@3!)fMe)6%r#1k$T1`caLC`TT
+l-D`Q[MlrZKPDcV"KPmm6@GP-3GCNfL'E%Zi-6SF#a@Hi4U-&l'SJaM&RD#6VGVa
+"kHG)D3,ATF1MY!Pjr)G+&Ae3ZC!!AG6L@[eLEQQmSJBNPmBZ@N"f+5eTHRp)cFM
+Z(UUJ3l6(UM+Lh@Jk('B2Qa`Caf(E!mNf3e*UEXl5KmmA+FPM0+rY8ZYKfSc-28P
+I`Gq,-rP%YIVqcbG8HL566dRM+5$`'fNd$9QD`#1d&IQVSqYT*hA1kY(YYrMXKAH
+"ZZ50d(jHPk"I2dNcq'2DaEZ"keNh-!ATfrpKRN(U@b!r+`","Uk!VjTKBiI2VVA
+M!Mp86--N$[K0-K`kPMPARfpE@jkKhE`6Z*iqS-J!-VX@0l9Fb+[hqNT@[@Fl1rm
++VEFGTJCDUUa4r[M52K80eSV6%Z$ClH20G@L$@bb-''DD,MAbI1*hre5PG%GmplR
+[d9(fE%[3kj!!i%BhrM0l+,c5AAKql+VfacIUHbC*&%ebMheh3)QINI2JNq2HiiN
+1+21Vj)%bVk295UhbdU`bLe-rK8QHfkM@YNACV*a8fT9aDj05qNbL6Jq[Zl"jB@F
+bhDLjQXIjIF6j[kDhCLR1CRDj$RGcTq,F&"X`"P!dZ$-(@+86jcYS"fC2Lj5PL(T
+")d*GP5l-RMkM!c&fci8Z9)k$NdNQR#HrMGHBcF0XKPG6Zjf2m'$#Y*1IK1CXc!P
+,Za"4mB3P#-"04&JP@h"AURGUVeh#%p&!lA6P9mhrR*H!mX'pk"p$DS1VD)F9!@P
+Z"'Ub+1rGlYfeBZ@*@H8lD#IAeeA3ede-ApR*'Af9TRZa[VCVJlq89hSK9,HmkUG
+&C0h6,QPb9p6IkSX5mDDfI!klG99a)a968r00f$`I4bka2b3r+clpMepQqQ$AR"&
+2cM&MaDX20cSJ[8#X8H2N24!MQ)!2b!2cm!fF,J4L!bm3a6P`m%PI`&HP!VDJ&*K
+E3S%jJJUQ1lj!p1@"BlV2#+Cl!CmDRZ9$EL3C2JdFYidaFbP)6J,1`30@P!*4qq%
+R[QC%!Qb%DlNi-ilGaP(*,DPBD!#EV6FDYc-4+Y,ZT4$c0,Q(aL-N-ahL2J%))6k
+FPNpiFHrKG8l"013r31m(+f9`4G*lmXIk&SG2Pqj"DQP2[C%"a($6hC3'hN*Sck)
+#8[L!ZF4q[""#FJdZ"9T),,JC$G5fUB@S3RQ8,hiiTN(#B#jh"B+Gl9eH%`IY)CR
+fB"jS'5cF`*)iSi1Z2H-`[M3Tm4hkB!Fj9eq`!aI@d#N(*ldeG`Dl[$phpPPrAm$
+Rk[UjZmplAEr)`fhqVVjZ*),3NbIGVH[VGRX4h&PhDrfqB-F[[#&5E-1990`D[*+
+h0Ijf9l$6lrZ[$[dQdfRCVrY*)U$#j+EEP[jES++lI!SZ#b%0c*ULJ`JJbTaUiC!
+!ZfG10UE#f#QRAMSa,mRV"BDYZlf$Sq"E0'c@HXl0F0e"52[P!+4EL,Xfam,QUNp
+"fjZfD+[0Vrr"F-Bl)!R`#4Z)4@8Z#*cND$h!6Bi'fLfFhIKS"eXfb#-X9("-RNF
+Zl8+8(A0VHFNA0`Z4+fVDbjj-Ta$j-ZX[L6GU&#*A[&Y3mL003Z5*4`4PAp)K4,j
+i"P$faHe"j)UALK*2h"T%RQJFNFD2eGK($m1)9(pFYlhqD("4pQ@lKmLE'B*%rSV
+0Jkmm![!)[B@BmCVA+eMN1'S&KXp2J9d+F*RRCaVdNN3m`6r%,(-jT3jICK*C,'N
+&1&2%(r$@-U-pS6VM8A%`N!#2'jLbKj*f3qZH-+A'$-DCZNLUe)P)T8)04TUk5'V
+FL8KPDfiJd,+(8S'-`b5PQe'5M1!2#hk@j9lemE-5MYEBSFmH[NqGHR9bfqUTUA[
+8[RG-EY[5ekHHqZ6NYKY2REUE2hcUe#PZH+9KQ$-0Vr`H-jc42(Q6Nj[1Z!N[Gc'
+ETDdYRjlF,+b@EKeQErZ&hCIBfajZGefSB,GNkhR6EPDMD6AVR'N$3C-&r0l6pi@
+l%Ir'Gc6[E0ikZ8AB,bNYUX!Eq@JS(IPRikEMKY,Qkr[0H2$4KV3%Mk(,a3@AK9L
+r`A,pA0A94FZr[2Vm$Q%+cj9iIR!(22b11R8qIfeMG5MR8qi2jqV+TTM"r1Y(Ui[
+'I@2IIX@dQ01imrCFY&imcPL5hef85jZf-dHVVaRh&CeiN4QJ#MY[X'dAfHLmSA6
+lG$j-IRk2+@$T`VBf5dhmaQUkU1ZlPYe&J8l,VZSj[f9Ap9a(`@j0pC[Cr`-@jE6
+bT8HicM$6-qhj06Ee'RYq)mpF3hMP[K2jUrXReTC0[Gplr2$L3$ld5'Ia9jTb%mc
+EM!Ic+H8"jI5,k9bq!4jQUIRH4FVTbH5%%Pcb#Rea20q[Z1M9BK[HTaark0j!rZf
+I5[lPZG5%`N6`h%Vl4*2)bR-V'r'8b1#TZpRIlr0bG%PrXq(KNPbciD0kjEKT9&e
+9X-+RrD+)99I`Yf*Jrq,Zqp5lcNpZZmB226jfDR+EMIQi$Erhp+&HrXhN0QAhe$f
+0IAfjb3hC[XC6Tr"lrkRl'ZqD'TrF8$CeEq18H)$I2f'r(cXXkZfBA,XV!&EGihp
+FU-&,Fi*IKk`kr+BC[V#+jm#R!klGI(S[dGT'6M5C"RiGFT6d*hlG%ZN([qk2D+Q
+FJPrhpJDa)X1dZd5Za,5$,Im[fTViP[abkX61Ppfqa#hj*Re'ENV&M[`rjA3fC2)
+p)*%Ja[epUZFjH3)jqHqc1F%#k,&,ID`S1$2Ah#VUm'fEF0[Z63Di+`fq)N2922S
+Ak(f++K[Je@(X2GbiE5cQbPf)q@iT%cIZhe#%kqmKk1pYEP`SG56)fGi40FqJ1'i
+TlSh9EF+)a1+*D%3"fphY'S*cF#[Urm1430VVIB&UN!#e"e#l(jQV'Rc9S1+#di4
+0#NLr"&F!DE)d"MQD(@"4J,+J(M`b9`pq5Bmd16M6!d$-b)jm"'TqG%l0F#8j$-r
+kUe!B0*a*JTj-Z&3MmI+mVVjM+ke%c)mLjLIRBVC(kle840bGHeT)'E(b@I"@,E%
+C(bJRAkDJc3P9h`@94G9N2&0CBkrEpc0CSjZdNVb#15-Lj5F`(hS5LRp@fN#N["E
+a2dYlP6,k2GN1N4+)JYFal3#[BE)NMbMiBhSRTT!!hk"V3B!Y%EcLlLjQUYQZa``
+TV62,96Yc2Z@EC$8Er5"El6H4`jq!V2Bc53GElFmTK2bYT'VbdmlCr*@QaJCG!+8
+8pKZKDYMYiI!H0pi,N!"0jG"EH%UAmCPi'-eYKak0SL"b,,+-N!"PFD4C2NTh)F[
+h8#@fPdcpd84SM$qQ(-rZ$FMZDXN)AHiS[3HChD-i3G*H*5(K6$j$KhKfVm2[94)
+4GPkVa)UGGlINLThh@@N#1kp4bX$1qhXd+LGLZ`'6F*rNL%NiJpiYTEQmi%[bR-X
+,J+4rRm5#T,pIQN(5rakpPl1cFpJ3pVX$Q#fh@cJ%BqF&1!f"aHk@r9,Ci9ifXML
+Ad!*bBfQ+IqJ"'%i-jJ+$Nk#AXXYX'*`4Hc-M0'DiR,,r&a514XH&X&j#Cd,2E+e
+M@`A"rm*dNNG*3aLhBN(V4"f5YQJI@[0JGe)p84$!R6e4UJ(8cRiY-X0cTGqr9b)
+"m-56PV019Zf!qIBHba-bj"02I"G25mbaa1HUrj%11SVlA1ATr&X-jTYi80f!plR
+"'qMm1hIR5D8V2*k!YrG+H1[lh,M!F$@,F%4jf*ZTVQa6TXj)r-RD)A9DYTd6CkD
+G5`,%0QB``'6cN31-M[Xq"PJP3Y"TC#VZ!TEp5,F5HC,*eaPN+Nra4e#XM*8jJeH
+P"EJcH&ALPC3pQ3BbmL93RE335&IPKFTMUc3,YUIbQE"laUGJVcd!ec,XPCF$bVk
+S8BXmYD8(hXKY&a6@V[9V,&"BUV#$B02%3E%qUa*%@*f!dkSjN!"dH@)l&'IU`J9
+D-PFJ5,SbrKi+YFZ(Lc@alp9T#$XBe'UhPdL[C3mp)9-I-KKYiX!&@M$Z`36hI98
+j`3qfh0'AqF&99E)EIM!4G*pE@r4%IJAJ`A[khTpICl2GC(p2EY@4[-,4`60+9bK
+qJa`-eT9(9kcF14SiATCIAPRYH-K[IpI4h",QU,2,!!DMNcpCAT*I8hQm$'cDVqH
+hf5TbUm%,TUL*&jcNi5$,3fGpNGSUM2Q*25kd2@*CMIP8`DUYB!92aUVDX2,KICd
+*ZXj@V%,!C#9[j+PT3H9,6FqB)QTDX+jZ6cNAbd2"aErla3lha"EIf0%bPZ0T*Fk
+@CbE@V@jPX1$QNTEa2H86@eDeML22%2XbheL2QC*P,QqMQC0PEfG[BVGZV0b`mca
+Id1&MRkaDUCL+j5HZ)c1E(l6Ub-c1+UZq61pXYHbQGkU@hG4'bem5Sp#5b4VH$TK
+40T@(9hlMK#@#+FF2haX`)i,A1Ic9f!)*fGTH%DlX22CQ[)JqIPbQJ6lZqkiq+IM
+(b$V'ElTj(c&d)9r!cD(!4EkFeZ&qcaVHPi`$rlK5#X8r(L-"ZGpcV!6XIXmUb4,
+Vq'&D)#pJ"3qJ@iGK`F$1r3M2b[m"Vr0f+4-lpa#9b![BZ9#R!CbK&G"cJEFkfk$
+RPQr&9!YiUq[*MTMa(Xb$Fc'[eNI-N6%6#T39j#SVDTXqBY%aXb1BJ4JppG*-,dB
+(H""kqSkdJ@Bk([&r"r'r)1@KQ8jJfS'4hJZ52*VTBG$YN!",mKrSfr6A8JlQjer
+35Z6[%A,3)p59ZjLr8Zmh$'50r'N)60BSfUK&kZV*MP$CjEX4-Fp+aYf)4mNT1H'
+@ALNYiCCf8K@r)2-Th(hmr"bhe%`#03pd+A3q9r%-rbPZj(aH#X!ZaC6p#PmD1cj
+2-)fGQeR+9fL*a)TKHTRNLQ%k8CV!--e)'KLQFk4&$02,T8F-dkb8KQ%k6kV$-*d
+VX@#BAL(0B*KQ"2F6QAc3JbX$`%q)jbhQC`6j0&62D,iH1+kFhIR'eCdZ#6lXrMJ
+Gbc-M`cQpde3(*B(Jf4fSBR"k*p)VehL$NJKbjePJiYr5098)rZ9VK-V9rPY0S0V
+0dPM`T(V!I03*H)XT3G&3ba*[[ZC(,Q'(fQj0U`NF4Af'MkJQS2l8"(#KdN(ILcG
+Nhi(M`9I9*[KiPNXebXHVN!$Lm2%k+cNE$f`l+h&6*ePhGYd$*Tj`b6TEc`H1@lL
+hhhlZKbEZEFfK3!j1M1%2SUBKhXpjJSHA+emcHE-`jLHbEkTjFGrp560E6E@e!cd
+j-m00GpDf2mhbcEDVDYdfKV*MfjYIG*fiV+L[h`fkhI0R9"Ue4qc80PR&MqHXDbA
+2j(Vqp+f&,U@kp,Y01@(k9fHqYVqeC0',Gr$h+90RAKl(%IZ9iif6kmUQfUE1dik
+ejlDb0h3pQC3RPA0TlSSVM-X!J2N!GVHPf"3b2h&0D(l'bZ65[UUM9UeB@fA9#RL
+cZ9rUHF,bPfKiC3jedN4CKdG$!QakEm8c6eZbD$Vm8&A!#VATm-R[m&HarGU-l9p
+A6(4CYS8#KArr8Sk"[RY-*@S`q(E)XX0[aZ1&,Q)&YR@"HcH(YQ1cl9j1K*N"[Ke
+H(kFrmHeU*#$hIFk6P0hhQC-ZhIGC,rQilr0K%,+BfAHr6),C9r8GIX&ZAUR%K@%
+P$PT$5NqR!pVJl!eXa`XCV"ACP3*EK4JBC9BY(9qJX0LmAdFKaNfXM0JdaU8,@&l
+EMTCBPJdTdlM`@@XQ!pTGk!8-3bN--$1JD@bE0mr+%GbN6@dH4Th2'0d#YND`$p%
+I)ba)L(#NK%D99!U%+N!dT+b"m5M9%,IIS&6Xl@5LhThP'p1H[q81F'#feNl9P$E
+'DYl+qSR'`SbR!N@'rU!jJ3V+&kb3!,qB`P98(cT+*%JYY!P*p'MH5AhX*VFV0XV
+Q%9MVB%qm(3XYHm6e%Vc"'pVBe%8+#p@&5c1EXbN`al"ql`eP`N0[U!Alh!aAfHe
+BZ0`jJJMASdIFPG&M@1DJrL,H&q6&G!Ke8l4J6LZChY$c)aeIJLEUZ(R&!M@jbma
+*Qr6[N@K4bSBU5kc2Z&d["eUUHLq",N15(EB)NQSU!,$Z"@-XZj@0bSMkF3JFZ[F
+L3Shd`p-Vb2aG@Fb,H2f+AG[+NMBjrjCc-HpRI-QNmi,Kc5kqT(`LMl#SJ*i+Yeq
+kT0AXdl-L(6ZbQ&PJMpZ+bLAZ*9"*SLa6dhS*QbbU[AaIi5Gil[iEf*LhcHB1'm1
+qa0&3d)V'p&f"fFM[MB%HB5CBX(cIJJD+NrHdQHM&$C[qS%&&8N&CCYY'#YNq0KH
+$&J9fbTlZ&INhE9+F[rr+QE$hJdPDCRZHCC,LPPB@C&(i945GG""lMBR1YV%NUPa
+HF%UcQjVVkcG[%EU%BG'`*$Q#Ph3*9!#ih[1lq0-jlPim3'Xa[8,qk5&T!kpc2Z)
+rK2Kr5QFP2,c1UjKf+KAkRL52ehQ%'Y'V2)!VR[mCI@1f9iPlb0ll`G#,KR!p@#m
+J'ML3!$G)6ML3!$I+5ML3!%!5A#La)JR@5Dj)JQ1N#56"5LN$5I!1DTBH%HqZNp)
+3lciTe5(HA5Za)0iYP@83li#@HVfFL*B+pcVI*%@jelR5Z*1b"T1CaJ3rNP*qkJ(
+S4!lR,A+LfFi,M!@DJ2R*#*,L5ma%2Q[b`L'8P!,+c"P5SPB!5Y3mX)LLI!@"LYJ
+AjkqJL!N#XG%R-EPGNN)a46E0dFNE*'hhmLj@X5(Jlqd0H(GGFEMDe41mFTYMmlk
+H+p4$S6D14+CNm"69cG-FUIhr1dbMl5BLAlE(+IZ6CL*b*i[*C@r85d5ZF*AXI35
+N'J"R0-Sd&CEZ6Q9e@40chD-eN!"c)qdl)bjKR'B-j-j*qbkh60Th`kqd"Z'4MpD
+%EY8liK",0G#TF`I5cA`-lIYiMbS%LG+9BEhP9%Fe!AFTFlqK3,Ym4,@rC0m6,1q
+H$N5D1)MkPYLi0k'Q%4R+D*H6Y*ejLh*C4B*[DEPd,r-Yail,ErL@G16K[U)F+HG
++2ARFEiM[Y5AMQmjAPTV2qfm*RbLUUAJU$fBJ[8pkj9qrmXQQFpElZ*+Y(kI'FHY
+pHG'*F+k#fcq8[qT-5Hl2e@$ZfSDmJaf%f&QZj0mQFY"C[K"259TqM`P`fJqApNp
+8+HGh`["hHN#9V"bDU"M+UiKTXj*mX[8$rf,#%h[ba'KCX#,df`Zr2H%C'[lYm6,
+[bAZ2ljl`90cSY*G99C3ZrG+%*dd,rkJ-,LX@"pXQYLafj[LpKM-D*pBV131q#Bq
+AP"KS6ipFK%b!I$r5eQE*QYpBeKGeIGHbZbM3DGP92HHhl+UHkbMBVDQH4e6+DBC
+N,DFCbX'&FTUK1FD3!%mc&&XjcG$BmQQ'E'Y1-q`P92jV@FCaKN'Ei&-LLa+rQFm
+AZS#PCcQh%QmjUPMe+LHTA!Sqj@3T)*rb#*9,`1i[R#TGZVp`QU5#j6Mp9k!%PZ0
+q@LC(B$PfmBHA5Mj)M,p,edS55)cC0b'-h6G$cTBq-!J[NrS`##q9l$%)$l1,Xe3
+2AZS4UVpm5b0BD4Qh0"jK9"reJ`,j+FN*"I,6%K-+j'+*&3AbNj)V#Z3PdJ3+j#a
+*`cf*5K%K$HLD`%T@MZLDbk3dG-ekU3jG%`L'DJ9G%cMN5XBpLE-X2Q)'B-3'0#k
+mK")rDJ+Xa$!SAB#B'2a[C1)lGbDHjb9Q*$2!4#Gr&3'E1"5Y)J"2E2"hGARE'D"
+*N8!S+M$Fa,2qhJ!RkL+A+1S5j-33M@!Ie,(l%M9BF+'L"48dr%$,$926q)%VP5q
+6IH,D9B`I#)BVE6AXHHT1f$m8,$VEI2`V%jkbTUH6CGieLeeeH"XIb*9j5aEpiGS
+*Mh,9XI)bVpT'941H*@ffSfA"SR(PUqV%PU*M"Me`c%4&Q`N2(#0)JLS92A#*NkM
+fR1!()LX3[ePr9HJ#mRE1&I`BV5HkiCMJ"m*11!!FP)qYpX08*2IJ#J$"FB)8LZ!
+i83*#F-a)`!L1Nk4,"%FNjkS6"-H,%,X#5(!%X1&Q6BZJeB8jaLQ3!+2cTlca(+-
+k%'-GZDGLQXHl@-GLRHQQ1mk@0Y!GIjG@5LMSL-KdeKhSL01P2R6%'C)p1Z*4UTD
+FN!$Y&NK-b(Cc*&CNZlQ5+l)G%qFd",)G%r6d"E*G9PT%YJ1'X(*%YTX[T5(EA5A
+9)GYG+E%Jfq@N'@5lLE3%%$Zh+e'a3V$ZBL00!'hRSY)$f(D[BqhHSGUT23F!qK8
+a$3&SGbaF4B"SYclJErF#5E4ZGkm%#QQR(P(Re+GlrG3*iT`'`iCc8G`Df1hbGEj
+6Y!Ja-di@,23qC*`'F51HiEYCVT1kcRF,FS,[KL`hr#ljdd)AF0h,R2Yf"@h!IAK
+rb!N'-d!AUj4#dFA'5%$SBQ1PAh5aZkMiPh5a%#L&8kS)+@848M400S#aQPTc'2d
+fB%`&iBU"QKkQ"3CAl!'C"&HX-NF,H9Eq%le2@6+EPEABqYXf@m!r*'GKKNDT@4"
+(@pSe-)!PVCTKYR`"rY&M@aSEjQf4D8XQLE8B*MI(1-X&DRf"hS69ra8SNYAI$UD
+(m`)N$I8UX),ZT4,1GEX"qVYc9RpB[2eDE4r""RDS+"Nae`J(eTLC[$kB'3QPY'd
+'@UKV%r)3VH+CH!LCH*Yc&)C2H`DQ(i*q!GDY'@c%jI,H@0dQ02N@ad*00P!"fM@
+%jpCDUB-0QpVZ6Ijab0X$U+Z2c19Y455#J8&rjN)&Y3K24MSl8p&3)RD3!%ZmQmT
+i-D*q"&%r1KIeVG216r@rh2INHPK4bD1Fj*dBL*3D9QfM-5jUD!(+2!9TkU58adJ
+U!hd+-+r'Sdpp&(VlVV5"H68"mAmAmIq#INqf`lb#1GHPPeR5m&[*B%N$Y@XL8cp
+Nm4H52'VARe%PDX8Mf0Jr5(Yb&bYHU6Z-,fZMf3+fJDEf4IlXM@fZ@93(LL'#6ea
+2KJ,SkXJ1dh,Nq$r5lp1Id&p,1Hkf1dSeNK1b@UfXK+`'ZVdDQGe$Td%$rH'-EV(
+ZV08[jT4'GQU!E'Q8T`ASPY+5#[FCfX#cqbdk4&qA!1KfVIi2U[9HAp'XpqaBH%K
+FdkTBH2-N9bbm5G)%&YjN53-,$mP,1K%,$ePEZK%,$iLm#Jd,$cLqLJi,MlQ"1J8
+,MbQ2'JB,E`aQ&@[j8PN&P3N+RMcV!IJl$ZFYlKd0#J2"ZT-0Y'"QLKmiT!J%2%k
+#$rXi&#mM0D$Ll4Mck3QaZ5'"DakF2#N1#J)JVbr1Aj(aMLQ3!&PjDefq2PHA0!5
+5pfZb(91ScRNc8#ZY!)0R!&IRr(R8P6,#fS05%f2fH#CEUQeK!G)5bAcF,851D-A
+RI5DIk5NLAl,SRqCIHJ3[!"iqP,hj$L&b'5hrD3DF32@"NGG$le-M%(QbCcE!NLY
+lF$NY@[H%+A5*S8#lI,K3%h[Y!IXRdlDK3,YmZ&!6qjjJim9F(idpXHLiSc$X(LF
+BZeQT+)R+,!%24GrVC54d4dSCJ"#125IiJjBl0XSIr#Ib'riJ[(3fY9BGU6Lr3pK
+h0UPUVZ,)$RK"0Q(RTUrZ1l&EZ6qF!ic`SBRfPF@,!cH2"SkAFH1T&@ql24HYjpM
+"cUkLA0V`F[Ri&mGV+Sm$p3F"A@icf(kG0j3Db$qIK)-X#A@fBKAb)QYj)`p0#bT
+IDRV'6&l6JR9eHmV0K$H929`cGTpP1qlKQMDhC6[Za,pTYVKp2Yjraq+G[e)aeF9
+2,05Cc3pD!TlC@@8*H(TRUf8h[91el+Bf@[i8#+EJ(mSaL))QbCcb2AhJ#mVpH-J
+5a'rfRa@UI$838F!GR%YB0TXl,Zl(8q6jJV[qRLqSre`[Te93"T(4PUFr"e[ZGLN
+6CI!31!pU!GX2rZGMaY&L#J(ElmpSl6cE$c26PcCUl1h9D@BK0c!,p0iBGYe0&`U
+V`LeSNMKl6hHlM*cqU%(GTfG4LXh8RL1#PKf5"U8&0PRfk9R`dRCV[,QeRESC0Mc
+GM3DY03AdAE-48,TeZiX61(Y)JZr`#r1BG1b-[p'4IC%6*j'Npq4F["Zi@p@&@FL
+kkD89XMb1F3S[4Vrl*06eV,5"8iLFa'GTVe)Qhq%8!Z82'Br2BJGqXL52mRH%PNK
+!EU5p$,Rk#ELQ2j0ch%KEmA9DKIap!`Sm0+G!emX1%aECNiV!9T6fXJqUH)341#T
+qNfl%2+"%5ShR(6DEGf%'!Ff"b58I)#fCr+b`e3Mbf$Z`!6VI3XN*9A'4Y)5Uf)N
+G%H312J@Ui[0c9%8cSG8m`)S9hkC'RZ%r"9Q4YTFq)#YLbRi&9i`GRqFVaXl0e1F
+Vj*4B%4DVTBlA"L+965FL,!)j@MNL,!)$@D%K,!C5(F)L%-,9#X)L80Q9$-+Lh"B
+)qf'63&V%0EDm@',cMkS!EY&&T3T3&hQbVbV`&LAJ-qF(CZ3iT-@S,UJ)`-9MiDS
+'h-803@qJ0pMKlHf8Kp`S1(U*i!Ida9GTLXhlHUk!$Pp$,fjSlr$lZhkHCS@DZ8L
+pJ8m5lY0p5&Z8TL"baTZ!DK0K88fJ%I)ZjN#8L3-AC-&BHi"&+JYJ4E121a"VkX+
+&@M)I[U63m!XYefb8ArLJ()GIq2'LF40Hq('EbXL&D28j@hA,rDf'hHH+cZcTDE8
+X2lVhDFYbc+)pYQR,'dkBPTIE,@lK0@p`#`maQ8@X`SKKD,Q&3M%8EL(E'QiKfaT
+Z)GXDEQ%#i`0ZSBF91S5KF!Z&B8MF3X-U4'kKB4JLYj!!lCKEQ-3)JL*@)A),b9U
+iKC`E`bdX3[c)9VL&aTDjK@aVZ)9*[-JYI&b1`5hXj5j@8%fri"FLUa#rM`&!D+T
+mqr1FDcL(USJU[mQ*100q"9hJ&r+9K*S6[j!!Vb681'i6R'9Eb2Q&"qIbYPSI-8P
+$EL1eDc5`64qaS'EC%E6Y"Q(844Y!fQB9UZIRk#PT!i-1'AMI3I`[5(PZjCXT!EQ
+9$`Q%hd%@Aj!!j&(d$Q2D@N&2iikm2j&dh*(h&e5"r2eMFY#$e$9lkephMpG2SS[
+mD3JmZLMDU-RV)E[0Njb3!0hJ'M'eK1`'pi#T*f3hT#B+f8d&Z*P2Qb#lA5+a)VY
+G+VNLZdf3!#D3!0dQ5KV)EX$Y9BV)ER#hUA*%GTXVT5'lCD8kC$IJIDX9C,I,*4U
+hmee%hE&dQ1@',qI$4d8!j!E"U!$mYQJbV5V3fhcBLY#eI&J50!4d@hH8QJ'aVE'
+hA4)"DMX(2@05feP[UX'PI+qbfPElEqhTFhGepRCi26,[5rCm&BmF`Q+cA@A@cUl
+08a13!'Xpami93cea%PfmL(N#)fEiBCBV0-S2ql+FJarf+)YrrPp@@k#VV0-#A9f
+CXRKK5pFiMeV4cR1b#)hGJB,G0-ZI*d3p`FPKFkbVjqE`LqI3CXdp1(C1A(@fRJm
+F0q&Jbplch!p00YLD3i%FR"M$(d40`q2(cRhpEKa1pr`CP8EY%6Ze69EafqRU@XN
+cZCirI@ZK5kNZr@j66TMqeCQ[l@mY@I6L(IapbY5CPmGT+bRMMC2VbUEDTXl6MVA
+RYV)hG$fCP#H9FfRZLYAZ-J#i-T!!dTCL8dVma)TTISDTK"@cXBUTLZh@9PQkK6G
+8&G[Gr)6P,q'aVFa4FCXCC4dHl5ehrk$LQDFYd6FGIUJUB)ADG2MNGrLVf(jYa[D
+[+bDk,0[5hA02hIea13C"V$[Qm2ijC)AKGqP(#e9qcAV1&CY,cEKrlYpcbXFXF"`
+UT4qhiIb3!)U0ffVq3"*b@meK@L$hZ(8(L(36T&"%ZSN5%#*G4J*'T*XNA5,56CC
+8%1QQ5*q)G2-P(4Ier46h#1N,&r@Y(r*)"%lUZkpRU-(6F#Ikhcaf+AJ6XrHZ[UR
+5KE[kTNQ1lZUE,RfiUfq'[1HZ2TLD`4e+ZXG9Dm!dR#RCZ`c`+,me660Kj5f@Q,$
+bkL3SV,`P8K0@hP85+eCHVH5+PFIAb@N)V,cCNJC@(Pi$TK1am["+0pf)P3HhCLS
+dV$bi8P24BHA"*DCU"5Z2EpR6-&Kj%fNaBAY*MTfE,AKjSB%H!-fc%DPbPmq&08&
+"31F0KUSBm22@GhKqKC1iGLljUNi+IU(PQVh-,kcb51(ZR`0JiXrbXA*5bJrERFA
+&q9S11hbZXMbrX@cUrIPp*8YU5TDF@G1HHk"Zkq,+r1,m2[Xr*I[4-qANZRT6'cR
+cLhN%Xh0ELUJm$aBI[RkQE!Q9A,-`AbqHEbpjJ%Tb5khh"ACPD@jT%A['#,pD@EE
+U$%dqm9%D,GQ4Am`UdA1VPE`"$(aZpG9iSS3pYhU*DH@emNfjdqefarU6DmF&Ia&
+CLrKGpZ&#Ph,jqcLAF6lG6&5eR*0ACNX$llGl3Tja[ee181-JKqVXhACAm+`m!dV
+E(#N6*Hm),CbrCSe,Z2*!3@i9AF3!"EQ$0R$1hbfS)(I29T!!fr4iG[K[b'-SNhZ
+i)`Im3k00Z[i'X+##[N4Vj39X`9dT2D`Kkqh4Y*%8VB!c@2P1@Qpa"NZkfB!#+8N
+m3m1c`#meK)9(kHmKiE(Y!!Q[3a!FS6U8#Bl$S)k`)TNFM&5N$YadCeL+*6@r`e+
+%0P8SMpdGr%5,TeL+qGC80*5)(Ab6ZUHU8"9h6XZJPkdB5@@`VRbCEV3jSHql,[)
+Vac1p0IDkI6m61,T*DmSV!$GS%EGbeMR5(VrrS`l)U&Ke%El&l2HUhQCm32)(1![
+mqe$CAdSEQ*T)X[j,-$ARbAHBQN#NR-bd!ab0HG+m+aZRB",h2(e&XFNjVPm!jZ5
+Pb0p6Z+cLHl4RpXV'Z#-F2NM#hAkL)G`NBD2[1dZLiM[XrLpJiNbLcmjPYM6R'%j
+Zj%p&b#m#ZpadS5r(hk-D6J$1dI'j1E#E"JiaJ(PNT5&3J0ei,NhQ8GSX1@'lALX
+YBEXHTCXiqI5EB,[qD)lYURk!ACqKQhPf[`fZkiqN!&cA0k'Zla*GdbRJ9h"MJ9l
+&FedSZH+j6T8Qm&bR54TiVXM&e)PiVXM@e)eiVX#@9fKiVN#M9h4iVR"eJ9V"Fi9
+V&j3-RZXd3A#&ME+*e&0BKA92QJ$60BcTIDSVlaJ,h*9(jB"2C8UVBEe'8rr!Q[B
+(E"X[H*hrLP&V!3"BhYk1-LA*k8Q'$6cc%c#XRX#&ABQY4*)D,IQV(T4B9f8d"%l
+X8,"U!#QfAjR#M@hbYhZpRNlIETN%16C`)L(0(!hj(N)@mZ1c6q`EMqR-ZIhq[Fj
+U13@8pMCr9erh&EVVU`cE$Gj!jpqj@pIAlICHZ9rc0HMYVB(G,PrR1rm(RGBNA1j
+II#NYf,lTU5G[f[j*[8$V5TF6Z@+-b[XBAQP[)PHbl*MiNYiQmX8$F`8!fq[EQXK
+PY11CjYPf0MlAGXdfm8LG6H5-$*5cmcpjM$N8CqV#"9SbeajSaccY()ScGH%#,CR
+h4-S6fD&)8aFZdT+j$S%pMPI9I65@ZAIF84KfMa1-h5`@&423L0f"YNcfTr(hqaN
+*RfPXD3+`kaR8@Z+Jf$-T#[H`TKjHTNaAj34IfR*E4rR5mq8iI1QkiVEa&GDPV2#
+kI!@rP[@K#@rTXHrhHmG`-1ZNLH$#jjBH1lTP0(#mM2'@1jIhElNp&a8mj8jR8@j
+TdPZ85qIU3&6Z$"CpY*+19PFH,`2Lpq64V!Gj'KB@U5DDQTlBid,E)jE9Q%m9V0S
++9["NV+S0Um*0VQq!V"m+,[lG,hDi*lEiaSlbM%mVFEBm-l&ZG@X$8YaFdM+qTha
+LbkV@FH3BBPrQ'`1!Qe1bc19Y0(1bl1hX6Hc@MC8EGJA5mMHB!ZC[XTQ+jbFZ(PG
+(@FRJSR,eX3kVU&3I'lAXUSqe@ADjN!$P,a(l5K@FE40P(4k0*TV8Xmf2E68G0kf
+TAE6X)8X9mfTDq+ZaECbfAACfk`FXU(@KNMdTam"(mlCBZ2'e4JXGd,"K@%FfeQM
+8Y3Pq0,+LmEY#,A3Kf8Fj9cS(4Q@&Fd$`Si'AJl`CaH0D9-MFCIakemQi92'cXpH
+lZSlf0&6'0m!U!P-'PrSNhMi+ba'UP(hFP!H%FQ66kNq%mVR5$d,j(j%UTb#8[mh
+`9@6SjI-N5r6b`l66eX3jeFZT%c[LPTL#hA+62L-hTH*@jiI*+DQJVa2(@R@k8IB
+UH3&((*D1B00),@#(hc0pSfb*r'aR1kS+16`Nc*Uj!ZX[@m0EQfBY2*6JG0NQEPB
+V&&P%!T1Qqm[e0N&Xri!V,SRKXT''#G5S'LN"5pc0$,YkNHfi3,'2*PkFKfSY6'N
+RS9kUY"2+3#94*8ML`,MqZ26KEYa!hR-h,M#Z&dVhVUkp8A*#jVe*BR*el6)*bY@
+ep9+6UfXA5k`S[8XN9j6H4G)%5ZmR*!f8AU$N+d@8AZ$c+dH8hZZP0*6H'k3kP&k
+i`d#YS26#r3Y+"UAhcfN(%V15UXP21fGhqd[EQ)EU#3d1V21$1!hI-f6FQ1[)(-q
+'[-P`'6f)cm6$D1ilp'J8``@14CCmXbb19*!!FqNUBTYE[,09J4eZBK-l%cd!44b
+'G)C%M!SE2M)h`ad9+-4Z15K&$`m!J-qMKbP"P)%SC*FNEB)eV(R3K9hK8"$J`N1
+a+JCAk$ClfcX#hKjr)#L6J!P6@&MM2X!*Db%AkDS(,0p'AbmdY&(3F%HNSDYbHBG
+2hLf26DKaXGf41$2GdH[Jhr,NKJ-8bS*kFRH[CJ$lMIUHb+0E!PF6J,`P'("EHZ#
+0f08QF+mUFMb`NJ25lDEG$R*dHq'aFI!R%E-$N@X+#0dHRQe9[q$A@QlN+,pfKKb
+(Ac[(BYI1iGaDY&Pc$k#e`JhYE$dI1'la@(rlZ4qD20BeK`)j1$''2iLDKXH"Y9r
+MF5mXcCN1kBNp,PcmS'8erL(,kQ)mL48qX9@pr8%c56iq8V"Z3DbP@i6eTRZ(SrF
++UMEiY-LLaHr+$aDkM2'[F@lYTGLaVlMqhGCp`aNT&$edN[5$(RU%Aj'SBY`hV"G
+`Ve338ZJ8kG+G`e-P&D60DG)RdZCdH3&T%qSd!"bd!Y)Qd2&QS(Y!dZC"D3-GEbE
+L2iMireLq3mH$kF2(,Yr@$&B6ThYhaB*D$(br@8cpN!#[2jEQhE#+0amm4Vq25dR
+r4XTaNm04fL!ji4-'%K-qi8)*#Tm3EQT862L%1BN9Ra$[1p@Xq)5A5"2iK,-P$Ac
+#Uk4&I-*Uk4'IX&C+`bHm@UV$*i4,V08+2Z%#D3DIF"*bXM&KRNQd"GFL%EN[-Y%
+$d(dZT[H[#"9XA`q4ld-JRd5G%[K1!2JbNKX#Ak4r"3("GbaBaB$"Yp&RAK"iXd3
+#`UF8N!$hcP,JG!2d(P2J4T+QF0,S9!i3R#TfiD41!%SlHedKV%X)RmTbBelQ8if
+YN!"9mDRSS-,jhbmb%ma2V*@I[mL`5DbKAcafNk@KCarEBGNpqjLPSU92jber2ND
+il3q3!%cMPRV-)1&YZ4PPNlhT[Zmc4K9C0YRhZ,feCN6`1SQr'YZQDG[*6IGA2I@
+@E[R[AmNa%%dfF'!`(@Kh"F"RQ["0XfUZ[P"$Dc#["Nl6'-b#+j3-VlfEP!!Y`d4
+l*Re*fD$8MLpiID)08pLle9kfRP6B@-EYR2E-X!kQ$m!9T0hQh6CX&A"N3Pj`8!h
+c$*`'Q,%eVkq"&d045Zdch%H[-A)kD)A!MLG1T!3pN40X#lGV"l3iXeV-pfYHcUI
+hIZdPA-c'*&56`djD&9e0QV*BqGKdRd1+`XFArbhp1MR-2Hi0I"F`M`8Bi"EKA,N
+CLa(E!Hh*1c$rcr$9IPPl[kDKT@&Vb1&SUYq66G5hE(Bi(,XBY@'h(Nf&KX'$`CA
+ml@0VD-BTaTQRqRV)"(C"S%qM`6+X'%!fGkQ4l2$`'"qLjY9rNX8)+5p@I6Mh)!T
+JkX!ZBh[S3#c+B9AB+#-b!eeQ0DcF8Y"CD)+)%M,,`H%Z$ADL(T4Aq'9JbeY(d%Z
+5I!'i"IP!dddKYN$EN8efXjc%9%9A$D$pa)ADa5`ZNUGCk%mdLXDTmQ8'EHG2,QV
+J*"!eL9+e6KX4)`CSGY%F4p&jFa)4ZZ!4!Vk[68H4E(D'El#[j31bNh')L4[RRV$
+%85'bd'9AF%CB&"k!+VHRIabGP@!FRr8TiD&3R$BbJpP%@*bpk23!#UCaBXk&fGT
+Q$0Aa51aJqKK[1)1!6"S6l9LLJee[ZX#JIFC$V[S*Kl-EFdbS6mfS9QhTZTiKMr%
+5S[H$EN'EFCX!&#f-3B2Z@$SXYJ"mFNSj`p6DP)%0lY9Kl6ACFbD80IGHbTLcP4a
+l#jGZEcFB4bb#+(LV"fINT*%%3P*a&T&U#PP'!8@qLeSLdB45+T3Z+bGBdM!bJLF
+54(bA16k,8ZM&+B6H5mS!UeJ4'%pB'D+l$2"9NKi[LjKFB*,4KdeZ-BeTJRfjB$-
+LSCJm1a0+UhX[*G2CLJLmK41$YaZ-)aC(&,`9L6-UPJXI##R(@83++Q3CP46j,LZ
+U8$(LEX3+#[HRH(0V88-$bMTZPiE[J-6"r3CHXQ+cS"kG`aCYP*P[3"laG`2$45*
+a"Z3"QiJjYVb9p@56(*i&#eHhFHJ0Mhh4hmTX$!00j+hJ+a,Xl#1XHK'S%"E1)G*
+9I%X"lAKc!&iicB9XPY2Xb`CQPE1hKfHBhhKlJj2,&V3@bIPY')l8-IS2'H)MCGD
+!-FN#9`c$,+1&Zrm0RcHa2'0Qm4(U4iIj4V'J3C4Z$MjFc-K2EjA4UGFqmC6IF,j
+8DFbITV+9k[+(mkGa(m)X"+BKP6J)&N`QXYpJ8+IFLPhXVqBZcTpB&kACNji`9D)
+pja!-`+-%9QpNpF[06KU%B2q0!H!@EL'8G)rc#V+6d@B-cYBMr8hqeVcqTRc'dKq
+1f'G*F25hK"B3khBUk$G!rc$)XL(pc6XiVlrF2UJ,P1IU(paqUpVSE`cURh5EjqV
+I(GJakGAI&elMc#"6rfEMpeM*MIjU829i6P&"frpc"66k@hjfARmV4U#ZD9EpQiE
+Idk3hqXY!Iq&8k&6pUhpmARp,ceVecqK2ZkPr%d&5m01hNrVVH'&HIhRl"IeKrkI
+Gk'm-HJiH5aj[rkcqVRp,SkLrkek'ZMjbSIjp4(UM[dR3RjX[Rp6I9GhcqUXHZM$
+r'#r&QApF4'bdIU,kKITV`3d'[ITVIrk#rLC*F23h%4HKfM@+%IeYR*MA(pa`AXP
+Z0aEp6F([+ZP0rCY)rlhl$[8hChKHIh#M4$6rRL2"QAmA,d$lp2`-d1K[VRYHIh!
+l4Y4rB2h6E[U2)XGVm-[f"YeGN!$12jm4TAYE[S[ECaiahKQb-(DhPY!1K%#ZVQJ
+I`Kl4RIU2kq[bRS![5&4l*hqHB2XHUG5)reR-k-Ga$mKY@)f#qS5)lik12Bp1[4T
+GkSjZE*KkG@0V6f"Ad(GkbDP9UcI@2rX4f2cFrBPNe8CbIm*hHXe5GIMCMp6dp-B
+9TcZkXdj4m6rR1kdHDlP086Z'Rhd8Edpdr8Pjc[FE[Uc[PUNIE#cY5%cp`(Hkj$A
+h*cDf)[Vjm2$dKYZHrFLJVAm2Xm@)XMdElFNP'mPhZ[Sk%H'+lp15pRphpMVe'qS
+h@Yk0*IPC,Hp'cQDlkqLk*0@f859HXZjrUDLiC+6bfB-eYaN4rpq1&iXUh2A2(Ya
+cqY6b3E[[Xe-(qiQ1)IU&TjDcl+j$GLF[VEj0[@T`+9X&Vk##e&'IcDl1VLPmD$R
+CPeA[6DN4"QcIRXdmpIm"!!!0$dKjF'9b3QPL9'9B,Ne69facB5"LE'&ZDb"cG'&
+MD`",a`#3%2E@!!+'H3#3"2q3"&G%3Nj08eG%!3#Sc,5JU-qY`!#3"3&8!*!(GZd
+!!#'k!*!'#ZS'!2@pA@[[e5"kA,RLQDeXdN)jcFZYdH24KGekI4fpSTYpY0qki@f
+iSfCHjm,@I,CQA0Za(Nml)GIfdB@Gf5hRfYEYZCqeQ#kQlV-ie(6K#qAR,E6I8Ak
+aK5qmmaGZ46[EV-jcHl6Vdpmd"DS'AD2bYpPCJVHI,15K""@3!"`MKbq[Yq2dl6T
+,q6P3CTI@a6,DPfHhX-h1+aZim)REplEA'8[cZi6mc&ZBA4H$qXc+cU[iiRNe)2b
+J4aD[LbbAQCN%NS9X1#*3YZJYATeQTeGR4KC`aaI2A!3AqeK0iTp2JDl[Zq`E0-N
+q,r[XV2Hb8h),1HK4!ZRK!p$HliGZBE-BrfYL,%0qLCL!lq#hQ,$Uir,l`"Vmi&Y
+H4I"rQ8UQrklkkmV[XNcmHSbP-f(P#CD#AiIB55EFq6`Kq9qYq28Sbf9#94VKAC9
+,FIJe&lmZBmdUdP8(QBKIMl*TU-4LGU05Mmb+)H48c``mLMK2XBAUQrd5R&,%i9p
+4qFD!+eMLU9QpG'fbAH5[&cL#Y@+0TmEVmGF&(B&kMe1XGB3F0Bj'PpMJm$RUA%(
+4l3q+#ZU&GcYmBQ@ZD2H&0[L$SIT*UjSD'J#acYFBmS5D3Ll4laBV2Ekk*Jm#"KS
+R,EfT`H(ahLUk!,c%SD$f0RUmZIjJAA*jFV3L48qMk)J9T6m3m(UFMT!!aqrM&C!
+!DL#cT&VlY')0LaiIi!'d`a%5RIk'!*!!YhKGiJC2U&kThZ)i-96['X9A`$f8eki
+J"HdJm"eqRhHMf06SUTAa#AZCRBSdk(Ff0EKm)8)EF$8f%[$`aXD3!+XK,PH"3"e
+CN8%4KH2l(T4df#ARH,-$VB'Q@K)RhPA[3AN-m$C2V8[0')9N[YYF2PI3i48G6NH
+YU`&pbEVXpAP#'h0%6dJ-ZY"BYc5+ANmSK$aZm[Nhq!MkkST+dHN*1VfZaPbaa0@
+)a0!EHaSTYke0AKpU4KLAhAJp&r1L$+$4qlf0IV('*CH&26JFF$Np$UrRdhLr@H[
+bBU!T'2#M"jH)Y`&NU0R4%2#kFX3lA"Y%Kkp@r*Lce1rcZEcIE`42l(%&J6cN#)U
+VAFdK!Q6rJ8)@9DbqEAlFH2FX8ISNTLidbmeH+XYf8-qJaa&51JI9"5MHp[L96N6
+3lNEH,HLJRD#Sh3!Mbpc5e&#$P-&9@ef18&-33AKc2E'GLM68'+*%!Kp*-P,23GI
+G,UmIFIS-P$he+,r(e4iZdBa5+4X0"99'XDlI,6UDDMdZRj2`L`dHAff1Z)&S#c8
+H$MQ#)CQ"qX@DS-IP&[ehZi*hHp"BU*Hf`j*NHifr+D5m&T19hbMAX1K'kdKT8iC
+('C!!M&'QpA5JID9%p2,f1R4'-9pXV2G[S+iCjRdYk2YbNlA`2MA3-TIiCP[*LK9
+hr0NkeiDE'Ta1h[lRjH9-XUpCAEkL5[aM-4[NX&KFj[Fj3[A%0$&0,"CAK9b"HTG
+2V-V0cTQdZQ*ej9*#0+SJM8UR'BhX!Bd!jVUPGTlAdU+L2$aI[E5UBZNU"&bjdPk
+D-fRjQSq9,*AMcd9dAePCeG*9&0j9j["k(5#*DpBLE[fDNXU+9H8F#86kPZ69)',
+3"R1@JKBE2A8qd+)+L5(SN9XS&Kh@,jEirHZ8jR#YX0[Pp0Ij3*F%h"i-Z9"8028
+YY83S!UAUi(c4(J54NM5CKIkkf4A+!@&U`$TIUGrVG6P*$[&e2G%ef1q@1Y5Zp(L
+j`pIN3"0Gih,@9lN#d&Z-!5[YEXa#1BFp"(KMVITdZDI4QF2lEi-[d!5@'+jheHD
++5ah1qPL&P#@f%QQ!"iC#92(GV[90RL$)MZ!l!e3Cd!J`EUj&AX005+#r8E3hJ4a
+hSacE)913!,QPL!M#3PrXp1@LRX"91PR-@`Z-X3IC#hGT4Z@%"&eb+MS!#rkm'43
+-+EY2A0rNK`k&RYVHi+'U&qFjQi+3!!9EJJiSR+U`16eAT#j2-QB&VRCaLQ5D[QD
+Z&1"$5!$8!*RIiJp4&9fkJamPG,+S3K%#,(bcA*VqQTUJkfj)&[3+k"pFM*+bI'm
++)&(&k&feZUTLqHh)D+X(DSp)ji[*5Y6h%Tf4YUjd1Kf0FXG*H93S#kAhUB,a!UM
+J[F5AAIG-8[%T$`(rSQc[ZLFjeT,5$mD#+D%lVEV9%i4F)L&6[c&#UH-QedCaAL-
+DifBLDZSND4K+HU&-mL1BN!!`SN@F"V'H$%NJ+cCD[aJ+0LQpT34LJElp2!'JNAH
+V,Er)KcFJ33LbqH-QR%M8LI$qFFQ2!ZjfZG%f8NN+eDUU![8l!EE(XBliJbf*,Sb
+,+kS-eD1rBAa+BNI5`k'02"*eK4`IE+,D18q$mC!!H8L&*82bqLM*5'h4LAZ$D&S
+TRT2!d**+-RY#)(4a!P`IdMi)Y@A1S5*J(K$,cBk0XNKQAG$mfLZlr%L25E#4S9V
+"LpEe-&kB@&P)5Zc1%'6@2P4kPi-d10b%hIi'K9G3FdHkZm!adX5aGPk5,$X!qra
+0R,[4RZ3"QJH3!$ald0QS"BZjK`VkSZ*e)S+59Zb5XZb!&QA6!Aq(Bahah9!`k#H
+G$iaY3AJ&5m4P6D#kR@#k(H"+5#28NR48p$ND8%Ii90YP9dKPb!j(F"e[VX5l'+M
+hVh2PLLYUl[EiQaV*X4!e+6E)X0m,cJC"5YYBYG%YYi4ZFT(hJ1BbZR*q&9"J"1h
+eSUqN5D5e,&fRjDmQ[B+@P[SE-(4-rpf80d5TXc68jVR9%D6#L)dQ!U)B3(E-"4C
+2iX5)CAF,h!LYL2#1-#2,2K6+65k$b0`'YfNR&*H)kDe3X6Xhm*6))qc)(3#$4%i
+5Je1d`imffpj!qK@f)3S8%T&q3J1cEIE",#(rd)!JN8'l0MqF1&`MY2THY#I8(J`
+Lp0TKEa#mRD,Z$9$Ub&9p'*AXLF1KbPeUiE3HRXK33mh%)pYN*Nb5T$MCiA*!TS&
+JY,EX"1*#!GSVL%YCl%JKdEfh`MF+$PjUe`UEEh8i2Gi3%4lE1A$'BV$8VCik,Rd
+Jd69M2-"('DMR6kc&EKH4jDd1lhK6L+IN(6%dkCBQT(NQk3M2qF`FUT@GXEG1lNL
+@h9(+YD8I+q190IrCe4Ebj#De`X-1Y`XZ+IU0[L@*'Z*cVa2baXbjE8'iS#c1kmJ
+P-Y1iP!Red5id#&3L&-mf2cGJG[ZEkXK*Jj((qU!()BN'eR'H(3+$JNHmL0%dES4
+8S,`8MS48hGd8q)"KqX(l0!f"6Uq`*%[-db!!V!Vd)@aGZ",pp#3qb""H893RK-B
+Fq8S[ZY6BCc4%#!kA3Jf-hDk!#m*q1qKGQYr*(S@#1r12r0#+k#D+&M`liiHK,!H
+8-)ck36*dPGT)Df43G6*38)MkAH5TJ%p[p2Zji)(mKUE``JjUFVFIJSkb*#h4%V'
+-LL+p*PU"KK99N!#S+4%4aUM8&hY$INJB'"b%J)UK#i9QfdDeefilN@QI6)'Z[aC
+c&adPPUBIJ(iQ2d*r%aT9"ZHBVF9fKDh"e-Q9B[5kcNCCN!$a$Z)#TM(SjqTq1r8
+$@12-TS$DaX)L+!,XTX8aLUHQF%TC'`BYkRLV(i3MAK2NPJKC6HN)kCK133*Nf#'
+C3@j%(@mMbDS@fpB3Ij5#3ZfU8h4-m*b($J4E`#qRZ!BKA-h('iU,H$ERJVU#*ij
+fT!Ne,#lN`FYbSD0$p(TZ)'M[h1,hhE689dFX%e"4+SmQjJ+UG"ZRA"S@3fJ`YTF
+VmH[m3@rY+QI3%i#`I&iD$INidcYc3fG)a+@mj5CZ8YhSmJBi,r6l0T+80k%0U5"
+UEEF,FTIN134*8fN8DJ+`S8[P%NT&QeGN2RTl*l+9X%90-29fU`edlRbHmTDQ8)L
++(i6M%Uk-GD#$H%)HC!,eK08cJ!"'kF("U8cfm`X8B8-3"$IR*YqZ6Sj3e1f"Y33
+!0qrMK$ZiNmDhG!D'$VBhF(SeL@)Qk'kA`Q!`)2YP[dJ,RGSVJ%Ar8MN8ei48m5G
+!f[V3Clj(e%)5%U@N%!-#r34'"RFQ+@RHM+AbKmZmQ"T(jc[BX32q`%Dd*iM+U$D
+NcTa$aQ!6@1-8,diak@b*)h2dN!$1le5G$I)1r$!E!D+Z"b&0P%QmBb3QN`!Xd,$
+LYX!l38fX2e"k#X+E5'M3-KR,3cdSD3lLd&Z4-PZ&0AdR+BlNi*4D-(5'8$eN41[
+"#5hcYTL"P%E9cEk!2&UKXS4-"8FR0LNJB1J1aaB&R293H@Ha@E9dDU"LXm&[&Fe
+1RqSfmR9%*%Y29-DbU+Q-`"Gc2*1F+U1#DDS9M2e%GJ(5NSbd6'DSFVj*2'"k[1L
+%N[r6E!I*qU%DX))If%MFRN9MFaT$)@IZI1i1QNUK0)@c2i4NU"2`mm5BK04C@#`
+N16Cl3AFhq&Z59l'@Yq)!V!Q8HaZFM9ZJS2TJL`+)1PLNV-mZJ$#CQe`39QC+P"N
+lEXqBUR`b*)&3PdA4Y%lR0XNq$)BN)fc'DJQ[JY#BV$"%@L[A`1@+P1aUUp%kK4#
+2P'+3!1`H)5YK9+f&Vb-DB)#Fh&!Q)i0q@%VLV!r$&S+AkcKih+IDfH$D31l&ATq
+-,CiLHjad4Z-bL'!6)A")i*@6LD@ISA#hHTS"'#E43JAGB*B8'm,0M9Ga[XL9X-+
+Xbh,&+T9Sh*3+a9A`TL@V,Ai[l+Y8#3jiQfK'd)X@RD5c*0M@Q*j3H4Ji$Y*!mGf
+i#bP`hDU5j8T"&iZ9IRNNK@1!DLDT'Zcc)5@*9#dBh[eBa`!4G6*k'@1SHSDV0mk
+*%-K`Pr[Kl-,4fKNJ(`C1mk$I3pB0Td*9'Zh!$*fb-A5cM$+D(!3qqAj4)h5[YGA
+bqER*bfR8`&LS@JNhll+"9*ZCCDj'0RSKXdBFRS(Xf)8bZCU)dD8B9KNe`#J!cq6
+62k'A"r`d(65)pKi)S4(4b5@$[e5cXrP3#cfUS5"QBV3qdZCdAH+*+QQ+9,Z)I+@
+TKb'(R3fm16ccB8j$KQUm$X-iC5N9VekTl-4JFj*lL6L["+j@TB9NkLaZ(1X-(EG
+`*#dXF"80T!ak)-Xi0FVZSC'mC2i)PBNpEET$rIT!`fElkH3J6'SC18QX'"$*AQK
+d6-r*L)"kK0+l`U-@FLE0#+%(YMC"Hk'%mSk"@%iJ#jq"#L8%A[!f(j'6pdlMPZ)
+Nf1#IiPf%0A,E5rb1QB&",mfV*HU*T#5'9j-bElN-+XmVJ@C"LeXqcUE@6)!`K,-
+j`RLr!H*#XVpC$E-KRFQ1f4X`BPN"d5AF'q$11Z*N,+3d8q[4REr19Krh+ZMLV3Z
+TRQj-)V(9j(cALLU8TT3ZiGL01BT@!l$09Dl'T4J1mZ0FY"%K6JRi%)%p60`2$a`
+m`!`$[3"BjT+[[Ded1D&Z8e$,'CjqZA4#RKLE!$XPBSjNYJ[TFM!MDHh*mN-B$S)
+01-q(+B$$@D#q'haSZce0Q*l&m(2LZBTAH#-FFEV4+J#mZBabDY[FjKI[KVQKCK!
+-deZi[9j+efX[k5rU4j[qdYNK$JrZS%%S8lkQ-!8e0K[@PA%C!,0LJ!DA3fQ(VhD
+3!$2'5mCCUB'8``Qb28M&3)Q,AN9UbPc*C%lHJpN+[dS6kVmEALQeiP%@8U%qh14
+fHjbBcmB)d[C'd2%ZD)I[%MhFJA"Dh[N-1rbeb%',84S")!cJk3hI4[-MPa#d+#m
+i#8ACl`pmTb-EEJM'TQ85G`p04d9LibM3N!$QFBMifN@c[QBKL&XJPSXC,*9m8p0
+6b-0)JaB3@PHbUE#hTV8hY'!i06Hh8,9,e,Qe`6IS!G)aQB5CUAh(4+'3!'3#"kP
+[)DQi"IBP*E-iH495e6DKc80r3T8LB#DB8hS954(0fP4e3E)p3#G!5P1*4Y"L9jI
+B##fS)d%H&AT`YiX)-%`'#4Glhm3*FHXTdD$XACNM3,!C#J!#bmNX64Xi(Z1l)MN
+"X0e2BmTVd%C#2'36QZ#$LQD6TRCjD*@p-ffcEcHlh&ap)11pj2ecr!drpi$@NiE
+Y[j[VEdN4l!U8(93AYlk#LIAAN!$pUY5,TZ#`$Q3bi[cJ&-)j3%NIc'YD(A,5,0M
+LcYRM1+mKBl`alCm`UL2ZMC45+&B(*Sd``4QN9T3+hT%EG"*+N!#"0QP5H3&Kk32
+kPH3M6[Ei-%Bk@T,1[(NGL&%A6JlXjFd*Pj9MSPTYTQ96F0)Gb@3CZPFD%"kfQYH
++Zj0Q`G$6eXj!e0QY`chYePp`eF41aA38LHGlZML[cZZ[iC15b$c"88SLRqiP1N`
+0&jQJ4hYJF-lQD*-`2ki25q`RjFNl'FNGRk&5[ej8eM#RHiaDk659P0'A08f%H6U
+Y'M*)"UhFT)!0@FP`"&TU"kV,rZ*3$SHUp[%C(E3iPEmhAM(1$%,bde4A!QSAe0K
+Z-MY$IcYM*ahpF`4c2NrNFT!!0#BYBF1m+9ImK$+@205-%60f!2bM-G[*#iX5GMc
+B,15'3E*"4`1&khU3!(j)qh8Bm4NL94`-0VI'a44QR"+(`QpcHHVUjC8[Jc5&ZPZ
+C,a*ab+S#RPYPC"V#E6Ma8`pU0m(,ZTVhMBcDb+$1lPSD(&(f&DX9--a#l!041H3
+SkLVYQah%a$,Ncd%L&XpBDQ!GT@RcH,,k3DKYP`I[TBN`0-f3!)XQepJ%8%DF[0F
+P,#SAKHp)X0Jh`dNXXh"C2KfT[9@9j+)AGX"+6bFP5qCKQ+IF#PqS1P3TNe[9S8`
+-J-J)%M@P6UUU2drYMC8(D%VeT%868&l341&BPE@ZjSDDJZa6&[0S$X3CBGj`KFZ
+S`-Uc0PNpI'YbSPcQXmJ!faP-6P`QchUH*@qd1'XeLYkFU1fd1'Y&X-k"&59#b'H
+T#b(iGM90GYkmS0br338E6%j8cAbKP%U65#9+mjTl!fJ6Ce&`"%1m$9!%EAYU%M(
+"bCRD%@&a"[V0qaSEbC[C*lZ@`FP9D`rk9EGaF2k-C5JYq2!M6e`93"AM0ENXFq!
+S!+ea@#R3BmajC`d'm+PNE*`TY+$AA@Q&-3c86dBpp-JLf4+(T3pm-BSX4FbNU(S
+5Meh++S2k'*c#1#4,Sl)Bmr*q9,Y%6M[G),m`SZ'(rN4mLp5NkSYh!pKH)Y1H*#F
+hEbbKm5LbQ"bP`E5Ji'5dPj)Q'EAa8ZB+B0%eab)$0&mb&Xl)N[b4eLQRk!db'Sa
+aIU!bKU&D-&ABcCJ0T8@h9EC2#+%N)X`4dM'#&,'QEU0+EPe!JBaZ`a)&(9266+h
+'U+l1NXP8&4Z0D8m8r!*jUPpUEPe$rT!!H-rCSR2-#K2I@pZ*ikA-i4T(ME`9"9a
+cPBY[l'$K,L3kC+!BGaL@,HZ'iIP%6J0`YfM1biB1kS0%2aZEf"KIdL*ZVJBpU!`
+Ph+55BJXfNYh%0lFiXd!)#rD6$M-i2HaF@"Q`e3N'Y`I)Hcc5#(dBQU4QP%(aMGb
+h3h(45qZKr,MjM-B[1I8k@Yl%%P`16rC'EG#P-QLH6*MEU,60pJJT)rpp5%6d!ND
+@NBJidEjqcZ"Krkf&-l8$#[P'804kIk#5m1RcUaHYr1,Q2,69T)'TGjaaVaZ(V+'
+8@X`$Y3%KTip#JjC&Tr5461"48PV9EHVB$qe[*h[IMClVK"EVlhBTQD+VEP0bbFZ
+SU5JXa`2#6f@*"8I-&CQ9XhNQH&1Le@9A$KKF*B$R3'Nk2ha'aZchqZ'M`AY)CT!
+!AJfl%KhPP30pKe6JURDXFM#&HMPEM#fKpMZDX0"#U!9GML5j6-)'bq-)c3*Y)h0
+T)#Q5&Qe6h8b#!4P*fkKDfZiKC2'`ZTR'6%i-!j-rNZT@"ZjH26a)+)N)mi&DVJC
+5`LdfI[0UX5bD$4faFQGCC9Kb$16%a&k92&BmQ4bcDI48LDYEk+5f-pe,+a2+Da,
+3UmTQY'jJJ2JT#mZRe1KUbDQGEG2&8Np44cjc4R2'bDED&L%IV+`5Jer@&CRS&Q(
+$XJl+rSBh#DaKMbph+"(115!F%Fmkaf%c''kZ$R4*RhkV@j[PeN&FahhVZE[%*Aa
+8)"5FeV6RM$@YC+GE*pNJ#CY)drD0,2JUcGCaD@CTpe4TfKjU#Yc$BAqU$Dd5j`E
+Jr)[h*F1L3X[*YV4PFUIEVM,P"4[*9XeEb[HKA0SHpV"Q*CAhQMf2M,eK$mYH50K
+,*R8Vel3mAPcZ@%SHEf+K)8VGBXf+!Q#`3-@Ib509!"lBL6VE,-%YNp@f`f6a3(6
+#Yeb'IMG*)k8aPjRBScCflLXm8D,58Xa3)dI(8'pFAe(QBdl!)#aNjYaEV"[9XSG
+Y!mle#X021[+ZibA1EkDJ[4cH$b3"9$rYA"Q%"3[$jG'eGfiBiPhbPM1EdLhE9cY
+pi$6cep8(KI-3Jhr[*qHklTNIVBShm1+DF(6HYqU3!%Ml*fkP[@8fVi9HP(Nq$*!
+!FLATJ)0!)(qi2Bc6U!j(4Zb*`[aN`%@b,JmI)6CX4'2$bY)`'H``YkbdD)fCL+T
+aHehS[1K!$[Ga)(9b8XJm+'pii%!fJ52$4V%PCf-cCRKGT*E`DTk%c*,DGN#c'c'
+Uj`E19$JI'C2#1!1&%fU'"Z454k)TrbAfP#ZF&NfEmjMa)fY0C!U1VFj'Ikj$Jcf
+T!aQ"VTdQ1MHQLG5$0&@NZe%jYeb4"G"'QH6PfZSTcV3RbbTX+CA-2JFqjQ$pf$#
+3!)S3bd8QH@$A3KYbA`UC1Fce&HfbeX8i'4L26#0Q[CU&Y#)`"YQ2q4ZXd6#65!c
+$EG#G+MfKZf4"'aY0E"'4KY6+E)mE-8U22S8TS$-YUSKJdTRR5CG2HNPF&LYVF+4
+%ZHhlGEDb3md'j0+j8FkZZ,@YBD'AXi@GhlN1bf6HT%fE*f*jKE,f-%@!E`SHJ!0
+T2MSEaZe&&,PL91L'0&@I**9Kk8ccba5[Vjmk8ULeRf!AIJT1Xmf8$rSK5BHLjTY
+,%a4V1b+VK6@R*LePaCS*mlddCZ,aFD1d&CID!B4eYES@E@c+I()*fN9!$J0%cQP
+!CH'DSK)5(Q`8$+Z9,DAcX%mPU9VL9elZVh9i&GkPVf3GA-kT02,[PT!!k3i4f5J
+K"E99RL!JEd**Z`j"XSSV$`BAZp&*3"XDNiN-$%F8jd9A2T!!#k6q+MPm@jbZV2l
+a4JZ#C81RNSA@35H#h"iAm`4XYmG$UhKFm039mf&Hj@"Uf85R-pbY%q!CL5GX0ST
+M-cFk`f3d16J!5l$hGQb@1Yle"0NZAFCkBTmZI3AIj,CS!4m-jBUX$B)&E6MN*AH
+F+GbLV29FTcS%cQ9$!qc&p!CPi5*j8'c)0Ip5`N*AMUh1Zpcki+[,3EKZRq"H(p%
+[Ai9r[mPJIQj4&kl(#B4"0iD4#c4$QGdC'`i@eaiG5Rc"mUpN*aC+[!V%X(BK1C&
+`j3`jalY,AYFRLL1XVA$8%94MLB,,kmM$R*d@M[2)NK"B$CfE1[I"$(Z)VaV&EX@
+E0m+YmqiCR(*6V88("JqfUEU(U@KDBI'5FU$+'PHT9(RUYLAfS6![1N(&#)Tq4%q
+91XCf)Ne#aG1CD3CV5'mCcm[UG`kKZA@PeR[*"+TckZP'3S$LQA[ec'm[peVJf+T
+DG0X)X#@64U&fM0mmc6D!ekMChXDl9CF,PhYfNF,YjTUDk0Bj+qP1+f#e+lACMeQ
+I$h'MXhQ#Mmj5mY%N8#5[C(Fhb6[!@@3Ke@XFhR86MH4RQ3p2J[D4Kq+hf,[9IkU
+c2,6SqZddi6G@%6J0DK6+"$NXPJZe*qHbN!#TGC!!2T3T!*BDf&)XjDD0dNA60Ph
+LBM'rU$$[2C5Zk&N!`pRU3)&c5B[CkQ,*VZ4jdHfhp+IFR,V1HEV46Yd2P`MFX,p
+&0TX+Il%TS1@[PMH9rBh8X8fSbFl'G#b@ZAPRaqqCN@X'S"YeTCHb[&[l)h*30i"
+jFjBV'Q8eMKMqiPZ*3QIkq)eG)f5N4934ck5B-Edc4fb6jH2h3IBlDR,5hF&lMTA
+&1KJ1a3)DQB5JA5MGjr3mP-jLC5L,`k#,ahHdFc)V(M*+9k!['P[([KiFTT-i'l'
+j'+0mCVID'JRV,06Y#PU(l$DRUiBVeN&c1'lBJEPY!XX`2)Y))*@6hb9[-[2L!U@
+fkKLf$G$EGN#h60m*(62XI*ZB9k9Q8LN4Xa2+ke48JXGk%G+$&aG)%E8!UP&5Pmj
+V#(K)U+@%$X(!jD!TGQSEjFL)'5aX-+NkU"L0hNRELm"-fV9qdfS-UBSQY+,T0ed
+0*6i[`N'dA)C6%QEQ,q[Z2Gm,0TQ+((9`3DcS81``TfRKEPm(KQ8G-1GmVAfd'D6
+GV-PNeNr,k3@Da-Y-NN0*TQQ@U(3qZB$0($8Y!hc%'fRFN!$64dJQ0+rZM*Cj'8`
+AkFL+QDd6kbZ9EdSE(HQ&kXLI@TAMSq%1A6GG9JH*a+S*+HM5R(i[4[[T'FA,mdX
+MX@%EC#8K63$)h'B3eY*1e%5KNM8R%&FBLY'XUiRC@#RRM)`iX"A(""bZZaMQ'l0
+Ph&i@aK@GQ#9JmhU6SE3qb(@iGV$Ir3Pl@rIQd"CclEX$PbTJ"(dBJhqN+VH++U`
+m+1eI`@$)Em+Paq`T0UhEQ)qI6[(EGT5BUZf(51adhAFVD8icpiJNHY-0RXZ#'-K
+qr,*'a@B5fGdQRDSj95D+U*(+(395-,Qc@'j&B6cfVFeRfPi3AZ%3Ec,e6JAV)p[
+(*`U%h,EAB[@#qJQm#%0i6[*3STAGl(DeJI'+q!VAVTe&'T90+'Y1r@S-2cVNDFM
+T$G+"P(Lq#ZJhj)DYAdTP#)RYT5'h!f1EQUIXhe,f$CR+%1"`!)*(1RkRD&p9@P%
+K,VcjCYMMXS(#Mk-ma0Y(p,q6h!p(eBRE,FcT(Y!'K[*4d6kXUD)!2PeEfj,XPb$
+"fRN#BbhJT&c5!P@V10PhSISEc5XPNC8m,qdmrUjSZ8&QfqSjX92,bN3ae4JGU&h
+e$Y`'`!03I(9fFc#Vd3i336LKS&3aCdDS[D)1p4LM+Jqr`UBE-'K&3YVK8KH$b'B
+#MQLPe`Z!RQ`l&PGcZ0h13NNfChaNmP,'Y`I&jflcB14@&#6VL0($H%q-$BH3!!3
+6D5MZD@chak0`i1ibYmLUDfD`#pR)-3hM,'",Eb"cp8S+)ST'iGT-lf`k@SDR-l'
+qc#d9PH06YN&JkUjUf'!hNIb`keGNRDLl$QD5VU6iD'#r"iUe`+`6e%25"@kP2BY
+THp%F0C5hUXN3T0GSXKeEYcGKZ&iVVe[1G)UD(B)m9![i+'lr)C)Ymh*MeQ%hQe#
++c1JS9GTL!$ei!8iF`-pXE-)`%cGIBfN20Z,XE256+NHbEYNF#M4[[V`E)aR[,6P
+p9%YZ2dDk1)SM9Q(h[mfGlDkpU@EM6E+Upl-*j5hpUZRGhScMQrPYSF%&P!E006Q
+F3Ca#V!*(,rVp9R6F%"rfm[V&&4KL)b'&$I1D,-%S@@Ac-d!Y6+`BLr@hfD6MpH0
+6BeSPQC!!@+[Yi4XVP44QP`-Y6!j&0h#[NGGejG@qZ[l2HJH3!,l'jB8efSRFl5i
+-kiYQp12'IQ"4F1Qj,TX&#d-bq1f%ZQr(lr0eLrLPFi44V-h-qh"b+Pijf#c+,6#
+j6XCi-l5PM$#J!0TbEZ,ElU@4'`5mcLi0c*qi4N!26E'%eCA(q)#E&%%#@a`K[RX
+IrSU-%ZV5,,k,[!rKm+)NHkP,G@Lrl%j8cbL!(4C@9VM58+cT$"KHY[Rafkh&Yi&
+(Q['k%"cJjIADETPhQUG+XV'+d*59qAGIhX-,[`E4DQJ&%8GkD)&SdlMd%bX,aVT
+1YBH1&*Im6$F`*['9HEacX0N'L$V[)RG9Z-hmITQi53cV%*@Q6!kAl)$AX0[1e#k
+i$U+6qlcJ9TTaTQA#F)&F$U*#A6N4cjJ$(!DZcJ,6m*)'+r9YCFDF@1*AfhV#C2F
+Dcd!bepd[p$30DGkjGf)jNEDP%F25BI[1ZUZRDT6dPcYkJe[(aUlHH2RB$6mB,RX
+$`rJ'5h-cZQ'3!*D)m&`4KqJCh`,$aR[NLe,i"5fhBVj1&ThkBd,BC8RYdReLLT1
+8jL*PlicIIBUQe60B3!MdhX`+SVj"9PLrDK[1i6lGK-d--&"Y+H*Yk&I@[64*IL%
+03A#N!!SeP0GQAlK+hQq$(Yi)@aU6SbU9h(CAepp53!bMlC8,)jk4M*cSJ&DBq['
+ZVUfrXhXC8([@KeQMiGJbf!"*ia,L'9A6N4ZfSZYM9&AhmVLM@r43$6eh)V3m*!k
+k8-aeE#K6id`60Q*Qbb2E3I#PFGXH$r%6fPYfX,[9IrjJ!6K4f!B$R@%fh0Me,(k
+J+"494R&G5DbLS,`,5'QYGc55aV6T(MX5!)JbGdQYJ[edHL@21V6F-B@CH9#"V@D
+8dC-GMMrP`hDk-4DHJ4Y(m(0%S3*qrXKV#0e4+ThT6Tj!Ce1kdQq%iLUYSX#d+13
+!VZULBqFQ[ldq-'*c2P*2EP&4$Gej!X-0,6TFlr1XS`NZ$))R**i@b!dbfr)a,Ea
+P1R`Vq3NAbVSeh0Y61V4)edRC!8bbSYedQlr-L$QN#cD`3NfQ!SmA[RaY`C,,pa)
+*4&#Up2"d!kBZ3#hV3a6K#MLeIQRiSZ%&l0J489T-jE1#b#"kX$l+QrDKMlQ2mHK
+q'6J4BGN'H69f+d8l3CPLPb((k+Ul1+`8UG5'[AK,)je6B#lFRqm'FEZ'I'QGX)i
+hXF4lKq+PCQ'M@,,c$XKZLeLCA),ZHj&Fh1*GGbH'!KpE31"X2E64N@PC'ULqKbh
+8X[%V!R8'0m`5FdVC$U-UMA!Q@eKX#%r&1reqYjEIMjTEkH+CHCj*F2JqJV#ph5k
+b#V[DT8e6VL`[S,(LZVdX)Q"+H(!k8&RRIi#a*TK6&r63)hECk'&5XE-Vqd0PP'5
+,#cpPSN$Gi'3Rc![D`0*$qf$El6&T3(SCZbU$9k40(-8PmrA*B9c9PV$j(AqFPbb
+%X@h(j[1jI'd!$'XN-2TdCSbqd3DkDm#3!&LSEh(Y0kMlq"SH%#V2(Y+ep-NeGr&
+E)[U@&(*2!Y-k['4&Z([C,9JA"Ap0aRC`,0PbeCa20pcE59%hZ9amUdab4CfaRF`
+dd'j+41E!c2RUZ'@mY9hZFl1jGQa03AD9!3HAfMVNa$@03+4dK0FL,M,N-92D'i$
+r`[Ne@6N6LP`phF4YMR8RBSAG1cT9Xp1h%6B*p[CFXj)28-Qmmd!ZArGaUbZh#GG
+chCMVUQfDP,J!F@I98hC8%QIKD,f`,&A#B0KJ33$+X#)A@jZAe+p[aKi'4`I*e)r
+8eikbLJq#+ZfL2e`G6[M`1Je3!4KMQjmU%mC,G5)MD3#d"AI9beUF4GDEPHeUR20
+@D5Vh&#aCPCXM@Qm4AGMG,G0J8,V5#HP3XcmQM)`V+VVjPT[cmX5l5&2Y#1#BZH&
+D91JU[k-@!aVZP,DLH-[0#`X@*3IUBEQH,bl-rmL#@r++EPViNEb2*,XGcEH+XC!
+!j3A*,Z9)3(IUhT)D5YCI#AJeNB#-hrTT-EQA$T[)-Ak5'RRRbbF+Z[X%QbmG3eB
+XSe9rHmM2EIl2-mMqVY6,#ckbk0HP2R`2i9@DcQLqG"pGZ)V1RdUhK"Km+4ra2AS
+D(6cXEjq+KM&Y*(8Z,G0c&6jIr-mf@C*mK`q@bQ+aM*,%[Nq@C3AFFaQq[(!YG62
+2%a(M%"I(pH(F1FcMdYpqRD[4#r&SiqA-RjA!q2U5j%VdR"`[GaN`YQ2q3A-5"N8
+#50C1&i1jSVXENBqHf[2AbATAE(%1YYN1`5fP1qDNSNbSa1I4L@IJ$V1SA6AKUPQ
+3!&93#kFKdLLPJ2+0K0V3cFRabFQ*ZQ6mjCUBC'5k#'-e4VT8%XFmIPCBb*MM!Xk
+6P!#qplqQ[V3*Af5ec(6ALUSb056$NY5RHRVSBQqc-'0IC(p*Ge"D&[MlFIEGk-f
+62mi1iqM)5%K4d2Ph(e[-bPLQd+66Dlq[Mc`Xr,R3cPKm6d3hp)KJC0)KTY1[4LC
+mU(P%HI!4fGI-5ZMC+XBCMQP-ZS#$+rq8k4aphAdXrKaMhBJ2B9d@%@%ITV"9E#D
+6KTK&RiI3Gf@,Nr+1(rMXY-cX0$-K[+Qj9fHY&Q@%cB`P@V*&dj%dDf9A0NGiYPI
+rSQk198RKJ3GBNQAUlBHhk3cP1f@!ZR1p[3-kDlU5`MYHCUDXU6BM4eJemkbF`L1
+kZ5d+`)GHCNPQSb3$&%8Pad1k13B&B1Yd&)%!dkc)X6J6KG3LZ$SZhi%k!Z#Zi`I
+DGQE1l1B0`$SZ4(q1$$+QI`C0iKjEq'0HDCeZN!#$2#a8QdP`[S,1r8K%Gf*1I)V
+mq"X-jHLDJbXerA-4c`9"%JBMl$LpVmIlQI3Hk@BDE8-%'*QPLda[&U8C3ba1ce+
+06"KLl0bEL,eV'!eP$'K,TCP!bc"c'dHl!fMc$0PcU[2Q5%)mFc0@P*KJ-E0CRdd
+Th(qLZh$r`)hEaFbeqimcFfEK'FFr5`6BT80k!E$4Z02-V*8lc8FQLf9(c0DGBRE
+Y%3Xc'mZfGFka%H!#33%X,(ThqkBLNr%cHjQeI)HjlDaB[-dXGZ$3`hGD8-#ek-*
+H+Z"C#9q55e*Bj(ij8*58bJ([0@p,%mY8`-FCDpZdEI**fekPKT*Kjq2ZPkZ,%Sd
+'Qf%F%%akPfeEQX(@S3"f%1!T($$IeMS#H1p-AT,@0Pk5Za6!I2jF!2lBSQF"H,(
+"VMr3YX0%0EaV30`q)l1XlEJa0El`M1@JV98D!1,6fA-0dhNA4NASYFbES%6m(RP
+GDAH*(@AR%91$f0EKf&DGa*CF4$#DIhANa'J!%I)Mh0%Gi`k"DdZ3!"KE%SPdDq3
+L%H#"AM@L6ShB6"'SPQ&d5peb"(Y+)KEBE1-4Pe@14A4h9[%)YQirMcJYl9-m3VT
+I8GqcNNF)J96c+)l83cM-9I%4(J%1l1!4"6@#,*PbD'kBAdYN@`DUN!"Yr,`qHkj
+NTHFD)4ANf@#fSd&4Q#CaL1Pe+0&MFRPU)"'q`J6"H*%*CYY&TK1C!4aV#0)Dh6H
+JA0Qh#L6"Q*,l@%TKrl3Cm6Q"%bGV$Qbp,L%P1`!F0%1h0*I%aLRGqF"Tbq[GDEC
+RC1X@cTaXQ'8Y$qXJNS!MED3i(pUi4dLeL'dlc(B,i1HP'E+YYhIS,&-)K`eS1!r
+N2ijmLQh)4h!qEmLHHlK$Pf@-eXG`r[-)6JhbbAISc$bI%Xl2Mq!`ldZ3!,I8KcL
+p#XiTHe"[e+FThc*$Pjeq`T!!2@YVKl!p1je`5$66j'jl%She#D8I3dLA%V)j'M)
+E)F*VD40hM$jR4NL`fr""akI28T,iQ48[2AGAMdEA4*qPhF)cZV5l1rSX6(FX-q'
+i%[&8D+PhV'BP3MYGI[ab40I(p"FMqMim3L%FZJM1I$E#KNKc)2K6Fd89L449!iS
+#b@D!dSS[1#h5F56Sq*!!8aPT1[*+N6Vq5*!!'06,iq03diC!L5P@*JrL"I)cCa%
+5YQkjF"R`I51!Dr0P`0S-[E'mM*MiUiM43Md32`aYHiTJ,#qh%H6+E!fb0Nd(H3c
+)R#leej!!44RbVJb#c+EVch2)[+4"0J(b6Id2h4H$r*3-fF#cr"FYCf6)qdi9a5#
+AlMqf1%0)1(5B3jiRCrR1E4cbZfh(jF,8cVF6C(G%K[c#LjNC!V2*@Fk6)DqUi*!
+!M6DlR1@F"INmbaSCmKd['J%jdXSlTJ+TjFr2RTFS&fET*%$fp,r)8*Kk2AAP5VQ
+8A6*LJk3JcMkeANCF,(GPP"(VqANSSQr)('NIDaAMKbH[m)0K(95aR,LGi*ebSar
+MXQ0)AqA(KEBT-Y)RKi-L0DL8dmQS&(+*cSb%EDB`&#1bM+,0PF0U-pLC!E'jRmG
+Q"5'eqcbRd%id,D4%(KhBB"4EeIJXXr(i6"B)UXE##DV"Z&,UC`RSQ@8#1PcLFab
+rGH&,fkr'4c0iITFQV86mS6E%eb(q$)FJR)Z'CcipU4IKN4CqldKi@dQ5$Z'C359
+mi8j"am0(j15@*HkKm"b+Pi4h5cHSTFqI%3`S2D1l(!TiMGT'6elUVZK5f'3R2Kp
+8DZ6@D0$RbC@V83-!cB#&Y[%!$qN$1LJJ,k5bp'k`alfRe-$Lp&3b,GB!$#CK,i2
+'mE&4,2CLBqP@CNM5BMYil'ZII5ccZ,'mVDaFLX9QH1a993Hr#0bl5Q(ejV6Bh!b
++IDTUDrJT`VfBjj69'9lYHSHR,1(I9p9UQ%RK[6bYV#jZbLGLiHpmGN[48mBfRM@
+UKI$F'KkqHET5jIUfdN0'16EhkPr)d$2PPS#CP6p*FHfVaZ0D+Dj@LDZCV,B3FlK
+AaMV@CpDDCB'E`Y%2bNMhNHEd%Cp#4#p5&pk9L,iT2#+E`3EDMQ[!A8R5[F,@[(3
+`,CcFb!6@AE&qB)Z8TG[%i+BDa,#`"Bd1"583EDbXE@DV6BJhXQi1XCNJG[3hrV$
+SI!bL9l)*5HCB&QpYH'c4p)DAH2k%@"(SNb4G@U%#d3')A3f2&6a`6aH6Dp&@A0C
+QENR9C4X'C)L-$0(cXN1$3++YQf&Vj*3XFJ6aQ[jE(LMU8LS+L(HD@b'VeUUeQ-F
+l)CGK(0JKRC!!DlkVEfZh3DH@`[@6d+h[X-l4L()6GN[MA9PcM3$,VH+,P"fA[M&
+2TBf-TUc3BBikM%Q%'-J@FA94LqC8DX3eRABPSN1*1([A8dT%4SeiMqS-jC5)kBQ
+8a`Y1dVK(P6jh5k0JXC2dpal9FmrXKYK*NRCjhU1+Qfr-SqU1M24aGmaeUcL`hBF
+93IEj#2pGq"'R"4&6NI!f)cm",rPAPA*MT%3$RpA#5"3"li#YjHF4GTJ#kG+HUJA
+H,VE!mlKNlX"2&'mfK0jKTY!E43QK,1iPdG#lM0&3qV#M0m"HaTa!AU,SH`c4D1Q
+C6L@Df0NRCV4BB$rdb[&L!dTmAIiAZTj#20+H&SfRL6JU8Ra$HIR$-ppQNa$I[V"
+mcLHHM9BQNJ(k$UX!(FZ@9Y5XR-MJZq8-lKaSQI,TT48PP3S!'@)Z!6b@Il!,!!d
+5DdNV+GP@8P)[0eKhK!XmPSqaEIP2hfmrGLQf0K*T`C`!"$4Mb9)r%id&EL5!$b9
+@QMETCRERCp@%6P%$kE04CrM)B`6304VBb1FPi+"$4MqZB(H13Y3Ec4`LmiD5`[c
+4q*1-jX*Y''6jI8ZQSr[X,c(@YNPP4bb@l'a4aZL16*5LY@bP90afaL*Qbk@B512
+0SS5jN6E-#9QUkbjKp+lN'(!1AbJ(-(`j*XYk9cA+8BMQZLKc[+d`Ri@T%kPRmA*
+`Qabm%,H[M`@h+-'Ar,*EM`C#Cl[!dBJD+'VR+',QGcRH1D!'#Y1&`$[-@L"*p(m
+'GXF#rp--09!)236HBe!$U3314J2[-UU"SU11*Tq2"YiZDJ@'8&Nh,'jm)2A`T"K
+kMMXRTGEB!&VeS8GpX2(!q1&Vm0fA3Jp14,L"Z)89rcHc%`p,*b,qS@BYr4&-m)`
+`iqXm$LS$Bij&I$(G)eS)ih*C@0T0&0ppEL+q(V%81LdFIph9H)Lc!SprC-jiI*l
+LiFjaiUK'(`'RX`cR#G,!%)[[eUF$E2N3QjD9TpFcBeBHbl0M!,3IQ*e$3!0q$E0
+$"ffQm8a&2K#'dhj3Maq#h-%)'ARdf&YPj09!IN4'2M#-I&T,ejQ"-rf(`M#YPfF
+@Hp2cql-bMHN&a`IX"jYlc`"j2j!!84FL2l"MZVYiXBbmQV8-G8d+(h4QG)A&JSA
+Z32T33GT#)#r2XjrXlD@F4i(ma"#E!Z3rf,R(kmB!B6D6a3YCKB4ID$RIe48qd-r
+a9lLVC`"rKA%'iHq4m5eciVpP4lLCm(2Cc+MAPDRjc`[hb2R2[VFk[H#Y!USFm&F
+10XGU6[ccZX+"Hi'IcaEf#)BbX%++he)0r'a"LS`rZj[REpe'r,DZF(-em!XcG19
+#5V&ZMRi8If%0m+FAJ2U*hh53!10EKa-rdaAfeP$qY`-rB`"TV,+fS2b(R-I$Cm,
+LM-cLDVAcPJlB$Ffpq3U$2#2$[cZ-aJ2m(B"[-k,mLhr*5@#f'KSUD%K)&pU%P$b
+!RAB&M!3(--mr94V,N!$f$c3*L9q0r`aRf-Cqk"!q,C5(MaG+#@a[$a2QX!4@VIc
+qaCk)F+SLJDh&HahHIeVjr6V%S5$4hr$Ilf0(pV,2l@92aNDPlf2c)JqcrbQd#lZ
+8haKb4ZJI#2NS4HD44eq*S*6eE-daqYdJ2#,p%+-1I0QJ[13C-'V1dm1eVc!-Zq$
+KTp8(LkJl&Y%GSIF4[+qlr0#19UKr*i+TKX`l%AB1GK'#&Xk3!$#Gh3$ASXE'ZPN
+Hi1!D(@3GH-+)B'5-`H35GAT"Cj1L-,dGBTiC-(N9*JHBTX3KIBV1eKf&1GJaP!I
+GPc-0Cp1HU0X5Tl2Ye@"qbGBa,fmPB"S9Q%8c*,YKlT(&TBPR9h4S-"rBY1YNhN1
+!H4*YR"2kC+!"Jke#R'91+cGU3!mD1RAj!S"'fJ"8Xe)'1XFJ9BL6aE4bJ`Ed+iC
+1c,B6k")#ZN3'QKh(+X4*YV4bR3Ed'iC1pLd1Y#J+G#$bfi`b%UmjJ%l8b0FmqQh
+0Dr*8S"-p"+!XVe"1@[aK6c+MAj%cf[pKMmI0!8(h('F3U"9!TqSNHm,j5,6FIkV
+acR`GNS95c9jNLG%8%0"$3aXHBp9[-8i$U4h(B!mmmAZ8$2Z[I,pCYljV"Q"-%G!
+M`(LZqYrXSaVU%+$mb@p35(@Rk8"echFEHh+"VXAb!3UQBTM+r!p"Y(4)T**ZB@!
+iN9eA3A)MfGl&38id`Cq"-0eA@Zil'#2AR-$i+bS4c6D1NZmES4)+YR'8C[-)#JA
+*1-T*Id"T'%%4R6CHiE`i`6J[8J!&fN3Ep2kq+$&j2BH5'mNP3bMMCB(NLmYbk'T
+p-e'3!10GI[#D!Hce0Bb@hf%dr)kCmS(IBA`YeeF`TK"JpkP"&-"IBbc&pTP-I*5
+0*c%fMc,f*%B(pHXp(bU5T3Q%XAkB2MZ*'FXS3V)p[dG*e8f1R)qA00!h81S[C6b
+1NL8p0GjcXC!!Q1b9d9%42+RHf*IPE0rhKmVGmiFZ1)+5+X'M++N520SVU4)mfLY
+9ATNAaAJQ%JI2Y+S#ibbi6bPlZF0Ia+JMS4M,YJcjK9NKIU6mfHUa`SkXaT!!Be@
+m(Vb%dMD"8U8`,)mjJT)d#GafCKcAT8S@'5N2Ha+bf(p5DJ*cMC+Ul'HJcCG3kQ"
+QTRhJ(+L!XJ)M60QafP9T!,AEc26Rhd-T9ILY9*IRj89'@SS+CllaQbiJ4Nh&''@
+@Dj+4#Yp$NCV%C#"E5#SJY@1k)5-9bfdAG*T$+I(+0F3VCC!!DP@ZSISZ(8@T'52
+-M)3j4jDP)JblIPfjm8C"E,@k&AV+Y'!j5dlBQ6"#")@a4J%+UjXIkI#k-EE39,,
+R4e'bK&*+jHP,U94m)@AbY#C#[bqb[6QDcf28+dEd#Bb@hf&)*mf1BM`4qDe)Ek,
+*e5NG-#V5,F9!59F2rKkPD,L@%iTdk033R&'(MBi,ri!#!6,P!JT@ENiT`DkS5!E
+#pfYe`lkB+9QkGc3bm,[Z(F(QNFNZU!-'1SFBGdD1rRpGm0iB"V2GhhdCj4ifLS,
+j-BI#I&I)qEk)XTD@'J&Pj%18#j@-$ikL[08f8Z',&*4(VPCB-,"%9M!1r3S$j6k
+44kN(dSTNX0Cf!L@ZEJe3%$EH[8QR(-ZhLZ%FUHjIGHEUQ+JrJI0D'DG!"N%hG8*
+"kB399h!kb@`3(1b6%*be9h"@NhGc!QH*M,1Ifbl%`GEH5YkqfU-dYE@3!&!kPHT
+8Hi,V@NG*"#k+&I[H`8Y0!D"XC'Lm+mTF4-94URD,`PQpriNc6@(!iLJ1YUmGaLR
+R3chNF+3V(%jFRf#dH"5-5eI+A8CjN5PHCRVfGFc1ML9H3('prlp4b"!a3cYq1-+
+B*4E(21M,HUH#-G%VBqTUSZpH4'Q9HcM4FbQ+mU5L9,3K&qQmJS2PUajR%@I+3eF
+80h@)Tm#%+bG%YbI9Pr`AB@LTYM(P*)U`IF*rPD3(aYA$%CcfAr"T"3HN89BhBp@
+*mkQUT52e%IAeG5mL9Z&(-4+1U14lrLM+rU[9Lrf$Q%p,+"Klq*SAm5d8,P43P!@
+8mIa,GFRNBe&)+X2(ff$T@"Z-Bp6N$i[R[dFT#A&"@A'PTBk)qM4MEPei#5A0q1X
+S8bcBid*3Q&+TB+c')LSEQ1rN'+fA-)TB9jM1+k99,8B'XIEq"-*m&H&SV@UbQHN
+mj-8S&N`)eCM%5m38-CiL5H0"S&dUZJaV!qm'#0CV%Z5)a+[*MU[83+aC@r3!`'U
+lSbMYLZBKlBjJkep!UH%S1E1+3Sh5LHfUDFC5ZjUX!8,"fK*"3GS08ZB`5QF[4hP
+%VE$TRC(XN3TV`P,K4*k1Jk39TSK)mme'Qm@MC0"@%l@V$kJ9TLX!L%MU'mPB8D6
+#4+%qN9`k,U&%dM#+e+9ZT+F#LT6BA)%dPAVH,*+`J*KTP&BPUCfVF(E[H)8RqL$
+A-Bk5p*6VJk-SfEh$&4j$dBcV1iC4Z*0hS[0bK&,UJc6K-SMVJc6IZ$Y,M*IQ+bf
+9*Ii*I9"&d9cL2J!"M61Hj+)SC$aUAf'mm9b%&k9iTT!!*bSFDE3i#D+pNZNHSm9
+a#9'Mjm4b6)[8RqDp8T%3CF&b2B'dD18YNMK!H5G3!Zhh+Ne36MLQRq-S@VX8"GY
+qbbL9jL4+r3##5bLaY*&Q@Ae*(kFJarT!L%a&@5$BDVj*l9J9,"(2aS&B8T6@-B*
+PRiqKj'2GFKbPGLaMSQ$eG4R&K%C&5k8JTXU%Sji6X+(6%k%aJ4,%)R8Za8%C"4X
+(%a6ibQ-Smb2R0%UI2b`d8[(qK%VSJN%"3CNaKL%pd28,BkN#`B*-3Q5eDV#b&4j
+3$+fBpNKQJZF83p5Y@A6M''*E`,C8R009R!SE3PM+ZL!L5GD'e$,"L(A+"L+2G0`
+clH%lM3JNrA!F5,FN"D$BedL"G1m5J@Eb)MQkQMPH*&[N&*!!%Pe93V,G8'Rb%ql
+Mf4aSd5M3K(dDCp3kA[I5$&0FT,CBGlESB9@A*'*5H%9L15QUFIa&5G`P[53-LbU
+p@H@T&#KdT`!KTGYPBN4+"`D(N8,$5q&26fJ41$f+4PdlM"4)4*!!ZJQ*)VZ#&'K
+*F@U3!,ZMTC(#mH'""1I0'LQ0$4Pi(*Q-XBQ-!bMU#CKfZG82@0q$8E(@288Dj$!
+8+C-i9ThfPL513fQ4G0!B6S-"4a48[BjUYB%ciDmFaDQi)T9bedJ$(maa%+DQ@SC
+jEYa$T!6j`L6(Q$F5F'U2$Z08h*'!)pi1ZQ+8pbcpNE(4%1*N4CP66-"9T-jiFdm
+)Y(%B-iX1``JlJJ21jda@&@TP('cG1Lc%3[G3V(i,Taiil)U+B)ZlaqUcLR024Dl
+&h80TQe$H9l[Lkc#V1C1pf$`eNSe63%@Q(FBjd43ZlD*+lbr!l2m0!iMeq$*4#$q
+p6"6L+dT,M'[A#Sb@qN65TFkT4pKcEBhf,r+aQPcDqcJQ2GJ5AmI4iCVM1#+V"8F
+-f8Fra%'j5k[aMLZ8dLDqipATirh[bAMcJ6%F%GiJccjCN!!j2TNeRSqSDH!SHAS
+F,+-iM+1Xk-QiQSm6#a'R48r'eIS)$XVGG5f"VJ$cD&FiQ0i2QSFYkmRi#!kESU5
+c$Z08HA(rH+h&H8U'93pRii`XYS5UbX-i03S1Hd*9j@%FTi[3&1DkRb"D8X@%2c4
+@EA6&0r66mc!L2B3S@"eIl52DZ!DLSP4Y$Yk0U3S[&d+eTer"U3H1d2X,UP+%eV&
+T[848mX#)!01`j4I-dmYK2'e2+rd3ae[994`a+N6dB#@[`lRp%Sjc+VLlXdA"@5U
+B612e5Cd+0Eq"Fd3*TUZlaQ(%U!"-U`Vc5`1!+B`6Sr1d#+1M!"m`jJfCTPcYLRV
+JF$#02IZJ!9e4aC&T+-A"F0Tc10B9c&Xp0q4GEjSddEAQ9)44K9mDb-YmMr,-UBJ
+-@"2Z1'A`IC&I,e9M)j!!`eRDqKk1eE%$Uha8E$d`J(bU`X+a46h2Kf,V`AQS$j4
+!f"Q88()(V`rDm8%VbNh@R@bc8"lJ#1FGaY(b[)bMj5(1!pejI5KMCh3CA*S2bk2
+DFURjI9P@JrS%AaiiKdh,K+3H'(J2*KBU0U(mi$c!&+j@KrBA4qaS-6jScBqm6e,
+YX+Z)3k%LA6%P!!i&%R(32Fq#T1+&G-+e4QEd&p3#08jZ'qe'&64Me&f'#@+9id!
+1T[-+M)K'6M24K4HFiTE,@31R#pH!)&IJI'J39H`Y6BQZX%Y`fJhB95ii(q#LpUJ
+8b'04Qq+Sq$h52E"8k89aRJ!i'D,3Y$kUhjkILch52-FXbbN%B#6T0X$8Re+'"D4
+D*f'DdP8iHCZ&KHG4eL!1NFP'@L)iYkCcm#h9I`UaKFK@LYdIM5e5l#M&jS9@eTh
+)5Nb$6%M!N@U@f$`#'-QN@bi)d#L9QPJk#T8rr`(#(l%E935TGTG"bT*N"*a4F0#
+J)1"3,$m,K6TdGNZC3b`CpFNl@Uhif@YLQHqSLUKVXL6B@M2jb554FAhVMDK9AcZ
+kTCkRb8+F0PA+NL(@!f)I)&#,RfACb$3I,5K3jV,l#3@mJ%5Q!@A0epMJ+-U#U5M
+URFH@R'2J906$UXB6R54K)GijmC)*)+2R,U*pqPVTbTfqAQSYRCqF)Gf![KK**l'
+#eMLM1jkA&)QHa41YTGj!SM2BPMd+5Km[@YpT+TSfN!#!i)+46L6kYR4`"RYSYYa
+PAG3GYFT-C!YVrH6rARX4mDa@24TC8Y@DeLJYa*UqIDd!2C'rTr9*e1[+dfLKe9S
+[SaTpU-EE`V`DEfN9FCE%PDIjA8#KiBY6*DGF@2B'Hcj2K@fLDZJ`@VfdL'djpY#
+,''0[02iaXXLaNNU'[Bc','k1FcE+F8mkeBbT&U55dhaC3+--`TUKLIDc9Z4D5`A
+Cd'T'cG#Y+)LK51HMX[[C3mHfK$R+'eXAGbp"jk1b1)2,LXBE6`"aaeV8*'p-T++
+0f(1S@CA%)(T3dc[33'6#$N6hJJQM10lXV-4m5Z#16fi*S`IcaR`dDMfl!peM(DE
+6DTSNa#`apJ)M'XC3-Q3A[RG2qeVHBK[3bkXP)PdM-N,-*BJl-M[9,Q5YHNdDXA4
+4PL1CZq3XcfZY4,MdX6+6,pDGacTPL%aV*iT&L)6L1+%(M2HqL*)hY!!LBZ9%rM'
+%GXAe%PSdRrJ8),*b9j3SN!"*M1!UVM`U0BJc[Q)+&2`lpd4`245MSqk&V23dlZ`
+)RGZTLJIQ&`&p6FkPq!2(+2i!iV-SY)ZA$%@rh%Ra*#+m5C9A4`&%r,bA%X`,@b0
+iddD5mTkUaYEJN!!-l&bmi24S+2-UK8V**C3PXG"HcL+5V)5bQL98+H3T2,39Tkr
+PFIC4TT3h56Qb%%&Nh1MYA*`GHTX*Yd@$F%R3)5DXL&C4!pCG$5M%)+8B3Vd@m&N
++%(0I!rDId`*-@`UD[8NUKr9R&(hl5#cZef*a6mALIK1h&H*+L$q8F+E%,f+h4[e
+"j@$$Yc"kIEpk"b,Ikrq+ICb9X(m6l"EFD+@h6'c8iA$$,X6e)Zi50GlrMR6rJ98
+[RELP!JGVeE'X%j%)ZdihGF@2cUe*@)RF4XUBlY`MZUm12KV",4+YUAh[FJpra)C
+cU$+$#4cX-KH"YEqDdA[k@3lfX`#ES61EUYpPF90flpZmG$j@9@41$k1YfVe[qp,
+j(1eZ'BfTe@E[hYFTSePZ@SLZhH(PeL0D)Da1pV1"lS,+'26Db`"15@ZdR-80&D!
++h##$Y60jjZ`V'f4BL)#MXA+l#+!9Ce-T!+ll!X#)"!$Hb&HMLjX8BE1bc+AKl[l
+dMXEdIrj'6ejHrTk-l[[RhG"Hde[GQ,&prID%KcM'QJTaplkpZaqHBjPIAVkXh#T
+Y-kG9l8VV3"frZiS5*FBPhE[hGAqZbf"CN!"A@($B+Zd`TbhIR&EpZA$R(FmChP)
+`N!$(`Gea"XXmBhQ5d5Uec8ZVfTaQhQhSA*C'YBecAD$PZMDYUP2*Y4kGS,P+c4k
+dp139jVHQ5rHAT5f[-98hTQq[f%jj0$%clRN"XB4(R!%CGmq4PrQ#Z4Up!F2i@ES
+E%A65e)fI@%5-58iS6')8"6-GlT0$(q%bVaU$$4BPl+`!-2pk5qrD`XFbGq8I5TK
+@PprH8hL`E'YqRI1MiEj$*-!9Sl@cfRT`hqkGm`eK&(EGE'[CjSV@h6YRcl6ZLf(
+d@P[hlEE-0h4dEQb[X*i%4QlAcMm@6el&k#f4mmMYhMRc[6b3!1Xp@Ul!5(1pfeD
+i*E24-MI"A*2IIT[eC1RQI-1ZYR$Ib6d+aJ`pD!6lE(&P#ABTMraX,+V1J'YhXZp
+md&cKjG4%-jSUJcdGp!Tc%Qf)0H"6M$`8qC'`'0QV4-kCBMP5f&0`Ie([*r*lmKf
+pRffY,2Y#HcAfAfYdklECmbYdeNk(CAk&e(QRSDUXXkTM12UaM6VVJhE,JL,fi%a
+GCeRRTdD`-hDGYF0ZQ9I"1RMdH[0%CRh),1Um8dJEcHcL`TkmcGC+Zf91%DYXDc'
+9GPE@+0%RkF`#V[TcEhAUf`[Y-6AF#j9104SUbPkJZ3`(#NeIU1IXj8H'9H)VQG9
+#'YX,6SqbPrqS[Aa13ra9lFAM-!Z[93[d%fSEUVhZk,#'VhYk@-2AIC2p$hB(Hd&
+B0U(KAmr+%EGHMIHrQCAP9dmr)FYQkT+qF[EF)`PlXF&cRpl)cUdaV"kkLmk*b5F
+-3'FMV&F`rScTKh#p$F"qDL%(HfaYDAj40i(pPJa@P`H`#a1VeeFX!pLA4m"qh@E
+I@#%4f!F"0N21V+jXRXeZ,lHpUk@QG6L[afE2rbK(BaeFRGc["[RQYr##8h5+5FE
+caielE$[f0,1i)9XLBp"@[EJik(dr"`!fAa@[-mkdQ,jNfjaGKSTL#J-RP3+J4Z3
+!EiFh1--i-kepVld%!*'eIIeRfFbHr0j2E$k2mC4IKepf-X+rE`q&Gl)E1jG9XTR
+cPeA9f,X[b2NarY&PQdZbXjYaYYk2hA'Bc9b`V+Ud@k6iIA,ma8FfPjl)ATR&,1C
+P4MCchV+U%XEM88V',kMi%[![J8kHYUbFjlHQK1+cX0GB[rEb2Cr1cN4jfNcVfm`
+cjq6hfPX1kUKq5+#0'Gq#*3(aQ%BJJFLJ4&3lTr3bCiV4IV#mBm8-Y0$+6HX(0SQ
+cGZaC[2+F&VeQ6RRiF!IkTmZi$BF1,E#RkG6SfC10*I(PIe'1k#MER%LEXpCBG'K
+X&eaEhVNL%kh69@MT-dkeEE8B4S,[+Hp!hk`dL'EM9$[E14bF1iaJ0%h4B$1EMC[
+C6KcjkS-A8$!kTPM@JZ!lM*fai(d(EcH[Q)'#&![2R6#hE6f8U3Drd!G6@Ej3#&5
+M)5lX"6,%F#"B,!E+aPjqE9J[I6dc(&GP,mpS,rqIp[)Pl@9)HhR,F"B9hDCkYQf
+ASQFr+@c%kpXe2B[hYLDXSedQQ)5r'G1c2BM$S&PQ[aV[IdHkIbACr$#Z(r!r1ri
+04YK8*$palZ-AqH80'B2`+YjR*D@MYcVS6+V)L3ZP4S3`YSP(dSmTGNBk-dP+,$X
+-jcJ!kU!@@dJIk1pZlRhVH,mM0E@V[qI&3+mDfj,4eE96DZpe&K4XaZeB(ka,2kc
+&eL2fJ,5*BQXSGQYkRjC6pU'Zmbe5,mAQXRMX,Ldf%mjS8@-l-LKfK4EE%1lDYP1
+1cDGch2ZLqD*1Mh4[fP53!0p[6%d01hZ-JAD+2BQP[kRf`G3%[GD%iq$fRib`2LM
+SJbPil$f&icBMmGI22Icj&-cEpTk"Y9dEMlRUqZicL,a%LqcV8L2VULRb$MQbQ5,
+I0@-aLbrHY)P(iL)lLF50C(eGA38&,(l),I$)D8)dmXNp5U6N1A2VASVX51$C)2)
+C"G,5e-!lh`rm!9`'aX#Yla@QTlMBlCBMRqD4dkRUF,4lc,LpbcV"aa5M-Dil1L-
+MV94qlQ$9rrpc4abH$p'3!'3@adRh$'L"*b1`,db"'C2dKKDQa6YdrV%$NLPMHhi
+ILZFLmG!he*A3ilD"l*ERa5+*LE22hP%(U[[4N8M$[,0IdU1j$N8M1q6)Z[Z&EJ(
+G&HVL)0pKl8e%Gl@1TAPrq2b@!qd*U51PQ8Beada%l[4%5$iDFU50TQ@2p&a('qH
+$&k*Rbef&mF"X$qJ+)aN(FFfGBFf51`Y406dX(TZ''HZ!@kQ'Mjpb&cHmfKe[1V4
+$LJ&V-,KmDk#R1YjdZ,Gl(2P*#YlF8jh3INJ10Z5LKScJ1P-[$mi"18Tp0d*AZKi
+'!(S%ra'RI"fFDC%""J'`0Gl8hY[pP251R%)4#,KSba#fR5ZZGVX6[TI3fhfH%*J
+$c%LFmRT`'M8*[63FFNKJ#jZMK1AHJ%G(Y%MIjml,J0$#i)Vd1cUVM30Lm(Jc6Jp
+-)`dcHkSjBh[aCF`kC(2r&F`2)[*(Vq4*c(I*N3Y`QPdIh@KAha2[VQE&Cc4iJY`
+C!m%jGRAaEMUCHJY!iNaq3!%K3pdhF'CrI&f2ZkiEBX&PmZP6k4RE-3B%N!$CA$H
+FdY8G$pf`'4LPAU&!1A5q5dVSJ8$Cl%0dh'!5IArAH5QHj-YQ+)XU0T9QL#DfYHp
+F1IUGpe0d6E@l'LFR%YckIfi+*Il%'B4[4HP@8MM4M6qNY8&c[*!!YZj0MC4F')j
+QPV#riG)ASQFUcBPEa($JANK4iY#21B%1h`X9Q6P*EX&$!Tfe&r"Q8GcpA4PKJBl
+@`ef-V2eq&2F4"I2am2Q`3!ITa6N+jT0GBB%1c5[RH(m,iRK!AJA[R@K"(SCAaMZ
+%VMj!&pm&20%Sk"bFM1fJ*!30PARY[pT&!('6Fmce,L4Qp`6&q1"8'#&p-+Ykf!b
+Q"f((0#1Kpe2SFKiDFm`mAZ*hTa5`JX9C"@qb"*RISQ,FLBZ4A5"dFRUlYfX4ZdM
+a5T*4M4BrMhMSm4hKBKcb"`!Mb+LkH&0KXia3j"RF(blN'4M04Y@hZ@Yl4`&@bJ!
+ZJeAZDK9!0@4Q8Gj)"K!r6mX!AEcMhlfp)+qJ)#XVPJ-JF!fFe-QDNcGpCk0*E('
+lD`q1)R!-IhidKj@,h@SPK4ia8c&Ai4YVSU4"bb&(8+aR%a6Vl0NQYBfA8b2MD2'
+BY6XSf"SCV8b4RFK3D@-fmMR0[F-bY%(Yi19XU%"I#,&BPU(D[Y%5H"mDA%*Qj`T
+bcq!)XJ@[9))2ML"VafBAj4AN8I#$[9)8H9DUeUhXejlQb&X6(%T(*H&3pL9#TL)
+3*$1SM*L%lf"RT*pU)1h%DMMk(XFCdR"3+'Nr(),iK0$b81U1k@Jr3c2cSbBXi0V
+%D%qd,cXi1D**-Yp'i(e44'TS-YTp!Rkm&i(#!IAR)RVD4QIGSp(hT5XNd#Q6`#`
++IUD,$P[-K&ANeBJG39UXd+'"FqHP-edlGUM!EmCm5Mea#eJ5K)Cc0AP@SR(Bpb$
+RabQiMS)ckGKJN!#a8$#4[`cNCLLU8mNILILGcJ9&3$b+d"a#aHmb@[XXBLM!A!a
+aA)cTp4cFQZM(X&)brH4K*C%`bb3b#mV3b02),$`8,eqHJ#8$(4#a!3A6YB)bMdY
+(M!JGK0P,K+G9"2Sj4&M%VBlhEeTFQ0pIefe+cBLN6SI9!Ar2J(K0VJ#**39ACE#
+JS,dl*B1kZ36N-b,3irI$f9PHB1T1)+$l4S"FF64e!+dJ),M$pcp%3(!TblAf3,-
+*#&EarH&d!-(S,,G,P`Td'B!q$0rirM"P"+r8pjT!S$UXGhe[3QT'e`l+4DTM%+3
+B#&1iX'LY(0SGrQ`eq#)"`AN+aNCEer$5VUM)5YCh@Qj(aa+Zl4RMD+90pT!!NC9
+M)@ai`@B2)bap0'CVjSq1"+FiQ#9)CL8`2$(Uaf(EVeGQ-SD%0ALp6*[*`2Ydq&3
+@fDD,Q,"%&D1$pNHdb+8qkX#')0dRI4e([[f`d#LF9E%Ll)k4,hS1@&Jda,pj-*)
+Nj&Bk4c22Xa[&f@*r`[rbl"AqPfHpr#r2[X2rmZ`4rTGRAI`[cpViAjjYi(p&G[D
+&T)qhRXC0hRerFqGVNARXPAA'Tq1r*,*"pYBpF3Z`2KYr(f2cm!YcFMq2HQX*Y@D
+ILrC#[S@pJ-)mLqRh3N[NTBKK!"HE&dBH@h#'f3(f-SY,[IcFV$aMbd0K+$,b'[h
+UpFq4TQ"i[4L[Am%'#2b%GKcp'BY$S3Z4!5K),0J&IBh#4-$#MET)+Z),!fr4R@S
+-J8a"a1MhP6a@)J`KSi"J(KJ(,6#%4kQ8#"1))MMN&%PJd+-`J)R5"2cY($`20,,
+4+)lJQ)N(2U)5K3'JD[*)"!Zm%)2%*$C#k$0XZ[DUNIM&j!')Y5"BIb8"%JjE6Z)
+P5)&'"p4@d#SXS",U2c1`&qBRVli-cC5drdHR6"m*N!"rCSAcYb5l"M@)lF-U-)N
+'RTVmZbUmK9GKc[Y93-A`JZ8Z3'mDbIBVc+c82iP"RaA36rmRHqE$0Tc-(PXkp"r
+NSGPAk[m9+Vkei(MkG8VkcfVCIbr2(SPT[CpK&VAmPH6"&IC2,MUHI)(+2*&m[9V
+l6bLj(aMY1q12DZA4j3@eZaQ(,p-jNMr#AqVmJLS5pQXX+$QMDp(3qUJmJ%C%!FK
+NbQEX6@EK#a"cB,Al'%XJ,3!f$9RfJIrDNImRLCdaNPAi["*d-YjaiM`d!F-1+@'
+MNa(fHlMi"0FmBhTR8L[pKC+++[(kH9Np3&bcE#)[5!')a)p403iL!LA$!@9mj"(
+)KlLf)!Ym*#CT,*N[FD%L%NGN#hjJD0Mb%&NLMeLQ`GCcD9L*P)e19hU3!%T%e3N
+9J,jlGNDELEUB)8X@bK*"-SAa,*ZYmB)2#L$@aNK2F`IY[*RAl!aU1mp!pLpN&-5
+)r!Zej&9+BFX(DNGM"`++&3XN62,1`V0(82NhUB@[jNiQ5R-R#5%96kH3!"T*kXp
+'c"1C2h-TFHQi3caa9Mh41dFcCmZ9-`q#iYQS'NXc&dS%3+fDZ9,'EIqGZ(4J+A(
+r&+[!0'm8@"Y#kGIb(L@+qE1m+6@1Y4TUH#6cJ[,X9!Y1eY+Dlp1kA"R*+Q"D4l)
+3q@HpjN56F0A6-IPJQ5Xj"Q(Z-[IF&M*[8iA'!Ba9536PK+N-(c-Y+M&J,de"BCb
+NVbcT2Hcl%)92aL,ZCE$Pd'3KiMfSj%13!#3D-C0(d'Mj,Ii,'p%NEJ(LS'S+,m"
+(d9r31G%,%3a+"*!!9mR+U$!!5f[dI23KLiiEIB'%c5JdS')YiPK4kJr`aGL(r3C
+54*Q$a4e3Y`ad#,[(+)MX0b4AJEbD[mBC8("3Re'8886C(bZBZ0a20E9@Zb6jm'l
+j-"0+UeUCfV"JUB"9EdQ10bJj#Ri%S4K&A[YPLNi,*JNU2R)8CkUDhlZer%4$RMa
+X6FQ$mLEbYTaR+1D*hUMJ*+'+IUF9Nra2iK3[5T!!++fDM-HlZ%fX4+M(29SpCNq
+i3mNr'Yd+dM85H&Jr9JX52!Y[EPMaTK`SL&N@&9'C&X3l@p@#5+A5JS51IDiJb2T
+SKaK@5Immhb&`H%r8irZeHTckU`B"eeXefLpA!h(+(k)rRbZ'Y`D29#0Yec6(11@
+[GSGCC%kB[X!IUMjIE)mRfI@D`f+Q9q!(ckp2`mr`6V(6VLQpLYqFN!#(#9"ebKb
+Ak!m%TYAS'C-f)Ueq6m[RGlRIQ!!Zq`dJEX*'[LRNQEq86d"$I9+dEkQhEd[#Vf[
+-S`+9fYa*@I&Z4JFSa1PGKN"6--5*BJY*A-#rI%D'8`3SpI)SaNRbl%GQl'e8Qa6
+a$e(%m1qBT[QjNGQDpih-eZ!%NbRQCQZZLXl@B1Qc+MpXU5A[LK%#Vi%`%545#hG
+k`E"(aQ`H8P+k)$TQie1#Rd)R(!DUDVp'eF)V6pZi(0if-@h6V9NDK"D61VB$kA2
+S!j*$#Z*cQ`b9cer-f[bf8S-lH!h1(jPb+BRcj$%B&Kk,4@MQD9N4[MeUiiUJ"Mr
+3A'+3!&TQHRX,GYbNF'C')p38QN9J[M9SNqEqkT&"Qe4LZlQEFAA1h0%L2[G[MYQ
+ih0AjMFGX6Kp2[950DZSkq4*5IhR)"ZT4-RrV50@$Je"+h9UqQMV%*k3N#TSNrr8
+*'b[m+%e9T"-fdZqHqG4lF)D#MGdB'8jQrmTiMHZk%aVQ,dGRRTqNfIMINc4q`Sq
+c-!,`*F6+6*eTLimVD9hqhc-eELK,mL'B6mC+TZ`r9F"NcC,SC)dE#h6#4V4-V&q
+NUE8)B"N@B3U"%C[CPiIrI$UBH%R0YBqVScDhAdYJe'Efa24ISPr'5f"$0aamQc*
+Jk)CPk"JZJG0a8PpA!UpV(,Q-A%0JqUCD!"3XD%EI!kkTV3#M+K9-$6#'8be"b%4
+k`-f4qM!hJ"LSi"rQFD3%BRM'P1L6X4)%4J`PQ&*Y-'IV03!'Fh#24%a)AZ4Kq9Q
+FjTEr0jX$D0@PDS90T[L$ecSBcp(*)1b(9UAUP'M9,+-e&SVb3pFmQ0&KmlP)eZI
+NAlKRD99#Uda9-+JMP1#VJNill+EpVeEjZf'GX9Bjl,1P9AR2Y3e'GPiUL@9mSRZ
+R)TMEU94&HE*UcH'mJlJSpelEB(ER'6C*JC'81-NmBGHP&9RmQh'F9!Ep*GLIDDX
+TSqCeRPL1MF4rT-cVE"0@i2@6fV`1hYZHe5,(jR@!&Y@0cHX3k6lTDd)b#`XKiBe
+VE-cV0,-Ze!`V(&`[0,5`Pc"r!J&l%Zid'AfCPRK`H%IHFRbl4!Y#$V"AD25@YZd
+hRZ%NN!#LQj9R0Fh6ebEP&3I$2[-Kd*qrEZ)V51#(kErZFZ$Jm0-8T+U'5KiVbdE
+24XGZ'Q0M0f)pI&Nf(%CPAMpdr0ITQ5PLTJ6hNM!lE)#ER-6akBPM$M-+85kpZhP
+kICV@pA-)X5AYM!a66Fi+0k[$[QiqTf9X2SFcQ,(9)D+A3k+*Tji@!m2lU4Ra,,Y
+KA%fUK!cl*-SEF)l0k@#VLq38fp8SKVI@#HZ+F@#m'+SEiADlMSK0Mp++LG3*If*
+X@UG0YLlFe(9jA)AGqiK5!9cE8@i(NmFc4kGNr'bdlX1",4hfip3J6eBJc1`ma4X
+bAB0aT!"[IVm!(4-&N!$m$0k2S1KS"rf6C()("A"M$K-&q&dPq6YLbFHLR[eA6Mj
+3!9kH!32&lj2M-ffbrr#e$VLG&`'LEY5XcH3iN`4pk$b"Z!9Y!dAc+$Z#ddXed#C
+dfbRdGfbU*bAiMLljPY3TbkFAY&BlRTq'82[rmI`90HKN(K4",00KP6!UL4PMB8L
+AMP-jLQQ$(FGc1*)DUH35(JBK3j2d%23`T"85-5XAKiGUIe-Cb9a4"#U%(i)PBe'
+%2"C,T*!!HMY2"'FFD8q2CF*QGSRS'f2+H83$1%B!H5cM4+K+5Al+Ui[`%a&ZYT%
+4D-"C+UeikpKNK3k+eFTScl,XX@5F'$11%5,"@+`R[2G%Db)jHHXYILU0LZKNZRS
+qRKk0Yah,P8Cbi20j+95G3[,r@K2K)5h*8ZUm8G*q3U"58E2D+L0%9K*NkLZL[2P
+b4H*F$PG%Zb4dETMBF4Sf682(Zk`NdVQZ*US!5c@*6@'Y5D@q*fULEG*00I&$BYS
+RPCT)L'a%did#ch,6f#+VI5+@3G`Q)N5rh5CNA&LASHA(4CLEVp5H)1@l0[%fF&`
+5C`Q(QVa#*NQEq*SS+cV5M4@C*ehRL6M5YGEe`eE1&1D&j%58NRM16AB-HFl&0bR
+*,%@[[&dC48aLjbLaGl*ibJ$I)p'Q'j2SF5he2k+QMbLhrkXY6lbfiI9R'%jH1)5
+TEara,pN*[$dFLrKCp0h[4p5)Q6b#a[&Rq+q2+A'cPEK$l*6U0hm+5Nk$jb(iAmQ
+@p@1bCFeTRNpamDB)448KSVbJ0GJA!#LS!*dFJ%EkSpa)ThQ1"DUq3riKrY9Dr*F
+Klif5BD!EP+`B`P54c"m&e,0MU,!-j"qh6`93C&%&lCX!THXA3--'NL"-d`akBaR
+)dU04L0jb!S%(r@cdL33`KPZYJ0FZVb3`9S&ia&*&e9me3C+"Fe#Ibb$Y2Dbd+`Y
+R0CP#"QYqfr2Y-F&qZ"1R2U#PPhLakeI85XX$4D9J'DGQYLd%A-F%S3YX!3-KJI[
+M%#F3#$mUKcJ9B5L*%i9dTd$`a6"j`B'%#$"q6J&K'22i"(I`kqMK'FiLpIqXc(V
+Fbql$klr9CMh`A[m99XcDf$0#`YJY+Ue+A&k0plmMh4RFSV)Ijb8pVIaX5ebcj#r
+@V&PYa)lRCar4IHAX%kNkfa+Xh-iBG9$!p31C3&K+##GYVl8"iDHqqB4&CmX(3MD
+TUK-rDa,fDaL09@FSLjpD5"M-!KLhF`c*3c*YA-lc3+CT*HUC$BY%@NhblcB6cSQ
+$KjGRqLdSaV4fp6PAKZIf5NZUI8jq6iiZFAYqE6N1JTKl'K(V+ZERkC)U+VEXX$+
+@eSk)1r-AL'G@(GPS+0q$e6D-H'IL2&'S5V3Eb[GKNAf6M&TNAkUSi"'GJiMScZm
+4f4HhjqZhiPM!M[C%R!13!-&LNfNjkNY(ZebPD6Rblr!ZCFT6eA!Y9iGF06cRF!4
+bP*Bc8MA*V93e("dV'+&U'(!5M&!e4!K'U*V$+&8YU9@SAk9DlVdecXjQi[iCf$J
+jV!+IPN-"Z2"4!R"0QZ5hX,"pVAjEcXR`XiM3'LcSV0C9j&XIYKV0-XDlFAMATbT
+Q@TmiL!M"Z-[DBG-KiRe@R01Xp9l3b50qNL+d*aDdfr4EaIl`dacM*(l"4K%Ad8h
+,LEiGllNQ&'Xc#r4KfUbMR4k,E*XCMa+jF&BkIj6)GGCpdFKhcl*Ze#,[%[FPDT'
+!DG-LNF"Q5Zeipp5cqpk1#'IacYp2Y*[B[HFMZJH,lm-4FNrcalTAA[iR6!c1YU6
+Hqp+6N@h20Qi[LNDmrmR)ihrhYirr)"UakrX(([r(Rcjqp)I6eBME[KqKL)rr4a6
+eFc,Ulhe(b``4(fPmr+8IEVU2)U`DXc9kG89+LpL+B`DJ#d#U,CQBU8$*)cXFkVC
+X2#+k`6l(cY`I6HrR!@#+"RZ&RA9DpqhHVL'mqmEL'ZZqACBC+X*G0l)dklk1RD!
+249JhK82HLp-e&'(K&&CM$Hp+`AQ"ccG@qSl5!#ql'I9"RmTMlMBmGV3RapYRK`r
+PejE`8,aHK%[1hNC!%R[(l*pX0'LaGm`'NI*9BYF#+F3Z5$q8ca2XD%r5ikU#c,X
+8+%peH$THSeC@LS@1[4BQ(+!$H&"P0KB$DU`iN!""qk#MKjhm6[J%$j!!2MKY2L[
+EDHf-)T`fTaJ"pjk-)X`MK(YL#!*j6jQ'J+6QYi9hEU'drlbA#R5a#klT4,QSVaD
+VlkJ@hN(8MIBA$f8+KN2Thq34)1T'qfaVTa"RhII833eM`FR1jUqHI',c,,VHd@&
+%AcAXh5aU')aiVAAICP(1&#8$DV6b8(V,!9l$VjE+[DFP#bA8NNRb[Q5A)3*DcTI
+X!pBU4%$[qC)G1,NF%G#%[Q3M(!1kdCGXT)`LS#d&98VfYZeFIeT0V$CYLQTY0@Q
+DGMApK0`H68Z%BQmkTZMiM`SEm2S46FIM[HP*pNHXP!d+rc"a8p+VF0M$dlLfeH,
+pEldTUB"*ea(PCcdc2Bq$lDC3q$hGK,(+c&Yd['J25frZLmE`V&r'h"f,HG[L,(h
+"iKR&TZ'Bj3AkJS*Ck6JV`FGmQXGdTZI*-6K@9R'H,4#8Q'QaQ#JG+cZ5G*B9&+M
+3&Y1T(bc)-XNahbPeSml%K"G`*B0l`X8JrrfTeBLR*QM8TQji3!JSS)VSI`4J+!h
+[l5KAaR6Z6,rhHeZhrVQ%58%%6Cp%36JkkHlHhX22BQSVLF&914rU(BhjJURhHle
+M-9RJ0)h&6%I-CD-a5rY0[BHf+M&r@q366p)mhqQrNjJ*%eBVBDbKARc,(5$LJDZ
+*!jd3dmj2jXm`h#B6JQC58*03h%,8mr[prR20`h%eppTPqVQlYhdX6LQSUAI6&6b
+dcLYac(Xb,N*FTjlDcI,6iMl!LjX8HZS"[Njb3m-mLHYi(A[hi&E"$%j44B%Dj5i
++85G6e%P80QA`TAf[DQ"e1XDVrd`"baZ0BJq044R@)4k&4NkL3V,e[%I!jH"hR20
+BUS(3ZD["e!HG8k@G[0`aZ*VS-eb*Z'UaBE,pipf51I4!h3'j8KTQYCkILE0RdM#
+fbp[5*m+!PMP`*5cU(`[6RUPaAJlV&*i+Zjeb*3Tbcf$38'&`P6aV$(FV*`IJPPG
+F!jVYjSp6$h#3!'@,NaQ,4NjqS!E(jYKhd@3cm#LTRI%j``l'Mc%SU@MZSNd(lKp
+QBZfZj3@&[6fhMFBTSrId(KV1`q2ep&l0SkIhUCjajUE#l1Np1"%(@TUEYkQdPFG
+TPG&MVXT6'p$k"&Qed9ZG6&CeR*G+9+8KRZk&UKlSH6BQ!U`(&YE@CBa'XC2UR+F
+b,f(KMU@@+e(eSq*#mYVURM`He5Rd1%r*'Ab(ejZCk4Aipeq*k0&kpVSIVl"V4T,
+S&CiXRPUB#H[!-Rblj3MA3VM3,#1MIJJr2kd&e3'LMZPIa-pC1!j8Jq43`8MIJCm
+0@P!HVaQQTd-0Dpm2kSb$)e%INA#a6Pi2Xk`&e*(GLm-82SK6Fa&r*[E+4[&##`j
+ILDT6ZNdQT"rPJIrbmEKjb+&pZ$H'9U[E)K)DMQ9cD1h'H2fK!eZald$3IPY'kjN
+'Y&cV&Re2FH&!mD(f6DNcK!2Sq98F-)GVC6kX!'*S53"K#d5'mLdiC'D`1RfS0b&
+HTS2PFSD2Z8dU)'Cr!Q"2#pfmj3$Ii6b9,J1#"`VM'8T*HU4A6pd,32J@G3A#S92
+Z+'#6@R&A3aSrZA,*(6p825NGTNCG!6X9V`+#8bkV('d4+rVYlMNeU#%FMlS#RAZ
+1@kjKpX!TTpSPVJ22)-"DAFX"G%P21VSN5ehb@!S!+mem#M9cRB"QRSb80Mr-#T2
+m-FNdC8iUmeE-D#R9T63ipB$15%e((QIcKi-GdkjlB1SakFENkRp0VKXmR2`RND%
+Hr2ljeFN,pPIYAlkNlZm05aa2PkjF[qQkp0FZjM62bR$mrFh[TTGp2,6Ta0-j5fX
+qMmJRTP`hjEAckpqGFPhbDaIqpY[6PY3pE9NT@CliNmM&"IZ6hje5r@l#i212ZaG
+mFq-Rm2+*kZTl6``qdf&Hk[LmE32lKcZlK'PI6J2@"a)q99aG[I[HVdrHQiBZL0L
+Yf&a6emIZaEH"I9RS%Si)4hA&ZKT$FRa@[25CK(DpCI,e+ISC0eLRamHP&ZQZ&kD
+a@@QI55a*RCfAVp22ZdQAVTme4@p*QPkT5dP)-Pk[[cle9Q14AKp[QC8`Ubh4-YY
+bhDf'@8+EFCDZNXf+Uc6--XfHQX!5$(TcDCaqZMiV+DlNhiZqD8Z*El1PfdU+[B[
+H+"NShCh`S2e'fc*lcV36*DH-6prfeb$[NqpD11fZqSkmUCpDq26QPEj0crH'hDm
+XfF#qhEJFVrXrrjEZR2l1kqCrU[K8bVf6kkTP!cN6Kbr0C0b6QB&eR-&!'Cc'52J
+S[U[`ABd[aaK`'fm'*q*QGZ+,JD(-jr$pTrMq#,iBMF+ec"'1%qEaZ"'16)S`$BD
+cK["p$El)S`CjB)S)'hV`I51qQr"&$@SFq'l"&bImeG6L1ic[(Rcr#EjhirZ$q2i
+3[SrL#e,,cXIh$(ar$0qI`2HIiBZaUq`hm2dhq1+@UbcZAFmHa2HAmF@JF4EMbPR
+`D4Dlr(!K9f6i(Vi2iBYVJA,2iiY1aqe$NH(iKEIIq2%E&diFqm(4(jaJhm9a`Vr
+-[lr)[[0hdCpmq'Af+,irpdpI9a!N81(iPl%Pi8a"AXE'(ifJMQJ+3`AEF4L+f2D
+2*M%F+MS0iLY+3``-XqMLJ'")dU%&-Cq'(d#GaDCQ$Q)ld@bmRB+h5(l$f8ai`ar
+MNMIJpI`-@IE)H$f8-Gk)KdZ20-kri@M-h(&m-6LCqa'qb#hh%hc4,l8I`hFM[MI
+JLpkX4@r@SMGV[H$#CILLTqY`1(RGRq+l!ppEm-@04IQ(mF8!C4lc"IR[B*[5BRb
+"dh!R[SKVq&['NT!!I@-q[XLMX3$IXr(&$[K'$ll)Th%G[ZM64[4Tij[i3ZieRX(
+%`j[aa34M%aC(0EAJLjjZ!NB6-1!i4FPSTfE8V4RlVCUabDNC[0$m9rMqFhc"MXf
+SE62`QT&,-lE+0f-Y8FY8I0'M,4RiRST[*liBr'ZCLbq@4E@!DeV!9bhSPCDPq&k
+%lcr'pbhi[K9Ie+-&0@p"ILhJRTErJqprq$Ql`(k1fdcjk`[XTrch(l!,mY1RAm%
+V)ra$m[hGPiqp`,qPU$p'A*4!9mf6)pB5Ydc`5F)h(@cD&(TVaa[Ll#dM#3D9Db*
+XTfp"RlDJ6eZH`0!VqV"3K#pZB5UJ[`[Jl!,ZfLpXa4FmA0L&l`rM#pi[i(5Z![D
+%&F#ER0dYJ%F+i*(@1r$&cUr@9IKHJbpbE2e(I-($VBIa"6QfIKH-"ikHKTKTL*Q
+'Q'Q)Q3l0-4hp1"deR)jqR)jqR)iMS+H$TkGMTpadl)ZEML9QlDK41fV6MVjXKal
+KqI2Y`'m(9MYUdJjZRi%5c`#e3NC&8e(qNp(6*k1R6dC2RibHRSPV5QHL9M2"(62
+""4h)Z`0jGb$[$Z6G!E`1i(8!V`0iTi"l6N'[R`,Z13AFFbUddDQS`DR30+G#dma
++aKIMQE0`U[`XM'$1!Jr03Kr-!Zr0UJ)h`e#BMEV-2MTdB3M-m#Af*KYk3heli5A
+jIKErPCM`6ESq8cE-"d&IH"ETCCqNHZ$l8FCZZ"RI&ILLYqEFLLrU03HaFq#Fc(N
+CAjch-!Hp2KFm-4GHaecdj&aSTlRSblNra"IlCqCLlmaF,1%$K8CCb,X6[G3*(ZP
+%Ih5L9c[4Um8r`[FXR0q'f2P3,I0[`(FZ[Z$pqG!4mk%MjN0(,(J%AfL&dkEMLrM
+6N!$8D9MLY[!QI+%I&N)r,)4q1"fpHMTb1"dBT`2M$26a'FMp$14h"Q)AJj-Araf
+qlmFAh0`c'GqCM#e%MXZJ-jIGM5rkHYPAm8A1Ck-qCi-(ciBf24[D"aX5STZKMeq
+0IRmeq[dFe2FFf'6RiUlDFl0PF[iLIKe#2hm@hpr(phHd+)hrl4L9(e+qM2mLX$k
++lhrPErm&F9506A5('Iqbl04Tl*hcVlqj&SSDaR#)q%MEm1X($`kr$Ml"R4[TpC)
+bL2NI'ZRFE(c"hqIfi`XeF5jdi!VSR"AJaa89q%*6VB$HA`%0[J)DI!Airca`hRQ
+)2`mkk,`r`aIFH"ldd%Vi"LZa&@NPq'mPqRBPHR9P,VlSQjASrjASrjAJkT@(m2e
+9aKC$`km#aLTJV!)RV))@@I8N[Z#C9H!8T"NY3DP@`hpCM4lXJilV3iqZ!6H[!6H
+[JACB!pfa"MS3Tlp(*H#I#p#r&d#VA)#B#k$e,J#rAi$'@JZq@)ZqAJZH@lX)her
+!&lTNl92i3SGF$&klq*r`K5kj'$'A)Yp,)F3["DGI#Nkr&2@l&2@l&2IEASUkArT
+P0S3fGYmRf9Rf1[X4IRm5llq$&rheX2,l-qbC3mrdi+*a2[2l3Iblhr`A[k"h@,1
+&Yp$9QEPIdjJmMZSm+@Xmkr!iX[RF-#Fm94lMK)b"35HMMY%Gd+kA`Fqj$,VZFZL
+Vbh(2aHAJr-["qCGMIm!9k,mV`!9AJ!ZZ3'pH!Eki!Reh"I6HPH$r+k%4VX6@J5Z
+"Hc9bZKUDC`0dhiDeq&k(lq[ahB8[q(B$I*d06IJLh`hJN`hSj`hJq3eIarGIi`[
+2CJ2iB50kEL2U[a&m[R%D[Z#*MH$pM6[`"IC'D0'0i+50U0p'D2aVS3@Z49pILfY
+EV`8IA3XqZKEkr&Ti'GI#5lJ@A(!YZ1!kD),VS"HZJeki$RVK1Y6[1Y6jpG[a4@j
+[`'6P'p$IE`#[[3&jA!rIihUF$hNpGPjHAmrBr`+r[4(ef!4GZ3RmX!QFY`QkG40
+kD"-da#CSSNh3UC[34j[3&jZ`KfX6qQ36q(86q2@'*4FiAA`*[lkS+EFr'AY*IbQ
+Hqciem[BNYZL%Gri&cSqeB'r-A`T-!Ieh!dMf"[$D$H$P'q"ah!!rliB[i!Y[lBD
+(m%ApEN$pEN$pEN$p0U1R0N-[EGk-,lb"cDhiBTh3j[[arAjmFH[(CZL&cHM4cH#
+*cF$G6,M3&IhJKhl`4cqi[4pjE3&RE!&R$i!E"X!*!p"L!qME!A$!!$Kj!,3i!#i
+B!-m2S)m(dH1$i1p"p2RJ,IK#@`k#C`EK8`e#2`l#0aS%rL"U0)Kq(N3r$q*ffN(
+i6S2JPd(`bq"qI1%6$Mk'lbm`i50Y`c6q&2XCLE-Nj,qa0eprNlekR(ip3Mpq4rR
+r'([f--b'$fME6[rfVj(ZFrDZ$@49#lfG+M1k[,9`$2eMA(!0SI&j",6cJE#I"Rq
+24KAqK%X8Q)"*-8DmAZIVJPGci#lkJH)"QYrR[,a'F1&*d0(03Ac"!mh`Be[!T5h
+SU`+m[-*Rm)9[d!Upd!Sp03ekEMSiFcVdAM[mKIBZI)(C$Tqi!cam+V6j,"4k0RT
+k$[N*p"IS,F#6&8q"IN,(qE-rHIRl4rqPTrXlMhrM'emlqT8[IH%,BIcp3(Kl12b
+9SpYDrq8EphfkbGrNk@&aL4LeAXRZ`HLA[@9q6'qmk&hr)'Cb3%"RiD91HfP8AM#
+NB#pC$5I,M0T,MID5e9kBX@+lD0#`IkP9ATTMd3hb5ffbR"R'UPJKP`GXERXC9@0
+US6Ii"cN8*D19-fqcc$L-Bq8&Ff6rP)Y(%6HE22GmSPbA@Q%U'jM'`*aeFNF8H)4
+lRFeIi@Z*6`00e)RHl86r&b[a"BI2!hr1!qph`5[TfSE[[i-I!`fp!(VS0'LZKA-
+BQiXHl`E2,d*[,B,h$cNIh3LpI-BTI0'lVi)qHK9ij9A)D6&mqXA3H@G#1jd*REm
+%-8[3jfI"@qa"rMfU&d-I"T`Y2J`p'-`(R!1124FF,li$23Ik$H$ime#Ame&Km4[
+S0F"$@&PdiCf"edmG2hEUf![2RAVQf2&Ma`iIIZI!NrMlp`Mmh$&mIZ(4Vqjlp-'
+Zelrek)1lh[RfpNIEC1'%2`j#S$[ZjBcK1pFiC4Z2bUT-B9&$5T3aL89p8Z%Fep'
+"3HSe2LM%H-0a5H#QV"M"#kS2l-!P)Cr!3bkI`%1"Q`)M"5B*$!NrC#Am[PA`2-4
+cJ5CE"@pV$4TC["9i+Z+R3-q,T`,GGJ&kqb*iG"HMPkm%Yem*VPm2REmHh!1E-eS
+$MYm!hr-k%0*em!+Z!cqm(KcbHXab[!'rh`$Gm!CSrZXKG+i(rKZKfpk)A$DK[cG
+KCQ-601*QH%HESEFh`mrYRid[22GqH((pkr'&eZb(pp`2$G*2Q[),2rmClrH2(c[
+fh1[2($l`qR02I[YEVcrkb-0lpckjpj%Rpcljm*0lAhrJ,jrEZ@h,PMrEXZ84F%D
+ph!%Y&KeS%hk1G36IdeMi4M%A&l5Ad-0*(`Ef$RhGSN8h[kFU3YI2Q9!,pDT'L(X
+B[&rP$[Jk9H95kI@2MV&4[F*Km&2k-31a"9l,&R$l&JM,,I!%YN#2Ei'fhr*&I+'
+G"q$K$+"("m(6SVHTYDQcUE(4bk+a'8q06@d0ceAep92iqrb&#crpFArr$er#hmG
+kRcrdr21JN5PUrR,S4IfV9p3Hl*XC$&-hYMUG'2",l!9MHqKLc"hJK3bK,f3$[RJ
+1H)lYCV,VD-qMqf0@mP"6ra&GIB'ZIU'Z2PrR#d4-*CiDVmF[ZRbKi-BN6mM9i2Q
+d+mIV-EPm63fZS#1%ak&NlA&CMQYK8Vh(9`ZmaI@H9+II&r,iQK`KMpqAi``N1Id
+0$3jIEBl6D`ai(4jI6L"JV2(kRHYbDVa'9c$S$qDi'P,FRMV4k3K`d+e1Np[MGBP
+HMmq9irE'KB)1Tb[*eHaS#(KG1DlQbFjk)!d&48S9@3rR1*haMFkJbq9,9N2hH%*
+H9i3pV*9l0$BA%jYL5CMKM'M"MEL"'2GDqbHGZk,9eJjbK*eKLr)P"`h@ChKa"XY
+)L'$j%DIGZ"P2-,Ej)r0bY%KY-LPN-,G3L-05aAEa"Tc(c6p%#$p%UC-`$RVcp#I
+3eEff5,,#%-SG9N&-j"PN-df@kG--S6j0U4GXK'GS0))K6JYR*`[e8`3-a[a+*)Y
+'q83IY`ReNiI#2,IhBAPrM9!2d43PNk@%2h!+STX9ZV*AL'TjcE90(LT2*Z1+Vj*
+(Sm*cb,a4fFL2#M6$Y()P3U$H'-$A9TLY!4a)lBUV8`XI4+Yh-UZG$2V6BU(ql*P
+-2EZG'fNbdY51NXh@2aqh0m&S$#5q1-PQqZX8FfUcZ5qYI2,qUHR6T1YqR,(bqVr
+2&1'1&FIqX)`pcUd9ASH8)r[mj)ZlTl,f*!JT-fN+5KX"+&Xq65FPS$cb"cdpp[F
+&H-%4dkLG#N#qq!@a"&+(!UJem0B"R6I'6m+[jX58a04%mdmXb@Q*Ne%*FI)`9CQ
+KU8Qi,30`0qdr@%FmI`#+Rj0I%95lr2(Y1erN),T"FT3ABBVbLr#"[!JAb)X88ek
+%!q4&+%"HK!(N4ETIAU6jj8@kAPkNeH9&'PaHT%APaIT6HJ%-"EpAHa*q*JlTMDE
+Kpac-J-c"$-!mH"1``k)mq%TRiremD0rA`!qj#,VfYCJ(H6edEMmdmX#hF,HK9,`
+'6S,9qA9+6"Bc)+lL-j5B@Lb5Fa8rABQTCh"4V1*2+$%0Q2&c&ImH*HBN8JpDmIV
+[+6(01N`S@-@[9f)+'28X9ea-ARB@jhPC%-aVF0D2mekFqH(F"larq0r4!f`2q`*
+lN!!pa2Bb9*eSG!AT$0%G30Im"2XbfmF`jHLS#(eA3+l6)$*Q3-I-C"ej'hM'Pq#
+IbHGeYXLjb"YkXkj+Ih[F2*cl5MD)Sb90+&[b%aC@iAFh2!h29ITh"XX3j0["i)2
+CA`Q"%k+[k9Y`p%,eT,F[9-GK$VrQD08Skeh#TLAIG'ZPSp%9[#X)kETEZ9P#1+Q
+qY0lMG04K&LbD%VIDdq###aP065ahHHpfK4"*P9CIkQm+HPc"Jla-pTHAk-4HplF
+)!ZKbi6"qe`Mr5"238fImr6m!N!-0$4G3BA4MD#")HA"PFN*TBP4P@#!`,MNZ0@X
+JFh4KBfX!Va)!N!m#$a`!!ceA!*!%rj!%8e4"5eG*6%3"!+I3jCqU%dSF!!&!"!!
+!Nk!!!*2P!!!LLB4!QNd!N!BK"!B!kbAcC#DhPG2N4VZ&G462eXdJfl6E+r0NFMI
+El"HDjcFa1@e0YMjlqF95I1cdZfjPkr1eEl-NE$0)ZCYY[FdffhVC`4dR'h,)XZZ
+pp4M)BjXZE'&`%`BTiB3[P,X&1H3Gb"F'dQkcK@I'&Rk#E,[`%l+&EFU&E,200S-
+dAk#kVZrl2UqclmM"$3F%*!H5!`P)TL!"b6-#iK[NCl+9V@cPG000ZCY&qFSTGl-
+STjabqTabZPQ8ZbQR[C`QTlRCTTXZp,Qjm)ARdI)pENFhcBApCTYY#MRFX5hNN!"
+YYSdY2*B,*ic`K41q#&QhF,+2AT!!,``b`KB11@6EK81qX)866[Da,@3,*b`h@rM
+#ciA(0L0XZl"00e[S3KHk8,jbQRPk!9eGer9GGJY[d!Ne#G`0K%H@0[Q&,*f5JdF
+@5SkHkX`"BaVmA2FVTLRr&@2DfaMEm,-*5b)a[q6Tm+eCeijS5E%KqFch@Mlhh9X
+Rf"q-qQ0HrrUS0&H,d'D[pCi9p3h9P%EpRBqBr0Xeb6'9XFIf-ie&pbA0YqerXqI
+EfiU+H@J9QmJ'0-qJh%qbac3XH59j3H6Fp0Y+F[#li@F'hULDc[ASbp8Pl@dG2Yk
+AaGlTp#[pDk@26f64eaU*XHKS&4Fql&c1@'N*dcYl*ZeaVLTjbYQjXmETGGrVDUa
+hHT'KBARbBQNjbf*CmAp,HHDA-idpR"c'lbKqKa,IS+q5mZ4JFM#H%'q'J4RLhIK
+f-8hmhiUU2VI%HNp0G8fYG9N$bQ,9e@&@B!ZLTJKq3k)(ZER4C(GcB2,eZ2F1,'j
+Q"Fj98[0EJbc2fEGMbEfHQSDD+U9$LG+miM$6PjUBS4)jkd,*brJG`1p)iKY4A6I
+HfqiU05AlUAZppdIeT3bG5U#ZY449(8cF,i@BhRb3!19*U'2'CR3ZQek+l-i"(HD
+cS*PU[kA4fEI,AYp3lkfa,I0k'jfMeDFcXjCR@$E9@2eF[-X@,"*6Nd#eap#$bX4
+lKL,UX40a5q+p@BK2[NQ9FPiHU'USXET&NaG99p8d02"D$p[I+eU!5N0QJmF5R,c
+-%Q6X@Ike%qq'pUc-XMTX*FPhlZ5GU(k1jUMhMMR0bA05',q0Fec*YbJ'0E-r`rJ
+G`#rQK&9GfFTbNqrLr@6m!GiI[Sh%[fFS#XiAlm`b[jK0a"[lPTYilmlQj$X'90b
+H5a1![V[NLFU,6pEC5PL"c,6[d2HlhDKqMQSU+@CDE!b$*H008Y&L5r+5L#Y&VA@
+pTBaLA5cHj(KUH@meZp15r-IJ['K*GcKj+9#Xp0-peXp3@$-q14$)TFL5LFkHS6I
+3Ke[-*FP,0#R',Na0M,rXE,B%Cq#P&VpKRBAG&Tb-P`SXcLGSAdMZ4f5Q#G',CA#
+%Nfp'FP((8Bm&I6U+6Kk6A&%fhF,+ND@@jf0r%BAZ,I&Bd#@GXHQMM0Nmicjdl5K
+YLmPSic+2IRLNR[-e'(eLRLjUCIVN,c#0hd*Ipr(-V5)6*VXQHB)Q+Kr[q8ZPBTD
+p*m(+Bq@(ZPEf)XGKQcAIN!"RCFRlAqV9"!dmBS("`$Xf*'F[aMj*AU5Sb-(NVqJ
+Er4bkl@$beibPUlUdP@@cFV@6e8'T*(R#h9A++T'VEY0J,NAUcG&#1l#0kTcSDkX
+1hAb+pLAbf,Q`(I9,*2%HiRGm[%Rdbae-PhbGaqI69d22eI+20akrF,RJ6bkANIM
+6P!IGM'!Ej5BfULqkpTA8"94e+GjCAmMCBl$cr5CElL2pb8-0EdqlNVj5YLkjYlD
+q`9[MGVNEUm5Y),0bIAq545Z0Ebap06R),j)$4VSI9Z1##GLHSlH5@8b2MKM1RSP
+25N95-kDm@Ve(TJfL%Y6BL'[NhPTV23i$9'B0fpr6k2NGJZZMbK$9G0F&`VL)j$h
+@LKdBXBH3!jdpYjE3GpdQc@EFI-Z`fF2f6@b2Z,15Uq4&5[3YL*kR4,2EM&iJ6a2
+4aP&%cd*d#'mlP1MmD(ChhDVHQ2j3hId[G@PiE)85ki[QS"q-Q#-LV%X0EaZka+h
+cq5Tl6G8p,U[EZU5UF4R1cK0@6f[N5`eYl4e58ff98jTE-PG+c&fid#aCSp'3!&q
+ULUb2GREiBbDT2VbQ4,+'3T+l,GMDd5kjrHhqf!Cr5mPG+f*Y(4hqX,6k3FRKHe#
+b4eU#,C'`0(GZD9RT3M26c(k`0K*E[dL5e&),bN2i@YcKAppHBC,+1r`E1e`a&,U
+HAMr@'HTSmrK$rMAmHIf$dEC`-2eqHfG("iVVp+hhmq6VH15UPSDfX,p#qU+T213
+2L-4VSKAhDbSedqPZV(Z2&FkNLEdVHE(q,-0mBKm8-@eP3Eb,hRULAm#PR4c'&kl
+V*@mABZij,p[VDV`0M9@0Y99@Gr@+HQGei`Ua!iEXlpeD@)c0a$h!@lbRJfk!j11
+d!qBCc12ZY`6eZ([Za!jpAUUZ3mhBQ82Bh82B`$PlfPKqfHGBpYje6,[(DZppD*!
+!D5Z`XC`-fFJ333E[ASmDAmP+GEJ%V,kk5SE[4&pYhfD@@mPSJrIqKE`bXi&QmJd
+dj1c*Hall'h(kY8NUUQ#C2(QT22H1jLQ88&5*VM+R-PY89k*,h)kT'&5hiIfZ4X!
+HLaZGQCN`-@@b&d1f(&[*m,$N04MXAGhBl$Ie5Pk(B39Y+Zm@M6bI0TZ+,L[AX(b
+ff)VFRIcASKX5Qh16YApiZ+TrD$KD+If-YRI6ipLcrX!"l1CS&@,Y1,AEj!i)1[[
+f9M8fd"hIdPKGde#r"2""NlJ'4Y!EES!`qTb&AEqMT+KdJT4$&a-hId(Gchj5#%`
+#28jAXp9DA9h6j(9EEIGkDm6FS`kM823JG9RJ2BbHM"MI-,j"@kCJ(G2EJ[Ceb8Z
+PTS'c84f[FG-AQJRr31p(H"53!"&%h8P4I,qiK0fLE2#Q1h#2*2mcMlS#hbUUdKD
+dSZDBRRV'@0b-a8P'&c[Ub1I95B6E`M6"L6`$X4hQ0X4'Nlk'RAdlUp`e9Qm0TZ2
+$BMS'"+l5aHB!$F$p'8KHY$eRHmlCFd[6V'DU3p!QGXe0e8il["M9UT[1k0ENiHY
+j6A2m1AZ)CMKj"62Xj4Im)5A([CVaq(T)XiCb@'-jRP"bh-*cG)NFBf-jYLJjbRQ
+11T%M-CCMTC)Mb(,a9FKcG,-I+$Qfm"`,e$SNar0XJ1IB4P'B&@E)8c)maL[p6D@
++6U@+HrQG6c511ETjMRqMj+JIcI'bNU1*jfK@FX`CcE&A4D$d20E8Hh&KqS#2hQU
+QA@2JeSd!B5*U5,3X4#M"I#C`33Yc'$T-'`'E"jY)E80HXULc&E&pZ"QV16BPk"k
+cfM8d@bU"bNN&DkpAN!#kQY@l[I%r@pISYH)+@Z4P@XdUG-HqU43HL*fD1CQqXPE
+1m9!I,,UhLcJ5*cYSl,68A(9qD&$GQGHL-k-$Z(J5$J-3P"hZJlr0ZSZb@L0ChDQ
+XVCrNh%!jadCbHP)jLcl*@8dj%b-j[3-$e-rJ0pAG+AF2lN%&5$CBPp4ia2Bm`Qp
+"388&CI$C3`0Am$Z)q[S6hb$dCYYQGLZK1pLYNH4T(J&X""%RN!$MGG`Na10FFHa
+FjQ3-N!#2ipK*U!LE@&"09&B$l2+fJ905#,mDNDSf$3aDc`m-'K%$9+L19G0Y4ib
+[S5GR@rSYmqA-fd%9U3#@Fm4@Cp1C5T)RaIfA21RX'AFATZ@)`a$3EY4JASi!@cU
+bjq&&@-jlDN)@MMBEP6Qi"ej$6`+*ph!0@$DJ5pI9*8q9CPH13qpH8k+AF6c*ILe
+0[1HZ3aAH`#1CET5,ITDD"LjeYl+'5*ji[aC[SjFFSB&,N@N8+kM9D`THC9F%[#T
+L'[KjF+,)#93ia'E)5J9ihF4Qd%5PXDIqq00!c&kCf9`kJEpqNeHNULP#Yp3,d+q
+5#FSEdDLXq-r%rC[Hed[U23)90brBhm[K'd"G63%MTV5IEi1L!H$MHKYd$*a1I!-
+eF5mBL9AdGGeQc5h)hXPrKm6Y'pJQGV*j8Gh"CbqrrT(,,e"FAS4p0NSG0KL3!%#
+rZ@4iJ,"%Dd"&`a'Y1LPSH$Y(#P3@eU$3,mpUjAEBQZk%Iq$rkS4rAhQ4V0fL-H3
+%@A)ci3QMja&9*"8YBTM(I[-iHfrIRTQ@[`+UCQKXNfJ$A))i`iE*1Uj`&kUAJG2
+491-KlS*EBm+GdCIHVYc8hXPa9`E"m(%%B`$pHikqkcCTbr"EM0r#a0FcHB+T2!r
+69K@N!krZ5e1D"hkHb401j9NlQZIJY+*-PTa8PL8Th)4CKU5LKCD"5cE6d+$00)c
+I-I`Q"T9G&a@haZM,Z+Ga+H[AA%04,ZEK3X[!Qa4RUA&'+Zj9LKY6iXlJVY0aVe"
+F3Sdl9)JpN!$X"`iPlb1cq9A,bq+`CMeG&R*EM!"[M)J0hT8XCEBJRp1qa*GR05F
+(X@@a%kUBR-YhPcrq@@aVEhGGk!*fl0'JL+TNL-2lUkRh!(pr*I@H'ImX[DJqa(&
+A!&pE4em02EqFTR6h"GYcd9cD'Yl,-jXPMr3mpRAcG-b*SC-mYp8br@aXAp53!*%
+ST0XSQC5+pQ1b"eUa4BF6M`,ra(Gl[kJQX38A`3$9+&ZZJ,CiFM$a&EVI[-p3Ir(
+pF'Crec4kl)dVa2i'MDGKqF!Ea2EJ96iNmGYm5f2r`"'"-62MPR3qBG3)AK+DKDe
+NZ(!VcQ)0f!*e8V0cMq#[m&EFkUQb1Vf0Z*K[G![qLXiE3Gi3Fr(X,FJH[TjG-fm
+DPLha0RUm#S+&h-5Pah%RpS$lq()lli)rAFH9)G#2)ZPHI0CPpAJElkYa0rl2@V,
+5Y9`8BZfMYD!P,BffaNE"NrPa,F&2ql+&ei*'rp9m"$kHMmp51eXDdGPdlJ$bI@!
+X(qGhXl24@eplVjLN`96("JQaicmlKZf)'me`43fdPpb(8%Rq4h2p18q0XpTH9E-
+Fl#f$'CZaQCD8G$NIL,,5mA0lYC+c-mVNbiLlEAq,mlKMSrD4Y4H0%DE$KUQ5a[F
+HbCSDc$0DT0[S*@B*C%FI!c2PpZ*k4m&DAI6VmN96[95F(+6ShqLGZAcT$U2K+0k
++08Zh4pRaPrlkIfYKQRP!-L*VQFD%@m4lr*M$X!lJ6[kYP#Hf8AYJljiCf*PH*QR
+lYKrU@UmeBYI[hEUHX8(G9U+jEGrke%[l"YRNfBfIXc,pjcCU#PRqp'1D3XQle$j
+lMe4!Y9pKBAPri@8'(f-R(2Q"fFCm5E1dkm@ZeG+HlF(XMVcZVIl*NYISq-P,8Xj
+M[Bm#1peC)MAXrjcFZTNKjbXqTXR(p`lN[C,TV,pNNbRAVr@HkK+jkVF(-3hEGJB
+R'pR5KrCZpqG498mqj0G*A[Rj'9d0ajRj-dkQ-ckFr`+cP)j(,IILpeQIcGKX4fc
+VXdZrYK595!hZ'9dckQIm[G6`k,%CVaE[,2`H-dcr*F[A&%ECflpNHZb,R)Dh0em
+TH8V-Ck`JQ#ZQlaIXXXlDcqD*'F08KGB@'$&6AcrQZ'eGlJ`lcGZU-h,fArq5jDf
+jJ-aA-Rhhp[9D+DF+(BejMrr(4h[hG@&@[%C'rBrP"(6l2iFmM8[Y"3CAPp4Pf(U
+m9hVS*qJ8SLU*BVLc`GP*@q04BmN1jm$3Dha6A)UAjrM,qdZkeQEErJV[Hr(l"'9
+#e'bm2FEM,mI,3rbP%#rhmjGk[0aV,*++q'ZadBVhpH+eK1hr5f-ADLp"MpEJHPh
+$mK,[9eV!4p"lY"bBDF-!bmCh5'UZe*EU[rG,qhZR6eHpckDCTdMhcQ-RE5GY*il
+DV'kl,-h`f@`&8drBL,qdCU)1A`pDbmTC8YBDhPckiq3Jp[mab@Gib$aGUZqci(q
+rebipEGc4m(C16NQcXa19l8GPZG+pjLQ4qAN@PJbEbkC%6&42jdb2eEJ8p9hiZ29
+abrV#%bmCHMd@Ji,cHh*+QjNH'rMM0S--a'9rEd`MCp0hY49Gc89hX`RGr'hpFZ4
+Vdq9DQDE)#Ll%'V!N-IqH,,!+2mjB`6jj)Q2%G[&Y&pc-K32*IZF$cJGNP[mUA4)
+i8BVCH1[j5BDqAQ)T!&%rj&cPl2`NG[mIBMerL)hm)ID92m5#SI$pf0Iq%"[i3kc
+[$l%,rK"EqV[B!'-j3B-CphR3`L5la@Da@f6`9hl3"@6dICS4%klf9m$`Xm$Jb(Y
+pB@$3Xf-X#KHBe`&H9,6`d*6JjGADC9eZfS'),LY9SR1$fBF-J5Z5AX4e*GeGqB@
+ic*!!2AY+m1*K6H#+%QNJ,U,%a5QZHBHD99@$1Ybm$m0UaYCXj!RbLJ)LFeZrf-'
+-E!Gq&V03A(4+-,ZJ-(!qbN4d@lCN+M!%cEER#`b54934dk1+2V8+[%9(HR%jlSa
+UZMQ69(P6&lS`5KISP(kh+#p-GB[b`YahlDlX`Ci4ERT[2ffF@*G!4H30fa!-li&
+da29RQ3El-f,S0@"A2I!M56q*5H29,4Nab$S$-Z#q'l8CD2qTbi!FP%XiYXDA,Xe
+F#fZJ&fbB1LHiml(Qa[Ga&4`L))E%[,GcZXGbbNX"LkUjJGFFUPPZEDKTFVNrc1l
+jVpN"A#efeMA8+0NMb!l-5Vm!Yq*,PdkT)j+U)j+T)j5Zim2@$lZ3!2(([YG9,IR
+RfReMYGXe0r34E%C#fpX9qrpVhfdJmBHe"rjB1b'lYf[2r1mcep,B!1l0qHc"rjN
+G812EfE-qb"iTCZeUpM`e1d$2(rBpp,Zq5hC3#AqBIGV[XU2P0a!5r-2XiGpPYf&
+NR6f+R''H29T'8l#BjfG8J$A45pHY5LA4d8V!'j4+kQUDU",FlL&lPaemGQ-LH%L
+X*jcU4MKU8'S)MpB!6L9ailrTjBcIp4)M00l,m4Q1rYF0!2,@$3f00RAl[&[l"Eq
+IiA6f[qjqpPMhj5A9Lk$5LpVkQJCqZk#DS&*05+NQK0N-+,-CLYlqhh[ldhTbrTp
+kJ-p)29'P(Zk,d)h0mGlIE3l-cRJeBD@DL&*0*,1*e#bbRNLdm!qcq%reA2MIk[R
+qCTMj`6@A[K*#bT@!Dfl4dMr9mElIG8&44A#NR0pZXhjr#fU5bGXj,r[RR$IAq(5
+%IZB$P59$@ZNX[(QND6Ia`X!%"[13!,ST$6frH8YURQ-A'F!-(#N&Se6LU&%5Q)i
+)`dBBRH*Y,ID!Y48((h!%[k1#SI2QkUEGB1mP%'(*,M1qAZTRqM`$-`@!q#8jA`d
+B!(+fPL"kj2La-Z6i1R,-@$TmaBd)C%P`I3mVN!#AcYJk%E%@hLe%*YBr5j'#,pk
+ia&i&IM-k`5kN1a&r)p-*JkdFlFA-G'9m!AFp&,6G"+!VMkLeG%$K)H-*BS!hp2c
++l0SYDUSZ"UXF-HJ2Q%G[&,Tf8`HaIh8(`8T"&6dGa'!&Cb9ZKCB!15Z)'J4rUjd
+V'!c'SrL+NrS(IJIMFBAK%TGq*[e-UBG3#5iRQf(faM'D",$8`-C[PFciiK`3LCd
+2rXZI0hKh1b`"`M*,hBJ&Aa$GY!EA+`S9`mDQhI5LYdDr%PA3Y$ZUSAUa"@jFBL1
+F`#*eMd#HLfP$qIC0ZQq*61BMVYe3d+RPFeK+Xe,AqipGI3H"k#i3[0!hh"p&[EQ
++CSX9bA`eVRqChK5AeATFH91X`(hSiJZZh8U-BJ#qJTLRA1M4PCEKEAJ(XjajV(1
+Zh3i@U%"rCSVq*2TGZhP[Z"2HkN,mc,8Z()AL66GU!AZ509VI8Z[aR&2UqF+IkYR
+qB6f&bYai)S`&P#iUIZ*$cTi,&eblmF)HiY@DRDTAceHLj%rejRp3VkX(q4+b!Dc
+#6`*EZM(aNTR8J4*jBGD&,GCRH`kE*B%+PbAQdMeJ3FR%fP-*hQR[ja&9+rEDB*-
+,Hm%#TpkkNVKEC!"@f)5A"m'c2XQhVfak[B%jJGbMPKZXG*8PiD!VQI`!k`SB)VF
+%M-Ka"KYK0qdFUHd--SjiNE&R*ZhK9LMKb&EGL[dMHHXY3DJ9)9HhpQ!k&b2ibPU
+P3cG3p[5f(Ph2NP(HYH,KKp'jD+)DH6DL*aZEX+qYMFIlKhHKpe[aeSfh,AME3RH
+5C,`I[rG4jTi*8K%f$(4j%,NT[XjF4"H9e8@[UP0$d%D3!1rK*TTMERrb)MHkGY1
+8pFlrG(D(!YGR9epfAU"c(h%45c&'eb#UL4PhP')lMaB@,e@f`PV"Be2C2QbYGdV
+iFkPrE[TcATdrVhlX,j,kd`'Yr'r"KhmUILIrfr6K(k0&2'dUL,q'5)IN$dFkJke
+5e"H$[JaNEpC*E@(*&BNZLjD`q[!'AkLY4@U!`%`U!a0d4D,J@GMa,C(S4q&1r%T
+r`!H0QeLiFrhUN35HM4XhDL30P10mSE4@R+If%kfiYr50IU"Xj(hqZV+4&f5EmmT
+'"L-&PbT&e8CdMFDjeY3ekZ$ea1NEA((XVibpLR,4lD*Ib3#8Le3dlU#-$N@jD+X
+5A4I0iXT&hSab%9A&'&ZNDVP3rHdYTD+YY8*&U0R[LkeT,9i6#AIiS2N$CD,eVAj
+24``U38951`qqU685mTZNQJhqf)05ijSeRE'B2lc',p@'I-&CV&*8m#pk4klTQNS
+9hiPK9PlLb)VLdQfVGd)E!0G6#jp8@hf'LP'19NCeMZ5K+lYp*K63TR%GY!Z#Nr%
+9#ZE+8ph2Ald%MC`S[JIP2,`%YQLQ3#YMV0rpQ15"LXlqhTaJYSJ!drj*9E&'-9-
+&f'Pf@DXJ9j2La!S'e-KVRXPV$Z$ViU"H,U"UJ9D`eS#SUC@VKA4T`1pA8jNc`YC
+&I3h!B+@VTP)G0`4c+N84YdjjTmB5hPfA$+DVl`I,`(JAT3(-qeV+"1BkhNe5-mP
+!eP2@md1N01$SMV61GjL'@-#Fb8ZpV(0jpel21mi3r[F0MAAeLSl!f(P&cbq`f(9
+eS,,NkJ$RHBHi[KNR41-'k*LA92('q%8fMKe)0k'T`$MpZ[21jUZr"%1qmqT!3%p
+D+f2[Nd,Cf2[i(5#-BH`5raUdP3`aLNrbV`4p64XN24D0A%!RS$hGJj+5Ui2Sd!M
+pSXVR(0"T4%`F[i280@ZE!6@fDH8Cq2j6l0"1U!1`QcYNk,kT0dZ,rBdZY$e,GI%
+Q8(dcd6FMTA6fNIkVVk9ClTXp%%+mh[iaaphc+BYlDiS-Fi0h02Xj*[Hd6jMF0X%
+"kh)U#kElcpRT8bF`Drm[)pCR%FT@(Uk4KJZY1@+!6X4$T*rJHCC`1TGf$T6+L&)
+3XmM31Ji1A`RQhlXE'PV%,V!e[3mlRJT3eM+HYBZb'Uq*I0j68-6b%4,KI9A+#dk
+N[#8&H'd51BeM2'FPcrN3cl-,p3D"9,+qK,Tp2DFTXhjlX+6)XpfaR6"9)dVjhB2
+)[`cEZ$QLfkb4Le&"q%B&AeL@VL#+a3'"P2VD!$BZqf6d81h'B5"BrP,SSD+cU-X
+i!l3NdY"If$Ym9Zc*Uf-Y)aIq1LR5f5&&!P,-&`lk@HSbMA9%P)-d9P`@cU5mA'V
+eY8[KL%6+GqrQZ`U#I0r0ea+*5!(rPp,KkqKZpaKQBUT,*Y'8&,%YV'QhI*H8drH
+BK2NR1i+D"Tk,aT`6MdP@3aF`rXqmX$hm9X2EqPk1rMp2+LXh$'J1@JFdF@$p"cB
+RYb3hDE!RMq$e'++fBBHHb0p6Mbq&qES*4mENZbpap8DmH!*J$6b2'99UXY4e44b
+i!Xq$MiVrhY2&48VZ&j6Fcd'&pYkQhB%bQQa8-0Z0hV"AlVe3R$a)diX[CS)1Th!
+0$M)Eha2$G0A1FENIGQq2hY)p+D"cIh8,Hhf3!'Q12"`q4e&3,AUqlf&2&hTbL,p
+pTTKjYU%EadTa1AT`8H'&[DM$b`(q8X9Mr(M"TY24KDRS')ra8LqFD24C4lYjM!m
+[ckM4,ZL6U'JAk6P"$6ECKrK(8[%[SZ[-ADafhI8NlcTC&Y*eec[TVQ-,EF3@'N`
+q6rLk`8c-E&,q0ACMN!"16UKZJ*P&ADlA8hA931mS40["YCGAp#'SlJ`83[ZBY5b
++a5+a4G*)&3&#+bjVB+i[m!XTYSiB*"HYSr[)c[[ZMI4frN`e2cBb9ZilqAN!6Z3
+2)Aq%mPr'lba8J6Y,9C(+rki1b0XG`1hkJ`kFZelr8Y&$mf56je5HE2+dbT00[Ul
+U61VZ"HEF!m@ap`8'Aap-*LHI#JaL"b9ijA'DZFhY(E%e[Jj&erKFhZrQkhS`KG2
+T(LpaIpda$EP#HlkHRQIQk[#(e8[FAi,,[m[A[6fF&pd%aV![Hc[%X)j,L+1q@d2
+RpSj)Ca5keXL&*DFd)XMM,3(qBqLE'QF8#ACkHljNqCLeqhhal)NrT($Kei0I2hk
+RirILB8L*iIGAm*Y8[[R11-Bc$r-alip,r0XH',hi2BjIbRk2S&i)8V(Qq4$3QTr
+X%Ypm4acM*3rc-HrIP(JK+mErRfSHBaS9f2DfkQVE`Lf-hCN4!Bm1I`,XLX4N`@E
+'aZZ+[61pdBGr5Y5fJ2'HP9mM-Sq5Sf[SI!b-RQD!MBZFYRU[a`D-Y)B[`,Ib2kM
+Qlc+SNTQU!SVC,A5l'eG8,A0l'K@SmQ8&UJb58'E[(FA0NVHL'"+,@C8jBf,NK,e
+!Hk)%mFX3RFU+Yq2PD2`*9F,mHf,PNZAA5GLhTed&,`Ri2PMYYUk`06CChG4+4lq
+F2B%%Q+I39SHj#8*dR1!EHb$b`VS2S`'L2`fSp8*F+NaR6ql1QFffB-84V944*%e
+BhZZS@d'5bc9dDZBdd9IZhQ)2j$m#a6ZNKUBG1(%(D-DU3ea`-@JUCNm#m-ZLXbl
+h+'USP9aZ&mpEZEL1686r)2kKq[FjL)AHk+Pa#e903NmAKGPi,YiB6)ZQ8Fj#(H1
+j&L%E1LQe+*8ddNQNVK*@BPdQ@*lRES&,&@Y[k*P+&*!!8)PKhbi"m!%F(5l0Um6
+aQYa'm&kqC865-HBLk*KbhR+@Kpal-X+T1+)qKee!C(G*[C0$aj4hp+31XHVDDC-
+U#X`&%+kq'X)G4Gh@jEd[H&I4,(RGA[RG&lcKDN8'IB(KETR&6)FX!5ei+0)ClSl
+5JMee#ZN'a-&FL!C!G"*bLkT$TGPZbi)Zf86LcT-jRB`0BaQE[1VX6IE2RMk6"&m
+&[Kf(rLLYE8,U8`$P6Z5!i#cQ*ATANC!!3)qj3,(adYCM$T2NPcG"ZVi4!'a3mXl
+&*%$!BfBU&X,0ljf(f)!5kc2N")U[9fFG4R@3!-NcKaf@5+i!bXhK421BF1f[JS'
+UK#@PJj(X+KmB#adXTeU`4G$44'R1ErX*k&KA,!+kU,JD&GXpZKQEEK[ecaB"l9d
+cfL8lCrMM,K8ATAX%iDX@cXV!PMCdfXB`cGNSpX4EFmDp)Ed"A+lVa-CQRHDcQGi
+ml1bjr4,0$rD@hCQ90c+Zch4Q&SHaSb,b[BZi6(()R%dEYIH,b$lR4[DjQHbSdjN
+pHhH!R(`rqYTNVDj[9+d'f,hpRcXNFHbhmr0jp+6L4Ul(-M03iH`TZ)!CL)V1USY
+,YNNJXb(3*8iI*@*P2`5bK5)f0r9*L%q+($NZ&G`&fGQ3!#V%p`9(jRL6!iXaLGD
+lS*%Bl$$U#p-9Ceh#,dLPeYR%0cLG!I2%LiS3k0MHU8@JHXDjj23QZm9KZGF5c)G
+)Iajq#b&S2@qT*GJJVi6mCc'[!6N6Hq@'NAI6+j--I(3djQ@jQ1D$a$c1KiVVh5f
+6+#+kNXTNl6#-#fVP2(GGQrl&m2#l%CDdPqB9i3+lB$iQ!N+4ih0E8frP*)p&5i3
+BUp"b5+0i")+L)UQ2kd$Zl-p5%N8PNLZCZi#d@PlM28"A$EdL$$k5%3BILB--L#c
+VjZ!0pjH@NrZH,$MSYUbq%IY#a+"PTJ(M*IF!eSX68Ee0"f,I-&j#r!@6L%l!+)%
+Ll+V-LV*VAcB2,fPFMVPRQjYU'UcHqZ8ehXD4QL'&0CeIKhE9*#P8SBH9"BY-,2Y
+E)DCGB'+k*lbS1KLF6+4"L-q1lUP4C-G"6Mk'b66d2$D"f*%pe5+f%P6*ebc83dU
+"PqEde8"kh0GA$5VPPc#,)JHZZR4I&@#-4@jhbLK%[pTlkh(dRMGSj"Tj1BjUKkY
+a%q)l6YmpFBU5H8Y03lq5MD+iFBKNKr',lCB8e"c*-$N[1d3Re-4JG*T'CU8[P9@
+Nre!6T#'(Gp&YU@C(4!!a!DP+VAhTR(DPK!hIUP1"-DV1(35R9pFU`VilB&r!8*'
+)bL*(lI*Hi`553fpMQK*9T0ZXKScZD,&R`8(!DTKHr(TXifbJ%bAI*X&D60&3r-h
+&Q0cNQpMR3VF66)EpiR5mcU@'"l'[#cLCM#5[6GLNj46Emc5%@VmCb*-mFqXBTbS
+PhjDRBY1'$6VFVicbE36C6&kmQc6B[ViAb8c$3jM(SIM2dleVjf,2dm[PQ'%Fcmb
+lhkY8!APQA-'Xe#GjE,$)!&&2B$p%Nq6#qc+kH"cJpR(*CI48r5IQMQ)E#%E46!K
+'%T2bCS9!,l!T)#1LVRhf'QK8lZ*D,Y'ZC6bhB[rIk1+D(%X8+@E"[K6959e5FiL
+m"I&HAN4K8'9XBIrlUqXpd,"I0*SGpM)SZ5hL#8P)%6mHQUV)*q`XKMbaBH`1-@Q
+93&(50+%(K(F-U1&$CA,4%TFA1T1SCS!M'3@+8BjhX,-mc0DSBT6$`i9i)5)EKT%
+$E!!BjE$aS2YFbccf%4XF!h4cLp#qA(aMZ65ADjcBqBqlkaaeN@TXkYTP%((ip#Y
+d`98aGadK3j1i'88*8PIH@J-3'e!9F)P9rQ[JRleEe"ZC(Ij9PaYbPcJq454$HV#
+,0K`KpN,-QQd5!K1hb1EL+%l,!S2N"HfX2G&Z`$a6XRBrk-[Yq[Kbb@[$#`Nq)PL
+HL$pJRK3X`(hCK2Yb!hlAiJhQ*0a!+AJ0S)i#PKXR3A28K6fm"l["f4bYqDNBl!X
+9JkVfa*H#YR45mS+qXNZTSc0j)&8*,(3N$h!6)@lNH4BG[',%&NFP@`($'Uj@f$J
+`0)Z`8`h05Zc6-,lAFX*Q1ElH!q(bh6aUcKH4`6L2hMAK23Y[1hKFQ-FGSEXC95k
+e2@Iqh(@6(Hh61-,U`pcbBLD0lhQTaVaGi'R)Q[rEV+832'["YYZ['$KKhLT$%8K
+G4YFXPR8ET!G9"HS+#k&q!rISheD5Z24T*9QA8FRp[kdN2*TR[a`Bbq)@@5,T,0+
+e8VP#B-bT#8JF&6Ni"kh5pIP)I#Fc(qliFY@BJUD$Y0KVK"F-4EdYb4%A9UpF8@6
+1)@N6AVCU,kSEURF0S9aD'0J"Z'cNHAS+@qQ9&a3jUJ-",TSF5Y`AAeI1VD93YZ2
+d`iZ+&YFNcq)bSa%,`9PNd`lKpa3f[JmEIcK3b(2MSQ,fC`Mj`KYfj!VPhZU,(&@
+aX24p$HcYrZV'$%5PlaA"1XDaU3PjEP`Gir,F`FN`pJ,*58ek@HKb38A-"TNGj)6
+%mDYE`F6)8HiNBQ-L5`1eY"Z&#3C3C'bU1HBmXd`K#MqVNXYGcb+,C0m-R13Mba5
+km1Y%`+@X!862Bm2RL3*VrC,`+I-G`Y5X3H`k8+``1m9N%F%L4!S6C2&E"Dr1VB+
+G'XD&%-5'$3BhN!$"#T&C'%l)LjZ(ci(ffMPm,M!09%4+8Z!bYXi)1I2-lMPiSpJ
+*BQ(&3'+2+l%2#X-4eQRTCqC("4RAY[&KIC-%lQ&'a3TQFfUY*C0%"(YM*8L-!TF
+GDc(I9@UT%l@BlkCPdbIUUEe@cfjCbQ5!D,SeieU'VC!!B%Qd3@,''Z`1$ld6BF0
+[L(`3@)FK&H)6$Zer"Q*kk)BqY)I)EaC%HUah3G5amqhL&88DqiGHcTJS%6bYX@B
+&aPA*q'$(",)LJB!f3PMSrj)Eb$bMdS[YEI0jN!#cQNIA5-2b`B-F)lQ"qP,[#S$
+'k@d9&MSJ#r-LTZP*JFhC*'QE`TRjXYKU%2J`XTl&0TfR)b-(4Z,TfGM'[Gq[+(*
+mG3@B(NXj[Z,C4[Qa%aT$R!J-bbSqE"SI@Cd!,44%30r"dR'+!$p4&#-49kUi!GP
+VCpC)RX@Y,(m)KLK+&Q@p@&NbG$'aIdlcd*@![U)F0Nf-,+-0NZ@iD-@86CF@P4U
+DA-Q$q6p+L0)j'VN*0N-QieLaZGJbe%0hM(Q%IhhCA$,8Jke@&bcJef-q[U)Fa`N
+(*mXc35,r-Z9AGRm`bII)qBL"RCPd6#G(PLR6!Q6!pde(m`TXIc['MGhLfeS'3FG
+k+lIMNE-4CJV-`d@S!VpI*Q6RM8@b)j9[$r)e%IhmI*li00QBbY102)A)%pQS'Ff
+"1a%6-`Jq$X6QHcF6Vi+)a9$6iZDKFq)YIN,-QZXSRam[jUFm-c04G@EmVkR8Hll
+kKNPB!X)81bAAh-f`2P!(5R)Lb#AfF8%9$d&fKlb4`G2m9RZ[LA0h--RHS4p6hFM
+`JV2RRlj$Y81i(ReimbMZMbV+8JrFDNdq5*KiJ`'IJ)U)5(mmk%pTTMmLb#2p+4V
+YckhS6i!U!!S'kR2[lIL0PHE&fq-ZqkE,[FKb)2%Slm-"[!&h0%rLpb$G1ZBEZ("
+mZ("#-Jc4Q$$NF'D"2&(NdZpYb()!Pm!,X&D#'X[`ZKGebNc[T!J)NhQ#Nfh2*3D
+aUrEBJU"8hbj%D-aZ2R9(e!VD+S4T"FmUC(T@C8YK)NY&2p8dS6I23NKQ(Sr-%D4
+8md9QJq"!0q2@9mC1'A4!9@6[%5F9NLf3!2[HVf$#C'*+Fi6G"-k(&e[$!$**rNR
+LS,LE[*LNa%&H#pK*0XVhZHV'*Bh9eSCU`+c'eQc19BdaP4m6DPm6mr[$9Ii`L0"
+'lKTIV'ANl51"3,ZrJqNkBTeq4[ik@-9e5b)Y[P"eQbm8#DSU)+8PGjZNXXp,MXk
+`AjUlF-&#%mQ#9#b8URfaM[AJGpm"DC!!MT!!2qLr+D,JZj,JI6`P`IX`IeQ-Pfd
+TZII0ef4j0ic*[8[NDNJ5[Q4X*[aejeVRF4,Zj9lUI3Ibla#N%*(Hlm[#,bp-r*c
+flh*$iRAjXLmhmIIb"CmZm92j(0@"'qRaGATM-r$8RFlM`!TGU'9MlZ(pXqjYM$,
+cJYaZ`[aD`-JV-55'[Bf9cC!!"fCmSE16j$$B"pC4EE&C$BAj8dVYZ$3@)qBf'&a
+ah6a$K$krf9b%DrUf5"kabj!!-h,B'Y)kMe2QMQb2eI#3!20ikIK($Ad['HdRHP%
+$HU-NMY-Np3JSlK!8!9@G0(HBJALAjMjT"f++!U)qM$VmJ#CrcUV$frNKbr+$r*2
+#,&-@%2eKa1*FlRHX@!#aGN1@J(pIe%aR2CVl3IRlN!"i0hk#pqNkpF$NAi!9X%,
+f6AdZXEKMAfVeG96bZ$af'b[901qCj)9EY9Kl"'SFGd#'+YEUMrPj!Z-HpTHXQ4h
+*9M0$PdVL@K'h(R&C2!jdID5pPNGq!*',8j'GN!#m@LkDB'a%j(hXZpPjSTBeXCE
+LpPNmm[1)I"54UXS9V6k5"-&I$l`92Fd1MCXXb)+a3*Xre**@'B'eYDid(ced8Gc
+E0*lc2l!qm(A!AP6-4S[NQ($"Kh&9+"QSk5pHPa`,(8Y,MJA%&5q5%d$Ka0c1*)k
+YX,iC"i#Lc#B@eH+U4LIRk**4Sh('b&5TU*)PpKFh3l43je")B%(cR)B4KJkU"!r
+JA*Ae3"(Emd@Y2E[-4D[!#,Le6YC9P'Y-B(G("2G9j6H)Z4d#*N0F"PLFF,G(Q5d
+k6Q%`2`!HLSV*6XIB$*lFTK@Bc$9I)K'Ap9,EHLL0IBa3LT@XF&RBYaUkBaK+!"R
+,1rb5NSS)U@-X4eY4kFi#0T)p98LUH3*LELdA8*6MmBkCq)VG!i5VCZJ8rkiIJNd
+[mc5-LY81r4`mM*`pkm$d&2C$"@ZZKR$SCc#eSIM1bNAD`r%GX1c8EkZY+)I*,'8
+%Kl`bQ)(+cLC@'C%EEA@P@`YKY`[ZSrZc4"26PJ*ec-)eHVKVX69j(VQ'4R0"R2+
+#NY&Fb#bj"NK@VYi9Q8fC(0YF3#M$@fNQ,895e+SQh%SET%*'BVNIlA@`B$9bqSM
+A[T4ik(1[Qi)ahd%P&@4kaB6i#LXa(jm0'f6!rR9PjQ4CZdR8405f5HQ$3QQ4I4U
+*IFNXm$8b$h-AZpCIP@FlpIG`9lP'RScUB%D&e5@1b(V`*`HHK18IUC())D@L8UJ
+KFqmBV4&QB0U*ijbUEDk`h"5F3GDY@M(h-,'QkPYfT#kNUp$*qZLdlVU)GXXdaeH
+$ZVG3,IQ,k&-rXHH&Y3PqS2!flfB5-6IYqQJ'aRK"Q)&49R&3lbh%9*A*[)-jJi9
+!j)i!!fe3DYBbP@1R1'GehFJ1-D,B)F*hG#&$jYSjcF0J@eTRClUNHla39V$1TpM
+qhPpB[Q$4D$pESp&4(8"Uqf$cT4KEE"f`aYG38r(3@r'G(#2r)h4XL`3eLq!fk@!
+59XCXA"$k&XSdf*UfP[%f(bkLe5dGV42TC88%ap(U-,DTF3FG"E'B[ch5'B-#)0G
+[@k3ch$+Te8qbIP4Y@N'TZA+M[)+*%1-[8MA'I#%Xk*825LeYlG'3!1p"I`ZZ#SM
+++@%rTCB4DqBm8F1l)hA*1((&a4TGr6r4G%*@+KYX3VHBap)#G5i418MFip+#9@$
+$iX@(,0jQ[293&IRfGG$2q%hJD'&HJcpa6hDB5F-Aq4f$58eUdR`IUB8m)NKVpAj
+Q4#338RM3Nr!AJVFAJ6#-NL58(955JqdbM0RPK3(X@'e`&`bSC9kB!e1!3#h"IA)
+b23lc3B1d%e8QI'@)6YGKPb2R-dV1XNc11j(c'H6m9$TE%HB#YiIKH$MS,S9Y1,$
+L1iH)138QKM)UK!M98E)rj[*Z&p!VkQ(A%CQiM&jlJ-&["I-'FS#*bbRQM@h2KlN
+,48H-rHQ1`0M(drVCk-JmUBC-QZ&1mZ&1FS1CBAe3IB!fR&02i%eH6f1Q'KKpmjp
+#0@@3!1%E&[-$qaa2hr))9kp)hEIM9B!IM5U#Y(1&MeJVl"$CU-HF0[KNLjA4@ZU
+)V+(2PPDrZ"&MaY4fbQHk$3Jha[%GjM,TfL!V"YbEJQ(-@l5KVEd0KfB44444F0'
+'"S4*1QMYVSe!rfGpQlqGZ$kL0b*lJAh+&R0DDS)!p"dDEB6-"6T4eb)#I+K`G%&
+hD(JiNJe"[!UB1qYJ"GL$`bVEfqD9-dIlDXS1MJd[N!"K,PXp'SqU'DVB2Z4JK[Q
+S&e'ML"UZa(h5HbG&N82!@a!hc3Kf*"MNL(bI`63m42D$M!*Z9ddV*fJd!rai9b%
+fA839Ua36K*T0&#!Z3cCZj-lKSFbH@JB'4cEQZ)!c@h@[HF@Ne&UB&jXZNLM'MK[
+IS$N3b(X&ZFZji5+0VT`ZK-dKmN*K`M"9d5Ah3'`bABG`-1eGFJ"eE&0kS1iep-[
+h,SP6BN,)i9SkQ[[H61l0b0f#h#Y(Fqm5ZCN92+J)ei')3q&!l5++N!#2!JH#-*U
+D6hk$LcG-dYq(%#Y6q$jS1*K"RN20fYR0C5Y@4*ap)aYTI"rCc%8L18STJph*-#N
+D!@pC$b-L0@%fM&h1SZV9cHUh+CX@I"+,3De(m4%ITVS8,ZAT%$9kXh%0dFLFJd5
+&'k2qF2V'Bfp%pKjSq([RV-#8%kP2pm&"S,UCQeIV'+G-NZ%QZek[U0G$K[hXq#q
+++lD,59dURUDQaUj[HP8SdZj20b-Pi!TeKQRFePY8#JfI*bRApQRSH54aZd`@+#0
+'418[cBmcXL%B55L5V85He)dUPZ@)I6Q'Kc",$QXEPcTaQd&`RI0dPU`c`CR!Z$V
+"Ipk)lr9JRcdIY1%P6iiTkN2SjKQGh**qY9E*bi'l"STaqDQUZ)YeTQfcQYN#HEi
+Dld3ANGe$CNLX**k68m[$-P5HB0*)Q*CTih+d-L'-A!KEk[PK2A23Il"Hqid0a$V
+L[pEeJ#+9X[LPkaS@5KiT$3#&)B16URKEf*ViVF9['AEPbpLHETRQ*J!YJ%B`GG'
+2C*I-qCMa&PK32*i@6JfAq`R3V*,D!T)[r#"EP"lLAbU(8F&e[U#riSXFS"6RJM'
+!RkYE+Z"@F#Q1-(l,NUbkrrll@FPb+$UZ*[q%aI0!3SV9a[`YrPME'JP-AE#J&S1
+GG+hCK)qVq)I)e3Qcj#@q,`")Jp14E5`P$MDQE#(HJ%ieV#TG`A40ZiRl8-9QXlA
+DkLk6"PqIRU'afabf`,6ji#6@JAHrkD9jc'icCp&h[TCL@SdcH'bGc@DEUBQaMEH
+Hh(Umkm4$h9pCVp[c&EGQk@[*#ik[8N@rmc"9Y14Yh-'SFqS#pXC2C&hGRdV%rL5
+rkb2V6l`!cU29UT,8GBp+Z*'N%Z)4q+C3l-aV3V2C)h+arbLiqc1"hCpCcrTA%Gj
+r&Glp5Al)5[krq[r5PYE2a(iRl'F9AU[,83dL&L&G)6BLDM2UiV@ZU"h#YKK8&B"
+36DjUj10bf0U`E@lJV5A+m,8-[c"CL[ZC-Df8'jeGL@qB!M*DN5qJj1Y!9eCHkmU
+X92qb2qKhZQkU"YPe,%-G(r[G"0!@ji`ELJ5#eKN-LM8+Qk6i1l$l8TZ9*M&UMM+
+(G9hKSFfX-T`2lX5KHCTh(G@fV,P5-KI'$N@YcqZZNiq5'$eBh8C`*M6SLT1DG0D
+&!fb[NV8dRE9Y98a$%[-`JG5%Di-CUpF9(PBchM&Iqqipe9AMc'D4mEQMfZ"XQie
+kNNdpFA+K*q9+VU[5Z6CTZ!C-L0X4K5+0X80-Z!FmBIjjNX*TlVXD$3SEX)lK`Tc
+*Q331"Q,Dk9DVIfJP1SMk(,@'(pDaqF-k$&%(&ISQkdKJ5J80d%L,Fm(JSNPG-+T
+@LUUVGk!&fFAhB!CEq!`Dl$ZmhLaJ$f"Yd$iKkef[1I`3ReKJ8Bb-ZI)0pSFbFlV
+PJcPYEa+C+&)-T1'5B"kqCR'PX@`C#*SYeM`@"ST3$FDj4"!h(9[*)mMm334PcFF
+F&#'k),Pm-R-ck!(`U*hFl*YY991QB'+LE"aI9AcQ@mA0MRA-'5JJX@V&@KilLrd
+04)M9QBUQ&5dYMZYU6Q*&Na0Vbq5R*MAC!9Eei6XcbKarN9R2pN6QHFJ-9DLrcUa
+UlZCQ&bQL6bX94+Q!PSr!JL!R+HNGUGpPR!4$"A"Q$&hVj3S0)QBNE608%)phU,T
+HBhQ%MiRU*fcQTGA5`![K2LQ&MK@lJHmdKmpJ@bqR1@GhpULA%C@E4(lFjL0N*@5
+ZVT+9@!hG&YmHli+ZN!$1jT@cAr5'Y!Zf3amb1l&'a0P+N!"k8j+h0*MB3%UECHa
+GUfDqiF,bAN,2X!Q$P!FX4ZD*+aC1Jq9#`FLEZ)mi0P#i-YJTU9TbcBBQ6BUR!#8
+TRcNEfbPEU)rJY`braE)6M2J!0feVFI1fEQM19,)&C-!L'B2afZ*SlN[p8$eCJ2K
+mb319Z3!bKSMEXFh,SrMQfi-pb0HZflYVDFZfjFEZ1&6,'IddY'Y9Nl889MD29dD
+Qd(JF%8GULcc&980Q8SA93H"S&LES'aa4XrJdI809be(SS%L('jL!)0Pq`$b48q5
+6$I3#bbU"5(C&pMjm+l96@Kfc-bHKjc+Gq"I!fT44Q05F8+qXi)li*V+X3PZh23r
+5#qCTUe6$$H5+QPX[@5c%[SKjJ'%(b2T`'f22L!P"CiHKYZ81kEENBMl8U`mX*k$
+4b8[GhT!!EV1)Lb21'p&Z"JpJ2LRpC#4NUK'F*H$`55JC)-l(kqa(*0"!*pCEAN5
+UGT`*c$b8)a$EE,6$I'YJce,`#PG!Yb"D1Nk*#F+3!+ZESNTdm3IaqbUr-m!di$6
+pIpENAFG8eQ6Rm(A@C2[*MeQ6`NF-M2)4Jarb%4PcPSr)lII2I%6b3N6c+`MZ8&M
+-@JAYk)c%DZM9M"4lJ"9%LA1!IADV`T,,iSB3Vd0%#"X1fVIj4AZl+M5iqUS38dQ
+@)*YKKJ`5lT&!K9#)U(kZM2,rAUP'rEDV8$bl+Se-r#RCQ-J3hK[#pM,f@4ee)5e
+8JM1Jk,5+G`*UGrRfFXcc)dYK#91p"Cr%(0IAiTDSa5e4'p+@jb#M$pUMQ+If3QJ
+`M5`(DY#@Hk4fqG'Y@X)Id0qEaM5Q*T6QJZQpaiN$*Vd9-a%#3d(KcJFNEl',Qma
+-aG#fKFbehU@i49+kG@#+T08S4C2-,APiaf(CPZC0jG9,Vp68lAN1KM)+f24!pQ,
+X3QVTi68@b+@-BTT6P)*YA-QZI*QS(1`!dIP9A*q`k#AdY[,+FcbeQ0)`XD*JTh'
+%-k0UbAiU$,rmSK5#'L*94VcJJL!DDVfqC4CZ@(G"T5Da%MBb9"3LD,fP&kBcB8m
+(Z4R"1XCVJ#kK['e#hk5HZ&+0MkV"2+YkiY3$9X-)GIATkh%!+PqF([32r-9"BZ+
+#iE+9p$MaffLVZ`XkI1UYLd(46,rK%KR"biJD49e1VEKdNUVK1jAV,LDFKD,mUPq
+A")!G-$r[&LSh-3jA44lT9ZSF-Ci$P6&(+J-BNmb"h$2!-&BCq$+ZXiYq`Pi`e$R
+)E8FABji53MPN0h!kX@&m81*`VK,Uqr"HTUl20LZfJiV&&514rR3Ne&Kir`P(4mm
+r0Sq`SiKmq'Rh!0@"rN5""l-2GUfS-XE*%S'*kjLkM)dlD)Y%6*L#3T%M(erj5qm
+'M3alDM)L$#iZYP"[(kqUX$5(ld'e!qZTUQ6"'$I4J[f#FqJ8%-hMZ'-f4l26*QF
+9mfI&IPaK!0hd2AAFf41B9e(%%FEDXKcl5emCC&Pf+fNGBBqAN`T1GcRZjRaLiJ5
+k`@P6E$*26,rAmTi90eV)HX'J0Ej4YNG4Pa1ldFjXB[22r1jh9pMVE3h,)-CkrEf
+`3eZca&ThEdf$VF'+#fQ-fd)qecpZe`,F2TmLBq+dI'S-3K91IV%4H3'ZHNdB,8e
+F8V%N[,[Qf)N(LCV!Kd5rBmiHQ"fDj"(D&N@aRpCX3QGa2ipc#eI[)bA$Xc8SlHe
+hDjL,'QiHVH!@XQpkYS+U6b[SK(*JZf!)fK@!T9m"5k(91A)fIYff(0K@#425-rI
+K,p3`l4HUQHl11NClB1,#'JA$9@2PU8UTULF60!DfQ[a52a-6Y(+RQ+#aJE%*ST)
+Fl,G#23fp+h,fK,C5ldaNXAG,BJ#laBVUe"XCpcQX$CYJ`UdikfJ1VZ8D9c32*@U
+&&PQa0PJ2CVQE[5b3!,J9[FJ$jBLcPHD19HV8%D)kc*0!1f#%*D(BNMVG+h2Pke5
+Pe'"XGr%kEe(UA)BkUmDU[1[3(kY-G+0+i)91P6GMdR*6q`bBU-ZNN3U)-hdlh-f
+haiJD$ITd4b6'eBc*%jkTFS5Ti1T2r#hR-C,"4HjH'"FYG*j@3ae0V1#UD)2YZaC
+rQ&mSMG(mlZElAkR1KZjXR5%lX!&BDcGl!MD4q,eEqEEIldhF64Yl`dl-`4)HdDP
+%hUamebEZPXX-fF'5,C0PVKMIkrE845H"$3p04@4Z41ESPYZ[akEjYELfJMCd(YT
+1Df)rBVPHm"2eQlYi$TYJ$E8&`m)"6NLmfHT5kT9HJ,3+ZYaV%pY+@m2@YmUYPm!
+0TA&f62,b4ac0F#0J"!V",1jQC2fG84Z&-KZ9kfSJ,X*Y,Pa9BNE2+MPDc,M#kLd
+mqbclHeeGL(e%LDdSJfUR#p`)98'N5q9`'b&9&9eYbqAB+0a`YhGJAMAArkEr@%f
+EZB"2lJ@LSVE9h-+(`JBdLh59Jql!dLjqd9e+qf55p4PUEih%!#UY*+Sb(!"#)G[
+39P@cF9`leP0,*XXF`a2C(%qrR#ZmiUVB13ZSPZL&+Pi,f'bKa(&86de-Ah`aZY8
+#pB3U4!F*18Vj+4$@*ifRqq1,4@HFQJTjMB9MA!"FQLF)qG$)b#MGI,K*CZ)5cLR
+f1%+XR&q4Xr049CX"ll0AF$4)QDX@K![B&H[Z2DiU!kq"5iEHRcUfdfaLGJHNZT3
+k"Ia$i*TKTc9r0&E(e5l!YPm*A&BTABTHk"P&Qq)*IQIFPpBmZEJNq9m%hjPUE5Z
+[Q1iSR3$X3@R8`4bfrB)EC@GTGZ,[D!1ZFk++@fRhpN`5fJbrNU51iD,ZSkj6kj*
+l'r@Ii*FjF6CAI$%T`M'2LZQC*%qPIU9k`9GX%@cPAVVAeA6CL[Sj!Kp,CF2q+FD
+P%JBb-i+VE!5+[-4')f9ai!A!KAPhPf9-&'A$ZMPGR%mU-@$,(P,e8-$j$-!BN!#
+f&+qqHTj$9iGK-9T3VXZK#CK-$KhEP,6T&Qj1$Jqp#P1qAmA[Ii*KS$fiV)rDB*)
+0Af#3!1T[,b+I3Z6,jKGJ0lGck(@Z+mKSpF)kNV#r#"iVp#UK)q)rTRBBLSB'p)0
+K,cePP)Qhl`SS*$*1[GlT`$3b,icRfhRrr&A+58f6fcJ[LZJR)a!0aIZE[d1)CqJ
+KaVkXi@iEQ$drNrdqRPdd*chE&VZ'6Ql*JL,P@SSUcIP(La4P`l5$fJVXQl+jJ4D
+GY`PCkY51fCPXIG,E3dVAa)#m$bi0EY2MMT`A5ai+$FATYZ!@E*[0d5@GKjX#%pQ
+$AfbR1lAjk&X3LT4J,aMDYe,9L%hLj6rQ-i5ESfdqYd,-HhBirLaGDaXeQ-)4S![
+L``)Dd)r"-TZBh9+G'h`#-IGIUkFL93m`RSPk-)IB%XA$r@!NI!QC@e$0MN`epBK
+C`2H[K8alm2Y81[VdCP3`fi#GdBljbA"NmND49``cQGm(qjr-#Yd4c-UT+Fe$2dP
+e*!Efm+*!YUd'H9k'aQPrZSSrH`dacihNAN@UPZA)f$(8"keJDP,E94dKDmPQ(c,
+#dTMhN8`9Qa&cYc)0Ta,-J5qj$N%$(TpMVp[CFlq&jP,0ErY-AZH,JGb&b'JH3a9
+cN8AjVe#9&A(ekA30RJ[1RT@$Y!XQDr0!4H1@Gd4Y[%[24Mq"k+q)k2Ded@&8I5$
+J'YY4Q[pe26G&P4NX""HG,c1i-DV-S"l[1G!iH0#'h2MH5JaGHEQ(Eq8$mNE854D
+%lYe!9!jJFVmDJcreYSE8K(m9ZfRf`ZDKPi0mqpQ+P*b`MlUK9[5#Q#2c,A%Rhd`
++P9"4FUUD+@-$ZhGQ)J,#Ti*j-X)'GiTCPlh`GA@kN!#[#C@rQ)!QSm`e1D+CQ14
+`p&r6H`GTC[c+8*mb&elUm(c6d$'Si"30pA%9(254+MLSiTRiep%Ki!A8eV&l-,U
+A9pE$&6XV9m!k#6FaVRHLH4'cD5MqRbaHLmZ#rG%MSpU!ILM1Hi3VeSb[Xp-&f0$
+6e&TCVNI2Pm%mqV*pH![LZ`@rfdXADABK"ic[,(Zil)lhkMh@EQ[B!'l9iQVVL4@
+D,aJda1BlpMBf#G5(c1pXcTHTad'm"'QEikBkG'd[&p-VY#913T8)[D3("1YGk1"
+!B`)pHCaLa0lq5Q)hY(C!@C3'XS$9Qhdm%fiXbGRAje*b!a2A%EMN*'[9(c*#Ijl
+9PL(b-"J'+Ui-P4qfR+#UBF@FQ39(pa('(V*-1")"ASpU*(I@%CJV"0p$jr$Z@CT
+Rb3T%*[)-NEl0@3(%3pYM[)De"BFX)c8BC"0bSSDbE&5IbS)kM)+q@USNVA[NBVG
+N"reKr`BI+b5m#[*aR`4M"lE5B#)*mQkID&[M*al2@[qD5$$FYJNa+E0+Pl*T2#H
+FU,@(LI0c0Qp'M,!ZhaU"FRRT$$IZU)9$*D9E-*(-[kDeEBd['"(ake$TC2alHD@
+IL2QLBh%AF)4Y-LCA8E5Ka-eN4bj8)Y(1XmhbYA!*9q2@'QJYI$,Gj$aHp`TIQ-K
+0UcDZm52Ke@9QXeQ4aRY2G@FdK-k"h+6TMHcY"8[DfYY*[5mG!llX)i3j%%Xp$65
+YUjUdZ*TeUTF(i,&8BRY-B$EI)E04`(L!RR9R24N2m0G#0@[6-41i8MTVP-GHQPC
+aqdj[D6EPMYAL#Zr@[S,XI%IfP1DGl%pF9P$(JNBe808Zk#cMf[kP3b9&+YG-9,X
++4(95`D9!Iap4SkRNK9UI8fTHJTTHJ&+'Rj5m8%q-+mYe$R8I),lV8`GZ4k@m3iU
+91k4BZ8-kKmi+9K,9NEB"5F6[im4,`MY8I-`Vp+kB5FMjp5"iHLS1UNVpe[iKF0c
+0Xja&JQL`PZkHd$0dQ5Ze8B@l,eiaqii8G`kl8l&'f"I9YhJeCJS#&`dp5cF9&dR
+9a5kkCJc0`Xe`h12QEpjC05`l,kaR3h("TF3EVKkb+@[B&2"!83eXf*Z+r`b6qmm
+J4L"G1%kr249J%iGQhF-QckTP8aHLSmCG[,BBG8eC-$HQ`bL@0e()PCNc%X*+I%C
+m8M3AbXU2#lkkh-+99A59GG*9eVUI,Q&J1C`+A'DB#9aP0)B2p%4eaCNTcT!!F+C
+d$0r(Cda-$4+V!bm#AHYQ1kN$0)`[1q*,#5mdRDNY$C9lU@*L1XFVC59f[*VFG&A
+P)eA4'TbUbhC@d0"c$TThf#689Y&ALYYMBc[-jJ9Qmp`UXrRZ'QaI[1(hUVYVjYe
+G9MEr#c9hep)hhqeBbF0mmSir1rFeYIchUS999AIEDQUq8&YEUrlbRA&fMP30mRF
+0&@2FdLJ-HRh-[ci5Hh#(H5lkX2!,jV,jmaEJGq(FXRR9q,efrJ,c`S8)V9KJ,N0
+6bR!cm,Gm,Rl4NJVqa9rQVkieheeEZ`#r#qHL$raP2r3IHi31bqreL,hHM&cSMrU
+eqk)pCfLp)IV9i,lVr6[q(9+qFrJZ&pijmpJc0b#2kPdSYJaj4k)X!6B[9B2#`3*
+K5j26$B8Y+!,f2#ERF`mSH%[&-%*YF"ha!1I#jDBc'EQNZ5@liIX9f"'XT1I4%Gk
+8iV40,eb!UX4N@U5l1U$INVXjEp-i1AY,pZDF69P!K%)Uke(BMM9m+j(TD,r!*j!
+!LP!lLTPk[Nej`EKE%b4,r5Scqm#mkKXX528ZI9&C(dhP!KG4FUP[halbZ-*hI0X
+9USb6c1NNI0Hi"'G6CPHqJCB*Bi1Fja1Fch`i6[j49-34RQ1ej1Am`!$BMTF!iiF
+KI5$&Mq2fUU&-C2`4X8I0m329Gj'Tqj-(TZ#Vr`$FL*!!13L%'Ai2`#X-(J"D0a%
+42A!lV`j+l'3E#Q0T-e@&@2MaZ"J9ijGZ%eU!1!LA&&`$B*!!a+V9pBGUFIfKf[F
+ShNGbH@9ZC6GpRII`V+*JNLZ9JMX4PZUSdTj[4r9NH&5T4EMZSKX)Z2*qjI)a0(P
+5(6C9AmB06"pAJZZ24m'DZ)0Yj6U+FL0LRr4j,$aUVH3UCdqL&kACMb*MpA-(CXe
+XKS*R&MM(Q"KJ90-1Q0$&!H9e1RmpcT8bqMM,(1S(-%HkkmlQj0qMVQ&Sbd(0X``
+XmZf)!p-BkNN028YQ&aIeE!YPcpE"LYIVa)6BpEQCcI)6U,F3TVaHlhiU!0CReC%
+*"dk"UCYm4h*KDl%blK2hFYSe[Mi[rmBqZ8RC2I`'UU5lfdKDFX*8+-NKIbMJKFl
+$,5QErH6D$"G1m8'&T9Z8f[kFP&j64G%,"j2RX@1H0ZHX+qcHc'lP+K[2#Q61C6C
+`PBdf%eRielSGB-bJRll%(F3VL&QKd!'I!-6T-C9VEA9bf)lGh21!U**UM'$TG`#
+[m'iC,lY&jPJc&$eV4rIdAH`ZC@I+#lK#AYb2GUG'iYp6-bZflriLe*-KDlGNNFV
+ZZ(U$LhUYe#l!UPDqFI$EH"Zk!Jj95Y0-I+-SadlBBc'k"Y3VYPjq2-@[S#U"mJr
+e%6,54UdG4keMA"[i((-I8`#%J'bR$lf$lXr-["ma&a(6F-C"dSpZIIe6cEV%L-B
+G&6Z4[3''i2J'EFX,qAe&6N'8mlYfi+Z6V#e#3fiHfi(YG4RBX5Z*Db8F-@@D84P
+I"",lS@pahTp6Gb[G$UKNSST+j2SJUXK,93'01UF++)"mb$Y@4@VRZ%aDS`RS2rS
+)VTCL#'Z@1&M#0YpGXm[Z6#R@!J(6l0jE%!GPiJ4F5pNAUrMY5)M+kpm8FpN!,`T
+,@X%MHP9S&j,Ep!ZRa4X`X`dMGiE,9%$)(P69P[MD1i5Q0B65(1mLHYE!6'S5EMI
+dHr9c*8HdPe$A&Rkl`&TlkLT0302J,4CB`&CRbdjcK,pYUEp!@"G-h#VpQjQi'"+
+(S$iJ[1)3ALfmLTj0$56)QqV!E3c(p)IJ0Nac,ID#T3KP14FcjhJX,`dbq&!KXQ-
+3`J*I$I8c`9dDa53q'ldP`d1P495`p"E,jL+2j8l,m!"TPj+h!)9pG'-rH%TJ2j'
+rJ#a,pUBL%qP)X[b@E+3-U!FD,I4&CDZP,PiZUNkTT6S9@0FUQ+Y8!2ET4!ACeb[
+3@pCKi8jXppL#e5'3!#eMdS2q8!J3kmFJL`I[Ja#iS`[9&3rk`[KX*cm2-@PeU01
+2edqd3[id4SSASe$qFkABAp$IJFSS[)f!DfkpDeaURX@-T(8`GJlD"6(`9MV)J8X
+#60i%YNlLI+PTQ0bCH)35"63cU1&5"*@K+,cGe-JYP58mPa92bNfF'9)-IVC`3a,
+JKRaS[Q`$lrB8BD#*#h3crb*R85H'eBZK&III+&a5*,J$+-A,-*mCb`'H&Ja,N!$
+"#a8QFB*e`m2`c''`&i6U,D+kf4P`Q[[&G0h`!f#Pm*%bPP*1a[c$EdU#(,3BQ)G
+1qT9Xi'hFX!0FjSPXH%r1X3pLAU8cSi)ar"(H15[9&Fei36GUVk!E80CP,a$6cCC
+RHP&i[4Ie8!9YJpmJXPr'cX'4bMEKIiZE#V-T'p9%PFiHd)UX010TFZ`%QcDXh"4
+D)eRFQBKI&A(K-AXj1+RLB'Y389qR5b$BLX6FhXSpq94Ld[H#Y9V0'6jdN!!e",B
+A*cdBAdc'9-%a!A2GSVNf0)4FRq6XDf&0TfC!pX89M+cHUNbhSLE&'MTI8kl3"3C
+Mdq%1,3BhbBAE5PFR9p9%G@'Hm`VQ51HX1i0T(NDG5cqT%a[&I*GQbVT%'qHQLGH
+V-XMjL95F1(-M&TaJbAi&!kl9d,1mleU'EP6Hp%RP-FUG0U9lp&TZAJ'UlMZ[4Fj
+'eP1%9NPqEAeiP0qUU5bm90Alq'j)S4dTC`F`%YX(T!jI&d1E",qK5P2b9F9j#GJ
+-5DM&[k'V1jmmLpPb#f``q@UIKq14d!T4Z*q1H'"%q62j+R(EE@8'DUK5%9Il84)
+eiQD,`N'J6@XJ6e"ES6l6J6QiF0"$C2`HJL@Ulh$p-`q+3JmMMV'DSpU,bJi3GJ8
+-J8TrJR!KrJKT+(@&L01`i%R5i1L*N!#'8R%4AD'Cr6"4kBqIqLbieZ38A`m9mCB
+G9,9br5*HqikAPKpBGQ#Cq#)A&K'"q,r$6)IM6h)FN!$ZZNB8c59-0[VmDG)Ji#9
+j#kR%8&PTK,q)-bpLBm*BSXV5%$'4G)ii)JGamaj3Z%V%JJFTAQ)@30NrcZZY3!r
+)-KEAA")aKeb88D1J&lC`bD"SCmN3Mk50bL1NepVcCFjGZ4Mp*[,AMeVlm(YJ'IA
+P083-i288Ich@%dkHiNc(i![Kj&[%5fdRThf[cA&"Z8-FhSLU4&T,@qR(qS(DfYk
+X4'fR'6lrS&QPe("jKm!p3ClLB!bk36CU+V[p+bA%bpkPlJD0Jm8j$SETPlZHfVC
+!`"JRf('FUlSMaXi`(NrH0UBNlK)6M4l%FS"QqHh))kVAbT'@[LQ23N!@&B[QXe,
+pJ9m!iTYaUJ0aSYI5Ff!UiFEa"2'b*rX2&0k2(0$X9bJI*NpeX$F%&eP3f0IXpFe
+`+8CdifkD!N4$r@8HFC1GZE'9D%36lG23bJ@29M,"Cj0kBAAJS0a4AK3%ceI&IU%
+j10Y4%mJPY5kUdE41ikTGI)%6"cYVhDB6FU+e!QS'MYmhkGkEEa$1$"`8(C-11VL
+LU)kTIQE&bq(8X2R&9PB19[4D99P!FE1)#T`'pR3D'r[d'a`P"LE!#6Tp#K[hSja
+e[l@qrcI[,YLqX)l"`q"mS1(r25-h'EC3b1%P5m1#paa`Hph!KcMhIjHp3[*!bmS
+0&cH9+G6S'G+,Spj"L8(b%,Gr2QG#ND0dqYh5mUjm0MAqlkPA+NYT!@NL`1lS%(b
+rZEr&h4Ib6Z,Q+#dJje1m2Fr!dd1eDLGEaE*,%MY+XA$r3mirE[*AU#*S,1Ki4,a
+N$rrkMG*XG&(-kkUG0'+QqflXBKT4d$QSE@lR!(m&@-Mj(1$AfcP1Rk8FCLS(130
+0Zc#4m1UNXiRV(ThYDAj91YPDSHeUAD`Dd$a2UJE!fKi8@6NaUDa$VBJ%(REQ)Vj
+aVih5pdUZE`29Ge(PkGD3!+-+IYI4CBa[H*`FIS2i"!dp&8CVrj@,9IfAhdJj$#M
+qc8@kdNFZ,S#'m81@)c8K'lQk`SbqB3EM4,Q[QRH@hLkbr)EL8*-"4%CU!R*ch6&
+Vrfp'DfSPFkUUJJ`PImqG0Eqj#*GXYUD&F![CBGB$V2FKJ4MrH4P0aHR41@-'A)T
+Ie0b#q1KBI2S@LkZU$rKp999qN!"ZG9kKMJ%$(-&qU$aK,U)E"RhE0l*&9(69kM%
+G(jG4mk-XSmQS04RKAJF+jk[AV+X2Fi*Q[Y%dMZ1"Z%T'&4D8h"8&,U%L433)kTY
++,jcDD[B-kqeIYqPrhd54$6d,5H-l"'9ej#JY*[558TreAF[KeHeLZVCmLC2`8jG
+e6H-B+"3F5+A[2LJ8J[2!fRKP8FNYjS9QA!iB$md,m+fQT4eB2031ekSUMlp21mS
+,jerZ,EKVP,mqBq*,i%SUef$cdD%Ab8-@H#R+ji#4Td4$Y@Xqd2`A0b)D2F4[4Z)
+IU"p+-qDP*h!aSeZY$pr3RcZP+-j-U,SVl8`kEP0A"9aai'EVR8&XMld('GFL3C3
+S!k#(9LbR9"1rAp9U`,ARil-3Sqjh&F!"A3H8IR3h&*EcKqI8H5%(9QD6PZZIrZ9
++FPGfN`@qK&k%RaSBNh#pdQFarb@QF`a-8IM403,`Y&M'bM6JVYTjHqqLHm[eT'S
+CZU((fJ@dM2`RR@&q6[`[HBk0`S@JkX+I2))Xm-0J+qMMGCQDN9Ik#0H6lbe#R,J
+Al-8p+)kBDQ1-d2VRX"mLc2'3!$)2THQS!+)%eCqPeU-3'(#XK!A9qkq!VI@V',R
+N`jC"$A2'+T-Dk%E+kBQj"jRhTM1lN!#j[BAha48dimX0&9rNipA6,e5JG1E%DCN
+XFUHk1c+LPcq`+Vd[qSpL*ee$1qQ&+mT@(j!!bj8DCC+G'Tk8Cic@H,FX0Ueq2dd
+flc%hD@a1kajUKGQ4$2)&h9H&QmP@N3b+j55kRZ6lLq0!@bmjV6kR9E1*`A%(d('
+KiYPm%-ka8TT$(h`A1VIK%9F$BkqTr[1)"QJ8'9K!B4'TIaCMMh-l`*9AVH++!AT
+4@8!,jm%MA9ZBFh,YU-1)+NKT9c50a'DH3@`S&FYYQXUl(AI(B#U@#XbTf#l%(K'
+al40(pP3J$%94mVc4*@$c4c-j5j&cTkVk3aj-1F`!#emk86@3!$Xr1PreNSEVe!6
+IYTrMl3Pa(jDr$%GGm(15HBcVbf%Uq@Y#ai%AjM8KAXA!d,lSVAqUiP08aC9`3ND
+I(2iA-T23JHki4hb"C1CM0KU%S`lrhR5Q!*Jf&H4rSSD`5U#U9DL4e@,kb[AFbVC
+XHljIfj@UY9'Y+l!"FF0+AI-bG@(H+VViI'bQbKTK[6jaN[L@LC-F(kfNhZPh1TC
+9%D1+L`m`9e2ZXki0+&&`&FFB-T'Z*AkECM'K@ZSNdjX@P8$!IjL,@c[a&V,!(`X
+lie-pK+!cIRL)[1CGG)BX4EPDE8mN`"@1U+bqlcL3!$e2bAklfQdrR&TFUeHL`$K
+`DN,F0@5Y(6H$c&(Ge6kU6+0c@k6`9DK'P)(YYVF0RK4jED`9@k-X3&Z$Fc$@4kK
+32Vl"MSN*[5c1AD`HR,Pm+&)JKP0IYQ0X+UmjTdjP4Jr2"qDah5mI[0p80)PqC6b
+CLYU2U'SPDR1kLljR-$N(d8AF"q*q91[3rF&TU4EED$"p3jJAk)B`i8D$XrS!m"G
+1*ll"r*!!Gb$2mKjACT4+!CMD#VJAXkF@RAY@kB%ld`281pH1V6qaS62!`*KETQc
+SYNqlNFk)(Xr&SB@VEU)$ela!fU3b1hE%aY'HD0FTAMKcFfU"$jB2(%BY,66EQ-C
+jEZMGD$AIL&`XGRj'"5&CV919e`+ZL!585ekc+ADmcVP(P6U*JqSk[A#3!21""X9
+$NEf2",e6FpL2A6YhTmMV1CE*LlRp!2NI1CFAIQdNEaAb0LPjYB-Gb3[YQ(,b[h)
+Z,eeI-#q3!*!!Z919[03PXr0#9E)F$1M*'IALFLPr4*R4"UQf'2V4U@J2HPXH4Dd
+qdZSZi$1)D'm#E,R8T[m!iGI1M(aJRkMGI5C6"caRPKGc[bEYj22h$#Nm"ZGXcS,
+T-h03eXrCV)9&IlLX(DpMU9)(Z0Y1(6A1RVY2)lH`#a*[JM(JSN[kM0*[GfEq2G$
+@ZCVQ2jA,cDrb!58Aq%af,MIZdkYhM1Ebm&akhYe!TCaFd1UkHZ9S,Lr2Y82NFT(
+R1M[A5Z3U4Di'3K`@c4#-)cf[4'1Skl#8)l,Jc+B`9QiIYr(kpLQ[9LVFNUl3"6b
+`M&`1J'I8d&0p9##jjTN$i011NGXj'JP(P5FhI9bP3R,(Ulck,D9+UP,C9F*c69N
+VDXX625FR3QRf#Sk"'jSCM3ZCM0KHCD50P*S5iADFMLUjk#I4cS@08*BlQZX5RN[
+hfhJLRBYHFUjkLh[*84IE3H%fCZbeY!C3DM19R4RYV*IA8jHTCLfUSIqAI-A9LmV
+ka%M@XQ-m+lhM+LCZ(Q+HTKK"'FMq5+1'&k[ki6H'ei8MA`UV5MIDr-dREeABY5d
+eGPqi*H3I6fjGEL*M)PQHeXLAl*ie-9LJNlHPiLh!-d$J"bjI506-*"948IG4b+j
+8)1pCGE()Pkc%qPc9-Q&*C)0IHCZf,!`(*(FTV`()rpa&AB!&e6@4p5aRJkM6hbU
+qTCjQNMZ5bTXK1@6`&bS3rB9fN@38VFjJ-"4Cl3Zjb69[TRK$j9k5&3*!q4je0LD
+83N,YR'5mUSAhC*VkHReVChLGaM4q3j[r5ra0qCUT*5maHSD+Z*FAqh%KL-SES$G
+N[pIiVdHNJA&$VcK'@FFU6*Qa+FU-6G(Sf"4P4P,Hp+JDEk)b$2UUQ%NYU3J69T6
+UrU3V)+HG4D10GPlCR#+D&ed!4iReb-4+#6*SmX+"P!I1U(VJf-U,,)5Le+SS8SD
+l5"Rf)KTp5F60SKkiK)UiIE%@Q+aI&b!&eV4RS3cHC,r563pkiQjV%HE(461KSHF
+S1CJ#ercjlf48+m5l-V`2#!B*"A*SFGZX8rJfAQ+QDj`miCRJQiE"0mf6MG"N1aM
+I,Nm9fQcB[&4RHj&8N@#m[f2Sa!%ijk(bH9T[%kqpabXTqL$(dI'Z9$E""aDR"qh
+c1"i2M6JbJP*S2#*RJN@ZH&MLQ5E&J8M13)HJXmc0crVXbRSQUEjG(D@%P2ZEFDF
+6!9Mb&ma9DfIMQLLjS'V"YNdPccq+Zi)A33G,2NGeYXiI`@9,i0Af'XY3bLp@@k(
+jFd1AP,ai5HAP9mpYB&D,Dk#'RYiAapa5Q0`0*[TLBlRLN8LjGL3V')c&Y(-M%ck
+45ej4%9ji#h'ZTY!KCirT[ZY)3ZKa409mK-GQQ96G,9jX9%*aFLj"cXL05U#[HX@
+!8XNbSGm1CKBCX`Ia#im8*[R-iB5$jk@BPXS-IkU',0c&9r`!Q3k,qrGVj(06Zq8
+a'f5@#rpM6UjRN!#,#XM8lP"h(h%dS(6&0RAU41%U4qf5QSkV$kH9(UNN(#`4[8+
+2R`@l-BDCKI)!A[+jUMI`)1i1jKDZ`J("%ZfC40TBDJY!Ljc6M#KX!@2m@jNH!Fd
+S*2ac`eL(VYcrT`j&acU8ZB[2r-9L9KTkISijiP6)"'%bMNhpX%pJqQGkdjd)`Ue
+h)H%Ip1!kAXZZX9UqFHb$@K)R8B[YiiQej+-@cVp5Xl5MJ(TIVXirrDT1G,b)d-T
+"D'MeUmaCmlaJcJU11B6)J96NJ")jK%PmMM-jUm5-jZ-,LJBD-@!dF0km%aD[GE&
+ek*aD"a6'6[%k6[AKPA@NdISfG)RqRqL8@qmNp[e!+aJBZfRfPHFTNlK'MYFRcMT
+V%5@`BEc!04VRT2F[P'LT@k+PacUD$&@p[AkA&0UbS8Vh$IL#-R*k-ZJph(B@%!*
+82MBa9fbqTMpYj'`6pCMR4HfSJjaPZik0U)0+plF)[CHcZU%jd!QPqf9E0p5(pea
+bebTlkj[bC)&pbPZ3!$64e&[+U3'G92Nck,%I1(%"i6r8bQ224'(9&!UVcQ8JXGd
+jk2&PEieY0Gm2&L1Eq4U[QfMJIF$j(m[8Ya8jkA+[DQ3hPPbqUiKQ`CG'NK&eH4r
+jYc,2mBS1F65@&9@J)YZ$'#X#Mq5b*P3%09$GXqm!X5`QakAfM2QN1a'&ZjA),'S
+BZB3DU#fNDr!"@ld-q1rNlH0laGNcFeMCI4Y(qe8VqT9"h2aXm[Q4cVS0@3p`R"D
+FPd*bXZ$N,B$I$AC8HFMJ,Y[6(!'(6MR+J)I6$2)H#XmGf!J025qF"E*[1e"MCHM
+dR$#rM9)ZkM#(2[$)jL`IkCk+bm#01kG#p)qcQ3%RlqRSSiLQ!Z*XcMj$[Aq56l9
+jLC'F69SYQVX!l9m[0+98MP2pU023p5Nj0'jkT"mjdZbC$,KmHIr,U'ECb04FeRY
+Rmp!rA0prhQhJih`M1$'p99rC$)E"a2hb+SrQRQhSH4h+[Gl-r(["aRXrcErfhDC
+VKFHAYfX&-Q!H[3eh!&d`HfRbl#UJ92Kqk[pN&H'2U[#F5&9"pHNdHZTGlZbC3I`
+2M@ZU+ZDmqYXUi'0I9d'@JHlplk`Dm6MQD8hA4LhLfB6re`PeXEQV&A8amGXZHqm
+BrDSkrQZhf&!H+1fB*i!f(e1eclRrhX6qmf6fRfFRDL2rS9UTcDI8KQPiZlB@84[
+9JmfhZ'kDdc(h$c*9cA(fI1C&G9rCp`4qHBAaHYURe('2Z%I)F$*lk%l#C$a0pk#
+S93,6Re#VT22JrRK&-DjGl!F[pk1K8!QU`MY[`&bf#)kGq3qd9F@*-VLRFq!GT[I
+[d+Pdrph!RLqPr6paqlTGcKkMZ[p6,ZSB14H4Vh2R$qNjRhfDjV`9RTI6-GJ'41H
+K%I2@"R""9pNmQSrql-8eV(6cA4[i4VL%ld3i@Q%hVi*H+,5RH,R*hPA6mq9j)h2
+R8ZiT`I"aBqAAAYqqXfdIE5%AkI(D2BL*(KJAH3rS69RAZSrI1ADY"VPEX'Z&XjK
+,hZ3c[LYeeaX-$Qa6P4F@LMQ(mPrk&VVdSVL&m,TAh"Er@I$Ka3(l@eHr[$+IJq[
+XjPL!dV2I6FV#U3Qa&ELH)PBR+[X[T%PSpbmUP'E"(J"[R9PqHjk)!-*)jd$DTGP
+[hj9K%m""3C4F3pM8JGJ'(r5DM$XqB4DFC4*SU$S,6K&XU$V&**K@1`,cTKJ&2qF
+5J,pM%*[RTj`#@pNia5e)m3M1F3I'H3@6$)&cr)"*0X%i@[dMKh1cZ4G"c#,mEG,
+KA)U2rG)6DGGa&cdX80QmYd3'S$TC`-$5fCifMD#ZS3aI3Cai[Y8$aqAFH-AJm$J
+98bQ5&AHSZQm[`HQ*H[P[-dCpi6P96aYK4X$MR2,RjqKk2A(e)Kc2$pT-9q'#2S&
+IF`$DZ(jbbDhGG)-"1%EkBp!UbL[LI1SKiP1$lliTD&L)q,',P5ES1A4F(BJR-r&
+Ha%2(0hRPkL@Zm&9dP51EGD&"A-`A`e1ANmQ06(RSqb$hV!AhJF!bYf%ApkGpGU6
+dV-"&"KIINpD8`G5idIq,b2&I-r`r`1q'dQ1'"K`CiBk#kljpZ&-1U!ULY[l9f'8
+`KSB9p30bZiU[AXk`#I!+0*fD19mK65pF(1"mc5+R!Q#UH54Ti5"F0cRj&80!FUS
+*9V8S*ar+MA1[Dh(ceA03,i!lCDUM@)1*@[@&rNT3A9kL4[J6KmlA8GAT4d%cFXl
+j+#F9ifBq6`ihU,l!h&hMZqY#*lG-N!#V2mV(qAYI6k+'p)8aZm9A,b@)D4bL$&#
+ff*H!bf6pYLYK3c849!1I5f0#UkDd$"R&CGE&A2pbmjM,,,RK@%XPbqGEFG%@Z'e
+N2F!pfCXF9!2(1*bCmda-bDZF$Lk5Tr,ApbL[UUBFm6UKFqF&m365!+k&Ym&*&Fb
+fUUd[GihiNi+RG0Z4ccN'I4A8!Ei!4ic3N!"+3%0+Z268')+LLqpE8*5TJ(,33el
+KTRPE6FS,)hAcSCFllSd4hAfIkL&GkeaL6jhRJYMmqbifdm*Rqe(9VEAfFR*!e6V
+L[8KAemPbVQ-$ae(Ld4`A+cfD3d%-,e#fr$aj,&6Zqj!!"EVGidl1XF8mB%C!XFV
+UKbC@!Mh[&@q3!%f)a,Ya29"Ch&X*cp@pF)R*l,f2`Y2#D13LGhBq#Pm,GUAE4VJ
+SX`l4r@`B5%XEELh3UGk[U'T&2HeUe&Q2A[H3!"S8R8pTKbYd%25lTM[8(6@Z$5,
+qMTVj9U95d9P((I3YFTXP5)kFi!RFI8TX0ZYmJLiPcS#JfEDr$Pf($qTdrI(YD5f
+(2h%Lpdl5L)3&cBH@@L,cPY(,r9qd41"B&b`NL2r)ecl8#H8lqAU#4abM0rGXj'r
+&R0`3J%k0e6pE6flmVAkkeXleS"9+11l(&6h+6%@2-K0ClR(fh2&0C)GHJ,8e1LQ
+Y4qQ'6Jjj3MPpLKkPU!K)Rq(#BXjVF0p1IbPNcVr6ED$`fR-lpm&S5JZ*#RGJ&F!
+p+Z2Te!+U52!$rP"k,Nl0jma52HhX`FbADGV&ibMhd2HQDc#q-eh&GbkJLQTFNpj
+K1([9IHMR@CAZRA$J`AF5Yl1UcJ[,5E2#lV6`42DKci-4aSMMmp2De`-RqSSjKrX
+(ShF`mXUbC8+JXm"&L&*fH3P`9J*HP#XZ`CIZ4jA`-8k2CGE*!e1ifhRUXN2rc`+
+2eRU6*VHR""fmR9jhN5SRp)3Xq2"fr*e-c[kmdBVB"994rBf+k!RN+-Fd(G8ak6"
+`r%Q2+*0+Bc-9bm(fRHqBV)NYBYGM(@!(X5jTUD["@ZmN3G$UaSCUqSl9Hkd0p99
+iZ0&CAH0ZU(I@`+8m2f-BNSA9M5X3#QZ006916id%bp%`YSq)'pb0be`eH)(++jc
+XH!URBFp6SpV@X#e``F@5+h!AlR,S4e!P521apZ!qe'MreaMF"qLi2A$d3R9Zj&X
+#"eC3Ha)R8FfN$@1rBSE!YdR!-9-+-INU)Nc&kG%&Cc#EFD"kMY1MePV*ShL5NNV
+8'qS!XR1fMLFbG6am[3jlAkJUp0X0SrTd8)M@1XhfbhNpp6Lb1Si6,'KjC*-AFp[
+E#r3CScI)Uc(BA6`AmDjh6ES[1qpG%piY[qYG-qha'4HU8dPHUT*DbXN*L68)AU4
+9)*H*D('Y!jbRSDF`42V(HjjRKK9!*#*GP&2llCHF*TaF6VMa%X9MA)AC#Lq8Y9)
+pU"JD2rjVfN%ce4K(18Mm5'0V2`C%b6qU%C3lNPpbqC!!+b*[50AS8R5EXY9-8!Q
+56'!E&BXX81af"qH*YqH3!"%1"qGdX(Nj,iYXpbcRrJ6KDaRAkIA,h"lZ!RFRp-[
+&)l11f%34*C2L5c2k2Z(da+Q,2hNH5Pa,b%ra(0I#G3aMMUpmPVm38b[+LQNIR59
+jkCa!`U"c+fL+mXJ$h8jJ9[K#j8CmFGS2iprRlIeT1LHR8l&f-D(K&qSLaR3&XX0
+C*hbpdC%BpImEHVk2$DBiX5P[MpU6UEl1NP"*'DqKph8iIA!,[E"8Te3Z#pk(*@I
+`@Xir3%l2@%l-8X&)IqRRH0`KefamcAD6G['fY8`#bkpbVmAqdSQRZ1-E)ebQ9(b
+RmRd)HS)4r)V,IEa6#i9U$CJTe1jP%f4kG59HEALlB(3fGEjmjAY,ZLGR+hU-Gr)
+288h'pHlrC%jI(TY6Pjk`P69hM8j+L'T8EZhQ3q2lYq$(L@jY8cYr[0C8Kh'P4"3
+e3VLBPUTpU&V0iUhSQ2pDae4NM9S,916Thc,VijlDeDRT4'Ic-cA+6+LHNdQM+m[
+lBdI-'HK)jUFcG+iDUqq2e54S(`9(UK'rK)(Vp8$lZP*iQP&IDM*96k&MPrm#I2Q
+Z+FDmCm2hRUTX$qT9+SqqkafheGDXH8#8S*lApNR(d4XIl4jaaj%&EdcTfYAf9[X
+he6PAjX)39)Fc,[kHj&@lIB,kV6f0SP4dGME9CDabC`&jXAH5R8ZpUPa`bU6V3LE
+YMS5qP5i90DPVH4c60eKkEq!Zbl*h%5CR2!*YZk``&+M5fRE9F(BkQj9!#l#D0E$
+Pm(Cq*lbGNp2029!+2A(edL%V,UV0EF$"eFXTHC%bBm@b@Eb-b8$9eFYp-UR3mH9
+*X(68[*E#cCE+q&4USNC*(GYVd68%mi%&jT*A@rc1aQqK@P@b*&@9NDUU8+eUc+Y
+@0GDA&pBe3UAFeTb0L"[jf1(V9cNe"1C!3b!eb9d6D%Zd6a-c49Dmmk)[Me(EalF
+$0NF@Qk!ka,8Vajl+`Hp-dB%KphARYUNHa0CPkNp9RDirGHfIHI'223"L3"GC!I,
+N-+jZ#HA-`f-SJ8Rq&bXqmY8V(5'+RH`pQ,aB!AH0F28)cN,E@ST+-SSU*"m1'F$
+k4Z)VCaHCbcA--!jXVYI"lAdGZYR+1p%TB+jIK'pT4p()1JGraVYiG,Gf#mm!T@f
+&#'9bGA-i"6m1$,KZ38jQ,V(EEF9"`5&Ubh5F,l''q",Zq4qkmL3(&TYeA-@#Qpl
+HZ(#%C@MH8HX#QU(U!PF!Z)9248-dHqj*1"#rQeQ!I&B(jf-RE55mfYM+[ql$9bN
+ifR@)#m&aF!2HLe%Er5m)ApSLCI9ZPDGXJ981TAEJaR`eiBI!Y8VP3C[RmGU)e`c
+qHJb[eA4(b#Yp-j9c$LpIRm2V(*AlD4l'DbjH-rRV&r%DK(X0F8a"c1AFY9k'Dhd
+lV[9bE)m(V@jERZh,V*QdTk&,VqiNH(k4E6G-2$larMajCCmZ&jH5A@9lDdV[9#Q
+jd4-ThNAG$4IEE446im',d[[3Gj8J(DN,5A`KRYemGKbRUD(Rf4f91Ml(VkNEPYc
+@hjK(I@K6Y8A!RIi2F$PXi`Lc8[`4m8l+ArN,"6V$h(h$AIi(*AEVTSeV0XLqe5h
+qpF&)flS(K'10mkk6(@d2ZNkq#EH91$j,AJ"rB6YApYr+Z3b2mDp(H-6pr'dIZ"8
+'f`YhbUrL@r%Hk%NCEUJN[TDrFFI!LCdVbQ2Zj$%VqGHYr'ZC%[mBVq`%rhSD-EF
+(`rKDL8KFHIMU`!kJNJ'4dd%aXbq3!1,S)fNmrbQFH5i`PQfGe$Bi$9#kjfr!8jB
+VTVi1AF&VfLPc(qdc+PBibURlM(!'Ie[!L)a`65$)*6frf#mcH8hX#&$2Y0kTH)S
+('QhlEBDbLUV`i$ZI*Er0p*qQ-cMa9kKFcU1N4ITLTLYH[$qVZQiHUXEVRP3(I)N
+h&5lJ2[KL[JHa8&C@Q8E*NF4Q0HqC$6*AD98eIIN9QA#V5&VaP!`pVFJV'3CECAZ
+Q"rY`#l1+RA*C5XpUJH,ShSdqJ,IUecZH#T+k1KdekZi393YYjZip*efqJB@3!"'
+0YB8lG'd3Xk,AQZpjKaiFp3lGPr%1VDIIa"@0Z,rb$[d-IZZ%GqJ`U94qhc[dEcd
+rjKdkmNA&224(9II3$LHcFS86*T4S$jS8#AlIa)QU9IIM59ckbFXbdleI00eRmYl
+2AqQh54jUHA*j)DP9[l5Sq@XjQa@@SieCDVeAPmcr[H2SVq'MM(Z0cL1[d5RAdAL
+jEIqr+ZPDUlAp&9l"$TH)BU19BX%@[`h@LR0,a`1RpZlhbYTR[-j1+3*Ym-E%rf(
+%Grk15J[6db4!PYL,L!#L3iRh%4@4QK[ITcQZrMiBB4YcZi'iI*cUZ`)+CrP,`I8
+,IXE1CNX@C,K-@Sm0!EfdKNl(4ZdMkiaJC'clGLf8ebVC8mr9rXfV332eTE5SG2c
+q2DM0+lU!D*I4,QGR6CUJK6X2X0"1@$`@@a-a+XTH!"Da8A[`E[L(!cfq!+GlCY$
+Q!"V3+5%'hZ#NdY+lD5IM,FZiGJEHh+"JcE+4Cb`JpFJ9#HS4j8@8$pmHE1c96*H
+hJ'NeTH&F``*0UGXbbF*bH#eKr3+QQf!-CNqLQJ*j'bZ6fNG@LpG-``,YAGD"j"I
+KPGVE,Dhi8A,3EEhEbR)G#l52VL[-Ak#jLKC1ci0f9&XZq[EDT&CJSY2ZhUJeX)Q
+1M9QAeeHMmM#b3aIJ&j!!2GBiGf0Z%bZ-kTq4!c2QYV*jE2)c1B'Tde[CIF`mIA1
+0ZriH0LfU3E32ALjcf%4-BlG8E`3#8[A#Z@h1iq5A"TEP)LqpMlT+@0i2hfIjI9D
+la@E"Dr3SSJip9)SjjPC)qFmH1@epRmd`'fbZ-RDfITl'ECZ[rF8paXCp2jc4#!h
+ek,bIHDS$!j,$GTr(&KJ`rp"Q!qYMZZDSH5XFB'1q`3VmpS9He"!c&rEe3JAe`K-
+[c@H(,#(YI-fCHf6G21QV2Nr9fLYlV%($qV`6PM2fZh%&G`l)fK1pGfX`pE-qSbq
+Y*pq#RP[*6cDFDJmL+JBQ@Llfcfci4Ei`D0aMJdI8KE,NXFf`ck`[drll#FXa-qf
+jlKhB$31)p"ReHlm2jri,fFb'Yfr03App3)DQ02#pMFVfSl*Fk9lcP-Km)*(*X,P
+X5X4%pA61p&L05kPc$eSIYk`[22'5SGGM-5Mq+M`jTFe-Mb[qicD$I-&BC1BlZYQ
+bASq--`jE3MV*kZb$cpCJC4Em0HI1elaZbrrKM2U62caap(',V,ep1[@R9C[r"Zf
+0Z88cH$IfpmBd8$h$Gl89mm2CbFB-4Ij'[aa9YqPbVH#[,m3&Z`B383kki+(jQ0V
+"[EI1I)lrkVMeGRaHAr"lPp064[MrrSG1HUp9mD1UBap2MXiMMPKY4pT1MC%2Td8
+lqIK(Pq,rkMVFVRGK2cSk2J9Ar,lLNG3F#4GEca!GG+Hb&rfrrCVL`ZAi2fb4+rp
+P!RjF3I(rl8cp4dl,SpK%d2j5QdLjaX4,5mS2q6*Hb5fST16D"'L'BBVa*[ANS*l
+X6$hJYqKk`(M4pB6B5Pj9+kSUrE!rdCZ+1%&2A35VrR344*%Rc1FfH--VqKdIcXM
+ic*fEqEErX52qbChkC&Hl0*3Eq9ErUEGf0XlBMl1GkqBP[lmKa5dUI64$kF5!dpj
+Q8V'lDakmKJEX$e8#U4mq"Df,lB,AF6VrMji,iBlpeq3AT8PlGP@`[$VJ#RQPj+$
+!a988S&dAMm*j!D!UI(dYQB6(!iP@$#e%0peC"fITU(m2DQr6ZKr$(JU2q*QbqD(
+N[)"$-%@3!-[hdCX'Z(`I[HQ#brI6+fpqi2,pp2"ePqqRcephqAlkcCX,Z(ar-rD
+"brFcSCX6Z(`rIFhPZe3fN9RPJiHZ9&ii6k%+aFMb1IMqZG2h0q$rPY18G2dhTqr
+3ZG#Hp&"&FH*Tq0)$(e#aL1Q1K$hTM8Yja1AJhNRG3TRZYV![e!)ZJETbr$4pm(S
+d-AdjG&RPiDlZ*YeHj9G6ZTamH"Thr+lkjiBhJ6MTRdHKPHD$mhG$Xfr"#`a-&4H
+T2GTCi+SK[KCC!SL&KU&V8bDf!,&d3*Z0#KK2pYM0q!Bl(k#cNmF&&lEaQ8S0%F6
+5VBiG#rAp11Pr-KEUKLkZf+&MGf1bS2pSe`GJ`'!$q#DEKQUXGTjZj2P+*JrkB*c
+!0rTJr$L6TaCj[T!!bB0q'JI`lF-h082Y2'3%E9!QJhQ#L,m(hf'iH[*acbG1,J0
+q(Gj`+1U&Xj!!$pTaeL$j!DhSNK[%fc*k@i$-bY@TR4QkR@mBP-`aC!kVQ4XTAd6
+0,DpZfcMZ[59l(AP1)lGR*VkKYcd)[Ga"9qNL9L&mU`e@rr'Dj8D*G0eC`kCQe%5
+!UQ$AclJ&9"ke@bMMPTPk$DpZ#h+,Q+YElN1JNCYq0bE`TDB#rFUEVlh9Kd9RM1G
+QPbRETR6KP*TE4M6ND`Y$dd[j+A`,jkdff1T5,UkKhbLrfPAaB,ELi[TY$p,d+Qe
+lGMip21ChJ$YIA*mFGZ$H`&d&VmIdS-(CrE-@lLek&hITBA)1C5NiDQYa1Gh0'C5
+Em98%"Q80SS*J80EM[9#'mhVT&HTT$G0E[MfUkEV0d#A$!lfmZ[PVNr,UjDrd%-I
+A!(qGUla'q+ZSJZ!eaPrK4&"H&r"AZ3bJ*R-V(0!NUBI+Ff9p(IINC#5ej201Z8(
+NP9$0&9k+50kP5%Ll&+@%ABS8CCFL)Ha5T-Uk&!PCPb*&e%A8kS$pC(*rVi)f`TA
+#cG`[KD'j4&Hc-9laFa4@SXZjI`VFG*KSJr[Pmq0H(@#jercb`F1@E&Qk)0-kG`-
+Q-GQmRG9NGfRqA-'6k3Vqp0b0#YarVU!Y8d(2M3SmIki!AKZF#YTZ9!!Hm)mU%"G
+bGJ@cEe53!2(R#Zj09p!2rCZc&IMqA!(eLZ`+GPk[S"N6,9lhcrV`Sp0pImh'$Rq
+ia65q+K*ZmBIErDBF$prr4ASi2HL!QG3LPVX-S@[&Qlqq!pCB9jM'f5+K&P-fP#B
+r(M@aF5ja&BJ23f-,p+'T%*D%!Zeh(Lm[mY3j5-GIh0ke[q1S$HM[K)pRA*Y%*`,
+!MD"p!0qZaVK$-Z4Gk!38pda3H"$,fjJAKRS#2SaGp'(N3@AJ(ZiMl+(i2X(rDZj
+2RPYG*Lf$6J'FJSNAb"HKfI3PffHjQm!e,2Y!YEH40-V)9SHljQ2lCm(Cr&(-8f"
+QSEP`CP0jS@f2j1Qc%-jeq$m$'hQ!9rMV`1e1F9A9Bq3P#E94cr(&!lFh[(hAaSb
+(SlPCC9NRGDYdDh9jZTh*hKf@AA+2j@PEMf9A``j,PbACUl+#qBIiaPf@&aerLpq
+YPKd1a,m`'[qeE6@l1[l+mV6PVbbl,0XSrqq0aMqhcETV`e2@[feikZ2ir9f@*bf
+2@hjMH3CI8[rEmBpBNTBAmI9Zr"CNIJ`92)J-lmBrJZa*AXHjq"+iL8Uq#@kflqJ
+J$!*f'I6"l+A@d18BJhIiS+3(4JD[K3epI,E#8HBlGU!JU['p#JfYCR!()q512*6
+&NJ(Y"NJE'EIjQ1C&(f2[P-dP)GQV(i*PlY(K8l%#qh2lQ5m8d#(f*()mh2!8'iF
+FhVf8!rH-Y6&fZkq"ahmP$aZ&Yb$BC*rf,3L8)pqGTH0p6&YGU[HC!hTTQI9XmNV
+*MUSVi`HNHYm'ZfdHH)rePU$@ELXGAkU0*q,IP59(99$l!bYiNI3,0-20JRRiKCm
+QJaM11H"9XU1"D*D2$3mHZ"ee2q3l#9bSJ%dV[80DCQq&PX(,FGb`b%+hM!G+lcJ
+`KESZ,S!HGACbMlYNYI[fJRZlea,1RUH*-QIR2"E98Y93h*d4d*f!FFCk#rrHC,2
+i%,R`5Zj%k8GQ+"Y@2b'p!*j"d,i4%6FCPaQAfXP6"a5+kMD1K`BL,VjqCfGP&Lk
+"%lke-5$Em235m$dmAeYQaZ4dJ8*H6Ima$pMldFGE@F(4ShM*SCIfXUe(-6HE6e4
+4pX-2-%CcGVL+*M*SJEXi4$3r!+d"pMXcr[Cm-"(,XZ36I+DNc[`pRi(hB$*,1GF
+K(4X1CQ0@pJElSF*&C`'HdVcipaa&`EHmZU$4&bh,fJ[V'AYYB9fd3-iVQiF1ABr
+AF24fk"KLhX"'YH4,I,DIm,(NE"pT'RZi"kaCmE1S`iF-RjC2q'Cbreqc*"Hki(6
+k42d*I$ePADq,hL%IM%k@$dJ0k-EG!Dfp#V2mlpEPPQEabIbQXa0a"d9G*9Qf1q+
+RI,R6hmLG0ld[Gi'cmpj'h&dc%NIS[X#85ThSTrYe),Te9DplP4NcKShB*YGr%cA
+[X)e0@lN'hXB`CCMkl+-ra*6&6Z!&@R5Za"UUVqF0b61pQ8d6eHhm$#EB-'[2f1e
+@1#8)f+eZUaQc9QH9Va4Ac5bS1@PdS0Vl*AbC"bZa`FV,NfFAX+$1ET24JC*FfQF
+,ci0(r1"dZ()%dlJbfF@BSaVp@3#(P%BmSFl,MUK&qp1B"3CRQfhr*QE4iFelTL'
+h'["Jc8*!8EcD)XINLB`45QPX%aF!1,J$cJHF$`"Tf(e6!DkakfBcA'2FRK0Fibj
+@1RjZVeCbGNDCI$R&2ap0RZ0mmd[aFTbrA)kAPrR,kVZkL)-H`8@fFkhc1,qiUE@
+k([HlU()Q6i0C8@8Z`VhK`phbRB!1YEQM'VM,Ha(A%I`J*S&q*&q(EYFFefiiDi1
+,''U5*NmGX+%UI)YQEb"*+'ja%[i2NR"UFj%Pq52PY3YqXDQT4kf(1&`@ldDQhH$
+,!&PXNk#E!!f'j)qK052+),cQ'hSd%PM@3+'0(`-2J'HUYKNIjmNSSccS#GdHIJ'
+jh-K&A`#)p9ZDGL0ULm!@fXa4A5p`H(4j6P3VASLdeR@P+L0AJAPhSDD3!1a%hJc
+NRA8YQpCYb(5[h#h24Ji2FN58VL"ljJA%44(R49a3a!3IDGVY!+B!cf&3LB#U!UU
+&NrQ[BHlZS-N5a1(3JGY*LBJ68VH46Bq[aPGH(+i2-+[Vi,K9d"afTVL,Faqf5K[
+(3cm!0qeFS+[E#B[%T[aPd5A-V[K53d4A+N*FR51L%`i!S+mXQK,`G%L'RA*5f!c
+eAIaDfS0Bm0-jJp,Khl8!k@Q%pM595Qj9r4%1mCGKaH1JRDG2Z$p,$ZK4"VC**VC
+*!(i2"a$Aac2fif@JQ9j1j9'YR*8)*Z3TIM-2aVm$*`)Y2")6f*l,AcM$c,'2jqM
+M18SG"a&PC"9MrZ!@cZ!+SJdp%dTFZp8)BXTC6lKf)qHcK#E*lRY8p31-f8r%(m1
+Aa9mHS"I%+SHrH(@U!QUIjAEYTPJIe+r31ETNG&camSZemlFRNFN,V#kihl8EELk
+hBpTHJ0H3!,SN9%@FejVNiFaVII+3!2S+CaUebHpaGGM2F"h5qq#19K5"HViQ1#M
+@Ga*6-(R(eFP$EiDAddc"ea'MHhDCLk##I)+l@6b*k&-Vk'@hE258$(rRSa`JaL)
+51cq)E#Hl`mQ$iC0`Z2Ni8*80&)%ChQh'Eda2#XZX"9'lMb-rUm2%lqB9`[9NmR6
+mfj34-5G5HXbk,e#Xh8TeUcLi$pqkeq+fN[r`j'NAcGf[mFlF#l9Lj%bqLjRF%rm
+D[Tl%*"3R$m9hJPhh@l5*Hq$f-pQRpKrIVbcPHdcb(X2AbH3*l,1A-r-)(P#Q`E9
+EA`+-kim#K"hX`RDk%9elaKC1pXKPk1r6aiqK&dqMBkr3"S-Ii'qc,X3p)qQ*k@p
+d49R$fb"M,%KqaieXf2AqC%m%5Z4*8V&q22jGj@,#bq3Q#(c64AI!8d(iEj!!Z49
+AN!#F&ZVGmTFkd*`GfB+2mQeASq5bA9+qN`[q-$%CF%@520[%*iJE#rX#MX53!#N
+4hmZhhkm6!X[l,`C@deV$QIfda850#aTG4KjHa@2qa"8"9a0RViK$r)k+1#bN)bS
+4,r),#4&1MS2+GE'"AaH[LHX#h6a)c*[Nk@a,mMIfAKNU`r)fK)b[TD*2C+,jaZK
+Mr(ULK`EaXTXm&IqHS3MX2&q8f%Lfam-0)PjjP(-bZ*!!S@cdfSQ,IU#q1(Ej003
+hJLd"0@4GA9c*$A9Mc&irCG5A66mZ)&iarIb+JCZ9C$pr'8*r$QAkdjqURLbS*e(
+&kjNUAUIV!jYaq0Tpa2PpRGI$#qS8[ip1SV,$k-5GUGTH9fTEUR$IMUL1[E66i#2
+1(Pd&A4a!`H%r$Y-1&0*a4FRSlGK##i+kk$K5jf%XUf"[ZV,K'010ES$E*jY#I,b
+1qja6hJ+0h'S,[3$2#P4EqHeM`#emMk+HYB(I40r-$LGr,5B,@c+"ApNZL+Gc3-3
+MBJ5r6M5pIXDDJGc(lB6a)i1GMeHarGEcMra'IPATd0'4+aLUmUJ&bN@BK*jfi!Y
+41+E(GK5f!"aAf9HkfXBCHRiPfK'im$+LVYdbqIlMj,4!Kd5pJ%8`IT%,EZ'0'M!
+R38cSJ$)MFA9'p(6$Pi3i"4eBBF&XJrN%"jab)@*cdi9S22ldKjRK5e`bmlT@QD(
+2cFcFqEMprMTcLhUC5`IN&CVcb2LEe,Af4GJq`rL0BbTP-P8eU3VCQiPBFHlCml5
+mS!QCmIYZCSYqHq,,%)[ILF`bKA4lh-G4MK0!1HKcp'Km0Ek1FA`M%@pATRRifQ`
+*5Q'V!kKp`QfKG`Ui5H1h[,l0JpHFI0Xa$bLS"*`Xk+L3!*V*LG+H[C8raH4PH"N
+FTFY8jl&M,)q)H8$T@[rS$ZV(EHPKYj!!MKZlek@"NM8mHQ*hJ$dFGiS0Gfk[fLk
+K'hVB9YVGb##iM1KaiCl3ZCEb@DqBF)#kKlYlC$NQi5C-"(kTQiDX+8r9V2%5a"K
+ECHiBXcV1YLSG%aDIA!F*Z"e0",P(D$!GRe(LZDf!%+)V)@"2b!9X`LIf0ekmUN0
+B[Pq&bT8[5E`NK0Y0j(!Vf4T[j"*Pbe*8VC!!,9da[#HFbi[[%)q!P`Hm0!SI#0)
+*f3[5#8i5XrL5F"!N,ejq"E#$k+JaJpmkF!!N89$b0[)T`XBilAicGkN"efDFVN'
+p(h,jIFa)i-Sk&LUMb3%PeP,dXm8$0Uqb1UJ%121652#iA9"hBjmjiEZQd%5*Jr%
+%q4X#aJX[N!$Tee*Q9Pr"SLKRF(2La&B`k'aLQZjJLq,r6RQ*a6GR-P3c'le#qE!
+Q[PejUBr$6dTb%&b@@S'Bk,Lkq0H!+8*p6Gejf,YKE+`1BT!!LI0A(ed4B2CJCYE
+-`rdkM+e&a$B3e(0X-a!`4*-d+j`*EZV@BZ!R)rJGaHm`jdDL%VThJ@m#92*YF'E
+VHSq,Z8mF+,L*3qA[8AKS,kEeN9e(9%858bLjr&!a31QKFl0$e3ikJ+,%Cb[dBHE
+*crHm60rJl'h"98QAEG5$K5rYFDm1(TN8f5m"QeARZKQjb,)qQiZFGFqmDlRJqXF
+,PfeYZ+cN(ClA[-HkJ,V$#4XCGa-+4kj+cI529CZ8aa%6cK8mPr%0$VL(+bEDeBX
+VEr!1a4fAjKjkG9+ck)TlRpS9lX%LZh0!Xi1a0"-qS2T*Xp8K*ZC+9"hS5K9ZYT4
+LKY,Mm1`%fjHXHkhPQ+a0Gp,fX2pKlN`0'JrJ)P*r%"c2D[`@FRh8HCJKiLj`UdG
+G4)m"AK#(b3Q[5Fl$`8'bh6kMIUL$Z1h!@#ai@HJ"BQJ0RSFh"KG899Y&,VM%S8-
+'jM-T*bYb,qI+!*a0j$IJ9mm%#S$I4SH"r11*EfKi6dj`ca()GeLiX)B$+IBRlSB
+lN!$9`&M0J@kiXPlc6IKm`J5k1e$$m"`A2%bK1XkL'jVpK`i1AI4dSAGd5$8%j6,
+K'DYiJcZD3UhJ&FMlidVH`XEq`GI5kSVK1Zl1CDN[eYl3eYi"$kT4Mfq$[kSc&S0
+01"@m$TE29XAD)@BDQeYLrVd#SNcbhqJY4@m5S,IdIIfa[pIVQMT!5HYrUc,Pi1U
+!QVK@"iX`,mqIdQ)kq#qU5E13!(pQ5S-TPlq`KQaH3i6V,i@Bc1YCLATqrm0kFTe
+pa!lDf3#fb#rrRk`K+PMkS'!jQZc$l`XID9'UANpYS1rhciTkZ1L+-aIGXcFKZ1M
+S1d*IG0j[IR,4eAe`dAP*Pq1GLfl@KaFGICQ1Ah6&rh,4iIUCIN2KTMTEA&09V*K
+l6dijQF!q&2phlLDZCV+5&*!!jPKqqYU4AI$j(r*m9GE1RQ#BC1pb@$JE[B3VfD`
+IBk-VCD*B$HRGD'8LP@I*"iShp!(2'JrYJJ[T%2Q"cmp,q6S'qII+"ZkJ)Hh1-++
+"LhNS,-&&TRhAH6%,!raZ+PIZZZH8kkZE`BZA+jHZ1ej1FRh"mcHFZlMSMR5I3+4
+F66'AMH[V[RAj"IMPedThRhP"ZIZSa[ZpZ`rqGKM$DZ'fP$fjfr&8J0I'1&aIF$9
+R("Qjlm`,NB-LcJhPHlR1DK[lKrSq[FjQ9)Am[TLR!fC"p'NfPFCP0R@!)Z281TI
+EcbmQZ'4c,LCM3dU9MdM0a!6EDY'mB2K@-NY"KLV'N!!KpbXU-Z5T[S%-3I[k(9c
+)1M1L)1eHMPpXI"FmjfBm)[Dp#dl!F*ZjZef4A%6Zj6V50bZ-(ZKTeF24#*4@S'U
+NBkJL(q%k&-aH3bTCb61%ri"$TA"[Gr+5m&1S,JQkak+fPeZH!`I+bTqjj"08QT9
+h6%@q)'iV1eq#jbY&2TA$Jaad@Fck`h3c@ZLJKlMUkME!UcYkCh2b&j40A#*5(q0
+Eb6-bHQUmc'q*cE`5,bUT95U*UT@iSHD5UX4V%Pimdl@e5%@%%LA2mRTZjIA3TD*
+i#@IIf@(4"jIHi@8`F4VGkm1PH%*ahad'&k![jGllZ44rS,UaIrKSqPl*G[PL[[A
+5Cci[VHpXlj!!9[ZP#XR-#T@SmP68lC%)$KNX[`qhYEHhKB05P$+XJLh0J[CCl%i
+Zj`h"VI@Y8X`2`D%9IMMT@Yk"m-lfLL@eR5'ibC+`@(&j@cMDf9&K+Qr(BE5L98e
+$,A#GHMaNH5K%RfX#JACr"k5p2cTVcNJe9jA-rGd0GC8*(f8h-m!frSqqlEpF390
+r+,2ql)UE'NLAdA,FE%&2-A(qjJGkLSNMer88%mpHee0-22irp"6KJVXQJc)'E`C
+`-hYRUcGc4Y2eQpPMr14Q6R"GY[0EVNPX1$#X%r!P9Q@cd$D*d$C4L0jYI*Zd+)M
+H9BUq&2bEfRRJ850f'rM0bZQB04Kj)GeAT5QP&-cSA0ZI"*Y,rk@B'1U1ppb&1aj
+HQYb[38mK,1jih+MT1plpT2"[pYBG$b@QXeGm%$TcTF2N0@*B[EpYE"BhpYej6k%
+"59j6!DpT,Ffaq@[1q*!!I53A2($Gkea$a1l`$&f@0kPed1AP(eZN+"[QYcEQd0Z
+AZVAjkSC$2Z(Vf9HlH@RSepJ[k4`CF2hA4YM%*UTIm6G5qB&#*L)kcm%KX&c0bfh
+N@fmBZ'"rK#A"hK*X9VN[YIX1l6Jkf$HjliC8Vp8fmi,4LPQ60f#Hd0",lh8pr@B
+r+Dk26bddm1"XAR@&+,!*e5ihR2kD&i*3%MCr,Eb*QjIN#Z(Jf3)Ehq`AI"cA*P%
+aZfPZSiT6fplHCFMb2-e*dm'K#kJR6PL#H5'&pG,0Bcc)hAAS$JrZS3k2J'r-+49
+QRjk$3SAI3Ue!e1AQqd#`FfHQh#AUTTcNZ9c@b'pq"63i1-4b+4TTEi-e*fKm`K4
+[Zcp@j"*S3@b0,ab1G%MqM@[m3"r+2[pjD8dVB0Kh%BY`HB$%%N%r%Q$"@%LSJUU
+iS&c&(e)Z*A3DZSaJf@[$2R)+XMa8FIqXckBcra@NHp@BMiLT+$JA8clSp8qKS+J
+rY4q1FPlIHXS#('Apc6C`P"`jMD1iqfm'J+0%GUSi5P4r(8F*2[iaML+D(j@YrK$
+h(3KpUe1,Qm'Rjh`&Z8*-NYclb(i)#,ib1%&3VGHH"5EiBqb'mLNjE4H3!!!icH2
+-6(q@(#!#eFL&Fk&Z4XSiM0T@4VYK)5R$eM"bi@Sm`hQ`l#YdEb9(KaPGT+B+XXq
+b[pI9*6LP%YYB9J3&'Qa198'N+q89"KVAR!T68H1GhL'F+%jr"6i'*eeq&P$'%MM
+rC88chU&p0-PQQq'L15VY%NkK,UVMXfcl*--XKq"FFff("-XX)14#X('KZjTTUkV
+CZ0VkQSEUV0S')'9`&`Q(9Zr-bkI)3a(m'kDmJ%IJ(aQZ*&8IAeE8IkP9aXR"9#4
+)2b-$cQ*fdK[Q2$kQ)#bk`IR`@E5!EdE((hKN"fe'1&iGQJXY3hKGp(EAh8p6&D+
+-JM!CbBl05BVV))p-%30dk,M*`3',ihFB[b2i(BAAe&TC!TTd3iKBjK(1+T-X`#X
+N%c0F9dZ6SVb@U8Pa'FI4M152Jc[`Mm'*hCKV"#[,QN'HMI&EMCQE+E!b2l55J,E
+F+R#PB"lhh(F#I9mUFQC#Xbhk@Y0Z[-"aFf)j*L1Bq+H9A)[FP)(fI-X'$df#@M9
+b9#fF`YJ%882HMEbQqkpM6#CiFG0I9p%Y-1@kad0GI"STG`1(!dB%T69Ap@Jm(,e
+1HeD*Gr0ij4lAMXFZQ8E+rBchm(KS%kAL!k3XekE%HbRHH'Fd(JVMdmLj+Z-cH$c
+GeDELiG9`'LQA-pl(ik&ZPBjIKRLI%ZrRmIH1aS0j'5,RcJ(%"a#rFM3DpdQ)R2X
+b1K24Y524IXaKL*`,-cU)k),4D(J&#Ze5SV-3MERc2d*c0cBj1JiBB!,5M-*D%P3
+dM1J'LKk&Ab)[pk&U)fEfC)E,JFXPlLFrM#h`[T)"`EXP'4GHB3DG"hLE1+iK[k#
+Zi@'K%Q`1Thcf'GTT0+8@q)afRcLpp*'B*)69SKNj'ldP&3e%ehG!4!9IFc66E[)
+pc$Y@5l2Yj1h1KNY'6S!2ANd6XY$G#TkP0fbASk)H*aHdqL8AQ201VQH8A1Yj,QV
+DBbSP$c"8r,l*UiEcAIBJi`5pRMN+P,'9R$&aM`KcXc01pmrDH)4rV5XYIq2#'aI
+LAa+9``2ZQl5cU@D),MI1@3%r[),$iKYHBL(f1$!8-iB(hI$A!ih`K,Z8Y)rFh(p
+ZK,kSH*4`'qfZV`PYT)4l,PfqB*!!5L@&j$r#a962SZCEj'30Ahmi"a8+#YX*6jE
+`Ik9QGE)Vf"bEJ-q+kcPdj%je!i3@hCMT1YTlNc1EG6)eBj9HU)C$(Fa)l+GkQ-9
+F#`p,Vk4aFfq)jQFNaE2VB*UA&lX'AAaIdem@R@2ED2PS'LfA5RHPjR)jIQrRFaR
+!ES!V$G-AR)f[2iEq6hI@49jM(UTCLVQ#AU#jQP4U"(IqBd44freE2*-`r%l$ME$
+,K%QjIHJ#cr%Y[-p#MYGjM[8m"aeY+H4kiQ,`1+(b4ZI#!9a"*krI%aii)JKF6Yd
+cM*qi*pcSDZ$ee$h$q)Pl`Jd0VF!28[F-ibIZ#6GF)`H))FkYldAma$hKhS,SM8T
+d"U)RlJQh&p&`ELl42N42h"2ZfBLZ9+,pL#ER32aB$Vr#1FIN&P"6SM%#faZF[,E
+jZ+NEaCi&*rlT#EhmCXEZ5#&BcZcfm3PG!Xr4p'6F4fj-iDQiLqDb,4Y[J`NSGjN
+AH-6V!4h0&Um4D1lRilF-[eAilH51XZ"E#aVH&RRf01$`e3"rNHJ)2*jjifDU%$(
+`AMRa6THqB&j$Nmm60i[YiRpp$2eR6+"BaAH3!*0ZY&41IbSRXC5c1IfA8MRKRKR
+Ch%V90`Y1Z')pQ'HK'%,QYlK*+bfIS"&C3Z("rfAS5[!NZMfLJb*fqe3JC#e"2El
+Q"5I+Ni&2Y0$X['RKl-YbrPBHcD8,6p#ND#pG*P$Z`2ErIAk,r0['rU[Q0(-Kk[D
+h4cTMS#H5Mb!m!d291P%Zr+2Nc)$2G01khKF,qM[B&()I[,iYkZ,m"[$$(Ej#N!"
+mreG(1MUi&`6jAS))Bi*iDfS,YRC-L0'A5K,JEbf4+00h4+)mh-M"#j2kU4D%AZM
+09,V5(i"82+Vr40XDI`%LB39i-XLih4lT)'F*Nf([Th-%M%rGlZma-0KCXEU2l1[
+@a0UL(C%BK)1c1)*5aY%8pAB9IiZUM)eQVrXcS(QXp'r%pA#*'J85I8F%A9X"&m0
+32%R0LG5jR(Xi5`8CH[*Rc$iCimQGXAL@$G!,Uc0bP"H*D+b[mV*FHUPTS`NeXQ-
+Be`eq0VkYRDT!pGkfpNEbAY`@d%E#E+VD%i#3!+[@4q%D19Ah!JD*C[R,$IP!A[P
+%*-E"0Blm"L%"B2b&6I4bR@3(ELRVBPeR0!SNEPA,!X9%PrE3&GXXPAI%1[fE!p!
+3@&@"YE*@-P)cmK'pNTjdKr,C2Q+N1*994X+EdDkl+4FqG*Dldef@*lCH(M!,p[H
+Pr%%'jQjeL1i@%d&1c0NjC!M@&eD(d'6Z%2Y#hY*E6Gaj6I6RKjbC55GHhrAH4Hb
+CbTFp8+SZi6leGRl[fl9rr6Cmm324Hr4lK$6Rlj!!C`)aRfXZ2lI8L+Lp6`5c(8m
+%mqA,B",%IY+(kTJ&qZadA#[imZHGIFM@*2I6Y'+-@pIleV6LHfAlJqdEm,d&AU"
+Ai(Yl)0STiIX,$l4)p0fhEMAXJX*Aar+1%-iQPfhpHSThY4#2#GpE3RMJYmfhJkV
+P28BSCAITmYTB*l5aSRPYN!$5$`6JBE3efl!Jlfp@GXNJ!-&h@SAQ2V`Xa3b)mMA
+HkU'&lG@8"KFSfYIP8Z0&,*ih2QZqSm5HCbNU$%l1Xe3@"JhiUJK14%3&&1m0H5+
+U$N)INUUEd)K%*BE3bqkFCLkR5CV0*qNrCMeA5pmZGRK()"XC$6QEhYh)#+D%D'S
+ENihfr-)J'cjaL!8Z2rSM++Y#)eid`AdjZR(kmD#`L-TfcUM+GS"8YU&PjNHfHi@
+LpmFQ8fG$Ijf(JY[cm19CVr2!V4AlBmNMIHRCMEj8D25(G`4clpe0VS9lGNY&b$,
+[jKRHYkB#F)deGB4cUkNbR&4CPrmj2kCM@*Q18,S1l@*TQ'Xb2h"c$akB2G2M[TZ
+SU#F[c*ccjfUR%2!S098"EmUX[IN"EmVFH*dhC3DZmkC-lmd&r2b-[I'"Rap,qrr
+jqG(-YR0qINc6R&%r2hqAH4ibPiePTSE6C'E&5%*QUYb4'dA9*DF'l&IP-H2T`DD
+QhCb9V$HZA42'aBC6c[rj,`"N`E8B`eJYJ1M8*[krIr4hJ3DrRLjQZC@alF-J`)k
+`V%'FQ8Mpdcr8jPVm+kBTra9'H!ClmH@cfIX30NZcL'8h95d"AFTBe&4EjF6h2I8
+`qS)jIk'khYZ!(!29$Beeq"lPENRJbPlm0aLDr*R`E4GMmjkNqUEpL+f3!0KpriE
+H,Yc'I"*lB$bp"IpApQ9*NrYer[B9YNI5'1kRYkc$l$p)QTN6k)dVKI!$rhcEfAL
+*6GR*ik,X0SQ9Q1LYl1rC24)V(dG[H8q$TqDkI6HpcCc0$NUDD6qNYdAYV%KLLdl
+6@q`Ad$!erV+&hTDma9k40184pZ+VHET@CQAXATiEEqMM"mrb`ZpPE4+lP+@mVC2
+BIrN2p#3B(2@`r#l!N!$ipRQiq)Z[&ZMHiV$""M'AZb4Ac,p"XJ,dqS35d%#L-K,
+JT86b!A[d+hfKkMCI+")FliT&J,V"!SpI-AbBXQZ8HRPE(['m+PG@4P8QQ'CdKdD
+JUSKR24`qGi3NkfTiVbmZ+IRr!3#3!`B!DfImeNfiH+kEE8CBa6Ub$i$Kq5Rh&Vj
+q-[Z-l[1pp6ZZepQDQjl94IKel2$8!eKI3[(Tb[%$YREp9VH%2f'h*dEBl5IE)jX
+mfj,0#1rB2YCeC-JPakk1r#CE-YQ%&IPpNZG(0lP0RT2MlQ0(*M`@BEFTa`-"I$A
+KEMBJr'*N(rPpC*2K*U008%$*CJdL@l+0mX[)C"010[PeimR#kDD4@iY`Elp*'1&
+*11@dhp*0@$lKbJNRQicifP[RCJiL&%q,&Z'%(f&NaXKmNe[)*S000KPX-Z$N0VP
+0T[[)D*00CTX-pT00IK1%l#16I@5b*45S3D-'6E+clqfY!H(RS-Ma*mH2l-0[XV)
+6VqFJ1d*LC,L3!0iHi,G2rEj#b*'MiThrhBGRUIVli8F*q6LEIIVS%IRRP`KTRkq
+S[r[E*aIqrqZfiZrPZfq5hDha&PRMJA,,j,A5P6@rSC@%,)P'fL2JD*A-M`5%&1X
+bdGArPh9Gr[qfIPcmriIMkqArIcYq8[hrfj2Ra2pV*i2Qrf[Lrd[Y,635fa)9HNL
+rblVkpjMHFe$mrr[**G9X5kVMCkR@fhrhkT+[(bIUhf9p"&A`rm[kL2Krp8hec`M
+Efb2Uh`02pD@@Y%3L6rCdpc`CL831,YI6"p2kmXR*p)1af2)rk0'[HITYhfdr0AN
+`GMCfF(,eVlS1PHiD12c#pp+Rr[qej@HhJ2823U%[ED'N*4T$jjH!pb856+VI3hI
+S2jq-Y%6&pl9B,2DHTfpppMEpmG2Np1QIiVGfi03AANK2NS[[ARchD2jSIR%C$DP
+SqC%S9!(mK[SQkXc*Q+-&pJJGm8c,p%cQDMZCijVFTUPNGh*M59[APFMa2BRZ,Nh
+l8CEA*abc8[ASZZlZ,MVXefV-SIffkjQHlc(+bh6!Y#ZqL3I6EK`[Tj0DfV,SN!!
+SQY)KjM*R$bXP05eM&-FU$[IYNNY0QhT9dk@ZKdH(Vm##4XBF0$62iM6$q9LFjKe
+HC+b%9VP*H64KClPPXD)(m1TD[le3j%A$pB$VC*@j*MkIU[Bd2dfbBR@)eERML5U
+,[Q(&kBKGpdFYdkfb8P`6hFdcmAV1,@U,"9$[ejS'KUd`ebZ`FBqET9l(i3jpZ'T
+iQPQ@IpG18&DVHa1J4Y2@4KQVDiEY0X#h9q$%pqe)$aIQr2rklkI`rcplP%5r%5A
+4Em+$rRq@4!mI)G&$98,bQ!G-iRe&eqr532p`B@kQJaN2chlZ)dp"('UNG6GT'96
+[k2GeYrQP+Z$h%-QRYrE+[[Mh'0Y0)Q0Lc[6UjR2()%Y[66eii8)30(J3(!MH$+E
+1"Qp2AlS8((JV1(rUahm1J[H$i+hJRI06q2[RM3!2eYir2h8Tq286iZ8lPmj2"F(
+jcF(,,dp06Irf`2RTdm(dU5#B#UDRCDQe8`FZ2"'F2(eKqL+H["2X#aT6jemHHi)
+(qaI48V$rp49qVfDfEqd*mbAi2C,Y8amdFf,HQ9mjdV[Dhh1C(@R-Z4r*cVc3qF9
+p1eAqa2cGqle&XZNKi%1j&rTp$I1Zm+1j"6$#9!`KQ-G*+b(M2iaqLl5JbEq61()
+D&irLMAEp9G(!+F-V9ZQ`Q&$@AVm#jjrTR[QTk6k#,`[FGpP)AA1C4iZqif+qYm*
+T3r3aC('dN4BGKY%H[8HPCB[YBCBSm6fYlVY9@LcKEj5HS@@V42@(c(&@N[fI,MT
+QhG-a0N@a4GC3hiFUA!e3DrS9H")a9-3FXHB`elFmLPRV)[IQjiXk@NbbKRfh4mZ
+QAD*AZT!!pJlS'KXh[4PiQbJe9jjTJ(Q5G(4Bh+j3fkM*SE#ElJlVQhAD-,fUE(@
+D@6S&,j,"l4)LY)9#pL8MFjlA"48k2AHBe@B6PfRBASfAc2,%"hK3K9R$FTP@3C9
+jdfCd[DJ!ES*6@5f28$BMC``l,jXhAXk'k")fR9i*&dIY-2e0VUZ2e%cpBT'jEYQ
+hV!PD&h6!U"ed"EbJ5aH(-b%1XF0*!F0QQfF0PaU@`ic5"%AGa@DVheTSGCVERQ(
+DPaYqUXQ)h[2[kr3AfMm+2(d$,b2!6+2Qhq'Ei8c*hb,5!F5c+ADC,&PhBjiRK*)
+UFCNVlDf#(4IX@5SHS(Q,'D!&!cU02P"q4UM6%MUJMNA-M-lKUj%jq)i$T,@P$G'
+SIH3XXQ0I$Zh,!mU6(1&&[mE3&88Hk0dK%QNj4TD5fb,4b(GQUMe)2LCF6'%Jq1d
+`LD+rKj!!"(`mmYb-dp,q*Nh2%J2QYF#GAM3JFh)cG(*'#rPBkdSPGKK1SR[p"`9
+QYDkZa%0X9$`XBbPemGGh&Ld+Tp5%ZVIL+6Am@$6TJiQT5,dDPGB0kXR8'6HF%Pk
+Tk0'I4D2F2E4a-Aa8D`JELCTR,$jU@'J2iYdF!TIU`ZJG-jP9FX9RP#!l4Gjk"D@
+*m+X`XNX0eB'cHJbL[#&$0#BDBJd9Fm&G,+-Khd&@C'N1"!*6ABpVk@8!8e2)$(V
++ULa*hqVK*(*i(M![TLhZX[m5BaY`CLR0'R,Da%)mEH"*",pUkV*U+N"L8,KGjPK
+4!lf(0khT!j1$HNqp#8X+p95&MRVf&GC"N!$Kl'(549H)GZq@2Qr"6&UJYpM030r
+Kp`D&BLA(SI"XQdKP)F1QV,(h+9@+cJHF+QV[N!#U"AdT5pi'"'8EdK)*5EKP6*(
+BH)fX9E#bPhLQDYJPLcN2SXbXEdY6j@[a+1Fe`r)PGL-0lX")mUIeSG6qYCV$20q
+ak4Se)b%Z`IH0b(R3`HC)J@ZP+%C`qAD(CM#BKj%EVrSfKJa0bkc&8C83"G$!m`c
+R'1A"5+@XEMJ3'f$4`+J0&'0)CKeHJqk!%bZQ)dF5Cd0p"a1i(i+'lDMTLLP"e,1
+0MkM'TkZ'!pKQ`@4pS8AhdhX!++Jicqb+9edcmd``PQr-9GHPFX-m)24Y[alm@G2
+j'rUl!$*J$%`2YG%Q#qRcGB!F''bEd%h6BcZBl9--6#iS5&!22!-N$IP)*'2NF4r
+#2b`H$-Y2qjX`53mlTDKeef[HqJ6Q5*KX0@[a'aK`LG!FPG2QL!#hFIULR3a,DQ9
+)1bCrYCf'"IYje2DF#CU("$BUE1DTcQN1*MF)d6X'[B2UbmLAa-m1!@TGb46NMV3
+%`im$cISrmL'jKqk93jb$c8I26p"Xe3&,*U[FU4NfCLlRkp$0F9k$H$5GF*JMe8c
+4BjLZec#-Bp((hkpcRijK4X&Dc[T3Fmea1I00Crc!!SCf3*-8"V1k!m+(T"cLM+%
+#($C2N!$RLY)STTL$[XE8!(6"+$&*pTGBMHpK'FZ`ac"V`Pa,6@($%Ck%CH[&#E"
+((-%bUc0-8TJE91k%Ak-25(J@rGSSc"03%AJJQP`A`mY9#0d5ADFkJ)+`4c(989$
+U!%T["P85ZU@N%5+l`+'3!"e8D*hR!N2l8Yl5J2QNNQQ4hQ(eCedf9%G0p4"5RB8
+1Ri$YNh-Z,Qp+4CcVXKZJLY)$HaD29`4,N`e#D28pMJ61'PJ@Y#Zj0XMBh1bL98L
+*SdA9S5Me@8a,FA#+F4c$G2M"dh8$8q1"D"M&1#YFShUQ!&3U'Q"++8ajMB)m0`$
+,X('B66S'TVGh31X4V-5Y5kqld1831HcN`CLAB4A6YP%K(5cr8l#G5!hAC[X1Vcr
+56-DmSN%b0l6K"UFfUG1Lee%-d2H)aBa5'r%CXCK4e3jHj,rHS--EB4AKN4Ei[l6
+fVJap`4-QA%k66r8k3pKTbG&acc%@&m!pS94IK!$ekq*`3`!#f%5"F85(&NIULKe
+(a%J-%jbC!84Bd&#((e[kZfYp5SG+b!``))Ki&S34cS6YX3Tce&$S1'pN4(bQ6[X
+3VY&2*kd5LPd32UqJm3R@D$i&!dheI)T"48dK+@X+59REkV@kYT)8GSpPp)XK,-S
+3QK4@XkqIQ38Q2(YfS4hZQ+*%+`8ZU5&&,2E%U!jP92'+ZZl659[9%I+ibA4C35"
+'DQJH40F*+DF,NKiZ4[*(ar&b8B8GKM[der@1Z9V$qQrNC0qVNc5mhQDTBMQ!$'[
+C0qCib&C`dj4I#kU!-&mc(0i$'@N0S-MN'1rQ%0*6LcIm3DhISB0fAe4me86-#c'
+rFkcZ*F-X3R-@$MrqiDNidFSr"m-2E8M06kYpic49j%%JqX8SPl@R"p5X#$lm"H%
+44LVK5+c0fA!$dXFZ4"UV#Sq)FL@jl*3@kYqCe0C8r#qPUJ`#G+2L9qY6SBT8MQQ
+4TN4@PL)+$"Z(&i&`LPNKIK*&1XZ+BpYC8j'#R*qEHHAQm#2k+Mf1KfUid-cbK+S
+1lTQ[QA+cilTJciHP1d%cCTG!(&S!Lb4SM1!MaZiZD+`q6q1`H1'DP34CN5Q@P`8
+-R"59TpNJhq4IN!$a!`k)XrJ)f'ZQDikU8%fRM%ZS#4D8'*4)NF3QR#EhJh8f8q-
+"SXCMkQ8DYDJ`mm6``51)c,PPC-k0AKq1c$h+HY)kfSkTqLC+$$46#!acPVY$3pX
+F(V"iLmFY*NFZ9aL`HCI2I8Cl6NHShZ8MZcqa)K1fc&rP3Z&6@%E85H(&"(""'-l
+8bk(AZM)%p-NP$lA3[&'*Kpr'DbAa@G6G25G+-5ImG-9hD8`$qV9G@TpT+JJp"CA
+-k,IE)B9)dk1M$YXMXNlm$!i%!jYPQ#kV'#M$QDp8qU@bRPH@+50mIX3d,&kC"kE
+53$[BB"&L6)D#BS@fS+9))D1lmaC[L*R$XZ2A3e-jX"(4hK!lT'dPKp@$,NXml4@
+Qb,RBLK+TE-L*)ZP&Sa6bET+,dC2ASlaHN!$+dJP&*,RUH'KXV`"k!dkZHJ90Jf@
+"BLc6%HBJDdkEah`2L5K6Z8T!ME1qM#BRkTP1*qj)FYC6YBX`'aj9%qLbpTEUL`J
+)FkZM(@9fp6k8CM1PerRGb$a4kVT-#LCaC@*eK053!)pe'1jL4M3[Z)J*2UG*4ki
+Pk9aGbNaHX3816DU2aY#*Eq!HYi*,f'QZT&P*X%(9R'XfK9"DLL$,cPKJ"%#jkA3
+a!QY4G2BHE9N3629%8GH1`TN%@3AV8[5&RIYjfk&2fmCMdhVBQT(kEIX4qUiiQ#[
+YQK"V3rTNXAAkCQ3`QmTRCbe,BVXN"p'Mclpp5DFYhe$2R'`ApD,CRlPY@BAV10p
+e#$YijFCJ8+cV[C`aF(iJdfFAlcHb+@-P!hSrJ"Z,m)3@Sec'f'4T!ETCVD&2403
+B(HdeYZpP'+XBPPARe1mN4jjj4(E1Dal`H$r#1NpY%02LM3,2dR9GkaFJ-D*+FLT
+aq)6HZIVZ0@[M$qcl8QJR)22Mk--Pc(,MiR`,YFZqaCGNb0#p@fl&S,!HQc*G5*3
+SLf+)%+fFr4KS*46bI'&M0aL3!1K`hJcQRcF`PHG5Fc*4FKLCPH&Q1CYT'B16pN@
+!Dm0TcZmE50*JEGDb,U)Z#"Q4HlGlYa4m&*%N(9MDX-1pE-J2eC!!K'P@B$D*'`M
+K)j*bH$C*`f)QE3P(Kr8lJ8kb@[caEI((L2KM[rLM,[liJIMM$I((Ql0Gk%SZLS`
+d+X"#eh$P&2(b%ra(0RY8KM'e6E6A2U2ff9`#E[0i*0cSClTJXA#IpiFJfAd10`3
+c`"2'Jm@!PG)#'@T&9L1A!SV@4*C6+-Z8akifd&$#@ESbKCb!c#,Q-!+NPMP1a1N
+%pJ4r2!1rJY3'eJ"5G8Ph(#h"@P)a#ALFi1V[X9**'&1AmU!(cNre)alESf),I"%
+$bEINH8M#-,++`-#EABrd$@@aiUZfPf-6$'eqiNIBkqMP3GIa*(fCF(XD9Q2!LpX
+Y3ZcbTaK)"hR6Q@-Z1+fPA*`E'8h)0aJ!e0!k4Ii4E*0)@"%QkV!ZCe-jCSUk#L(
+CBfR$a6j,hMI'pL'S$`N22!Fk"0KfUq3Nm159(C!!(%)3G#9UN!#R)fEV51Ldjq!
+ehXh`!B'ELU[Mi[ZNmfX"SZbV2E(0b[HD8BDKD61b[IqT984h"&VBR!()f93kPcL
+TF&aVHhPM8q*6idNqX6)XpEI06%5XL#-9+BYb+((&eN"(BX8U#bG6UQ1"G1@5Mr(
+bBfc-0BT@$*L-6,HU$1b%-4+GG$!bb&K*5F`LaS93X,aNh&aU3"iG`rUA1Y4e8@h
+2C&b`iR*K)[IA*l3r)hYN%%e!9qQ1fF35e1G-4Q3+'9XBfJX#%R3lEr++Bp5V%mP
+4Fh3fJke&MECQqpD5cqMaf4SQh"b+'Xq"L$BHd4SFl*!!CGjd9b&MhqNjTPB+*pK
+1QYQ'X"PCT#mMA,#jh'KiQ!`V938&4a@h4+PiHiAdF6K%rE`8H@)`l5FqbaY##dE
+qbPfT8KG-P$m3`kd$XcV)fib(@0@[XTP'@fCc&Hm`Z)@ZX6CPBH+*Sh)1Nb"DbXa
+@2i3I-j!!Ar,-@&lQSL'IYrYcLb(YM*b@X*($c*UM*VV#*q@[Y(TY(%e0XhF2AIX
+3Qq`ka2j$B-2ck&#(PmAPY$,QALe)$j41p%L'1Vchd'LLZ!M@,%")6b&%M'488UZ
+$4F#`,40"#@-6F6)!jl,-bYL+IRE@+FbBl[836'ELHZi4!$R9cC9*3-$h3XhbLNE
+rI9&jBZUH08[BlTI16Dq-#@r"4T3,j(!@c324GQRi"VmR%b@a$q4C*I2$DT%YUCX
+@(M#%YZJ"44mkeQ`rYMPZeZ+Gde`*Jh1DUmM)$YYC,9jKI-(V@MC''2Dl-VCBcTV
+0-T+XCB*0[(fE[U0cBC,cZmJ*5#IA"L1U%c6p%+f,)V5+S4,NliR9dSe#HE!0"PY
+PD#%,Vb'KPB@d)BDL%b[KSa@cePaZaC1AcDB`*,9m33HLVP)+AI+H8I68AXiIYrR
+eQK3IlF6"N!$3KCK8ArLjM$jCC(#G3"2*$d`PD%5MD5'Dek!"E1JQ'SLq"#0$6mD
+a@@HPD@LL%0MX%90@f"X5`Df9%kFpM$cbkB9ei6pQ#!hUe+jF--'2ZbZKI,++AEC
+i'Y-HL'C"""HAbS,0&N3eG#cQk-3U04JLNZKZ!fJD'"[`BSHDKeQA'DRaR3"3059
+20&`I6["i@03Q2!q*U$RR*DahF(BLXbLPSmJYa0A-jlCpd+d`#qLBY%6#8je+)0&
+2I+L-V2K2ME)Fi35#Z#jbkd%l-GeReMKXl)I,CCKl*NMHLUDB(EU9*EDPQX#e9&D
+B&M%UKYY92[l%Uf0eJNd*RJ46E+`RTdhJY*[+KQ1NN!"XbM%jP'aMPBP**fYPRP#
++q#DT0TS$%59)VrZbc*!!UYfU#ljc[mRfhXp$28aHk2MXC$RVATlh-5M5ZUTR,YZ
+2fH)8%cX*R6H,%aiDp1Dl+8*@RQD!RH8FTD`k599mZ@r0B3U'D&8+(Q(PjRk&*)i
+1@aMRiH[Z"PmlaQ`h2)IGFANhBI(%*NBS2#"Fh*R3BRKRFd)ljY!DXN'GXHU#0CI
+hRm-CDFijV$9JEecf`aXbLJd)jCdR(bl+k'aFb'5K[dkJZe$KUQ!3rTNff(lmTSZ
+mdH%CSZJJfLAIaB,Cm,5EFRr@afKL2J[,()'Gi"UUq`hiHk*FkYG$jcSe3490``D
+Jrf!4l90[lD`[5EMafk!TdAqm-MM8-p`-5p[FSURINH@JRQ*dSKhTEK!`ISei!X3
+P+lA-([GalX$-CEQm%4-Up"2UBM*5dThG*ma-eEGjCkC'-$@lAC4SQ#)dX5BlVpZ
+h$-lV5ZaXPpCT5fcAHEhR[Jb''rl,%(($IT8V2UlD-+mY@IFY-pEDZ4%#S@hS1VD
+XjHUB`Pj@,$1X2GqKCBH8ebPCS8$)5-HVC(b2L[QqNhXdh2)%K4F)N!!l-j!!Ve2
+`,,@Vaq+a(5CrE$FLD8SdIZp0NGd1-lBG4MGmba$lC"X(Q&J8I4VCckBE&q(b2J4
+DbQ%3(h`1`UR`h*IPq+"6-@acVh5IpHCP-r6YG,(+HI0LSK)Dfi!$*hrb+6aqeY"
+VhEhAaZ1$ppYf,Xd+"2@C-X-TbLXf8)Z@hVMmI9e1$,8CeX01I+cGP`YjFL,1CrC
+F&NiDYN$4XZabVlklCB23d#UQHPBa%fpp6VDGj[!dUFA1'2V6'[JkPC2J0clD1@m
+l3!Xd-"fdm1E#r4`-#kPfd1H3!"SV"Z4&d)0R*+Q,Xi4N4JZfD3"F`Xj1QI[j$Q9
+fUHb1aj`B#%M)-fh3bHkY$N2"[4D$H0jU-LZjefEBC(DcbAcef9D,r-`5[ma-%)f
+Ra"Ti%8(0iBY-)4XYFri`%)fk3(V4kTXdeZa6d%9e(mK(T[DaN6Tf5dRq'!&)&Ab
+#6C[F'hIU"lF9X!M&FMlBMHaX-GAEL)Lc-)%"B9CA+RkN#PM!9d)Y+4Z[%CRRP)4
+MPe&HckmfkZ9ImN9I*6Gl+Iqj@M-S3R5(rr8jIhP,5lIacM&CRNQ'&#"0b-r08R0
+c[FCF'+"%2GEKU'f4JciK"NcdS*dZ5D(hN8)B5mK1'3[aq9iqZ%!VK)-GC1pQIl-
+%F5G#R+dHf-J+9bl%`5bIlmE"mJ"kQpPjK6QlD2QP"Bda[*1YN!#Dbjlc"MJA)5J
+A1)YmT-hJ)JRj@j!!%%i)QNJT2pim*P[R5&A&R(6p[N[Mfh@*"J3LmL+f*r,#I+0
+'&))3*0TVjdmdUq85CLl'SXT-06YC8bXLf(Rd2`Q+P3*G+4!9'ffZL-"D&F`,8SS
+,M("%cC)iYfD"ciF*dXmZR!URNpH8lK1MKHX8IZ2b4[j#[*8d3)6JBCD6C#f,E@d
+80fc-PAG(SdhN-S20TI$Dp%PiYd3Gj#8YGkp9Sl,(H`YA+qZTA9G+pqS1LSi0&IU
+c!leAkqTCBB25%lRXi-"!ElE32jLlMV3l1@c3""f5HR4SZ0$A1p`rI,@,H*[BS)e
+6I6erDm(H-lD0`SQ4p-$epZRSX8(KbGjXhe"[IR$S'Q2Gp@5$"Pl1j8FbZ+EdKGk
+HUahi@mZf`*XBcPk$$KHCEC2he0"JYVHhTcqhp4TTiSPS@lcEDQ+[KG1&)C52pa0
+3LED&DjZTB%U1F(N1a5TZl@2R+3BrAa,*M9LMBKCNN5F*b4DlL-A[GI(1FGeIjJN
+VCr+fkqhkHIQecNEB1M-KjPUZqpKGjV8L3!5b$*4`#40G[*'UE-Uk5GF1q98jQ1S
+%3'kBEh`mCiZVP',fYlamC@Gmm'N%1!i,r')8%paZl8MK09)dEG!0a[DlZrP14`G
+A@@KPci!CPFjX2PA"mmG#mATcbJk`ipIjGVjUMXF'R8R8l5eB61Nir(,$1h))bYD
+pkGhYB3c([XdXjVC5cFMV&c&4)"`C*5!LXbJ(jq[r6U%l!J"ZRcr+X$"QL*14kkI
+NE'a@XR(Cd%6VkT`RjN1XYY6Q#6UrSZ,NP1bQVh"ZcXMXV5VY[RJXhAkh[MEB[AG
+AIaPbH0B)Nb3ZVjUa2JZ88ia@M0'&Qik`kJMArZQY6jjR&m22EKYbdCC9#YU4h,8
+8*X6[*faDcLpeM!$`IN9K-`&`"i,5iQKTRrZTbpa2l-,N"AUY#BLEH9j1"ZK48b$
+Y3Nd-[eamKmSlaD1[EHk'Uak-KZ-&Tke0q#V,5q@Rj@Qrf%q!)1"'lLr[Y`!LaS#
+V!q6%+i+4&+-`3XRX-#3kFh4#%LIf6&XA#*9k@&55C'&-kl-(6mE$IpPkFd'#pK`
+4c%5JfG"DfVAPL*BKH33&0pNbhpNSAIH48,5P,-`%j1DDf3qlbTP![fbMH,NXC+-
+91R6*mZb1FYk4k9+Slc@F*qD&akCVj22@jq&QNS6MBc,Za(iL1KmK8phJ9c)#S0-
+NMKAh,3@MU6YrB#%V#mY1BbjVaFi&!hJE3U)Q@bh$CVRCHZT@(qD)pqR#1(`L$AB
+p)cGM&bk%`c9+qC&m&SXRQfaC-%ZlqhRB-fq1-IUB[SqV#%5205LT2Z!Lp2l3$Ee
+2(TZEJDj6D'mKK)0d)m9,#ARrd*aXQ@GPA5-a+Hk[pc"&p'+2ZY3`#YDC#A53!0m
+h`JEl%U**NLfGX+3I'Em(eJR2&m3XpRNF%0"F-hl0KF0KEFY$G34A0)b$Nl6#G2&
+c5HeV+*Q!QR!"0-3M#1TU`P!A3-YjV91#6K8+-[ZaU-fj2ELUDL8-E4G9XUd0ecL
++@+QpHL&E"He('*d*5hlI5%RiBZULDem`,E)AVQ3MP0j"&[bDMVr5"8$fhKpGKZ+
+qpd,[j[URFVfXkqQ$k@IX[M9GmXYZE+%`E1S&`)Va4,%hal@#bb#`4-XZSid3FJb
+H$PXLk&*F"@PEc@99ibP@p[1G'Z'1MCXEU54RkVGNp2'aJiD0r4UpbTeCELcKC-3
+rFKQ!2!@b1B5,TU'3!1$qL-VHE+(TPR8&cmVl!HG2a2QHedrXDrH!d4k!I(0Kj9&
+aB8j40[0Ife(ARYf4l)RIeDi1)LX99lEIfebb[GcpihDF3Q5*F(pj#AXUCP[Rk")
+kTH5lQfE''H(K-h6MIIqjqS3EpDdl$fp'ErAj*-0S)Ra9UiNpReMbUCm"YYQFB5`
+VTEUSAdVkQaVF(K8a1c*--6mijMZb5`'N4h3NB$kMmU09CipG[aDlPM[1*b*Q&TI
+kSe"$l'`rU))h"SfG1BS&*#qhHck+3C!!hMVb$C(J,f66j%hL0QLjJjc2Q,ee#rR
+DG,4-j)R@I'j#@QG&R%qJj9HV)XZeC)Z$Y5miL,E`,)@A'&a%X5NIqbS@&r,&X6P
+F&FKrBeB"42M6E&*FJFH9T`fNU4(ZD6U#GRlC2C4LaZ(e1Q*BUl2E2pdp!bM4S-P
+-IdCPZ+NK!%1M+"llPI[c*iBcZ6LZ!j6,81Y5#f8F4,80mVMk&SRH#jEK!'fiX6Q
+%[4NRD!m8MM1C&b$LGPU2a'%U0e03b[N!l5r,H+8j@eY!8m4B(8!Z*T@p5FqXD'A
+c(NM%6+R,3YMZ6df,Jq@G!33B(f!YDf23N8-aBLLfJG+H%++3!2a8D1*1"kc89hL
+)(6kT5YpS(ck4$T6"6J5YJh`%+58qJKl)Iq&qi21ic`!K2qBR!Q)SjFrqpJ$[aa(
+A$&Q'SecCafV6+*IP@9EQVPr`#'(TQHYk9XFp)B%UA*rj*5F0%h1A")0(&*'T&0G
+JTK,ZdcK3f`3Sr#RYH%[&J2IV#&N[50#@U11(q`-bl1Uc@bX%0EiCH-R#pFB8c0m
+j5Tc0'Dm93-Y8DXVh2(c#fXZPaSbb-+CdLJd11d!5F`%lpR"PEEKGI)%"Sk0l-$B
+CXce-T9DUfUD0U44p1!NlZ9#R$jYZ#9arL4XPV3H%DU#&b8ISTSeGkqr94T,$bA4
+5UeG"LF2`*)I@E8KX5R8ReUrIJ(Y[cGG$'pEGTj@0F9'"IUl+dbQ0*@UB$H!TBA#
+JLF&cVQNPZ91C1r$q&qTqI(rh[ENIrfZiSpcmrN(D)M'bq[,aq-GAG8AE9V9(flD
+dVLK04P24`ppZ5d@A2G2fc*E@CAM`bbqh4fpZMhk#YZC[rVmbD@r04imG@KTVr@U
+Up3GQfk&mp2Xa3PY6dHGZDR[kkDHIrI#qrG1&c!#1-XIpq4BG1QLIrQDNeS))rYI
+A$lD3!+imLGbbT1Yc*,Sd*ZSINr@(9XjFK-jrrC!!B8peJla+5"CA"63U(,9Ij,C
+4a)I`Zfp,ILKA)'6T%IRjiCCh##8Tr&r$,HM8RpcArd)N3Pk4&HlIhEIYTH#pbV*
+-T6-C[0GjIhlSS8,Za+h(2rATcX5Cjr(QAjNAkhGeNXb,Z41VPY(DQHIAj)HYL*k
+TE)j(+2j2FLISiHjG%GTA1r-5[[eQB+Tp-[I&R*rE'CcVA0*R"qGb*fkqQ(Qamhj
+drhqSm+GlGTej[YbbHjYi5ah9mTfaqUfG*(HLBkAUF1b2j0EXRhkjNVj"hqMH6rV
+)LZlp`1`EQ6KC@5GVYj!!1r#PP[P*K0kqRd61l&fc+qciRhe[YhibNcLcGpZ*ib[
++XG`V`GlGK"a'pk2(9`Kd6`$G4jGel++hP*I9*39i96LG-dbRYYF+kIk"!$pkq@M
+1Tepa-'Y#8'hHpell(`#3!`d98Q9KC#"0C5"'DA*cG#"f-#ij,MKK,M9V)(0dB@0
+V!14K!*!2!SCj!!0(Y!#3"2q3"&4&@&4dG(Kd!3#RdfX1UK0+qJ#3"KG$!*!'#Hd
+!!0Ej!*!'P2m-SJ"2N!!"[&FbB1YaXTkEAQpHYmPYSpqRQp"-`V`fLr`Q!i$9Fhf
+!6I%"h-S"qLl**TX`JS40N!$##3,j%33#pIKVN!"a"pXRQr`Qq`LD10Q8("9!h`l
+rDMQcmF30Vqfh0,HaG-(6A[Sd26*pfKrmZID$Tiq6C([&P@4)(TbDQ&0CQHb'4L(
+5e(JcGRj-3cFXA"K(-jZiM(*6QD%TE8PCQ-j-KFH@&UkDN!!+kP-eXGZE5bUAC@@
+R9*FfTq&5hV2b#U*,@e@XX6"qA*Za6G8+PI+JT*%e94dKe[QXU(2l,%Q)[L,V+a[
+jV[%jfGb*KTe21"%G$YFP[ed*iQH`J+86T""e6d+ikG0aV&a@f$jGaT!!@8Mbil*
+2YXV5APmNCa1EhE!8$J$XU1`iZQST$Q6"P`iHq`brMihcCB93`9X+)c*e03PbUX#
+08Y@8!ASK"['FQqK#$DZG,I,fZ68aQr!"$NXE1Adl09&mb""AcNAZjLk[69%X#DQ
+9*2*4P8#MfQF9++#hhA6@#'rM-BTK#UmD')`F)U!*Zfd[UFiUl+kN5A+PXAjV[kY
+GY&-S+RGSLIUbh1#PCG,$P-iUQ&88&'Y2YFpYh$cHkp1`VMB2pTP6d3)jd*Nc4fa
+Q!"31Q+X3JqNXKMRHf4L4JJP5@F#mY8T6P'%MGHh)C@'@0YjaKmT*U)ZFchf!fGi
+f4aZ129&c1'3RL&f!3DpX-D14b9c"19rjhK`m4&M1`!3F!bq$hk9%L-ZFXP3YN!#
+bqKBU$##P$jrG1I1ZFJ@!$HCXAl(mP+iR`'NVai)$E*Nk1E3!K@,"6#h`AV#I"V(
+'NbQ!G3pX+3()d6,8V35Q@6f6JeH+PNY664K!I!@*#K#QKj'dDQ)UYBMa!BCi$P,
+1jkIL9-5aP6I"-lb3!,-Xc2$$L+b"2[b2FfY,N604UUP#TVjTbX09C@*Pmb5j$M5
+'6EM([rFTc1c+p4PULYV6Z6SlTe18PeUZ)d-VjcX5V@%-#mJf-5$h+EeNS#"KD$C
+ep'c$AHblq)%eINe!8le$a@'28c4'(MJ5pQ0S'dG3LV**#0*8j&NMkCXJQL3`RV+
+)-Q3e!f(K0lH4'MlGfFV6eNG$0#XNNNpe8RUK9*!!qN6H,PBe!#UBQHb@GJ3%!4d
+!KC!$T5GR*dTp1V(SKL"9&-@`Y6fRhB%3-c39,Jef9(-RJ@N5HcAf1Xc3c@"[jkb
+Y)Td@6HY!)0[[CNJNYc#0$ZMIPJ&JBH-cb$S56%h-(*(p`M(06Dl9b0!XfVN8VNC
+3IdXj))je!jF!I,L[d04Pl[1e2*!!$a85"&Nidak9-L@hq&9cY2D&,8XjZc"HC$(
+VAdE8aFR()Y*,kEQb!T!!,X+#5``mIRhjjZhemFAe-k,'E`5XkEDrG[i$kJU'(BU
+Xr!iLb[q)+A)Z2iek)QCDSl'1A*6rEMP'pEL0j3YTJYcfX3MNe%8bmKKQk2mf9P`
+GI2#$9618$NXH,32C2lXkZHM6HFLNp[3&VXFHbE'`'8bMV)k)339)+$CffDEZIIi
+Ba'i-J[AD2B$(Lh*Q-fH+0ZeJ-e,j!pT*'km0%3pqA'!FQ"#'#a4kl6pkpiH20H[
+(P0kd"8,ZFGMd'"ZTqC6AA2KM,6fl41A8J1E"2d"8'RT*bJ`fJ!#EC8,i(I'@XCr
+5mBKT[&,)JV6QUGDZ'`%d'4L#8YKV5Sf8J-qXkjCQfDIA5bde+%EC68rF@RH3!%Z
+3!"Rebd14G([U5[H`e0Qml,39K*h![)*Eh%4k+5a$GhrK5k`bf[,i5TLapp3"+eL
+X'3iCXT*k5)(pAefmZ@if&)Y+4DFUZ@QThp9!!JSH,)f'I8%c&C43EJXhGFK(bFS
+IJ4T)D9-fK$+ma+L[`h",RFe#)FmlU'ILM5R%ZmFTR9YZ#MmR)9UTH)dL+FBcG-Q
+QLQV'4-G"fPV)RS12DCVqNTNdqF!l%afB&-fjX&P&aqIR1UZ`&(ik[([k%DMYQ@a
+eCTX!@D!+*md@eREifK2i)kKC!kklS`*I18cTYERK2,A&qlm9XJp8Dq`U&R4K&eY
+05RJ"P+YBi0%1&FB[ZI[%3@jj9J&$aGjeIj1*X1NGUp)T95Hh@B(r9kmPlHmqDT&
+%P"+"TkZ),LC@-!1qF'Y$ZM(BS9V!N!!Xibk-r%`-b00bCRp[(@rYUIq1YeKHDLT
+hYV'VIq0LT9XDZ*I32RLr+A#Q"!jEMAIBK1'`&6*"d+m4ZbEJ&i'ph3H#hr-N)19
+MYHQ"XhbcR2$fJ4UNSF-daiZN$QM$fL%NI2CqPJ4C3eY@0X-*KU)'(mLGNFN!P64
+(lp(G%p6J(fB'FiHZ0MYG@SPh5KUkXTD'6*a1MIQ)HidBJSEB25k3!%L22-c4*[X
+kNH(bAl$pMTEd8J,IpP+SfYUVT[Bic'J0*i#J8!JH)kV`UV@NDCJS(a[%PcX15K[
+6DHMZ(3m@qS`,S!C1I@e9rAE!e%@8`(5T`UpJE)M,C29!Ucd0"S-rhYAr*``e2lE
+P-jcrRRXp8#2%iR*[4L-35qD$8ajF0cH'cEV&QpIpVAB"P@XQjb%f4r81Z&(++)f
+!$6R5@!V&bUdXR46Zj`4"&1m*-kE`Vi[#*aN0-RFbA-k9'dX`-SUB0G08bF[NjpU
+a-E(TVp`-rPG-)F,8"3mPZi+kN30#fYX@P$SiJ!!,R&FS)ZihGLR-dHE!hR-Ir)0
+b[[Nb`2!9A2"044*``QFq*@Tr@EfTDjY0"#'3!09V[6*K5QFSINqqRPS-R#JacV1
+rL"8(6-IP4PLck@p*mq36D!jhS1&"8A$-5e,lR32Ni$Z4UEV"mAlKaiM#j)kr+jF
+fFFI1dhaQSY[kRC!!RmDcR9@(Rk`kfPNP1`cHZj(6L@VppFDZ(A&jmXKbaL-9!PQ
+LQ-hY[`#LCBriUj*V9k%'+LIiLaTq)r(DI'1b@Q#ldRfP([#Y&S@VM`5@@"%erP#
+S%m!AM9N-C6PB$4Y!JqVVm3Va'AG0%AjYXLpPQ,Vrl2%CYS!rDTLEJT&!hEmqq,[
+pKbj,FjIC!BI-r#ba#F6CKAbfSfZcMXMFQ%)l522$j)-S8#)e5@8*kJaq-[ba%BY
+HEm@E%(CH0X3"X$(#GrJcM8T0f,,S2``kh8(Nk$0%-*GmDPBrJ8T8YL2[D3-ShYR
+4am0Fj[UAr%A%KEfY1YV,8#1Qe2h0Jhdj55jeDifffIPA8*@L8pCM1-XBX"iZCeS
+#@0@82rTj-FH(!FFHAkV%DT)FCl"PLN9rr6R&FmZ,'4p0VQTmV41*2hea9Bh5MAb
+GidE0Ra9NCA*iX,G(lc'ei1X-HZr+(1kq$5C2R[1A-TJKVVr&4RA`m0'6j&ekP4j
+$rQb#lS`4r1(qipmIlMdG2(Vd'*rMY,mqI,arP)c-,3l`hrV)d9lbiB`rH[$i2-3
+1-)J8Z-&HTUfAIbTGNBBi6[i2!*!$$3dD8dP-)%0[EA"eG'PZCb"#D@*XD@pRFQ&
+`D(PdB@0V!28C!*!2!ceA!*!)rj!%8e4"5eG*6%3"!+$XcDHU%dpG!!!HaJ!%51!
+!!"'a!!$6Z6KqC2X!N!B4%J`!p@apYV+98ilRP,[3[A)*V9@qFMGED%GSkl0Ef#+
+KA%)(RXa0@j06[M)jr8fl,VheQHG*jG3mPr@lAN)*@bKI##GmBB366[LCK#dR)j`
+mplSNh'rK4cIGE,0&`JNPR'a#q4&'11&*0Z'%,A`aF[`NE,2IjX)k`JPI+,q&GPf
+8VfapJDU1VH`D,*c`KC00EKmC,)56@mK[-PR),H3AFJXC,@6"RjkAei!aJ6'fr%h
+'k['bIdN-aZk)CT4%+Q[1$Q65bD4P,*&0l%M'V2&-,0DE@",BVFBbIE%499TV!'&
+[Rrrf,CeGl8L9[bm4Rhh2h,MCc8b"micGr(,@PS[Yb[NcQI61V$8lP0lCR4M)f3D
+LUG`GkF&%I$G2YFH5X9c-%Kh0TIZL1fbMf9K'4e['BTPX)TdbpikQ"U1lM3M0Gk4
+j#U'PEc5@T4cLa9YLJbNpLibeEfJdSd1()-MNlj5UIN3aLaHLX3ra,M$@9X"E`U[
+41kR(P!H1m*b(q)Mh2dVm6`d%[%Dm&VcAih95[AMr%Up@MLP21-)6$r%4lrm"S)%
+63Z)eiEAMVFIEM(F#VkE0#RL0QMCTd64QK"D#"KpSm-%%U*[aeZ1eicApM`B@q-Q
+"!L4d(4pkeL6rCcppI3*H#1klRV'rKJE1"@D%$!*CmBrI0elmr8Fk'H&l52'rT5a
+cK2SCmlLC063MV!pYGam+MA+%[5(&V+SfR5`Z+2DfaZ,#XFF3PBiGE!KA@%TJN9,
+-[R&1BfUEkidlAp%+a+TASmd%RbhQ&DZRXCLA`SG[PC*!@Z8MRND+!q0X3b#PX8#
+Ua0UDQ5%dXq4[T6"P3c1@RdT1+Ab,MmQScYSB#18A"4LMZU9`pqE3+HYhdFBcdJD
+*KISe&S3#5Mh93QbH"QCYFc0lD1EkVV)1@iRh([#'qSXPMi9BVLR@-L&F9b`&8[4
+UU0iffqT-fraJZ1%&pV6+JT[LEe99PYiN6VH6DYV+DmUI$VcME*)9UMB`[ZKa[1e
+i'd-cpSp&Tf++-01$9,0UQ1lH2KYNF8NDBJDT1bKZHA&5L0F5&JKc"D(B!Z1Q8jk
+Dd%cTmCB*TKAHPGdDDjR3Y1,#mJNQ&(kYXM@qBKj13X9PGS0($-dXqP!e64rLr(X
+irrBU'[TH8NdHFPIr99ic)ERR$"@0NS`GE1QqI"De'`Y[4IC8f,cZ`P[rl*089L,
+1`RaSa[aD@A9N!q2'"5L`&)UECAIKea&I&3ZQ&F[$KI084A#)KH*,4AIK[',9eBh
+8b5P%)MPZieaK[Z+aRP6KVB5GUTj1A6kECYUZ)(bJY&IUdTLc'BdAYFT+D+DZMK3
+[ILJVa`kdK)XP@5%'@5'1BbH"@%MDJ2d4ChQ9d+6kiK235b)R&5rTIY*aLdj)cMC
+fe,NQA-a(4"e2b+-5)B*6aA`F,M2-8c@&"D$carC,cEep2G,d92&5R,%j`U$VVC*
+5aIbDlX*F)*8rkh%AjP$pZ"6@GGElMqb$'qCEI)8,j"ALJ1BA!V2Ne8A2P1YB6Ci
+[[-H9b)-$'9A`S1-K#hf1R9m6VU$"'YFVQ$k8C-*UkQqSEd*iZX4dh'H9S1U,9![
+d&5M@DdQHrBT,2L)IUI$T2"('AZ(+heT@ISBdNETEZJY[Ar1!*2C0STDjPP6KlI`
+C1&p!EqQ[ZU)`q%GAQ!j)UF+Fq!+l6XHFQLV-pI$UH-q`k6dMIbCpq2IZ-AlK(LM
+cE[idHY&Ed23Je6$XQ%D(5YAkmi*e(E[3fHiA[+*QDfDQZ,Sm9IJ0jKpd$')LAI4
+1ChJ-NmhcHNGN8i(8jI1BEScSJ-rlSHl'ZF[R+rhY#dfS[qJq,&c8eDHUbQjmieS
+hc*p'0ibJbmj6(b0h&22%(*SaRJQ'UIqcPG5CmYYjY)lklLh3QXQEjr)cAHIU&r3
+*lVV0ScNT(CG'BL2Tc'jKQr"p$4pY&Elk01fF9YX6bkC(-`-a+CA15I%dYL&-E%q
+RFS4,MXAmb83dbfk3!+1$8UE#P--DCrNGL@`fN9)NM'eBk14f5fSd%ah"XLA6N!"
+G98ZV'5QH5BpFB@9pU+J2X)CQ3(J0VBdmeGP14D4!h[VpaZCi)KN,8@iENYPF*U&
+Zc'@5P(9p)BYVfbVfCq@UT,AZpBh5-DNM%aZ-C4)$8NpRb0r9hLQYE@UkVA(YEEG
+j+9K,`6UD-IQFqqR8L$RA6K2,UJ$V[Qf#'9JAjYU!&!lY@j0N+K1VdqVAFl*H$aa
+IVBG23&52(cM%IDKV@E@Zj8Q@C8[eZXi@-1'LX[+FEPq&DVJ1aMrS8'B6`@CRhCb
+6DVbZb[R[eAh"9r-l[QpmB[Q$2Yr`,rRF$rr&ErY[IeLreYX9aQ6aEIIN[3Ej"k&
+rF$NP*dHiAAjN`l91Vc-S++BM(4($$c[FHh@-&%E*$XpL3KlZLaLHl!Z0ZX)LF((
+6B8[%m*5PGC+B1-+X,Rib%M'TLjq1%%Vb-*-VM9NmcHc(2QMc-9%+ErkJiP3*Qkq
+MKijdH+b81IcF$cYqI%kTNE!*HH)j&j4dlBfXp1ICGlc0lphT!ZVi3F8F2+M84Ml
+HQ'I52jj#eF3b+IYD8"Rha#1K8f$VLFc4mK-$3'3N1N"Ec-(XlZ`BiVeU*Mf!H(p
+F(C832riAJa,&l`l['%3X,)[QNX1)jC%4`JZ$k2J8lddL3A&PXP#&b&qjGKQQ9*-
+p`8DC9DQe*`aMc"ShpIJLCV(*rT0l*L1BH&6QE4,Z4UBI,QS52%!c,@K[BLE"Sc4
+C%5pa+HZPcI0BKPhm8qqhh!'lcqP3kZbq0SFL)QT5DS"S8U`ULp5JDTYUL*K9Bm5
+!201BI9HECRJi9HpY*LHYi%lk1q14$SS&GQ*[h!a'&M&6hJ$'dQYLNq&QZ+V1&DK
+e++cdqR%@rrM4RdY@B)mEEeaL%-`@db,VBM5DB*2KdH'kfLEKXN&JepX&*X5YdLl
+$'E'"@F"f2e3d#*k41P,@rQ0X(`A&MXJiBZVekIU8)YGd1IS)G'N5V#If+VDl(X'
+-@AId%FN*PJf"GmjrL"iKBBCdS&qXN!$PT6FTVRebdL6l)e+[[#+`XR1GiHqAp2p
+F+bLfRVhSNR0!QPh@r6pL8TZIVH`kGlh&Xi@CX6-E46AR0hl!kVdh5AHYClq8IbQ
+rrT,Xl`P%T"949,EXGGRZCeUkaS6SJ(pG-faU%%rIqDT@3&eRTDKiRrF@UI18$rp
+XAd"k`V@hkjc&iJj6CE1c'5&LTPMf3c&5DbP8%hpLl8IRMTYXIZahr'bC*me%9YG
+ecQJN46"2P3,[h-#hIGFk2Gm1-ACkMd$6XmDQ0p'f6I(+IZVrY9jid$rX1$l"fP+
+ek(QReJXAJZfbFDh%*rSY,mkL*rGXLVbN#Y1EYK$c5YPIkpD%+LZF[Vr-kUfbaVG
+RK11EYVf)RYi$4a#M21`i8@%FqSlK`ZhY'aGj[6VM5bmCP0@b6*SX*8fZF%'6p@@
+ZY9@Z5D'G,IFaHm3NSfYhR@0lpGRGL#-!qSaD!iqrhQh+lQ+*I0&2HRCKYc$1)[U
+@XhKk(5D@S,qIG&qR1kD9b6l54B3ZQ3h(IBUTGe2NrH@Eq'C8`!C4meVd$FaPfPT
+LRLf@VQe%54GK3kLr!(mb"aM%cbGH-&BRAPfViTAmbK5Qfp[K[MlZ2XDHmM"X4jC
+JEmbhQjr8dSb9%dlFalh+f2f%P,TVaF"p9afkpdZ(+PYe*P%-6*Tml"E&MUKH@Id
+pRl)dXTjUe$ha5HZU-*-M,Ke"Hm"2'MQ#0S"!&!QaM"#dKf81lNP(ecN(+dq&BZM
+8B4S0G$m@bLlie*&3f9kYq,G20B5$`l34p5ca,%@&"95i#e-XpZ98AC&F!KF9#a@
+I9DUYE"E)9GLQSaU+p)d8A,i#HqmpY%8RYaEITSc,9kP"GqVUX@Kb0%ElRjhTc+#
+dMM,*0(BdY&ZKC'iSNC@bZHJ!"%+PAP4QmVfr5f(#mbEIM6@)(i5$',X%0pQ42B&
+i!q)(HMQ+)U'2jplPZATL%qSiiYQl+#GarSFjiJe%5CirMcTFLSMmcAMGH$(R#80
+m2j`hfU8hk3ILB4eKH&p(H"m&CVb-qCQk50HDS`E,U(d9&$$BXR$-[DVa+Y1'-LT
+iTD+'-U*"Vj*A[V5--9cMCL8G*CbYkX(H+f0QVb$H+#-HVpE$6TBaZckYCkU-k[i
+8GE#-ZPNe9l4NpqXBpTjU+@28-Z+D$qiTBaj3V@@@B"N4[k*B%rS(pUIS)AbM56h
+USi8[Ec8qdAAPh9b["AfSjYU&41AQB[(h8X1Tp-k8G1YRfdDAAe@6XGkKD#BQi34
+X0"j2$#4LUCbNCK*M@1STX5acK,"NM+DNUe4MkH6S5)`jldL2d6Taje!k@3(aP@3
+dQ8c[M!dZDap9NiQ"D#iQdBE3%dmRXHIMR3e01PeG6XE6Q@%QpZX&S0dPd`2$X8&
+@dk%6!K%I65ECiNl2CSPIRGJl8!rKGSaQGc1ac&2GKYC`I$9[T9dSE5L[9&R&IQY
+c*S(lYfK55Z4L)e@JJqmVZA)FP"e9eA3Q"ehXh"&JSDUCVC`&$mdEqrAj6aCaa6(
+&l#R'pQ'6H'"03(Yk$DB%ED%&Xi6f$&f5D00V8YU#GT*I54bJqiQ2(QTe`Ym(i29
+l-BIXehfqB+!+-(rX[qTcZYi"NhiY8@(kl4Zd[krb"$I4c"QhC`c(Tl56r+jPXQ8
+6Up8[Cc!Vf8+RD&BX2KYiarK[XhcPZL-dFqP9I6DY62(B&QfBpXG0[B5aq1H+8fX
+#TCISRU$d#hl9-8eUARUf'@S@TmSe2+"hVq)8G0TrXl-R9IU&D)REJahpd-AJ`kl
+Pj2*0I,UHV9j!b8IDQSqQbK9i+IY-*HZ5R01(iVKI`DKRMCKE*R"UCJeYehQaTB)
+cCPm!K!8RdeBq+pViV'JMlI[dA59QC#0V"C1XY&N`VEeFlm6XDii[!lq&f#dDjR&
+SUH9q&KiaY@,h!`dX6R0SjZ+6A*Y$ZKSA$j!!'[fcI%pJdc@X9&Pdm*iJZJ*`d3h
+BCe6m)eC4[6ja-R)Deb`C1"TcpNHcZ#&J"TZRqBRR--I1D(fiNF'4)DCaaG-F65D
+bF"1Z6#iqU'm3D-,QmrTV9MHZ")TmSi"M4,S9SBV!GX),TClTDAAL2Z3`lcNR5$Z
+JlG4&92[4@i'GJ"2FfJQ2@rZTVN5a%DM9T*5(EXUSNKQif+&hR)rL[1-i+KdRBN*
+r@8VcX#JU$9GCai@$9eQpRl(+f$TJSVZAZ"([+-GhbbQY$ee6e),)K,KQZ2%+cF`
+2FK8[k(-harA6,FR4EE5c&5I,p3Ie6[b9pq!02Y9Ae'(jUMUApRqZ+@1Rd)'E-+1
+G8IqN-XN"i3$L*%eXU(mVZYj0qQhA[ijIkFm1[%e`kE`AZJ4pI!08&hKRFT*V&T'
+2(0e@kq`k*`Lc!PI0#YAS)XX)rD%qSMlZK4"Ap!8-kea4H41r[i)l#qhS#pIF1Fk
+m958[[[+jNSBp[k*kV[4rl+f&$DDYq0KGm@KdT$%H(F`diP@4'FJKL2&J9f-f-jC
+TM#I9hBea3Jm0CSF"(%Ne$QE54+E'+8JKb!j43,6ChBfj6(B)ZkKp(JXFA"$4Dq#
+mar3jYB4p5[A1U&5JkD*8Z0)GDh48VfqjVe5)R)'bmh!6GM2c6`A$I$[96Ge3aea
+ZaPlIDF0'&hf[LHU$(qMZE4pF84ZDqIKZI3q$E!hmX8rhara4lSpp&Ap!(j[5`,d
+&&Mi"&H'aePDRqNrPI@66V&XV+Z[fQ#*Z199k&YfTT[3N-Npc*IC4GrVJCA3RNHH
+Rp+kd2%bc@&a#IGE!T','0X8HUF9%99$XHi5)P6*a`ai$[&PhaCXej%dXXEl0$U)
+$X89HpfhZ*JH2SR3fJl1Bp9*[CeHMe*ND302rl,#EHFiFV(ZC(q)qb!bG'cH(F)U
+lV(a%d,qeBf-)m3lT0cKD+"m!I"Fh3mMG6lRk6jK,BS+9FPeRfCmMpa$PaRr!1L4
+Q%$QK`1i#dc6cr1SKmpq`1i%l3$"46Q*E*BAS`SHIHTF"hCRBQ!kSe3%pXGaS"SX
+&cY%l)[A&NNR*[b-pQR1lhECffPG`V+9m,l3i)2IV&q$r$`#3!`B!pEeGbQjYd(Z
+G2Cl+c,bLcpFQRFHeAkp"jhAQbHQ!ReeQe"j2AhCV2PX(l$cZTYZebblDEGDEfAZ
+,E0[+,UmcYpHahUkcKpZeH[ZFf'G`fpZY2CrdqDaViQ92J3#ZkfXJGhZamTEX*FG
+KQfe)`&X)*'!%4d!##532mH$4ipjQRIh+hml,-[0@6RR(SY9DkD4*CkRAjq9S-iq
+ILh$(Jja1HVN1fY5Z3EGiN!$AD6RTfVf$cUiGKlZ*CqGbCYFQZa2Z01(Z#,`@1h"
+R"blJJP[b6'mjXR%%A-J#5L#""*)$*I"m$Y5J5GqNYfqBIHEPGI&V%JqHH%KSYkS
+$Fd#)Qp3h'&H-iUp'r$ZEU#S$p*hqeE)h0G0fi[FpK0`r6)MkQH$M'U,j+[[j)N*
+-i8IfVeER*3UYP`[qrbY[VIXqHrJJ-5L5&!EkD9DE`[ZAdUNeIppA4-LPkA)dHe(
+(rRq,p2rR5,lire[bGI6rrc6`6I(rchdcRrlrb&1Mi[rrDI5El2p(a2r[eLTi6Qe
+386bN[lISa(rcG18$p2r2HQ-lbK6kp([dbZRIpmGHHiL)rpkLDd39r(q,VT(qIq"
+PmCm"Y[XDaAqcqL[eX3U1kbX[,ZrM1'iJ8@FF-1S5[9lMBV8kF85RfZE@6GfPrEC
+h32ecpB"hcZ0j@eV6URIXff2mpV`R%RpZm"'L!KVIEH#*3U9'jhGMhRH68DriGeD
++EK")1jYqId5Y9VrYeLflIUTZl82NSBF1iqq4UlrpkAe',rR$Err`@jr*pcjNTkc
+pEHKf#-j55h1$X)ThZFdYDc5A#%kAa@lMp6R&189Q6@lfFSmYZlK!SlQcc1lSGPV
+D1pamER&aAKEpeFcAHcSl"5GICA1j,@k2@q$YEAbeaGEZXH""MbX,,hYb0%DVPDq
+MTI0mRH!5R1Z%eKb0TPi3H&H,dq*`dkUS2b$`,@CR+ppQGiV6b,ED@cbGJXeYGQ-
+Q5c38`VlaPp&NCr-VK1jQ1ffZbq@bY0YS8hNq1jZqa3S-@["eY0Z"b@@EdIMV2(D
+hJ+GG9VIJY+(lrF*&I)XGXal#X-EF[0R@bRYFQ0mH5jXlfqkJmfNiA6P[jae1Hl[
+6h1RL+qfG3KCIB@[0iNhQGU(4)IjHDep[bf+pV"@Xr"UKfkA"kZ%h2D54C5aYp'G
+f%DpVd[(Z$X('1p!pIHbhZHhd4GBP@)8@fRp'X')LYZ+3!+Hc`9l@BACQj'D+TAI
+Eq6D,dqAQ-ALDb&6"PR$"RPEHDRDjJ4(YV4QC+)`K6MIU1phR&0E44QAHdb@E`L@
+(K#if'l-D-d@A5e@l"F("ikmK'aXNpICK`md1C36XP[Q'VF`$FQL0XA*j(U[@([b
+'a4kMZlI,Bf1l4"hlrEZH,j5fMjVc4C)4DC9G&PYVUAYmIX[#MlGLdU8#bm8#JfE
+RQM*!9EkXFhc99SJ9aQ`IeeJTeN#AI9eRAcIUaHGjZp0pVS('A,&%6iI3XJC2+L@
+D`V0Fkh&B,5eQYr"qR@DacRl"D@RVAQS4V+er+G)L&ZPVYELVF6H8+qKH8BAY6U&
+0F!Uf&X%eYZr45Q,R`hIDDeekI#j$kj!!"+fppT@!JDbZ4PM2$T'kd"KkJ$UGpKT
+2C`C+,Ji[SUN)m1R$mF0&J8AD,@%5RLA$V'Z6fP@8)2!+T`9JR5k,ESr&kXkff2L
+P+&0SBIGB#a0B8VG'+T'Rkc"S4dZh1'K[hHLiELAJSfpX[PS6rk6Q([Yk"SRGCZI
+BNX9,a(Z@2+&9kh)klHY2iqGUUp#'`D)eHZ"UeQFZDUAV'0d-"'epk%b(cTfERX,
+!9S[(k-QZq+ci5PGM$RD3!-P*jlZK4qKS")931EXHQiFPUDZL-&Yh9"2H0AHQ01Y
+aT3bI+48eDcY,#@LAVUq*GT0aSkcp5#Xl)VJp6SD9Q-[h4M%U(@M0rcS+ec$9G9p
+T'-$"2LIp'"HacqLDlh#ERHjXD99lV(DAN!$04N8(29SBGJJfP!#GXGYUEcCEqFV
+54Y!1Qi9e1",cJTY[m6Ka!2')ZY`Y(I60CR[,QJSXa8Lja@beYlXdV4DAf@UeVkq
+LMBpif&E3IY$0MAZ'@4,`&NbKd#@&)e'ZSJc+Q6DbZT-8biL`eQ0a#Z!$E&(659-
+1Aima%`&ab1jKK%(@CPq[d`$!j&BrD''hJ5h0@p(ITJ&6-Z,'b8#PK6@*HVl&EE'
+kG(4`G4Ged(IGPQDhd-9lf$YDk5'l'pHLF!P8(jh3!9)DCE[GBffecA@cXm29bcl
+rAVprQ!0J@*5Z-eN&-pejR$@BhJ%')Qlf2@EaJX(ELHN[d@QX@%ZF)RNA1)(m[be
+$KhQG81CaiMiFAFC@2irG*SbJ@aBS3--a&"FG3l5JE@aQrHjZRKh%G4S'+$XCGZ9
+jRG''"@%#+NG""2FBVYKm&X1dR-PTlh5il4EF8M`Tm&Pp@*XHc(fSJJ*(KXkq@@4
+V#LL%,4ZadUmmbJ*%GGRFVH*C5HcB(LbUE"YUM6Sp3UM)S,d9Yh@Tb#i-AkT3ReS
+P&"q`fpV&+AG5lJd%@#MDEF96TF5LK`!2)!kZ"bkSh@$&F,bC`j`HJMLLeI,RHKf
+GdF6'pGXXES"-reA#UDfYBfZlhJkZVLipR9&VLh6,"*Z`cTa9eJ(5BEGG*ckEAQE
+Ib&U,Dih,B@i4q%)p,Yh*LN)RSF3Q[K0c'I4ddV'21HLP(p#%$icT[NZh!e9fP`Q
+c%J3dm[NV&iM-NkM'@acL#"SrQU@C2N#UUm8YPPZ5pr(`akqMEq)KYji((ZqX!cr
+j$8`Si5P!Rlq-X%&DT"Le1rlVq60Q'fX(GqPS"lr1i[,J0,c6EZm8&h&bCIf5dXl
+Q25lXF'pSDlpl5kC,V08hPQKb@k,e%'iK$`SrVH!DIqcd64NijdlFE5N3Ge0mUY$
+"dBE0f1fdHqM4MXlT5ZaZ2lHrB9hP4,'MeqdGYVD'&L#(MhlJp(QIIEd!UZf3!)Y
+qG$1RV`0Q#%0`ar00625"@b5qMd0RYNEB*e2&[l&eE0qfLReKDrJ90%AF%e[&M-R
+@X(2VkE!$5V,0Y"bGR-2LbK-YhEfQA9`[@AM3,EJ[qTXKDF(b$VU!"9DmSGS02-T
+d@&U&m!IDdAdZmCZKcMTDR(DV9AIk85Fk6jjX0lZT9+@!GP[0kbcYCVIGU31G4V-
+bV'j%mI*(&Z$39cPkl0Sl&+"$)8d!")T)'Uer'8U6aDF+EZN,+ep#h(MCkEeGp'6
+0RehHG)'9SafMM5XKZflHN!#`RS,rHUZj2D[&ES1JCa#%&UNVk%8Heh&2"lYTFP5
+hdc(fR53IrUApqU$'CVH**j-H3i2G0@GHG0'VUBpHR$QkSr++2l21"1FD`bH$Rfb
+)Rj-J+`iHH9QF'Vq[UkS[VG'PLk6[)KdkiL20[3$hHm"1VallJNqj[["hImrTQLD
+$j8ElF1%GNVDi-'GDIG&6qF9CMD9h!,"Yk9+TZ@)KVQl@+Uk+iCQUTJ"95eBdUYN
+SeNY+f+VMIBDDK6j*@V29h#Pm@0#mPlZa&i)HH['0Qj5UPp#,-)e1DXqEJ,[FFSk
+lY"`PJBd@d@I%cI(TURSplYGe4ZS!eZ5J1JN%9"(Jcf+Km%A0305h8c3iDU$ZY1J
+K,K0JjN(0ai9%pU"+)DCb45e%K#BcmUN2FqK`GeX&RHEN%lSXXF2KbEEQeC4S#Sm
+fZS9185E&5lFN*dHAT9YU1Gf-&&&Pe)NkB&j'dHE*3Te8cF16NbVVF(bAUMM+BkV
+%4Y`KS38!"d-ekDfb9&5&jGZ&!jK2YRj@NTj556i,H6PZXZY%0T%qEa&P#T%U#ed
+af)NkLF3aTVK-`AFE03@dUeZQ%bmMGe(kL8cf6RFPkJR#9T[f$4@E[KN8`SJ!p0G
+hf()C!`ikXcaj+%(PJ,)Pr#6bl3!J+8EIkM020i4a$,9MXDNRk1V`EE)Y,C4djNU
+10kH#6Qe[X0AeBA1Q8+%p,DR0"C!!lT*+Vh%i!%bLMf'D!Cc4%!kRD-FD`jYPkQ'
+jeM46KCrR+!P0E"-kK#Ik!,cSYE@,rI3h6LDSIibf9K99+$m#FID!N!"9DVH[SCa
+RM`!+DkLGXU$mC+1Y$+56U)Va-95S5cqUJA``$aM+0h3),SXVbp44,RhT&&SkkJ3
+(,XrF5V-0l(UZdHE`J,6*G`LYV&Y!F'kPaG8L$LiD6R&QY)*fC(K$'Q55$CRTq5F
+m0Iqp1$(r9QFF[I$MMYiGlL0HJY#mh3Irb+p'U4&H&ImLE%dbC9UJ8,Z`5l`dET8
+5J,AVe'N2V4%qm8,JGaJh2ZZQm"Hr)IbpZ"Pi&@m%pH13!'(ij!C`,4ik[S4Kkba
+Sb&6$$VF`aXU!)lL3!'HG!&SlCrq%aqUr&iIThqS54#rm-N6[$[F4,dGShLk*Ie5
+!LkJ4hKcr)Qa3-QADT&#l[&%&a!JhNpdR%J`,`B1,"DK1FPVhABpm84A,Xebf++Q
+Jjd4&dHpf+TXLh5Zf!r*!ZAfGI$`R-S*#D9!pZX[K*T&Ra6hjK0l@GG(GS(FE1k8
+[1YGSI+@a4LJ4925jdk,k(1L#,FieV@AL9bB0CD,d1DMRCCC",*pl6aDI1bf!cie
+*hD9mSQcAI[[BP'fMr@c8B19(,+bVH1+baaLe*frBeU"m`qih@ce#KLLSS`FLSPX
+XDRQPrY&#6"(D2T1fqA!PaL4hVRmZ%&UMBYUD[AHIQ0(hQSRR5+di"Y%D44J18DQ
+9H*k'C21F#Nq)43(PedB&MCia`1JKhI$DSbk83b"PN!08M,--#p0#2LhR1a"CJET
+#F$[mp@J,YL"[3$#0i!lXLk0G4)@TNmKE`QNUkFA46U,#e%R*JS,ELCmGlDR8!M@
+@H&C`9h9MMp!8k1JC+5896*UJ[S,0"6GP(KcY**3eE33[$,!rL45YU+%6`3)d,,T
+aK&$-)RK9@&"&NRD-*0G2drrBS&(@090D*#FE`!h,,f#Kda@5Ml26caG1Y`ACZ*e
+eQ#e,rJrKIKi-5F%0+!H"1KV'%934bXJKY3Z%XKj4r'R!ERH`jlUPq25S8Y1,"0P
+qTJRFHakk)p0rXSR(G$(qUCN([pY$YiSj4AEXF#2LhAYU*D8j2f-H*r(SQ1'8)T)
+&#V3Q'efe`)&kFB@)NeqmL1N`r*9$CE,K(8XUbmE09(BVH9bcD*mAB1YCbGD%q0'
+$LI@4F)1JaEj9DV+k0$QQA#N0dEC$Jq2pVSGE4MF+'qd,0VU"Ki-(cfUA&I[0-iE
+R$+SS!cr@bAbB,*A0C6SaK`%'TbVI6T!!3leHC&X`IIlXfUCja"FY3)3,"aQ+F9R
+KMP9hGAp35'5dGRQUbP!B+R8!@a[FNL03m+NMcK0PpeR0&R%r3A42M#T5IN@c#Lp
+2$LcZimQ*&HV1M+`LmSQ'3Rf0&p&peqfEE+Zi#H0p&HC9A"8,BBaAeUZ![cjq2N3
+RTQZ"RfI+U0Ma&SIid9D5ce3UHNq6lR+f#qk3!(50r6qL'N'Z[B24HrN'HcdeHmK
+V'Xc0iBmlK%ll1U'LbqddRhUa@6"6iMCkdqNd!d[Y)c9rXGY2(f8`Y)0S(V3`DeA
+0fXQ6T"6@EHNC+6dY3$40ki1cd5Bqi-0(D%Yp`RM1(6Pl(&20dA&Y(VHEQ8E`jFq
+XSZHmp,8VCjSGVqCk)cU(Eepcq4UM&r@0b9,'er"Rj,0'Eb+[06hdZ4(UD)0JGBc
+a%kBYHLB#R3-GC[F55Db$b`JAl`!ZALTK,'$mCp(@-%6f!c4m#@ILaKdE,bCE45[
+,$9(K3NM"@A)DS'ESc!33iljAQ$9i)4c)kY$8(),a$+)UpN3jfQU3!2e`%lc#BNC
+Q10%b$d+pQZHVGG93*,KZBk-rZaQZh+XJJR1'1eEr9&MCZ)aG@ASQ'kTVB*C6(VU
+pP#P+rl`Ni8%d%()#QKV$6@arU)3XN4f%9#d2`VAcl#$D'CA"bX@TH8J0Th*e@%B
+2a`HL,jqEL"8UMYX4ZMV@kFiHc4iY2&P6E0p,N!$U`9N$lBd#6KQC#S*%,RRFX"`
+@e)Db,ZAPJZdS%eR&eCSQ-B[MLMX#PH)Ek[%`DRTU!0ZTF#F-$GdGQaQYPGa@[0M
+a3ckMbZqmC29"cDRA-S(YPKDFI`)9KEIMcFT6D6ITb%ThNj*"VCXmpH0aeT[HdXf
+X'jf,mSPZ%MBHh!QJ!ae#abmTq+&Ta+ifR6k,&k@Ij-2-Uma5Mp9D5XQkB4ZSKSf
+ZHZJMF')c4QS[@Y"F@F`dKb-VM)!!$Y*S9ireeIhZNX9K*p@q9[(36G`6f3c$N!"
+Sr[!1l4&2[GQq2PZdY)$#UYF+b4G6e9D)a!kXl4dH'paYqkb@cLcd3f3+cBBI%*F
+JGQcmc2+Bj%%TUc2FeJCfSIj8H9LcQP@JcpBHPRY3[C2j,*S(-`Br'cS!RaZ0VDX
+ci9'06qN9E)!$JUhGhC%4'TfEQa+E-i1c[6+q1,8"FlFjr&TVCAFZIcIRY$l!8hY
+J"q'!9TA$+Rih$(11UYNFrE3$-2Db')SAADMh3&'+FGK(m)C&F!08$pCHL(fC+H*
+4C&[&mNUHP2ZLIR(d%ejQ1d!-U#`m`9&5'Df&%@'2@jGeXJTeTG@0Dd*3-T6YQc"
+(rjQT5")CM3VYSKk#Hf!A"bQ3!"JQ@9Be-S*T$SihP'+'Bm)36E`NS)R''6TK*F&
+A5D8iGIAePX6LKhUDD+MA6[F5Ca'mRp9T$kk+BMf'm[%l+fJT[X4qNLHXI5HR&E9
+QPY1S%3l3icZIe5C4226lIRDmdhA$Ad9PiSiL9a`BZ`m#HQ%M$LjLq1be#55QJe8
+bVLhZF6'liZVTUfcAb@IME$6KTX%!,mr`ViPkaY#%hD3jQ08hdl'mXC(I5-2T#&1
+,&(b`j8Q'&+CLj4e+LdZ$GT-6qTdIad$LDlZ4amdSqNijmI"*6*9@Re9ZX!(2M,E
+!U8Q-ZX#4+jCY,UJ2%Lf)1CK6%E3JMep22(DkFSk-h5f8[H[8`8ZhU53ZUDa6bAb
+S*+US,P94GP9@VKaEVl3"jFV*"A2(If("5SZ3!1#8[jleCd!l"hqNGLc#Rl@EF[Z
+TpMCUJ22Bd)$+B@ED!Nr,GQJRSi-S!R-+`c&L$S,*Bm5-K3HP3qX3kG)$cYBXFBq
+UHf2kKJi!a5)"4&pE'qe"G""Mm)"MY3#UK"f1qQ8QE0$FEQQKSMAX`5Uihk-p(r*
+JRpAMJPmqf4#69*(Hj-FX3)c8c9"!ITpkU#3l1em8ElY#8A'924rE61UNUTTF$)d
+1ZaaJe,bQdp*Fh80AMqU`TbjA)4miRU&Vh,U4`m0HKQJ'&T0a20UT&AKLNV)TVKq
+#"q-J)cF*NjK`bc,qm%@IQL!k$C1PiVB9*P2iQU+[aA[e#5&FV*chcq8`-b!BAS,
+kF,GS-+Y6Xq"'r6PGXMB$Gf(h+U#D'bF0eadbIX#P+rbd,#qHFUbFLmBFRXUFSaG
+aqbN!!ip(,2C9C*!!iMa+'EdeY`8PY4L%QpNHGN8FJNeG&MiNSbc'",rcHm,Ik8T
+Jqm%Yp#YI3ZCqp,bkq)AM2Q+4!%iJGH[VY$[#EjRZGQmh)f)!pl2GlU"GeSIlPFI
+iLIUZqF95+mi"6fCL'l42',&00eE&,G9%-X2I,,9Xh,+iYU-#q,Y!TYd0@K4D'lm
+Rp0QZbD[a-H9J5fbha5@KeNXl`J1*9S4H8*1Q%lXJA%VfJci9eS2VZZfJcl)FCKq
+F,0',EBlk'N5D4"@c@*Rc(caR"Lb6[h`H1KSV`*)bC3A@rD'RMMH0C!$6G(4LD"b
+dRZ)MS9Sp(C'UN8*[Q-#iVJSkYD+q2`VhFGUPZEK@6'e%3UK6LiBC%8ZZ3h4#GLF
+FFr)h0Rj!Kj5*K)cqk2T&Xk3$$AY&Em`jBQZc,qr4*8D0m3hQGkAej6E6!0EA+mR
+5&(BhAP0Dh))J63q*ASqMP#hY9a$65GdJ(KN4cZdD9aRI0RfCBV"[-Tq*M50G&ea
+qqPZT2p)KkRBe+8`8B1+j*qZQ@p"*#eN66HiT8#&NM3UDM-!V@d@T*5LmN98"HML
+&93+eNf-G6hJ!KX9lKTmq&%`+#'Z1!bFEV2fdQ3b*ZEL%KqPi%C*8)ilT3Cq2)K5
+[DF!SX!K'DCU6R-I)[C@mA"R![*S8LKICAP'c0'66Rd`GdV#3!#!#G`Uka[R3$G,
+31CZaMLriBeANcdHKF!*%l%!81"bY)P*$F(PlUHJIII+!9r(mmlVd809&ZKI'XB6
+Im[a9"9qaYE!0Z*Xj0T'a%e)0CQ5a(,f2&%%m`kmJmD2@qBH&Z!A)SqqJU96@C+9
+CM&rb@U9S`5-r8BHeJRl)Gp!N*m)Yf%&l2-0"4G3%iDQ`SQkGm(dk+X#-H9&KcaR
+N`bhSGFS"RrFK@!&QjACNaYRQa*h$c+#0m91DlY-$c0E!B'#XTB-P(T+*V!)[k*S
+TBSS&dT!!P%E1JaQA)`hfBT!!0JSJ8eSK)f@1jUiTALTE-Pl[d5XpC@!abmN!D#2
+',e"2HM&fCHQb(EIZNCY3*3Ck+hVX6$5CGSHKfiB,*"rVrSei@KCH1Fp*&4[4"1Z
+-(MH''#401qc8PjNHp`TYCJ!-Y5kh3,L@*M93T@ZN![hq"2i(0kMTY"HiI2*fkcV
+D'S148A(aR-LN2F2Z8L6K)6fk"UYCNARZd&A1h*f[kQeRVe+(T8rEXeRQ5dpP3,N
+l'L2V*N`p32BLh3FH+FCbfC!!B[)j"B$@r+IV8(@bI1BjY-5&l1N3Nm'KB0e2`fm
+(Lil4jmI&4[Q,q-*&VM8@Kh3RYG$eCRe-$rL(eNAX0*4(L8!)1C-LJ4$A44B8d@`
+45"`-,T%RXa1LLFXJr-aUE'Dr@dSRX&LblSlQjX9$ia6)bFe!@5i3f[,)ZjAUB95
+kJqUQQN8lpa3VjZ['EkNXlApdabK9CA(6pQ81KXR@LXqMSE!+S&SkH4`9CP(591A
+#kkLdMCT3V9iZ80JN5DB`Xdk&!P%$+PbD@TR#mkKi*#fDl'#LKZbea+1KLk!0eZ2
+)!i&RkKBR-#eb2qRT#9BbTH'QXm)2)QKh`D@4Yi$2*'YF!G)$%pY&9`%-cL6$EJm
+i,mH,D8'qa$K8%IbCkGXLI0!Zkl,q6hre1TiD!-IQd@N!"ZXjkBBh$KT-Y4%pS`q
+Fp$`HV*pimEVhjkb*!B*&"3MdGjiK(3c"i'J%HH&kFB3#Cii`(MT4$fj*iNlFZkr
+eicFXEXJr20U4Z#i9pS+23d!N3Df@HpDM8i*Ak6+YeQdBQmmZ@(GJj`GJ33I4F%l
+d-1CI1Gf'(Te%Y%!5V*ZYiZ$5P1K-CXYYCGf0,C6Z-Ph&kbNFXrU,[aJS6`F`PU9
+ZRE5Sb#A`T&'#6-QiGq0aL6e!CMa5+3T(,KqYXB["I($ZGQcJh(&kee(1I4Ip$U"
+2f)0i`YB9P1P9GGT-[$R,CFXb(e`@p*c2#l9K`0df%mdLU&XRiTS&(`431!EBMRB
+HhAZ24mJifRr4fP'j,`-L"P"-lSQd"&$4D#2FPc'(Y*!!J%X2TN`F(8CLXC!!A29
++5A!@CZ8P#-Fe1l%[Lr)c6Se3J!fQQZc8Sd4UjAEN*MZ*K"5"K&5jh+5k6%&qK&2
+fHaKTB9#CmDqKB5`-5T("4S-aeUSmNZJjH#b'L6N5jBBkf5+!5)Z06bY`+$FZFaC
+j1"`+*0,%pEke"AR9k5X[Lck'J3LB8Qa4Vl@pLMAS@PqY@pp"T3#qc@de`DkSF'Z
+iX&R08$d2R4DXh+E+,r[AmX5S64GImDr&bD%X)J(LkL[29#qA@"iZ3Dq,qqY,)A0
+K9!YCc,UX)K$8kqK8kV,BiaaMFGR*95%IclE"F)-NHrbPBL)DLeTSKm25SZMiRNG
+cX8A')qe%Zma$S%e`Uk-S`!eiB$*V&qebZEb"J52ec6TAfQFF1&,GV(1jZJ,"H2Q
+%02$2*f)#QFji`jJ9Yp'%[0$([P%Qh(bR$"e-8pX#c(IEVcIEmE2,'Rl3!8GhF%V
+fHp3GZPR6fJS"Q#q`A@)+I92ER1eQQq@Ude',8,Z$#TTmVbEJCbJMkS,Ta%CSilR
+-4KM4U*MHJYG)$@ciH(1Rr#UT'06N@&!Qi-M8MLd0E!-jmA@1hG8XTXMTDPGN54"
+D1+VBJ%G`86`66S"YK$&U`Q"CL*N)4`QZq%22hGbLA''6"9$+SF2TRVL+'![a#%0
+90PQdQe&Zh&PI&A![P#Rj9[ZM0TKFH[kLFZb1Rl+mlh`2,8S22c2"laae`GmG*P-
+L"JCNfe5NcQ&ICSB2Qb(2Pp*Q4*aMZM%8$,kjl!#`BM6[R5ePF&#*Kmia-NLXae&
+44EHRa'X8hP0)"I2LD!D)U$"eNJ3"j9l'E,6Y8pdNaDQI1(#)p&-hpZKBfSQN2(9
+8b#bL28A2MR99E+&',U(,9*3p4CVJQTA'qSDar-rahbcr-d6j5!C46c'3!'KE#TP
+`l4bL@r"9SP*Y*G%r[Cr-8V359INL9LZ6X)C-l2XZd8EI4Z+ZRd(8'LZCqFYAfG[
+Cr6Y*h*&@NV#dK53qrGSRiA3A[,Q(6)P-*G10#mPdr8`b*6QI6+R,*90DhL&62#q
+6+3-4C-VZ3M,PELZCmP!2QI,#CU,*2dDQ[(S[QEM[66,Ppj'XMiAUT@4UmJ#CHX&
+cC+CU-hYcFIEVC+Ta$[YfcMhVbG5k2@4UUi*-AImXQETY$CQkedfQhQFQ8arC6DC
+q2ip-IH00-R8dRY@l*1j@NU4E6@BGHj)N&Ib#*&@X)8QImT%Nk`b5j%85DZV[KKH
+*,MqGk!U,L-kB)YEpLGY)dTh(50+$[b0*hiNPXljG(*Ve&Bl$K)qrQI!c#dR5Mji
+Kr'IdC0EU-T,dUfG*dZK#NUbeNH6CL54jILa*A[CMSXhi(NQqe%b5V38NZHF#NRc
+6YdL#4FekHI(Y$T,mi)-NqDR$*2A%CT,mFKj*ILZH6)[i(*Q@M#MALqH3!'N,6@4
+DG4qCGZ8GC*VM@M+YEaDCGZ1Rb,6pA@6DebiKdajrJ%clrP9NfXqQNQR[[N#Qami
+MdDmG*00R6L,6"5@Ch[8Y-RhJ'f6klNJbr5ilQIl3,@6kmAI*p&G+b26ICT%8eDF
+*hlUAT#6X)#PTH54P`HdNT@U8T&aq18QarT'Np%`KNhpq,dQjlLK*qG*25-VK1dM
++d4G)bJXDN[)Uk[jrHmJ-p80NaSaEbBcF#$+M3NeQA2B!QG%jJmcSr6'CFC0!CYc
+C5'Cm-jh-12imQrY,KqD3!1KYEj!!a(mH*Y2Va3$E,rheSqchj92hNCRc,LBc&eH
+6QI9hNTPYl@6QZTI*c-hVb-aG@M,ci)0NjS1[NjP2Y*'C2la99L8#mYh99I80BjQ
+qCq%ErEk(T"%&2XdU)BU0l$[rcFdJ5+"phPEkDpiL-[PrYhm@-4QA9E#qj2[[Ipl
+GpafD-ra,+bBrB09Rh6cKkUmp[U6XZd1Dr)M5R69I++rmb6YVHYZeb!jqpCj!XXI
+lCS0TlqF+-VEqX2kerKAaDdR*2h9HmH5hlPhHY2mUa+qZ6`fXF"d`hd,iq3q@pkN
+#dBpdA+"4$C4(r@6'AGFTTcaYmK0b3AjJbF2NZCf1Em92#bMEAlUZIc@fi+(%`[l
+RpKXLqlpFJ$jZH$d3Gp6lrF1m6aY6bXdaEL@V&G(NLF5)*iaHEd6T)9VMeKGp#Er
+[+p[K2+L2DEiJIm9ek4d+cMZ8H+hIlpdACrVf(06)jISQmB(5LrF4mVM#S&plV`i
+e,M@UlLrLTX`Ej,l4M"S0lrMUYfe1bKhDVpa5qjaqJ6FZBf+pHR"T%kNQT)VSpU(
+'NTF$+jTF@EPHrC8r1KDGYNYh`(aGXZ,TmS)[IQ0ZeAA%qhh-pGU)`"c0VX)#mY2
+qH6UILH[P!NT1T9E&QJHmph1'JQ(dXE3`-1d94A,4S`FZIfMfRQR+16GFPP@RrRl
+ClVkPL9Zja(8R8+24'XLkj*G'id$6Jh8aq9mb0UFfAhk`SZEab*hFNe1[[Il2&"U
+DHJ)V(DqR&[QEV[V5PA@PARl3q1801QqjFp+-6BS[U(ll%ZE4[0QRI'8lVr9jilj
+cP,c&qELbXXlBl@PQ,L%jYTIFkd@[VIIk%NUrNcVPUr-@rDTYB9PZJ1Zqm',&frd
+'3bShh-[R2B+pAalTLqEHb,JT,@eCea5ehRG`lEcic%1*jDVR"Y,8U9Vq11DaFQP
+!ab9UYh[eG6a1[U[Qp5TL&)T58M$&QrP#RmRl6qKMe8!JUIUYiNGA(CabeHU$Rdd
+ZRmeIC[G[MipmbEmPEL$"G!`eVRXZN!"cfi'e6IHpH-Z9'dFqCAlepCTp@CAl,le
+CU(lTN812r'%Ij[V+1B(Tk9kqH1pX-L&Q[rB'Rp)IFl'L0p*(Y#Vb4,QZ&h0Y!eE
+p$G&U%lG2+e`HPFr0Q9bj)e'PhlMVZkEq2XA&D@qM4VXLN!$`dhiq+C02f6e[ei)
+E[0a2TeqQH'dcLG2Zd&FdhHj(VfZI$@4mkrR8rKf1aAYRrRMZlU@EkUUqUG"9c2c
+0TAee2p$YH4BeeUd*6&MpQpRE-[M2h2pkjB,G[jPKQ14ibeqbldr*YaDYbE[PHG4
+Bl`j-,I(VY%eDEIEXR6IGF"IA[$&D5e4D2VkrmM*YqR1BadeQ(cIJRAe[j[CNGAT
+Ua(0(SbUMNVfNIqGJJhqVN5cq,[CM`ql!mJXhG4IQhc2echIi#pmjYV'Q0l2mHfR
+kmSDGMcrZA6b-AMIQ"C)Rq&-6Y6aJqSd4flfFD@-hT4jZe(TM"VdUP+KCrQE!XZ&
+AHar02r(E2lf`rX*h[[I9AaSArSFM3S0Rj`mI[[VQ`YqMb+Ei3%5-2l@!ja1cQb-
+Qhq#0-'"QEb`R9BP(rHE8p!$QXH9@hacLQlZ6jhGQ+%J%efmfc)ifD1mLIZdfAMN
+PRIDkGE8[BPiJp5BpRfJTiqEFF0$FY$&#liq-I(jlreC1HcZYXIdA!E9fCqiMT'M
+U[RJ5S3pX-6fUi)NUm5QYGr#SY[@lU2'U0B'D$F+EVb5FQ2VRKlr6Z2D41fURCl6
+Z6jarlIV[[X-I[[XhD'5(,a#GiEhR1%Q0(e!SjR"HVP)Cc3qSpQp+kLrQY*XH`Cj
+ec!JNIIATe0ZrFZ,5NT(FU1LpZdZjLk,ZXQPIA2,GTipZE[mZqZL-#%5RFTQlpRd
+M2ZGRPX)EI)qZ9Plch%j93F(arHE[N!!(MU12ep`@52l9YAXV$lheQ4qpRK1eIp'
+@e5[jV(jViUG,I[6SccF,Y)r[2aEJe&jqXPHIQ"'e)m+ADM3SSp4H&Hp2mRla#D+
+Lf(RElhb,$,iVM[HVq`DfDUq*bdSe0R1Pb8YhUP82a[BQ'VHKaQYM!qUR9T0%EqZ
+8'40mNfH[M[$&hf2FdDdLDhpafD[Ah2pel',I-`'&DAX-fAjBRl5e6h(M9ak&QZq
+X!#PSf$jFpYUZrR[4ajjR!jaKKeCVm#FQaI4aLUeQSKa5*kNM*T25Z&5Hh)kjpLr
+d9DQrQD3R[C(A,HmMC'ZU3I'%HX!3m8@b0$U6ep*lk!kE,q(eECC%IYk948[0mFC
+HAG0Y%D6ArCKr#e(2pFqV3)fpLEi*lMILiZiL&herbMb6qA"Uai68',@U[#3k6EI
+AGq%pf)q"@*pb[eHV[9Fl191K51$f4h6%h%$QU5B6lcl$RBNkHU--rYLRl"r3DrR
+Y@R9-Ajaa1jHKZ*LSbbp4BD$A*DAIJaV$jN$GkrpFi)NlFHADd[JEFe@G@9&AkJl
+f[YaBppel9Kqrr5h8f&F3Q2j)Ak*@H81I1Mjb,q%M-UE&ND6H4")jK@6Zm(d609j
+h3@$D3q[VFqriFr[,GraSU[$VecXVA"QrH5ca5jrjc4-[(VMM#'BfmUf!iXLp@Ve
+[[R*JkUV#,lr5'p2JV0cq[G,SQLh*!mVEYU+2-8GJAZYD&Hl&5lqq-9Pl`q`A5b-
+6e#qdP(c[40VMej(qQp((rJGpTfVd[&Jk-8(p3l('QmPQ@Z2!iF!&ZZe*1p,i,9Z
+@Nqdh[$eS@-Ca'IeT@p9k`LATqY$VSEa!AI[[2*k,!eHXEBlr3N*jjk+ScqRHf2[
+&5q[f[$P"R(hKrJHM)0prIp[PJhF5FP9m)-FaS185MpblULqQG([NLpp4TT)ZiR(
+[pY8hmp[Z4`phIFjRDlP$RhEYlkGmq`H+JCEQ[D[+(SppR#pmqQMVVhqQhr`#D[`
+!#53dp8rHlYZAP"5CTZAfaa@eF)TG$H@mAefpNE"pI[dFhiTZ[eCE0qLHTTZhr!E
+9j#C&Y$I$S&,T[(R4IBP$U2%'Niqlkh#NeNX-QE2M#(EeaYN*DXi9kc1VMQmbF,5
+2Ip(R5llVm"5Y`FF96EJ"`eaML(F0p#k22Q`QkJV#q9$MlMYmbIpmBNSFliX[Z[S
+jXTh-0NbX*leV-[CCqVdV$FT$f,%hAKZS8m9kq9Gb5Ice!kBEKQqU,$Ac4Y9[5RC
+R',imlpG(d0S2cJT%4e`d8+S0m0Yd"`ZLffC-Vfmb$"U8IA(hD1qki`X2S0FIqP5
+Jk[KfdhDp0frADSA51kH#,1F-a84P928I3dTm`SihG38@0rR*Y,X5ikriT`cqaIC
+0MamLHdfU!YAa!qE0j+dEd-FpP`3Ze(Ue#BI6iY8aUDBi(dI!DjbpFUfAUiMI3R3
+$`2Sh2a"3m(PUr9kGGXZ%lFA+ZhT*i[0EMKj6jcl#ThLp[qj$Vcpm98$jL$0Tk-h
+@Z0fI2jkBLNYNrJqH1(UTHZdM'lAq'r,S[If@UB&SXRA!0,Y2QA5,34IIC%bD0LI
+Ga"'GTP`GI6M[GjM(@er`AFEG0Q!Lqa4l(U)eDVA6jV3HcrFDSmXVSmNm1[ZhcI1
+Yh0lAhk#k9eRb(`fk[+C8e"J`a4N0dDhU+M,l!FcM(C0m-h4pMcLi2J9kEGV4T2c
+qY-+dikQE9,6AZh@daM8cIC--IEHE5&pmd5dQp2T$fQRCD5BMD1229PSi9Q2a3Yq
+%1Ae(6BDY1kli@RRHmfE&CG2QT$NL)JKkADR9,F!m2ZlfAG$FTp$bIA9*LH@kSpk
+q+a)bdb*IMBl)E%[U9-fHM4SrSJc`*9UIImU*,PpmcGcGrCXZ0kEZhkZkmXLPII@
+Aaqpm&M9qp&Z"K+@(%lAJ&Lkj*LeZc[k%SU1FHPHL+T@S5hZp1JUYrr)EJHJdIja
+AECLQRj+TE0)D9e8@aB"lHSHIjf1f6k3lrFl)3%aKrpi&Mq[A(CiDU6h"2eE&+CB
+I*,N0fV6k*dhAMk$'MpPp1IU"64''RAQVTKcY1d%fG5LeDV@LX(aR`BVPj+[hSFD
+2ha,)5$0%hf!%43pkr%E"H2P%"pQZ81m`&+5TYkIIK"Srm@jJ8V2r1Zl*T0bNjdR
+[mEQE9NhmQEE5@k!kSQrlcVC$Yk$'ZdS#d3TrES1[+I'LH-*9q)cUf8DeZU(Fk1@
+,hL5k3Fceh9Qqc!Pp",2IAT436J#cjbUL+9Rj)X,(E6)`Q[)pRrCPaKa&M4Y053N
+&#PEM*E4',H'j6864LdmrZF-AAHP6VcfH'Tm8hk`p2YFiS)biqlL@@1lFIk4AUk#
+8m8rP"@)Z(ZCbAc(PVDTAQRiB10#Kc&,[8VPlYXmjZ[(S(I6'HprY[TM+e84j3TY
+SZMPQfJYIZ6p$'DYZ94AFY-[Rf+Lqr3EJf8q2"LEXmQS,pUE&[64eZjib+ZI9arK
+VF)PR5DpD4qIa-jF(X*drU$fUMGFq6cBGEpkdDbZ[AY9IS0TjT(5VGpq0U2'[rKL
+)2YLReHmPF8RaAbG(dmbAk5bV-LT9TH3JMjQp&I0ira4Ip#(FVQp8aDfDpRA&dIf
+$PbQLUc0@!qqcr-BT1PVMhU2JcYiC&hpR4Pc5@jPTPpdHX8B4(IZ'5N@m[YQp40H
+,QIhVRrLU&,HKeh[M[eAR*HDQ#2Abk*5"rV3*TJ1+*e3EkF`qF)F[ZYGlXSmp-Cc
+k$G8QiYe,qrJKp2&c,rLLpGkG5BGjIG,PLRK69Q09$$G`jp&(qXMHMC[)*4XaMjr
+Aq+*[m0i6IfI(2EZGfAUM,hVe2#lfLI,I%UqqZCHddEhrKEe5M3'p911[Tp%Drh@
+XaLrZm@Q'r-PDrlcFSMaYKNR2C3lIQ+3ZMI$kqD50S,$4kbmp&*LqpQS62rb(p60
+q[d%Tl(reXSXILVfM,A(ZR+iI2R$0krF$bcpiDb$D[L9h6kk[BFN#4fVYm-02hKB
+A8rBSD9rjDYF"[qlRk10$%ElScqh,h@1jelhBaDGqC[L&*frMPTGZ+PpEdIfc!pi
+F@Z-q0@VmB2%HmqhZa3XcCYHq4IZiHINeT,[LhCmGk%rr+@Tmq!(8Z$Yh6qTKp(&
+[kQGqKMjQa4ape0"5mFkD9hhTlk,'4fEiSRp*qhLSFA%qId(Y#2TB%e2kG2635X[
+G"lETD"rhrpKACI0QlTPc,fV8&ApQ(fTF'91hb6$dU,RS`(E@kbm,k28GGhmaeAI
+*BPG6DZeV)dpqQFie1p5i2Z-AAYe2-IYIDI4TM2lGLDD"q+)m4H5Ub)M9'k2M,4$
+[[2%!(d%Qd*[lSqQqk0&Y"p$(cXAj6AYVpidmqh2-ilG6KaSp4ErB[SrfmD[2qb)
+8abe6q2fUM1C*A*cAq0K'6MZS)RkPYTFM1DrmjIk(PN#qrrkKjXpG3XKpF`+,1BF
+rcTHSU0bRi,Bh(mM#HG&"h(YZZ-1r3qAp1QTpiY'!dM$3Y909P&KbZlq1mrCbXcP
+$0+Pi6N-+P(V&)kKarHE!PF-GLXd6PX4'EPeql+E0[jMP!&YcVq-jGq'UVdelFMp
+Ur1BqAlUjkp2D4aDA*1e,YKlAEE,m,&pK,28FHBH[[*dIf)'CI[*L@Z1bM%e(V[M
+#E5r9E&GX@[%99maJUIYVIq)VdrR($k2'[kd1A2$,HaFFHI$!3qr8hR"jDU#h+UT
+HrH*5G8")5GQdmm+MQ2ZRl[40H1A%e0bp"a,HRI60DCQqe!l8q!p,B`m,USa0C$E
+P%AkVhFHP(Nl4HRP$N3*+K#aRd+9bd8fUITl%Ar-iS4c,TerfC3C1*-EYiq2qUC6
+MZ5&MD@3Ff5*%h-Jh3k["Gq!$kh`*,BIR*'jHRAL4VRKVdMbZH%+#HV"&0HMEAr3
+L)3pMCTr4qMMqm'5YGcZ*LDR50Yh$98DQUU0E9(kHH`lDVCp()`mqk%ZpkYkEY8h
+2Gb@4b@VL*5T&2SQZLGMLJeMK!F+MMhrhZNqT2KaViRX9X4%ASrNEba3*[,''km[
+`FKFD`2RAN!"(fRc6R31@a2f"['p8hPE(hGhNZH$6LN1EULUjVpcidri&DY6il9X
+$LjrS)((qP2K9Qj05YZFFb&5S[4j9iAGhl6F0'hUhSl9,AJfXqY9K6b*hm-Sm4G+
+$9AF,aK@YDBIl*`P2(6Q58AVJejM("Df"(SMDrXF[m)0qrrh[4NIrp*24hiq1AMh
+kUiI`!M@k$rZZ([hGIBmZFLfqqYh4EmjiGRA2QTkLRrcLfhpUIf$K-mH@r!3eYMh
+TZq$G2jUrYrDYhcpdYH9APPrGeI1T9iYr029lSjrq3m22PMj!Dr3@qRVqp1kFqr-
+b[[fR9aFZ6,K@k%KGh(rr0AHpqm@R[aTpkbqTCZ'pHhd6l[Z*CpX&$e`jr`HH,`b
+p2,Mdjm@*YpJ5,ehkpHq8ETlr*[Vihl1%[pIaT5Z@P818qLlaqd*VTIJ"1YUcF6I
+Pe@3UQ89)C"r8L$8N%DV%ZBSlb!bbJPa)rXcHd0mX%SYI&m"[JVl@NaM&6ALrL9c
+-[8kL6YF3f`eqXBK-3*eAS8lqE"dfij!!+ZFU[NCFU2)QmVAaMXQMJlrr&G&`K*Y
+(rTNVj63m4dM+1q!FDm3UNNJ1UK"04(@,ie5i0)NIclC,E&C)PJ0X0(U3!)DP(N8
+LPca,kamlF'SH)I@81LKk0q!,f6QlD&*Se3DaNN$I*Km5!SEeLi''M*m"`Y"NQbh
+0S@3'8IDT$1&+b%3fiprJ5XRhp4MX1PGiaMICiA5hrrdCD`bk%8Yl"r1b3@*4,'T
+pjL,i,#'R#jbPf([4[c&$*GpS&jE%6TLI0@3c)bVV"IEda#9H'qG'4brp++9$KaI
+MSQ!ii)B@9Xi15,p2P$G6QPLG'Lk26++l8jX+I,L4lNjfj16ZN!"2e-cZ$0$F&Nq
+[$RQ-P9H(Rk8'V!lhmXfeLDBcZ6)jSU9)AkXR&h)MilMV$(Ai96f*BaMpF@"dm5T
+3jaakF3f*4jdhNC[`lbr'keKr(1RS)YE4hj0qEZ&i*E(Hi4G,5#,Vk#r)69cQH*e
+JVk0c@X#UE@)65+UTBBpdG6'Y8qY"9`q1epPJAamF9DpdabbNXm+FhX4Y'+rQGq3
+5l01E-+9hSkr#40R`4lYj-DkLGf0'[djfMPp&j2R$hkmKda6hSmUl819,ipdB,b#
+Yp",@cjI)%I5Hp'-FJR4#Pk'RAdIRIdKZH@mlf$Q)Aq6)$&ER[DK64!E[+#66[&a
+a(hEM,NcqFf1eS,LSdG,-kGV4&GJJfZ"IiYD0Gq60MqM9A"**VX*I&hV3,`@EMCV
+$FJ&rQ6'6h,+A4hM1$MIjLc5I`NEP`ZLB%mrG(,YQFr4Dc8P`Q!["A8k%XabV&b!
+VTaNEI8k%L0a*p-P41-J&YcdAA1EE005[&Uikj+Xh*#@rbL&fa'"RYc3S1J6kE$4
+A"Zi"'($M+%""6J&%C6-d'5*Z!lEU9ZGH[RHAR"Tk0c2rap6Pq-b*GhC12+Fb'LP
+mqLSi)&EMbpX-U#%#Z`de2j@C2N-rDi*jIP#+BLqZ4lDP)6[J25FQVmK9PU)3T95
+54XS1QBrErq@UDKJ@L(8FLSpQDF`dYCJ%*1C"Z2bP&-10S5%NAXe85MRP9QP1fc)
+MUN8FLb!A-QE@Trk6VS8,PS*eCj2S(!aXa4@+J-Q%JX5hYEK@FcbFZpBd0p2Gc33
+6cZE%#%kjF'TFP$@aEp&1P0BfGc*LE6j,Fr,VCZ`faP$)c+[G`(q83MqB4D4*h&T
+49bqpTScZD)HrF4`qI5IT1[3M0B$34[U9)EBGJbF#jKCdMPNM11DS@"j'M82Y4ZE
+%Q@0NMRaV%JI+#60cBH1Jh%RA(hNR4QM!A%f"B,m(0b$X6[!aSZB18Y5b(jSdmJ'
+RbI-"@FN0@m26LLdET`fJJMjYH[c%K"G)AYQJjj0K@a2XQJVPF[rl'AC0e+kN&QF
+[VeJU&5BB[6!$M"p&mbX-Dc)#@N0fFcF,@aLp03k`1*-BdC3BP)K'hik0pR5DVUF
+bPNhQ+[YH[kFMKa9$KYPiUhDYc)Z`8[%bLFqJc@+JhVhLrT[ib)TR2[[e1Ib3!!R
+#-0K9RNRD'ZrlNFNF5GXDpm&[TNHXCRdQLh!e$86CVrQSIE)'A*86RAh1i96B5`m
+qALXIDLPa2+rM&e'ErG9M9ZGLH%Eh)CXFFVB(E"V2D)J"$i`b5mkSaMc4KfJbfHZ
+IL1T+GSqk'Ll#4MN(B$R6V,Z0D5%j2@88a@Jma+PGAAeBAGY+d%kELV@5I60qCX1
+VM%I2,&Hdb8pmR*jL*Y'CB*LH&%#UQrk@$Ra```k[$b1HVb1B&l%,jFD5!M2EC'S
+6q*Mm!66P,0Kc%k(&1S#'BLEfJ#NQSG"#0I+FlE3MfA&pX1jL&&ia9KB%[A,TZXV
+N"Hc5Nilh[HY-hf6e2el)@#k(3XMR3rNUlG,'Hb*S&Mr"6[NJ2Li6''1ah$Ylfc%
+"k`PUQCkXQIhXB,kraN[6TGZXPi*M!["c*bXKi5EPBdCh8AdDM@f0TS+rl#9QTkM
+T-*Pc13jI(%%ANmGI&-Nl1*8DiZjV9[8q-N[q3TTI(Vq,&Vlj#dA#p9T+Z,VRm-Z
+eP'cq`T-m,!SbpqTEFC%bCNacNF@bLmf#b!SU`D`VTT)HB*pVPQ6'1aGA3m8I9qa
+dlH,4e0LSrC6YVGe-+MTPGm[PX$Ap,5bRKAbK"(K*XTQ`39&d#+hB0&E4l1qaNXe
+M*Ge'(b[D-PDd[0aFFM+FZAQI(K$+($%"Y#1N"1#F3i`Qh3,b%q!8dFJd'RM#cG1
+(9(GCiiZj$Cm23Y2QX6"(GI4!VDr"T5j5!8cd$Jm33qKGH63HJFC%kD&[+&m-,#4
+D*(ke9(b"e!1m25D1,e9e1eV-iQh,K8c*TQ[V#1f5rKAVaQQ,G"iZG8BaljE@ADd
+IZm"Gp!AG$j0RdF4HU%6(1K9jIC,-P35*8BkEUDMXpT0Z-m83i2V)+Bc`dk33Br@
+Aa&iH4XEP#G"b,884pR`+"eNGRelB"QCbFVJ3$&fJL9#VR"E4VQG-Eh9lA0h"P*3
+m0TA(&6Ha!k0%04diYfVakG8X%3L[U`epc'qFLAaa4,c&*[LM5ADCc-9Pb[+V)1b
+TLE&6YiCQYZ%'SLF+l!F[b$fGFmGjNN[1flT8A9ESbN*KISrIHTqURlBI@f8N8eT
+&&iYR#NjS1UBl1b56'&1M6DU-"iqXS#F"&3P+NG0*KFG6%@SD#J8j%5e-aN(LJmF
+%j"CRCdiaTMI3T*MS@BB"3"G&GkF@r6j*9S90@I8)3+6`)6+Tc@CNa0$la"3a*j)
+[-b#@3@0fAR'@#!i(a!9YJ@mQ(KM21`!Pk96LJA+!JH-K#-B$$Nc%'5KN(JK#Yc#
+@Bl%((UGQI+)"$TNlp2p`-Q'jBf!jaFVBKi)@Nf40$(i5)0FJR)XXm!4rii$[qG!
+#YVVLmqP,e9m1i9SY(drMel!rAQPkG-VaI8dCZh0CZBAkV$cpKiNV*`p@,f(!A*e
+XJHK8N!!iG*(C84I$KMQeQAa8)GTNq%`hJHP%q+%'4%jJ5NQk4S-@f58'E91Ik@-
+6%j[LU)`)3$c+1Vf[SpX&C4i*5!3A0ChSp#9RE!pLN!#CbS%dFASj1*)%AUS@,+T
+CRMkeaU%JTQPXBmqLd2(BDA%f,Z%f2!Ued`R6GY+8d`)BP*Mm'$4hCH4P[CIm"5(
+i"-406[JAD"&H8aSLL!2(fKeK4B3,Hicr%(,di0p5ph*XV4Jaq9fldqk#E!ak#L9
+$$'T1Y'(,"Gl#KS[l9JbUDE5-D8Z,2kH63eTBY'PNV)kfb&&3IJQlV4cRArJ-1[!
+QGK8&LqZ+d"31QY-!`2H&@mqM*bPH#(IFq0-#)24VR-RcJ%XLQ1q",Udpc4j+G*e
+p'J(b0Q5,FGSKLLIG%"VQ5j!!)`S4d)i)VF!la*mN`,!,3GSNJmR4q@Ya@2*e9Gl
+@Jl(8J)jD2@4B#jA$1kQ+q6fSqH[6LE*b%-6hUMNfH1'Qd0YXiRDF$#b6YPXS+qJ
+G9@+QYaLCq6Jr1R&-6a`E%pG#FKr3b4$%p8%VjBd38KP!rVP61N3Er'l#QLF#eBc
+cMH@804(Mq"dq8EBd28$LjAHlc#GZ@b&+Y`0V&fN'RL!&!i3m4`ZDQ'Ca6,L'E)3
+[`h'f*hJB&q`KE0dCX[pjp)bJXS#G8HH+Sb8$%@Y08R%5F4N4T@j@-#2J&N@h3hB
+Dk3b16#VCkQS9e5F5@JXE'DX#F3!qU$NVQF)9b,p$KrBZp)8+SVl#T%e*kUF5CV3
+iHGYMD0b9GZaEUI)N1jFNfT%0#S5**`HN'qa,Y%Q5'#q&J'MVDB8-')G[1J,G*RX
+j2YMd![+0ae[Qf,6p)m4D3'EY'Bh%@1KcX4Gl8(eLA&![q0+M#GhNefQiFD"*(XA
+0&km&KNcR&q#0DliK45l*$89PCB@0rR0951KGf[,r)L1F329e`'jZ+CYh*TJc8-K
+h$b3+MIl"FmDk#[kbfNDq[V'ZBXP*q8dpbqG,iJ65Q1EjQYS'i!2lKS"4Z6)6Y36
+,ePC89c48m-EUkVrF-DAi`NGZQS,kmURcK&FJKB$12-jk'+DM,(lda`k[)Yf'BIR
+5#I3%,+B-i22#*F2)D%8iD36(L`A'%191X'e5XSL+IYYp%Yd*(3YVDLEM*cmA@aY
+Q9IdfMr6e94i,%VcUr2PM"G(#*MK!dcCiG'%i1['SA%M(r9c%lI(BIE+'hmLrr#J
+R+Z612pQV-TUQ0J6FR!Rc(Hj%Ncf,)0,&cl+!@FbKP4i3ap"!'2@ZVB*b(0IM'rF
+bVmL[L2(m`913!1&Rk2M)HBIPC42A,Q@Kp)MPQZDe$LjUMk[2SR4AK@KAk30VG!Y
+V,39KNA5%GT9Q0LCfR[[UcS3Y-G"MfcLD&I+*))6a0H9MU6&0lMF*!NX9`6bC-if
+RTmR35M#$Q+N"INq%86X94Fdd$!&9k,eq,*bZ[6lc9"88cd!(3bRdmBK(BVk"E93
+A&-8Cma!8$2Yr($!(hBa*K8*J-&%Scq-4cR9E5V(4lV@$aj5&99Fiqqkb+eLP+kb
+lDaN,(rGIIlTGV2S%"[c6bN[AMbpp+'EKh5dqlNma)1AcFb1cT$4AThHV0(!J6pL
+KG-KZ%b0j+rXef&ecjJ@YE2`Q"p-bNjdeabiUqG693MhfmNa$SGr+IUQ*AHVAMVL
+'l,#1@pD66UbCq'f*PjbEI+`Aa(3(,2CfTaPkkL@`C&FaMb[RE"aS(p58Bj8Z+ea
+"mF#A0(HPVLClJMePQC23T0l'bDpdm0RM$YdcSeA#MMH)ka[-J,Q(`kUP!M4)$9%
+Y@HN5"J96iL(KP)BTKS[633r$5+1FKlCQiJF8$dH[aJ*i6EC#!jYfbJT'-"-GkG*
+9Y&*1B48AMZaP5Pe&j+fF$qb&SfF(pFT'Ek&9Z9DmF)ZpQSV#V@46&TqfM#N2f$&
+lb[9eZF!j!0!XNPQ[S`285TUH!NGiGKlp&,f1,(N!,emkLFHI4N$P9kK`Hp)B5e'
+FNR*%4['!kD0FT5',XEZ#5Y9IIl)k2R*e9e#3!)(5,0-l[CG#R%Pl1K8N(i9,#R2
+`*eKL8D2bR$UM@-&SDlq5Q&KEPZV@X*(I"Qcf+bkU1l%`#ED)@M0iG4A,fL6H&M+
+4#0)&T[82c86#Ql"%jNfm4G0)r*38m4R6M!"ra450eVLYl"jZPBR14VabE$r[p5E
+!VT5"ASPSKNBLQDi$aK0AchRG1bY@0360(&5!FN62%imk`,kEGaS"d-Gh4#&EF()
+#H*@1E!-iV+H916a@Yk%bhVajRA"',eR9XIPhVSX)V3`J4)pNJF5GNq'Jd!`YS0'
+&TLVF"`3C'efe3-Ikm)i["Mkk[RQh"B%m$"#J&Kq0#'B-L2!SH3NZ$(2)kJ`k%&l
+3N!#3!,F608m5,-)a[Zf5R+K1-QCfJeeQXAH8cG[#(qFB4Hm&KCj85E$5Z%j64@A
+TF$VVA5mcXS[iJKC,*NrD%Zhm16Q@XBeJ@Bm1FN4Bkl%!bE)EHRM3Nm-HJ2#J(9X
+%[3Yl4ip3QZ,B&Yi9kVc80ZdB(db#$65UEV66Lr6S8Y5TJqUUDNTVUGDGHj!!0VH
+"ec""aleQ`KHPNT!!)*DUDP$cQE)605F,VUPVU#UVVMKE8h1S6jE&9EUYZVULV+%
+U&)NhQUb2Acl4!#8(4@+#cXU+qUVkXae%)GBR@pKH@IjKHCYkIDVlVBe'5$Y,E9-
+`pXQLR49PPA89TYUk[fbP#pFq@Ib@'P0M+H*5EUJS2e[G"h'[$QaMIGPIaS@`lP-
+,ZVfZYUbLSVbUCYPI&L31Y$kjAiFE1&QqSk%1TI95SFH&fkiBZPX2Gl&SlKFG`""
+&[Gr','$FF@$-"HJJ1'i38,SS,9RR,UG5NDH[EAXIR6MV*[E!+6i6ShNjN!#PS*K
+8Sf`8YlH`G1fe+eG@e%J!TCA*Z4VhPBP`rqMYLBplEG6NR+p1#D`I(+SUGraKZmf
+*qpPIl42A-r8CN`l5Fd*#2-qVq6D2,H@d2i#cJ9D#)AbId(!BV#-EBQND%T`UiX&
+MIVp![GB"Dj4S3)2Ap2&5RiNAKc[9VG3dYB!"r,TdTCL5Ph8qaQSGjMBSKPG'je-
+1f@%i44YrK,GCJhI8Sf9p9TF&5Q0-b+#f0k)GS)@CP1JDi9-U3&2F$dE[@3JHAef
+`4aUb(5BJacBALc9HZ34h6M)89![9U`@R1Vcrj%Y(aRKE"IC&N!!4iS-'UB$bc,B
+!#CH*95(6cBQjIH!Jb[TbdTQ2Z5L9iiU(VU8qE8ea3k4[c3(8#35"[,kV$BP'U#m
+SH-D!Y%aBSRLHET[2H@'c[H6$i'IYkK)!B@XaRhSHR`#,C*!!(!8iS,DL0GiJ@-'
+5KL`#K!j%P,+P$KdYp)&e")329TV$T+UHBLT8i@eeZK[d3'DDp6SkdVUXmCDF%KP
+Jq4VpTfpZ`JrpVrA6qTcLR!@IbXXA2q6i1rRFiZ*m[VkU1J[Zf$dj(q5K3'RS-h`
+F#LV#!3T-G),A-(IQ9c$9MRQ$QRM6)%h@U1"$r)+i8UAk+jLN4fE*$JL5[S+!!dC
+$Y!S8X#1EQj0(+jcDMYa5Bh9paDNG#41"+6kCq*Zi$2bQ@4c"iJZN$`%bG+m**VT
+Dc3jkPr'G[+'-)B$k,TMMK$1qB("$SQFpHMIIa+Q'db-d"1P'XES["rf3!%!Re%c
+J'&f("IqA3FMj!E,bpV63LSKI-k@*rXN*LiZ*k-V0%9,V`RLX@#`UPFL``SaL"jl
+`0+C9rFMe0*(Xq4c!Rqj21LfSAd%-E83f&(I##1rU"PJ-AK5b2JZYNPrDHNVB%-"
+J4b$1!#)LHX5`NmC"'D$,jDp#T,$"9F(aJZJk`"XFka)b5#D!DYac"qYj#EA!-Pc
+)6V26KVCpBT[`bTiQ-QQ,*QXYVM8Z'Z-'JafbG)Uq4rAdZ-'Sp'@[C4e5ecF9m#A
+")QTDb)`8$"'hf&["LK3m+$!9Sa1MB#YD4*m4eF2A29%m0+$N,)4G05LJB8pl"cD
+Y6ja'9K`(JC(dSZHEplJQf%9X'HKpql%jI-rY$qPp`i9Qjqj@JBf"#l!(EKh*HBi
+$AMG+B'p`hbc+1*hA"U6%`Fad*NbcLVBk*#R+-LGN*LRSDd4Dm)&VD2!FTG"*QQ0
+)6q3Ai#H"kXE(8#(LX+8Ebd[R`S3akK$TR"XMJEPEN!$m18V`jL5E+PC)9XFUb+Y
+ViM&AJhp`&#Dpdl3++4K'R@B-R+`pk&UKhC'heS8[KQ),+TC[&&"%6#G@N9"f)D'
+9mQ%FPSkm"p0DDQh&B"4`5YK(IJ"Y,XbB"R'RJhdLlNYKQK$%FSiRFCEX[9hUSYM
+iZR3)6HL!6P)PjK$TaeN3&9Fqih[6YKb[9qe$VMr&,LlQlqB,rm[3HZd!CTS*NiY
+dBfM(YKNaFNS2Q&r4C6c'-)%Q@"m8a&N6Be3XffA"l(K18F)V3aIKj+!hU33$,CU
+TqU2&RA-#1FTB5QkVJT,0[iSZ'*[X`V`fK(9h1b8pTSmJ8kpk)m"*G#e)13NI4+q
+-*5MN((c0Q`Epq9$*bU0P%LZPmDPif#U8EmKP8[U#5fFB"!@E+Ei(Xa3UP'9`ZPM
+(6aIRRPXj@`!9-j0Ca'j@UF"XF+R#9"[4!#FEL@[B9Y)96UG*YBFZPc[JjEY&2J2
+cA$0'G*[`c)9(b`IcT1@PU'P'HYNMCMZ+`C%Z(aYlT1!c3!k%`hc"fIX#XJbTep"
+eYmKFbAC*LeDGj%dQ89%p#%)PpKqB6-LL2PpI,mcR(A1K&Qq&bY'ch6R)*4CKaYU
+-)KR4FC1!XFiL@Tf',ZS!kQY,2+0bp50$B$+TK"%@%!`!@%5B2VP9NHXSQ##E#Dq
+H[-,Tk(19BAp$kQf(KJ!LS%*[TTc!E9Z"QdCfbaB(+%YjHZ+T!MKJ(1I5!KCImc1
+HE[kaRTeViK6(i4GM-EpBFL1D`B0"PM3($#5#F33i5$FJ!!c+%Ha*K$HQ"#!)4Q)
+#$0F)aLJU%kQ[aQKJMQG%kGH,2!Flic2ejT56@maVB,V%RBr"Tj!!%PR&0,#D1C1
++6GJU+kEFM"-B)KA58d)kE*+l@"8aNr0qSME)43GPMlS3LfPI0`YiJF)dE',ed3Y
+pFNK[0P[HA6m@T%KY3AK0`%@[Q&qJeq2XGe"JaJf@KlBCKD`eZ(Rk#M$P)e$Re0-
+Z&XpM2CJ-4fN!DaG@2Hb"4XDb)HfB)1FSGLai0"pe(qchbP,Balq'Xp&rrTMSUXZ
+,XL42LKB8Y9R2[[CI05jV!dc@ZpjlPTdAVZke!c))i--Jc9*)XF8LTEj(9N*%e%!
+BXlbE@U+CCUl*eH[6GA0BGb)2J0@%l!EGAe#52JdhBDd+2L#2CJ3D$b$bY2rX4&U
+4kHE$14#'4b!4dbbNF8Ti$8Z0kA0,FQbQ$c@[%Ar$@Lm,@UDDTTU#IP#SZ@bX#lD
+emR@Nc(+*,*4fA$@jCN0ATJde[A%$GN@5mEUDG)(aN!!("&XlYVim@`6EJ`H$c*D
+rBEC0K@+3!#N0$+6*"NN'`ehKZF+k',#Uk66$)jA@TiTE)[MLY6JS#YHd$j!!SIm
+KL%CE-#Mb9A-Mj+V%hrJa&IF%hG1)[AjCQcC6$Yd&3ccE4@@GQM4KND'G[YdTNYY
+jr`e-Ak*TdEMmJ&C,kK`DLUUbN!"LC+`C8JrJ@+-SQ))KVD0ZY-V58(!(Z5iNjJI
+R2N`&b19`c,)U8)bdFTEpdrZ3!,#,h1"MbUmCL$1-e@m0!QURR4D[lj*JJK&25p1
++f-k3!'P!N!$"p&9J1f2'fp50`pBBUK*@Lk)3(f3m5C`D,a,HK$j3H)q6HG3T6Z&
+p)5['NcHUR&(S52"6pjE3E#6XZ+*@+abfKNmjh'9#F+#HSl3QkZ%'h,BLc(qF5V4
+N`--$L3c%akh#jdM-l(BB@fecQ)fFMMf!N@0Ra4@m04J@3"kP"D3B`bfSrBKU'4d
+9'X)QK*PJFqe)JTU$(SlEPB[UGL5GrDqc-eNNY*X#[4URJr%EeS5mXq0rYAcT5U1
+*jL*f6r6RV@*-eF*[rrICEr4[idII(PNiDh4d#pqiDQ4KB@-MIqMJb-*jK`jYCKp
+Z1(5)2Ea+HPJAI(M9cm5(GF'(GdJ2kkk5(Sie2V4jr0r2Epl'AheLC'&#,4Uqlp$
+)3J@YGLYqMc9L&(mrXT!!@cDk4GrBk"fj`01S2h3)[qmmY%erpDKrj)**Se[e#1C
+0(r$l5r6hIIfa6cec6*P2FRHrY-X8qe6@8dmTmiH8@rR4%bNA0CJ*ZB#)qC%T+c,
+pRC-Lc4kjARrp$CBVqA+bM*!!QDeLIZ6DIS3AAb6Q4kkp,,3T)6qbbFl)hT3QYU+
+B*TS%05lHS45TKZEPcq#*aQb@Y6JcNA1(GG,@fadC4mIJ`3NF4a+3!%(AQZl#"4,
+$Z9(8aBYhKl&#NUGGB-hfQCe8pV+TiM)Tp`IF-C94)a)E$ERUk(TaeNRTVlE"FX1
+SM'f-3rf"I1hVDV'D35R418X1VpHamE'F&YH-fJGdY9L,LP10m#M[NH`[U!M4,PP
+3&,[rNZch3@5b[4V*I[Z`JrprF3%I'3eQ)CEJ@'4Ai[)3*f[&G"EqSq&jfbZTkMK
+[aaI$N3!m)b6SR)P2De(DCBKIq66$lU!d8THU4i&NpQ6Yp(LDi`G*T%,eAa*'ab%
+X)b!43c8Tj0*-*B%KjDVID"0IU#1ALf&)'q!L(r2pbN-#Hb`H(YeZ2)Z8$5Cf(QF
+mM0Z6mb5mU))DT@"4ej,mA0DD&I$*RANeZjMT)F91*H-cqRDeY)XG3I!Da2R@l`#
+aVlh)'ABeKRYed191R#l8+NAcL@'idSM5&6)!jN4F,4Zq-*LUK"@ZG4!00[KSpQZ
+c!'2-Umj[(f&Pf$l,Ch28CCDS,`T50dVE'f*!SV`F$U@N&D`,MLHDc$51V#E0!@P
+MX&LNe9R#epZar!U6HAHh&GZLB#Kle'0fL!Y-0GP'&93!eVM(l%*e3#IQ"cTUc!&
+5K"m*6(D$MHTc,44lk-YTcq%h'(XkJ@Xpj[IhV4X*R4H*+EUaEp@%cLFJ8lE&*6(
+%"99%Z,30*+94h#'18lTMK4AJ6Q08#`6U`"8$+cF*NMLIL`fME0([)AIm0DIim6N
+F3K@D,U[B0EpA2!iX$+))B!9e,Y6Ac&$f)d8ecH5cQ-Rr-ck6@qe@6qG(9jiFcp6
+NIPE)Xc*qCbDkAX#krPYb-jFkhM9S'A4aUQ[SdA#cIkAT@Lr55k2VfNTd26MHp4C
+S9[H-ieZ56LbN-SkJciG10GS6TUeT'B2"ThrUP4LZAr64la*0b1UT-`h9TiVpVNZ
+Sq0qr&(P@Pr4%#',#2,fj6(Sd&jbR$,T(N!"QN!$Z3`9U%$+jLM@m3e@`U5(ENB+
+EpZrYf,rLKE'GKV3i#B$l8#EVC,HrEM`-2-Nm3Sl6dI9f[U2EJH9!Y'+qHCVbXl-
+,#Mr!ilZ4N!"l0R"[%rRkf3Y6FR3ITBf'S!$$#*!!$J!mdaM08#N#(eS9H#hVbFP
+XaN4Dpbckr`6krfYbE,arPp!lKL61%8Y*V#)aMh[rH+*ESNYGT&Td9)j5qcKN1%!
+HX1$Q"(1$b6%H1I99-A@FA+@k`TM+)!jC*Be%Z4AmjdYB8TY)dT(@I5Q*jFT*df&
+9L(Ge5F6GpTMNl"*bZ-dY6[BVHGV*VHeDYJH#3-11E0bGVNFcSd!,aVQ8K4E"&dk
+j5T)(%)Zm[IJKGEN(*jc28dU!32`k%@%1@1K96kj3HG'bTB)R19,"GZ+ef)Q2MHp
+%P,VF,i8,B[c#BR3&ed,Q52`L03C[*K$qNXj`%6)6Y)9@1Tr$bcUX5Se#6e)TpYC
+bj'GRXGpPANmY`0k5i32k5S3[4GA`FEL@3p2-ESUdR$U[`*PaCGD!%T9%`e%+1D)
+k6)ZkVA)3aY(bNBq&+NKaj4j&*#aJq46BTd)34$ANRdJ@`pD2!P[rlh&XTEKb%DL
+5bZAVF#V4-f5`%Z81Hp8PR[*jCTSjIXAH4h,BC2i[61E[aLG$QYcLC1M4YkFMkJJ
+e9$!k!j[+H@C8Q-BA55i'mm0N'TL`Qk4*%HE1aDYc6r0IR'#Bb+jS6[c+6JT68lC
+$P4,+H4"0khAZp&Q5Dd,%$%18*kGZk3dH[h6+$0ci(Rk4j''1EqE5N!"52jSZlH)
+@qjRC-Vf5'M"FTPh5!UE,BkQ-pr-N(p-G)dQNMb`2SBcZEQ#(hI6Sb&%kMXiH$0Z
+3!+4mh*!!pXlPp6fL$2mU51NF!eml[Ud2N!!#61k6j%RmHq6N2'PESrX['UMH5'D
+H1NBA!#jPB)cQ)+X-m%&5K2NeNHPN#DNDhdH[EiQQ*cU1C(JRlA5IAm&)IP+Ci*q
+5TH`D@%'[J3X`[MY[B42NZ`Ac@32Ci)%cU1N11rVX6cX"q#0JkSBi8lFdB9GBHDk
+TfKCErSJXBjI!#R)M*`F`f5d`jrr'A+1U6dmeUQbjmrH4ZBTqNN2LZ96ZaqrTUCK
+B+l!PP9$Vj4cI'Z9mQPAT0$Hl'Za--+dKM+8L5cQhG)-CjeILmU5D(RlEE6AEN!#
+caQK)pe$MDk0B"pKaD8f3!#LP&JHYr*)LXC)lG"0*MfFD+Y8Tb+'eH**qIBI3D9m
+R9(4"@Di,%$-kf-chNh*XjM)bLm[NIMkqQ3A@,i9T2IH3!%a&)9I!qEJbcKp58ZU
+GbIj*aq3ZmMc46&B80GH`2Rm2IIkrBkTClV-662@!H-fGkK0TGS,VRc%QU6$1Yj2
+&i*k@F2(SqQSp@PhR#R020pQKUpprkJV9[&c+C)jBfMXBaN$9Ma1k2R-4Sr$!-!d
+cKEYrBpbrb"JT"&%Z@6HDB(ih5!Bi@Y5Q!k-ihMk[hp1h,FVVrP0,%Q$GD9Je[,U
+K3-d8pIY%HCrUVFbBeDiL5pKq[4clG4hGVqc)bIdUXR[aIJd)EIqqAS@Fcp2VYAT
+XLH)3ehE6*)rD0rI,jqamGVHL'8lX9FdmSL+jqI1K2$q,51DcqV2Qm2rmbiaCrVY
+S&q'95"p@DE"kZA$qC[APbc'#h,Mej5LlN!!6&AJj%Cac'XEdjCK8#L'+4S@XS%V
+)qIk&P#YbPqFdBhG'EZ`@L%BMA$jQSm1)aL"pfaiclc8T3b!H2%G"+5GL2hl5ei`
+i!0ZK",R*D*D*kVVp##M3"6-`[23jSk`ZKIdCbc'MI$+9M+C5Y*Y(#h(d!NNEjEq
+l5$@jF&5#3eQLPh*EZqCrV6rK@p`qql4JY-i#R*6Z"KT%KF!@50`q!Y$42Ckd8-U
+6`)dQJd@CTaSYCa0-XPq9SemGh8(fG,P4LMTL-Jp&!@5N&6il$+YYRTY-X!)qGDI
+m5QaCEVT8fp@3!!*eaXD'bYSk(60R1PQYXkS"d8`H,hCcE@0G$8+02&lZe4A'mh1
+iYEDkF58'`AB[*mYYE9aC@S(Q(LqhTEDQSI*mYHh'C4AeraM&YSCrc'ecECQ4"9S
+j86"5-MfkpP[rC4$N@Hl2&MBT*r2p!UEjJ#-%5&(*T+8CVXR8d#lVH&J$#rFe`6R
+CRJSQ5GQHB1(Brcr-G5DMMpJ)D%3I-[Q5FiH5mdE`I!$j0VLZ6!e215C)L$-@j9&
++iLJG#Pi,mGA')j3UJ[V@I8Gb",-aAT!!rkRhTLh!+f$$&DN[b"Gd0"fT9&LNHf%
+XPdM8EJ`E,P1p+a+I#f%kHSD8DXQa%%T*42C5*A-TK&T'rP+UaSG#+#ADJQ)G24*
+#*D%)bVAd3JLeK!-Sej,c)*3589'TNT`'S4,6%CAq#BfMlLQAHhRr",HMr@2LSPc
+,AJqKQNhi(J0!G$a%b+-'(UiDSEb!I2eT"!Z&`bP3#FrT@6)eT8)8[#E*%,MN*",
+j`mA463j*cVl#59#F[4a5hP@LF-[ZUC8CZBk$N!#2$jKbKH,ZZYH6E5V'(1kc8U+
+%8LFk9B3kh'QP4!RM6R5UUVQC4XX9LJ!CYbP@Y8SP+3ArJ1J2CRf[[ZS20UY$"X!
+IE(lqb(c4)@cqI(bjJljT+5Nq2&)J[QSTkU6If$+XTD5(IKYMljDC`qqDLdi%hef
+X$lkk1""mNeL1SIpE9Z8[b5mD+46I0mFUNr#0Dl6(VYrY$aCZMmfIhK6XKclDPTV
+adC9X$*G-H[d`RI9$DA(++Br21V&BI)V2YIMmPX@S3$jN$dh@TjZp0Gae,GkX5D2
+d`FZQGk8Vr6AG2rTpm-9PqL9V[HhCiXIj%iH@+EfZi0X&AHN*rKVPRYIT!pV#KfF
+S&SR6H(K'l++aHCMjr#,GJ*C)Jb'd6I*0YZP&eDq&hVfSVLVdE[EcYD&hXjq[$,r
+ER2l"p(q$GRQK0Rk!l4P0HS&k+&A"*kL(,Q56Dfp*[Qc28&c6m1a*Sjq[f0NI8cG
+N[Ve+p@5ZGjK@QlpVb-PGcphpZXXlP)-+&r0$pG(Fh511BDjKiZr*`rkK*Xj)hPB
+Tm2f#RIZheJeGI+IMRB"cQ+0,m&#bHMKAR-T$bATm+Uf"1-jpM-(4`UCmUF*#Elj
+8Be'b2rKS89Vi&Afk8`5a48RX@k'a$mJ3Q0J*hTlK,62@`D[ZrKq(-IJFJqKI4ej
+ep2IfJj8K&$rrIXRAMP3fqKGjDEqJ*TK5&L3fjK9p`@[q4@$!M2kN*1!f$G,lFJB
+6YJAM""!8"3AT-rTCI0mFdJN-GY,-PMBAiT!!Q1+%8VpCL9)'[mRJJ2+pF#FK3-5
+5c,mU$kCCr!*A$FX"M9#N6rdR54bT,*Zm%kGK[,Gq!DbM6!pBcM,[6jNBQA,[0P1
+ajHJPi[DFbL1RAX""1"$6pUHd!%A$I!fC92$-0p'FLi9SV`Ze[-$JT)k!hj!!95j
+'QPe2Zd[dKZDYc3NdG$+RN!$4(bUV+-BY1k!VGV)3*2V[BHSQlSlZHVpENRQFRDP
+FM#(VTT&G[)M2bmN0ArXFc!-9N!"r"R+SZ"(*0Q8(%(FFXm-[Y"ae`MdRNlDETTY
+M8BIDFmYPAS6&LPBUpNNpB(BMqc+Ea@)LC,1SfG[,q#&Y4*E[BXT16*PbY@V'P'Z
+QX9hJm@pcZ[6Ef*0q@dXib8Zrl@3&cZib+-Cj`CT3ITGp(Dh5Pe%NH3&9KTRNJ1#
+8j'9X,-N,NLRdK!*mX-A+BdNjX"YQNZjB3X+6K#i#(NTU5[D!(UrS6!D6K!9Sm96
+jaF&`1k8k@qh`@R4**VK(GDNr@Q`mBJD'`k)p'jA9jG`-2BK#kpUa`l!D9pZPaca
+H2`6IFMG#M&lfb44mP8mESmCpp,SaY5B1("rhedeS@LeGR9(CG-GGSp3*1IqlB-L
+fA6A%0a)Zel-qR0N*&c%*9dQ8a4Ni(cfQ)"(b%U&F#fmTdm*%fDh#q['J'*)dA'E
+MVA6-!jU[I0)8"rld*JXK[e,afjNaS`3TdA'@m@l6&$L))BE$V)-4V'UG[@IUf0L
+jYT!!Lbk&NT5&CF9BaBCXD6)0dNC4L!EjiTSS6p"%&!K2D!FJ2l($Mbm-F`9ZK1R
+9`I!PDA@kXCFTiCI'[X,ER'lE0kjpi-Z2h2Q(haelpqMp[hrS`@F2hZ'lkq'[2AV
+N2q!`DFLQPMhVE1hd9N,1+Ne1H$q1L,)M1&kqJTmIM!"!Jf,e!Sf!VX9S6(lq1PN
+H[2PQ#,(E4Illl3IrEhrX5alUIrrIQj!!`DZ4N!!%k0YV#V`L2dGF(2fG1dHUr@*
+#M($C!'rh-V+4N!$CHZBiH#(mTFRR02h*AlTCpX0IqSp*[$b&[r5h(Aj5C$bR&mS
+VH8l$KHZeLPcQBR8MUB)RJh9()4HV(ID6kjC5i@(e,ZDH6*lCpmK)1$UrJ@5cQI`
+QC[)Aic-K!)aX8DHmA-(+mLaLHf8LFDq6M(8VcGHi56VVrRq3!%dF,cIJ*dfp6rS
+klk%pebj&chYPQAbG2djDfIkp(I[hE9pRYqVNm'a[4aB0-0l)5A(3JS3Ubm2fS8a
+4`(eT5%"chRb@lhp(#94Z[Ap'-M#eHi$Glcf,'KeBEKeE1S[G2D3R',mfPaMGbfS
+FpVNIK9FF0JYim0kcH2!9GhFcJp-h!(SQErIhBTXrG(DEel5fJMbE4L(A0%+V8#A
+6VT'BM$YqeVD4C26m)I6mbE-pfraG6i+),CNH!L0fIDiqKb9fiM0`mJl5S0"KUqr
+!PJ8d1CYZfFEk8Z3)1E(@9+D#*%rE%,0Mr,AJKck*MIpcf3E(q&EdrqGN"6H*2#U
+hiaJ2aqpPG(IJThDq6*lMpjq5bm&#ITK-4N+$SX0ZI0h&RXIfkM%NT5eQIBrpTCF
+qi(aXZcrXIIcpQ1'Ai(cmRf8k[)qr6-bBAaY**l9NbIMmLUbaX4B$P-*rK(A#kZl
+MiYf+,N!PT+kDLl&XDTBU2$AE8AYl1`"4HP%a3TEf8CRb&mR9Q2*qNJ,eNX'I0"'
+hp$mPAMEGPCMZ"TN4pqF[NPj-GSc6)HR'1KN5(rJr)ReXZX[`Hjf-L,GeRib9Yr9
+HQ5Y[kjYP%lbY0mSbH&Yr(qQ5*r*HKQIi)CNMcr$jj,1b0-PSALqINi`'59IZNV&
+)ZR+RE%E5PFq4M5cE4Kd8`T&fJ+EPYB9(`T+)!#i0)5Z*&rY9eSjdfH59hd`L#)e
+-,6r5!mcXU*P[H15cKCeUQBe(I[$'ciJlCRcc9IrR-[(QU##XkU"IFVI[bk+UJUT
+RhS5C(9I8-ELq8bcFp'N2HEGB$jhQiDh2H*+#B+`rf@9UJ+[qp#k+ahjEEHd+'3Q
+$r4aVLp!1CN-[H1eM3Y(JfGmPFM1[Si1[5rqIl[e2fI'[+krkEcEehl6[6cI`iqq
+SU+[klq@H54+`TVbmVU,q(qeYEbbYVUU[T"dqYRPdQk@kCJm3eaRY[b3lj%[,RR0
+Dc*acT3ETM$RFB%Rj+!fUZmLT!!6X%24ST!(5!TEVk,85+LRcG6V5J,$iMd8P%&Z
+Cdr%(@!"h1[i!qj@8+jN$-Y458jd+%1K9&5fUd&D9+GLE+TU%e4QI#Q-`'E#J(-C
+!a!(P@RbSK8VpVZEhCcXHfX$+qY0B3KX``Ki1(P!U8-$R9)R%"ZN%13V5(*)Z#'0
+lT-p+#GpSmAN+40)&TEq2Y$TH`rGDHPrG8fGfF(KA*kU%I5eAQ'bClj!!`pf@#[K
+'NmH6-4kQrQCl4Ap6kc[k9Ar6f@Pb0rNH11(#3l194iHQ)Yc$@12RKqBS&229[Gk
+C!d-FLrB`2hBU9bXPHm$VfZe6NjGdeHfF0$3P*9fc[eCpaAE[4&VSi@STd!-9qE-
+T881T+6XR)6[#"iF@+T+mXj!!ji'ljM`2T6Rm%Th$`pP+[N4m,*qNBS2LpY#V-qi
+-[qS2[m)RmfU4p#TUli0dSCX8+Ki,c+rd'eID%C(bmpaRJNZd)f*1eR)Y@jDh0m3
+mq("PkA"K6IIf5A6'&dETLTmCRM1VK)Cjk)`UpLrA$KI1,2&McZMpqTTZ8h!NeaX
+Vp-'CA(marDE[YRCVTAG4hJEXiAd(dj+ji-E+*m'4"IQl3MLbS#SYK#mA9C@%hPe
+8aBIHcG1(kT9ke$36r"VIlJjfZ82EN[c5RY!5A,#cIfYGX#0m[Bap0@q49-+q[E`
+PT@V("re50)Rlj65L58cpjD4m%Z4e6(mAV3RTSfX+MM&IC-U)9c2cEHDGG5RmMmq
+AKI)rVTF"bGGmJ3aB[ZCj-NYHaqq"BlMQDdiIm!UHX@ipCKBmqaA4`EJfjIh8cqe
+1Z`[T-hD0qfNG"`+6-Tq@efka@1NCkERh@dQ-(Zkd!mK)PkQTidNj"&AV!-j(&9r
+cT%N!Ei*DD04iiblR'T5F#LCXr9Ed3p*CG*eh5fK,C`4%2G-p3ZAM%YNAN!")GGD
+T!Xl#2$8mIXTGQ)5`aA6i"9Y'&I1)kq!`(eaYkY9m+qp2B&[&Z!mEkHTaZ!h4F%Z
+pf*q`X(e8U,5#I'kDPR3IcAIH2LP6Yp654@ph`MViCJa"P68Q+U(%dF#pXD-,'qD
+fUj+!T,`YR,D$Yf`RLlf!$Pe+&cPIB[@`'(9`IKEhR,ADdF2)apRll6"E6I*"@9!
+cZdV`IpVrb#`bM1`)XX6l'Cqlj8D,U2HNiE6cq+3638I0!!$0)LJIke*"Qa(Z@65
+1klGJ,XRl)d`2*Rq("pb+D!LPY%@@bT&c*dRm+(FhL)jpc,6Ka"bK#+"+LBqX'pU
+i[hd,kr`r)[(dVH1GdeNhe6E6AhENjQV+"FrB!aCii4LZ"PBLA6KrC"1q%"a6Bdl
+H#cRmCAB2pX,SNK5'$P%'#!F'C)eIU"HRCikFD(`e1m5FhUN$LDhYbMbIfIS5fBI
+-eLq4lmPX$3GHbYZGTTHjq3'5+[Z4dEG"pL1Mli1N%,1k"eNLhNeH'Yr!q(kYZKK
+4P63%$k2*N!!(j-D+K+UT*Lkkb)HD6Z+L#dr@4KNV6pEP-PHHV!YP%caC,jCTm'4
+&kZf8)Nr@PE*(RUcAbp*iXUk@eI&N[8l'`T0eP@b'*q[&NSpT2G'3!#TE@5L'A[`
+a2F$A0$6e,Ap6Si(,54+P(+Z6N8P)rm`$i(kR@bZiP'CN#'a+dcaX5+2e6d'`)ch
+@lI1fT#AEdBdeCEA9e49Pe-SV056IXaQ,JGV+B%jkKpU8)1@#McY6YYI9eYIA95c
+p4m%04P2$IhIYl,c-p!qIc&55q-rT%UDDcKV"INKI-YC-2I#dY(!HDYNMSea2d6b
+88ae[C9k%jG'i5'2eJPGPDS!lT(%E0DkaE0JXff@I'&Y-qd"p1ZehmH)%GfBHU%'
+SrDiQS2DlXFkd$j`lTRh#*QqDXC152mN"-'%QkGj2'8QQ3PKFHJ4-G3NQVG6BN8E
+(D`4F,VkIE&DNM$1GPJVi0T2(eB'D)q()4-H,9%k0Nlk'XiRSAfKp`jl+*rf!r)e
+r)CX8(P*k#4H),4q5!N8[M[,RR8L*$Akqmj+@2FU-T#H'B2I'hmrlrEGqIc!h%2T
+q9P64E86[$hfr8EQRaC[%hVppD-*JP2FhI)0hFXk3!)BD'MkXjBBZ%QI`X$B5RdT
+M36cTq`k@FSm6pI$NQ8[%Kff+$2TjhK,Q,$MV@2l1*iI,*q8qjCK8N4TMc-+hXqZ
+mNbULSPqF29c16GLKR96"'dMDF2P%Jf,lT!DPRhZD(bj8l[!bYm(jLZ%NJq5NL'p
+AFeljL*M8BM*)aS*U&kM'JXC+8)`&pDdD#jUhBL`SEifaB!9Jk0qrNFH`&Qc@%C)
+C%2d$b5Z3!2lQIeF#paF4-[p0jL[iBM+AN!!C1d6r3'M#BH#3!2+KDRq!+18pI!A
+Ji(L1,*5$ilNb)!k1'4N`"mIcC*FF(-Nj0hA#`4&RqJ8bJ!k1-$Bd1Fa2'cRkHLP
+[ISi""f*E4lQTa-hMZlD1"CbCF(Hm4,E"hI((@Il6Y!Ph42*d6RG`4la)eXFGFEl
+-RM[L&dQkc)QchG8b*XjfPmPB1GYG)A2PE#H1FfN)cRELS*Hqi'bAP5ebYS1(F-U
+4Xph,C'QFl9iZUq0XGj@-KE0GR@b'XpfjC#*-l,a@SQDUk(8A2dS6X,EcAD8(H0Y
+phGEZ1kjf6aVDTFcif885X63%3lZMlDB)10TYVkXYUi!PdGCPp6*3PRDT4kjcU8p
+4$P-R(1I5B,cKI"IEkTBCDkSZ&dq%f$01"4ETICCa+3afEX8riqpQICe5erhGFT+
+r'hQjdGq#fb4`Rd1)lA[-pqd+!Q(8&Ij32VaD@5KhX60N30c&CXQ!ZB[0PPeb&hZ
+4j#jfMjb%ZeLYPkMC92iVfF4G1Mi9MZjDJ2&rmXqL#6hPRB8qqPh'jQC)YHSlU33
+$pDPL[`Xkmrl@XCIL*pBP29PVBBiZ32c%`iPZJ+HYNHcqF@MJCaD3!(HSZS%em0+
+jNVQl[4hlpff2)FIP-XG[EK(mRlG)TN)#8JFY@ANiX+d9#Kqi8132#@M25dVjHR3
+(C38irSV-aYcZ!CUppqcF8JZ5Vfda5M-pPA[Y%**)NFLCMeYlU4Zbi3XVFD$e1HH
+kX!V58%8KZSp%BXE[aB`rG(E''TMfP218aMbfrNpJ1SDYlepNVb94k2G$k2H6Cr[
+YB'92hG4b6VPmYANG5*EL%CbfF@bl[F(+5RX'Ea9QC6eQ,KeiCmh&[IY*E0HIbcC
+iCjf0r[qFV1!QN8GPH,bccU'l!lhfq6*jhPN2NSNb)"lQ,m'X[J3(mrmXdj'0l[0
+N*ZEhB@cJ*mjZS,pPSqQjK10QJ&,*jS[c4fhU`%,UHFN,1C'8$MiS0GH3!(RJ!k*
+jTQSNTD1dHQNQIR*,j%Vmj'U'S4'T)4lb%$a3rm[*[5ANF3bY'a5cP+N"Qk[KcG-
+"9TI(-VklIdEdE-*r5IV)@h5ihpYG'GNr,'qKm02E@bKZ@*rh%Cf-P4[J)PP(0d#
+iRkB8Z3(@bakj!Ej#PXB0-#HVi`CiMBb&'q"Lf3`h32AqJclX2#,+f2+LL#hkQ#,
+J"KKep5dh3#E(FU)$S1VQFL+cRp2))MJ#5[[Dm'Pl`)aFJ6rJB(H0h5DUCl6a0!r
+(`"JA8K!F!iqhqlaMi0&p&!r",FCk*$IVD+LXU+q5$r%3I-STX&K,2,V5#NcrRNk
+aClbrRUMA89CC@e[ppc'RC2J2!PpLkd&KDBZijP!R,G'Y8'k%8)M92prc+A`L&Cm
+j#k,4#qP3VUC(35JQ5X!d!kI%e!HA`%Rr`V39Nm"dK+KhUTfEDE*F`AGCH$hCTK*
+U4aSGVq&E,EfIE0ESF@GkVC6`V4DI(h-kR"83r3fYVpP6rSC[NEra0m5AKbp3qKH
+,Maqq3-%[&Ymr[%+4ARaGLI4ZNh*`ZDNNp2,-&8q&ATi4[9`apR,PRZ$,PkSPcm#
+(CqJP+m'Sq8r30@Y5U(LX&Er5EeaT4d6+ch1I#Bjf4m5FV1ADi!Kh6$U3!0'p,I6
+fV!-CKY,3fl2f[*&2r3",pRZIS[fq,*N,VS9mNQ9GN!#r+l5X#kV53NYm899*k0e
+&9AcSh6apU&l8)aD+r3R*Uj!!AkYASFc'H"8DGd,a+Y5hkP9ShSTASE`eAS@PIXQ
+Tm(jj$+I#UYHLmbmNVd,kZhK''19I!Md)I!f[)2R`,r`GjSKcX5a)2Vh2%jANMI!
+E-L(H#!q3!!Kj$kq+rbe8b0ZA0Z')bARl8TdF-9mQdq')qGI`%dPIF-6FhP%Z)f#
+*HCHT)kFmT`IhEakk%&($9RdajmNZq'*H+(2NLdQClY)GI$%T&ee+MbmQ@$0+dCE
+Ui8S(Cmm&-R[1RPpNAR&T*Lk'M6)Q,SC0-LJZKXeK&m-8J0e0Rh!aI,Q-PB[KBTN
+V&d0a&da$F$'m4+E"aC!!h,c5L9`-b@8[hFM&%&l4+63ZKR#C6Y&a-B56HQU&Lk&
+i8DCMC"SmQd#pT'D&PiLHKZj"HS"lSHdS9Fkjd'&##S*ViH&@8``F#lGAP[qr1!Q
+h`Y,IE*rSAfKpcElUAcLlA"E1[j!!)bMfD`QRl9IV9+UK6$&&iQADS3YTIX4A4dh
+-L*SiQ&VQ[6kV+#CP+'ES-[804,ep8%Z-FAN'SKZ+B4eFiLe8%Qd`Jq*0NbD5U)6
+)S@cammkSkdQ80cldr@Se&qq09p,2e1(l8bE0(#3M4fmPA9',Kf)S%MddLaZ5,!-
+IQK@(6cb`KfC0$,k+GZ@MmNlHLdI[NbD$k,p)AS[dGeP,q%V*UjN[BafF&QYdcFa
+jj4+ir9dUmj&-k8XX@G1(b53i$GdmlVki%5U@IVIR2IRAT!@M,jH+i-0)bPRElda
+5TF[N2Ma"i-GiZ5b8(q-9XKpqM(p-H(N+2mC[1p'Qb(JdALQcj0(i!&QLb'9ZbcH
+5+UJdVB-"AFXll#IA,DA#DrNpb&q96Z%a5HNCdjdm*PmZAq!a#88*C#4T"4k6YH[
+'2#EhrXeMmV32SU9e8MjF%*hVRZ%9C2qb'Hbdk44D1Qc-F@m(HlCB-Ya,6"*jTkI
+KHJqC5lF1D&&fpMaQi1)'T)-4f+Ld#4HAqT!!VfCaZlrMUqNj`r&EC!!13XCGXpK
+eJ3p0Dl(Bp#Y8pGRdLc+$*1mJma3kE2FGCja-cfDlKMcLTpDEb[MMJjj322'[@IQ
+alqFVC"pm2h1b2RNi'f6hA$0AbCbiCPiRBq+DHEd-LQ[QDPN6ema''5[Ac'DC+pI
+-*E)*VTRAbM5iCVE)&VPQYXSHZ@DZN!#PFFeF+D[MQVPFaX)eFjPXKQ[QPmPL$+D
+0T*0DXQ4Ffep8BaSr2a`iN!$cBcQ0Xjrc`+N6pECUi1@U+EP-&E4QUF*6XaqeYlH
+$A*!!AP6NQk9p9"Eb#M+"81@@D,CUS1&QGe$r*$h!(Y5eG0SIP$EXQ%PSKK95Vdr
+M'1V&36NUhmQGX`l0r'r[8"i36b#dl)FddkSh%8h$m4$e`*'#B#*kT0F8!aI4cSU
+bbVS+8feGJib%M@L1Y88B"rqj0"K(dDf0+dXV-,E8!J25M6Aef+&E4+23aeD$ETX
+RajGbDPPDTNhiF,(AN4Bcee'T`AAP93hrdQ#*ZC%'e@8KpF3h9BqI8%Pipa3!Mp9
+`pi5+AJ5HQZ#fbZG80)*mmrZpTmqiXUBQ@*QQLTLr#VpiT-Y+#GpRmANkK2rV0QH
+lf@Dj5X6"Z"YlFad[j0U1c2kLeShdTiJ3aJMM5229+UFlPf1[h$XI$iHhV&3JG"`
+rRR'pRGdNqYYDhmLRr'hRbq2ifejf)QK[HpP!d0efmjEV@Vb5EHM$*5IUGJBYE+r
+[IIlA33IEcAeeAK3a$hqr2IM`TBU3!,AYZHpEfri#klXKeKXXb*qNBN2-VY#VXrH
+(AXh&*he&Rq69D[@Zi*!!S[jiJlpZRI[fKTJ((kiX(5kXkGiqLAVDAKLP+hjQH-k
+XNKcBe(C'&IZADiF,CjEi*e%SHELNTKZ@[lSKDbVdS3ej&IfQllCfDk9h*5rCp#D
+rf[!Gq8$[&[eTbBZ@rPlkQR3mi2ZP1jP[lH8%G5lr0[26Q3rhd&TC+2I3-f4!dPc
+1N[e+FhN(8Ifl8kKc#59Ze1qH-r9NHB3a#kh2$+SV[Qd@QJVL%BTYHJq*N!#Tm0L
+F`kEb"h$Z1dq@b@2cE55+lPpY-IC[prMq%AK(CJ&6VQTpBU@biae0*Qp[Fkmh1i@
+&c'mcQrH"[[X6c%mmTF$Y%rF#6#45#a*PlLIUMa*PIXF2FRL-kjj`@*ll8EV,3*5
+RZKK#KKfU1N+'96QD[r*Xh+RN[rQlXJdqM1HJrpp&rhmRbj1rNV)`P,0)ihG+4KC
+T1%QH5lFI8r`lQ6`RbEpLk5,H5bD#kERCH`EaLYIKXIJ8XH`U&5%r4EMETJ*8`22
+qBXcirb6I)6mKIjEP5,Ma4C)KFq,fZ9Lfa1hcLc42)E``liIEjqI2ZRfQIPKprK&
+00BMTIJC1RjqA"A$kr+E0jhFp2LXFmrZ3!*)M[FVKmdUC+iI2mf36($l2PfP`q+b
+6,A,i[%Vfb1&cN5b0`bF59UIS1(bqA-E#iI0PXKN1RfH!UpM#4'8e5#M&[TIk16h
+!me,D54A)`aPBr&5&9*a4fmHcF@CNFh`Y&4a5%$`YTrT--I#ch'+XD64@bje%iRc
+F62&V$TEN3hIDHI&jamYRA5Qhe5dceP4GrRqB3DCATq-d0d@ST8,r&!$raZK###@
+$q#qe+5pRDS)cSlT,('Pd[)C[YI3qlF%'-YA$1('b5$U#Fq,KeVe6bNbBceN"dGr
+3qSjpeGp`eRCj((r$aT+dJD53!-GK)mplNjM2)9Rm2Cchp'9lPR%`1mc"iqrKXQ4
+960f#VVUGc2r[iELNLpCkfmA-QJpA+ldZUFT,r3rl-e*f`JI`P0RK,p%K"!2#B%a
+Sc3M9QP$0#1@YbI%TEdf16hPVFRb@q[d8lGFE#RUE3I8@9*p"pKBdIS,N,@Km"XP
+E80k*Yq$NBUQh),p@Ed'CMI%@0'k#iLfSEp9Ed,`9Ed&jDl`&+k$akFhIPXI`&Lc
+B+5*Xa*I+M(A`&r`h`b*QrqbpPDF`I'i')8IHJ&+NPC!!#68N%Nrq&Li)Cd"2XTb
+mb69`#6bHA2C1@%mL9KF9*GUGGRLBm@QGJE5(&5abUabN4pM"X2jQ`!ib+5+H4)"
+U0'BiaVmMee1@MYhaM+LaSR`D)M-8KF4)ZXQPh!iaq4r2q$cmIf%p'`Ga$Y'F591
+!IJp8d4j'2%b4aL3DRSpBKA@#PIEGUQQ&[SKBIfQ$$'Z@j'!'6$f3!+,!H(eX++8
+XaQCD1(PFD[24*D#"a5ZeK&r+$!qGC3kEHjMR0LmFaLCASY9Aj55l(h&LUiIZ*@Y
+HClCBQGL"P9C5h*UAC%e@FcHL[beqAk%dJ%5!V559I!Z*RfiDflB,mImPiTSNRR8
+9Q6XTeGF`barZ@QMM@2+1IYj-dJ"IYj'(Z-RFp1!eUri3jiAP2iqUBXZ+@*BrpCQ
+KJcVUE[8QC2#lNRbDQiSTV"1RB$A!jpABi4$iZ$,h(fG`,r,deA*6X3QYCcG"Y%$
+ArPmbB5qa*1m[SXqS[(V6'lZKai6%0@3rNZGGL3eCL2Q-ldJDa)aUTc!rMQAFpH3
+5lMjk#fhqmCKU92fR6!F4I*%H(Rb-8&0Fb"K!iUJaE!hjT8#`a5DHN!#5cpLSL-N
+-R8jVE#lUFJJM9,9`q*lTLMLLPMbeMQc&0G6Y!YjhRqBDb-Yd+p)CY-T@MCaU)6Z
+ZeC%XZLQeFh&,Vk1ENXUJPNqld,erK1La%21j8L5(ZZ1[#1[2[85Hc8JS4kLmciV
+A*'3hHBTQ5h1+FiV-@AaZpR+2,EZiJ%j3p6bBiljZ"NAC1h1,L`[iHNmRA%"YeN%
+qTFN"H!b@4rdYVLbml*&@B!efF`FYR8Id4Yc`q`9a15+T%(R&`Y#BA6Ai,'GR,+C
+&#(6PP1ZeYhM!&SL3!(1L"k*`KjfJY[ICFAH6f"EEY@kGfCCMY,QKRKMY-,JXeK`
+)30)!F0p[8S8eD5&j3,0Ph!hF*Gb$G&Hl$S9hGB0JGAb`RX4"Y%RGld%4F![)R3e
+JZVUq`liqq"3qETjAB#rS3bkUU&c1dml8c,Ld)06G)2@RM9ZMQYS43p&0d#JPGXK
+Iha(kVjYb@+5'SRDj`Y'GH@3%rRNG9GA-84SK"e!CY3BXpRDR'Bjp0D-[BhYm#ir
+mL&a0M""Fp8$ee3BMd)c*D@m4S"mDDRGTUQcXb8CE'Fi$@")40E64GV,#&ZMD!(k
+G(B,,iY+B1XUP,bjR$8U3!$`edfJ,@TEeXNBKLmZXY,KD-,2r#(HYj8@D[%+0([q
+D0B@DqCTFr&["[LmGr3&**LG&cA+SkiRqb%[J%4[c&QMdZ%[&$SiH[L$a$RqLDDD
+Eer8QGr2HGRSLa`p9!QdNi*jVbNQR!V&Q1Ak-'-Va)AiQpaF+JN6J&@UL),C@*EE
+`T5V)cJ8C!qpVM"RBCqEScP(dbRe+E2+frk@0MRA5i9$L4M1AR$U8-X%l+D1j-h`
+Hi6TU`JReP4XTmrjjP0'mImN8V`lF0UXdp,L"ABBF0aPMLlP9k,5dM#(S@X(KcY(
+mjf&N&K6UpIbPG*AKjEl6iJ)[QkfcQeXejB$j,JbVFaA2,bM-bjq[DFbTcc&L4[X
+kB)ZiLXr,,FKHS#r1cXm[Q*m9qYT8N!"ET'NcGeh%mf-99ZL"`16T#,kR,lX6(#R
+HMjpR'FfUXTAPF&3P9ZVlPTE9c!9-e+qd3iJ+NpqXfBf0""LEieN1a,!E42,NFc)
+e*VZ$q["PFh2dI-DGI,RCkFE*-GS"Rh`F(QcTC2c6Z&He`-Z#iQ@aIY(cDBZpe@b
+9M*FEFr)qE)TX"S`GBiEHEM`&&&[MJ"(kBQ`i1d5i"e4`SfhX!5i9''`-3k68Q&0
+)hkh2!9,!#E2ANSN6j5"lfTa622k8'T@R22(`G,h(DJfHN!#d%HARZ(X'i05%eih
+[9pr@eNCCI0fQm,V$[%iSm`#aKYbLC`*h@+K#*U!Ml*LB+3)JT2RLDFYl-i$!Gk1
+V&Z5r@El`ZZc@X+&8JQfBFJkdKY3(r"8Ah9!V''(J)(rI4bh4SE`&h1%VFBpGe)T
+12X-4DlF(#VfFKXUKec1M"PC'mbFfDe$[1ePYeNc5%rq4bN@[b@"NL`!&Efq@KYU
+IKMVaCdc4f#M,!eTcZFISUcKKm#GfaK"63+U4%r&05K'kbD-"`GEZlU#ej$X8*l"
+r'T6D*00clf#HdpMXN!!-jRK41qeE0`lTZ%l)N!#FPGd``AD1$&B'5pqXUK[pa$B
+0*A@l$$0qa2!D($HbV4j(D6[Z61MiD!@PI5m@`@"BNVX$HqQVjmA[f,kq,PL8B-'
+"+1a*5f)1N!!LmLh6f8fK4Km1GTH&Rr*de)Z%[fQ-A[PSpBMb@D@l1FBGm%@Y5q2
+Nm2BMlX+YdN&0r&Fld!@6`[%(LDfX&9IE@#1DLMKhM)5L*qMceceY4FamjhL*1XR
+aG#`jN!$VPKUKie3H"ISNGjSrSB[I%bKS`$!S1"FYK8*9a"VGNbLb#@"4m*TSP%`
+Ymkf@%kXJiD#$EaHG-,eM,8GhD1L-+8)8D[%-T6Hmbdf4m-m&H3I#"[MdieD`KZa
+jGR[M[Ka`R6`XT69h#NBX+PqDG5MF9!"'B##l1!qA2-iF1J5*+QM5j"8((kkhG1&
+9Y`HC!(EaX'rU3M!'4LAJ-@QL-22VqI`X5,0m!mfDI-SeF!0!BE`LIeqH&pfrARj
+YVPDl+%ld!Mp$meIS!GN3ZTVCKQ6bXifHGR'#I!EfLRGX,cYh0EC$1)$T-Xm8")Y
++BfdH#jVLFpIF[dhCL!,K+JL&SipTK(ca-ZHBbFh2VQeaRpQ9)FU0)10$A`MAHAA
+p656c+!jC+T!!!%&P)lVl[P#dUbfJG9U$!j!!&S,6PS*%YAUV*Nrrh[3BcH4eY@b
+A*Mp8GbF9*mK+%hXc$X-N*%L3!,Ji'$30A86HP4dD28`a'!d)6R@j8F5E!bcjfi#
+k!3aElH[SI$3["pCFq9mQR)QXS8A@5rcUNj0SYlXk"4`D+T[$X2+GU-fE[3YE-Ve
+12CVL80ZbM'a(TNe5QJ+b"ap`DA,cJRAL"RVT0UmAQV1,mk@&C,8KGFj3YU%-34'
+@-L`aG$C6eED!dZV,hJ-@1VYJb#E!1$A!*B)QYcJi!#PXH5A@%5*M#Xi-q$(`%F'
+$i(f5-d19'D5E'3@BJbr6!b56PhGkV)ScSdjlUdGDE"j!AqVICV-,P(8mQShd'XE
+FKk#5`F+$8D@hqPL%+c)e9JfmcS1c'Nj3L&l")6%SLBVF%h#0B@rh%5cQdQ!EYcK
+D@GU8i[)5G[&Q8Rb"3BZ00S4TdSLeY$X%H&9kRADNe-$C!VXBfJK3#3dRlG*aTSJ
+2Uf+Shi"MRC5KARUaH%bRR%iPfUCPQX*XSd2F&fN5emdq+#(NVX)"-J`kDP#kS!!
+lSJ$eS`%1mme%c"dT*AJCH3X2[GIYFRTUkN1ajQ#UaU5eB"2j!bc&4`1NF(RB9q`
+(%#d6cc5cl@kKC91B"2#1p$b&j)5BJZVPCSSQfYmk'd#18-KL(EG#k1qXFIJQE6S
+c%c%"BT)G9l`3)[3-eN0G,3a3U[eh"fp-,+#j8!5FN4$M)"Z!d&Nd!5"4PcL')Ui
+AYf*Mc6a@UTmQ6f&re1S)HR!)Qa(!I4(X1kqqLLYaG0(4Ll%+[bTH2m6j-IX)VN%
+Z-pTF-XdP!f,cPj9SlRi%9`"NS5lhN!"C%1ShRJ61RUA"TfBCP&f#-bq!#!`G6%h
+`bKdEVYfN'@bTl90fT!i)aj16%$"e3E%Qr[2k6"jmYDX9)I@%`FYqffR%C+"F6eX
+CamZNR5l0qiiGbGm$SRr(cpllJAr(DmKri"C!F@eqZlm@r,rLfJ69N!#@8fj+i)D
+d+Z9$Qi,r2LQpq)$dqe25lhZ8QeUh56AIQK!jT)dm995IIL$ipP2"&rHF%k6!%2*
+HdCrJkMer(5rj%b!E%84RQ'J@b5PVZ!cmVX@$*Zj511@qhaYafZp50$1*N!"F*$F
+`#L1E,@09+CE93#'62DMbRQ@m8imTi`VEKMVI,e)l1YYQ%@#1fFCII8@#aXiaQ"%
+h3"kT55[(A6CV54bKa0qql0Af$JKPKQh&m"DH4HB3)hf9ijIM@EBZKjhTp)e+3!j
+&%ADkN!!QD6BF%VlIh,*KD99&IB1ajb*q`p)HkTaf9e82l4BA$1k`l)D+(M(d*YE
+MV[SHaLb188N,QVUVSBIU(T!!X3DA-4*U%%9*N!!2rGZJD#D+q#KjUjR&hD'#%$#
+`K!GLlaIK(h4(Q0KCf(dRf`%`i185b1TUN!!Zr@*5,`9PXEV2&[!8`)2cN!#d%le
+h5ChMqaNN9h3HE9T`GLe+IfFdLIK8RrS42TeY1)P20F-b12Kd1ECCDATXiJ8%5`p
+0@!2`!'j'br93$lk8'0NED26'A"B44hD`jhLaK"!0@8V!bZ1f4J)Q3a%3pUcY%D#
+mkQS(rfd)E[E3(A2EUBDcKjh*$8!I((0ji!afNK!'63-R,b)J+2SK2I-LXKUmQNA
+bF`QCLUQYc-h1cYAR`FP#N3@R(%D!2KB$@CV)2!PCNS&1rjhK&I(P&INIiF[jpiI
+`"HiNY6'RmH8"14TmDFC1%r&63kl%*@5#UYb-$@h'PTm$["&G(N(qKIKRG(SiHdK
+iZ$N(ZhiMZhUfPf@[U&UjXKCh$fbB$pLc48@$iJI'3H!#m6&NJf"P1(b,[6AUJ@0
+,DNh'-M)A#0)i(cBkZ&AdKX%*mq,3"G1*[9kDA958$mTh@AjapJ)N1fJNSYT4Jk+
+i*JpT6Mr%Ub(fVSC8LHJ$a0+V+3ak%Rqb)[lF)1AB1RAIr,S-$[k%qiEZJKEXT8F
+Gh"*c2N#G$%R$"5*mYf(X21MB4Cp(N@0V,C!!3kiAkSLZP&BF%3[4@`Z1P"@i8Di
+mJb'fJd`3efV#&iXE6Z8qZIA&6r!"#&!l6BB((eT2i`1fZ)S2U`M%S(biLY-k%iS
+dlqKB55i5j"@$"J#Sm9)*$iLpCT%5#Qr`d"Ye&%b`442d6fM5K)YP!9kdCQIMbd)
+`,Xe&aGRCqF9&"-LbkArF*jQUKK$ZX06AR8T&&,,AX,P2FQG`D4*rcXD6MmRZm#p
+RNQDci#`#)6`('0''Eb4kl,GD,3jq'H0DPSC`!kM6db'ZXh"ll6f3!+b1B"j%QaJ
+eF9j#%ZTT(Y`[GJMV-2f1&JX6Uf&I5%M*NI))DFiN)&@DVXkM'(-QJ4DPS3"e#4H
+A"A("$+Km[piSiN2$1hqr6fUq,mH$$mLi*&IV1D38hm39Jj!!SBG3L3pQ5MS("JJ
+BkB-i8k%+CkET06ZNe"2ep%TT0jBEHc,&b`9jDLK%A81`PQ'#U4JkJYjU9!"'Z#Y
+A,ppfm8*T"+fa!$La)S3Fc6JFVN30DT)`"&F-DM#+0"F(aeMKGjHmr!Rr4S+-rbk
+$Jam6r0XmE!mLZ25Xb4EJQE*L!HAHVLHPp!98fd1YiN@a8k#"'H!qX4qD-AU`bG-
+"Q69%-q(c*V-EeMN,`ELZPIb65!l,`IcBbkKIbNj"-VT"mfTmFEH*X'28If$ScL!
+,`-r&'J2(d#dML5Fl03301%8J$##&Q6FJ6$6HF,pH+k,%SrcDEmVah#I$hDf8iT`
+$K'R$Yabr$!`*PFVJ0VL&d59dHR48ePD8eUlUS8V5VT!!c!5L!0%'3Y!,c`Ud$G1
+$["#m1PJCB2JfCYR`JZk0jJ@i0jJ,Z35S!I%GL"3!$%&%4ZT8,K"FYZB#d8'9q,@
+Pm&mpTAm#[e%l8AC(rh3fDFCE,#GZ[ePJfY[%VlJjF"0J,pp('U!1JEI+!$XCbRF
+VhkS%)'Y@QUSVHYJG`RM5L3FNL@V[#Ckr8$QC!aKD&'d&Me`cd,-3HkHFhAK(4Kf
+9$qUIF''3!2jTTlQV`l`HpP5iIqGLffmf'Z[U4FXP4LZjHXqMQ)-l@2+9V!`2rc"
+rdSK9UH,2XMG$q%-T4EmJLi-rj`&r[)X)YQ-ZDE%h0`[G4GM$@G!mYE1[a+3FA#p
+BVGM9-@,%#8++BQCYj4T45-Uh3$e,S9TJUA'3!$fR5+Al!5mNIqd@h1X4$BkcmS&
+!GEFZ$!")6BTTpX1QK)@kVLicb&CM4h-jNpijYc3!3bkQ'!,#ED'))@jd9Ie58mr
+IlpYDPHc1IAXHN!"MZ,2C&H39jS!eD@F[)0lNm+!E42AQ$X&'AC*`ef#pcD1e3Kf
+-$FMV$L+5)Aij94&F"h3DS8i2iJ6Ka!#l2%beL4h*`a"K`1bd!P#)UIH#1F2YJZ#
+B4rQ6GQ2C5P%MahIaA&+FRjm0$66HA`PHTFbDC1UAVD`@&3"@2LHA-SjJ[C6MN8r
+rQIZPHI0jr[IMXM[i-jp!$`m-D@LQ"dJHC&T[85%fIc&j$eXB50T#CI#bc`Tj!2%
+`#p!44rNcqT-"k)CI'8)6E2imbKA#j'L-D5j*68RFEJYB19`P0q08Ch5"YQPP&Pm
+%V'(%J$*&%D-bT*0r"MpD`rVjirMaCl)lq$&A`Sm9i-T)ee5j5'iNbm"hX%)AYbh
+d[(hYG[KTN!$KrQ#c"FHXa-a%`PpL8BLc3aQbY4J-jM&8(%'2mmLd-pUN)1GPh3!
+Z@m+@4T((JrbNZCKH+aH5qQiimH*)k@'L+G(e!Q9`J83S3fh'r1jbQT`JVBMIR8[
+D)!XC[BVUU!NreV1[N!!)d'lh8SP5"Ycp'P%#YlRR`Yb3!,N!fKBjLSN4+3)"q"8
+BlYIF(k,r$YGX)p053[2@LQZfZ4"haT9JE6C,c!Tb,m28p*!!L!i!!d8(0kJ#2Ua
+FHPjImXZb1rS558T-qdY)3GiU*"8MAEFiVH6Jq3T0b5K[T,VZ5jQZ'k+1eiI5eCS
+ST8BCJZUa-U6aBfA)YH"RYNNH1$Jp4h0%63MZ#G@%Z*%F[MpA$Ac#[e)bJMq5kH&
+Ic`8fp!-'GQFh,bM#KXi$1["h'%9f1CYa'*!!emR0"'Q(i'PP$0PTh"!fGRRDk41
+bjL@&QNEf"HXkM&'B2'43!Hc"d@()9q99d5``kK,5D-2GJC-5,N$SDB[&KN5Sm)i
+'VX`RiIX8Fb5M-GbGa-!+SkBSiSBAiFF$)RjFppa(q,&Qr8RmU+f4`F'2HYaK`CX
+3@e'6(XD,6NXRBX1*A+d))[2)BYbLKZGU#-NKMGEC,-"GbhS3jh8[[k'Q4eM22(*
+!E4$)i'iaI2`#USf&r,S9hjD6Q`M0PE5YMXCbh!k[D,,TfBiN8mJU,X6E"ZKb)E(
+&[3-LZ%m(1p*YY5YBBLBUkFbc0DMVRT!!mKZP0)35&GS-K3&XG+Qp,8BmhGjB@Pe
+9AeR"'VH2f9N0P3QKa"rPr$'-(FAi,Mk0A25NI2rSIIc+1HIjNir)m2!RZbQ5M9!
+qG!kZMC[B9m$B(X(H5R-6l+!-5SljkD#*S1CPQmql5RZ3!&F!3h$Lh)LeaChGaF5
+m'%0RKpd$fhGFdYMpaY`aPQdCY4(!98b-5A0B%HG'Fr3qEM[[$eEc!pNGIGaCT*d
+'#iBZNI+$hN5r391f(j6+E,,XY$D1*TYh#"!TZA['D0@BIfZ[++2-LT@cEDmSDkK
+VA!Pa81cN&5[CR*2AI")b+Yi!LfM+(,#8DYXZ*Ubc62hTjPRV4TT[eEUC3AVm8(e
+hqhKiTHRliUpNGqk,mi%IrC!!)E&BCeN4H*3j80hHa0k3!,dF3[R[SAjb"!TPclQ
+GB1"3Km5B1'6j%V&Z%f4j63NK-4H4k$,KJT[%HH()*E+-mIi,bFU`IUjcl&`44TF
+p[-iN#d$S,JFGGbA`CRZS$lj,m-VF*FP)Tqi6p5pFqqcIq9hJ5RU2Id##00f8jGe
+a$QNkU#+5"*BLN8-+#(ke4l,K9dTBRlAM$-lae3K'F!M4#i!5,cr*bF(!&DNPHPR
+-5I91PQ$XK#X'IHV"%-8FhlBe9R-(A1HXm8N(&*c`(h#-mPBD,!6(eVB9P&&HH+i
+qZ3m8I!b*Bfl'dD`FFf%Y5[Ld$XY8aDHAY*l#TjI*i1$6&GKGP`@!lU(c6L,6mQ,
+#`fYT!TFiF#J8EPH5#mK+#kb)VA0+,jMUhBL'DSmGCe#!HR8LQ``'C4'3!&!-G1M
+--6-J9'N"#Te$UQ!$hB2)-eX[Sfc,4ELQ%%d$eZ31A@!hL1468YQ%cGJD&%XCY1)
+%%$Ef#Z4C1-IEDZVj"I1cpI2eqEP`"PT#83M+Q&H1SI5elb%5cHb%rQip4RMU2LG
+rThm[Zh1IRbeKdl*#-p02&A%*U2pUkY(8$b)DilfpLISCf*-(4LV)l+(C5i!IZEP
+cU4!2,Uq(@R&JC6HXl-RK0e6$"kTEY)6#Tc'RQ4,F`akDKPJ[G1B+SDVCZ0aB2HD
+T1CIN,LLLIRAibMHidpUjXFhJKr,(0jdV8XD2qf4mm+2lErM4$'@FXXCGi*6*L*`
+bBS#Uf3pG3hqlZ39h"+#%03Frc[5EeQp1N!#"r1l'D'S*h%(CDJ&N-fNeb4Z2I&F
+EjqGRji+dBB4`HMXhQ#Pm8(q#$E[2kf-5rm+8((h-q@-Sd31e6!8PjX&h`,-UG#[
+JTY`$lhIR9$KLAif@%1AAQU5BmjLi(S-@#l#RVD)`"YIRFV*q6"QcSCZe[6CRA2p
+5P6Ii'4`k,B5KLK[-l4iUTBP%-&YJHSr!K8ElJ[Y@Y5jZ"5cq`*5&m'FM*!q2hbI
+[NI'j6hVrGTpFcY3YcQLFFMdJ(alCG9'8JZJ5J8)'c1()HlTaic2A!VdiZ9[3,G)
+5GTGc3iMZ$mhIGr1E(qerbl&6rNj$-MMl6llZ8933X&j31FN#iL,)I)!#jb%&JEm
+r3UiV4-N#03YE(-2[XQFidXRd)p`$AMP$RIT6h%KfJkP(2&N@daZ)-36p[jLb'Q3
+Vd%L96PI!B5T@iNQJ)(5YLCVT&1UP(Vr$$QD93SNiL)8ETGlQF8+`E'l"k50PTpR
+9)5RbeZD8dDXR*%5P#M2-(NkBqHpabk3mE@(F6-!eM28`IlH**[NVrjA[Q`IPH24
+lXS,URe'jEcT1mhH8c5"bN9CU4S(!%mZ'c9[E```A3GU"c0[3Je`5MTpKE8h%h,%
+ce&`ifj&c+rP%m5hN9AefB-Ir$(qhjGC2m)-3)T9(rmRVD2`c+[KK(&08(X`QBbD
+J@R$)L,6U)L"!akbZ`[B[3,HY@I1"$DL))jP8$KP#*F1f'8%++2BLT*L15'$ZLkf
+VcpmA[b2IJ`rU5er"Kml6pm@kRLl"fB,8l-bJR6JZ0Y#MSUd(l%X[c""a3#0a5Mp
+XRK4Cf0GhEXKE4G4ka,#`QpKbm(cXSX$)89$S8I&(li[Y[rLl2Uq3!'mJCFGr4CF
+52"VjVj53!'3KUQb9I$0)0BaHfHf,F3"9kp%2DB'h3`e-U4PDm+DNP*[,DM3ddUr
+Nc&[acb#&(&@2&(,8BS)2kTraUSreFBNqi%DC(hh!mJAQ[qN$&U'U)q@Fjk!SN!"
+Sl#b-8bA!FP`)T!4ST-EIM39-#I"VBdU!0T!!E,#Jf`&K@RDP+,lEEPN$RHFQ!HB
+VH,6j!id!K%d5+ipB&"mX$lSQGpQX`YSKpa"J6-`6+GSXI#j`3#2Cd[-U!TTIT#+
+J4AQ52pRK1hmIhb[ESbpB[Z!MrG1+$j(,j59B4@@8V!$G*Dk!B*RH`1bQk9bQ5FY
+*55j)'EG8[(`,ZMJDabPm82e6aia2p!Gdhe`Smk-r)'I+U[lJD[J,XV`Jlh%`l5f
+jUm!e#Y'X-%3Ai-PS#DJAZRDELQ"Cd&5%#q%+X['dPX!2`Dc1#T`f%NM48$,YL-'
+R5G%`q#P[a14Z'9l6E6mV*eK69Sf,K68#i'3LM3#0UiJrkVr4qE(rIF+rI&R'aar
+"A#SVmXeriep@%f-EXSPP(AE4aXcFVm-Y,8b@JX0P96K4b*SkBhR9XT8K4h,$eD`
+!Je[JDXMGTq56ClJDFT9HKZr9e##8c`DBiRcch#L2h$I+hlcQY[2h6CY-chhMX+A
+lErI00AJ&PTqcHQ+@j1#U)8&+*ijH1-!49NZecXHP5b+M+mJprrA#SET(6acY0ac
+Ph!FIj6KU128rGBH!HNYia1i"J45I2ff#CE9BUk#RDUmbeCHa`Gj58e&I9NXC(,U
+(*"G#K&dR,h5M$rhqBqIjQjq4lH&[9Z5hr)frD559L+MQ-N%JXad&Ad92C2m)@mm
+qA$qFDS33M&ceVA-e%#bN%U'-5D35485q"TSpK,JEmZq,Z"XD4FcIhIDlmrUR6mM
+fk&[)4hi10Y6X2d,%)6CTRJ)!%'!*(0(fdG#N3)%HK&)K(h`5KX21cMKpm[daL"!
+T,MH@Z1#(G"LN"KI(mM(i!a%5)%0H!f9h*l43VH1UZGMZhZLIANYhHa)I8S2b1Ha
+fHZ!*45cE,)B5p"ACLmEDS3D()`83IcCa`VfFAAVJJYF66KjQ[2(J!%c+!Bl!5&"
+LM+Jjq-cf-K0bcp3c1eP1)mE*(6RN!hN5Q*SMJTNHZpT,2M1Bc`&cLI-j50SR43i
+cZLVre[I-*r`ETCrrSS`2rhBZ`8Na529(Hq&SH5'854Z#hf%31p)Gc"DfP(P3VlZ
+mS@*9!q+$q20be'j(BNU'NdL6VD`E+k5#-c@P)hM5QASCCV+p`A3QI"2aEUh3e5R
+[&NCimXr`&hXqpVp,q)ZIP0fjAcfU`0U5(&`VU*,"&EPG2$q%mf)Y,bGAJ8-6'Bf
+4hAPf`k93AaV956RE$1[qjp$-9l"@iI[8CE))BbMSMrSARZF[dRIb9i6pErairkq
+5NZj`'%TalLdYrY6QNjU$H3ZN*aAHJRa1#!qZ2*Pp##bUb6l%k1$b9i3KPHl21b!
+#2)82j'rr0c)lqG&QikB$fldA36ZkE0Qi(Q'!f`58H$QT$,i#L6'!Q"4)#50@)pY
+S%CIKDY2CT(Y946IIThbH1[2`,'Jc6*+,X@I%Z35*h%Fld!2URNUGGL@fhZ@4Le6
+H63[1MRD#hpLEq!QqN!#rEaS1[a(M5iBJk(HI9FcLJ[fMr$&Jbf%T#A&Y&h*B5c#
+V,5h3B-"SNS0p3!4L$AilB*G2ZC4[-S[ZUKPSN!!BF6T023JpLPb&FF)BklE$3)0
+JU(Q'3YDdbc,[Q%9m`e$5*[+HS)`SK#Zc+GXKGiVcM)Z(HIc2h,F$(r1[bAfEKT2
+IST!!hfS2V,j01K5br3C@p%%P1`*h5IDQIcQbjS1$*6$*Zq'D4(H%ZSr$AX)ja)8
+-+0&YLiXdT)L"1N-L%R+QMi+R11-&m-2JK3lR+2meq12cr0FlCAI`i5b'$b[eSRY
+T"4m@MHA6'd(QB9CaM)S1p"cdJp)G$`6p4QB5IB(f)[p43S"PB@FhdrlirUZrm[$
+(rU0*IYNd(2r[3Mi"@F"ZE'9PrfH6@fKUbMiR%X!akHQ$#,`Q(-fVrbUDb3[10B!
+)mF8L8`GqMZ1#BP64Gh,1`VR*liP"JjQY(+0%LpM$e*iIhLl15[SYAh,Ehe-2P22
+,)URqmG`$beMQ#Sp3&E@KZ9rhRFZINJVNVbAh+c&6eI[Na8J%XYX1RBq0,H$de(U
+6&,Q-9Y`KI,-L%V9,pEN86Pd[38SQ5Ye-)GBT[i!$$86HPG[&DFV-D+TrXk6lpA8
+AI)32L6rPqf4kp02RNc@)Kd*T"%FJHLGY$I%DQqJES@+036bqS3$&mi"'M)),8++
+hCA"(T[$@1'1-3f3TBNSTZCa4@D2E&e-AjCA&X1YE"SheRihjj1bN85m4i))#Rf`
+b8`rF5(qp%`E1@505R25F6(K*%qL$%S$EA-@Ec*5RFcipkbe)JSe"l8'H3erHaLF
+#9BLX&RPU1G&48BGSbHMd,NLZ4jeEmIT1Mj19h!Z1',6chTj6bZaEi@)jC"jhdd'
+pi@b6TaQH2Y!VQ#adT*0E&YE*&9E3h8FMhrT%AdRkK$3FIl#+[[)X%ImJPji&9)T
+aMj59+cp#1*FTNcB!3MP1&Ze!cLJNXHGRiMU+8c6!13`SY0DmKSEY!3j(b1!5cTR
+K92@6Bij2p*0T2riP&`!M)+`Gb9j23f#ZQ%pG6+i#9Y!E'pQL'")6!F+`a@YS%Y'
+4Z5lSCid4K)5d#2Q-XKXZl['!5"NcMq&(dGX%QUCBCERL2bA$0)K#1NTbN!"@(@9
+KP"0r"Prf2hJHAa*p9+S2[R6rGhbj#HT+KJNS,0-+8'EP2e!'YFG4TX3!Q[[f!,+
+f2kj25-1jE`[kZle#"d)-064lR)LdQhI$c'd10!QEf#YXmK,H*#AMd`)fZaS5L@9
+)0Y`Y$jc+1S$'bB1hbbRDJ`fhZ-hVJhDC0V&Dd6'Z595fN!"9'!JrjJ'GCeaT4,&
+qiG$(q335rF)+'4lp!K5-H6[,9`6QJllKf1K(8"h5imiQAd,H!&&V)`%@r*54FXI
+N$8e(86&!@U8U"V-QPI[icR2qmZGYIFqr)JdR[p&d[Tkp`[VXcKDiQ8,)+HRBV`C
+LBGP[TR##D%968NqkN5qMbPpM28#Z&L-!%C`aV2"dUG3,bGKCk6"pqFiM#)kGj-A
+Q+aJD[C!!R(ej!6+#f,Xi'@6ecrKMh[@j[q0,EC+-McpdKZ&,RZQ"9f"l,f4A-Y!
+&aK8)[)$e0dDp"Fh`3Z3mfJ`UCGM"1cc09J[,[$"jX1$'!8cY!pr5K@2$*Q!YQb%
+S%i0**)J%A[LE@C!!bFJq6R1r2&Yr%T2Fm'2pk!qF`bI#Ri5IHEm-MrrEAUGG3"a
+N4-bKK11Ea+p!R5i2mK1aqeFM&&SNcS+!X!GGiL!5Mbk''+G$5*`16%kl@,P&ZQ*
+QBQ$H5cPmLBNKQhV$a0KKm2kV[pIVcq@I5rDIr![q$aQHr,6S*jm0(fp`)ZbJNbA
+9H''p[94iKD4V((T[,86LP,6HjBCH$i&5Tl'(MQ%A4(I+eD&Ch+3%%$#(3faS$4@
+08*P6(LZ!IAC@!8FRMR#&l"f-&8kp&`pZr(j9I[F0TNr`Jr3$k6[j3c-%&2q3!%5
+aBi2*@`AX(T!!3T9c*RpK86@3!)(5cNCHAm@[l(ChL"BSm(M$-[M-rG4Al#+j3NU
+fcKV3Y3,m)NN$5Nlh5mmNA&mH6P-4$bVF&rqLlc`qT2(F&flYa+AJ5Ab3!05&0"&
+e%U6afj3k!KB@38ThK@,&5LPRi@@B#b`Z'UL&%rXCi!+P9#B*AVJ-&I(JaZm,aBq
+llcL2(fNiq3X2i`GP$(J52kk((f@2KIP&(ZL![a-jB!`cfeU,'T*P*iV@Vc'EMZ&
+*%m-6V'Z$dH%mjBq4i)PcL)X('I$MMGGq`Um5I[b*M!prI`i*8YiNEVi3@eaPkYZ
+T)m'B"9'l'#i-dE'TSQjP&E@NC,5!`SdMKqqb8$mj%c,Fqc"9A5QAr5Ifp%`LYLN
+Xr[+`PLd-Vm"[r1#XMr!Md@HRiIKA61Lc"qQDFdEkH8LQKfq3!2L)jJ2fJYM3*SS
+dj&X,LT4i-iT5V"IV!AZfPHCA%VDX!hN"a)63jjFr%bUJE4f)GpB"2@6Ib6"kP*h
+"qEq4,T[8DDV,0N1TrKPmq+&2RHG22bLlFjr1)CefJI'Qjj+9GZ3RfF(%LjTk3h)
+QdCP`1f,Z$m!EqHSXR*Y$b)TMh)qC3iIDM@9"%MVqU2qSD(XQf9(Rj#CM1ITRp'0
+[kMU[(d[cdHr2*3KB[4IN)hEd3T*'61`VA%AkdC(QN5mTHeV&[,aiKP`FhA"F"dj
+33ZYZ*be"i%&Aa3kM+C4#JRbalIA*f5XMp3kl[8hIRl-*HT(E-e'3!#h,,mLH(la
+'h5L2i)[H(rGFF[lqq)!-$cq'F(E)AElIM"-#[$Dj,'d2[d"d9'3hB`Gr1%$3I)e
+r+FJ`LSSkBVI$LNP-e4(ZTXGTF9!(N4,c$NC#mKX)qd@-9kXH(VLD2BRLMHMP%3r
+N#$kS[Z[0$hb%$d2I1m9IT1(NHcLA*AGG+h%Ajf"2NIZfPcSUC2"["liC0`Ib6PS
+GGJIX!Z09m8Q5a#-)i3a$Sb%l'!pR4'1cZ+!lbKdNr[X,3J`SADZNjET%4!BcL!*
+rrX0AIF*INEl[pf9kq#[&!$"(Xpl$J0QNNZNXqXpQq`lDpj,I80P45lf'1%[%&@$
+IF5D1dTDS'iXcQV3Z*$D)RBI)HPBC,M1fSrIP@kDHeepm6)C((`VI5'68A*P,Y6Z
+%(I59cDQJZL*rMZh-Dd%$5LS"XBT[S-NfF9-1QN'Mlc0$@d'FThAdBeeS5*42UHR
+SXQ`pjHXRq6!S,rb9q0CH89eYV*2Z6DIVFJ1UiX0EAcL2$qNlr[X1(dLE8m+(aR2
+iX0AHE'rYCRNZmUG$(*l%L19R-S4`QK618jGJK00bZ5&9p&Y[QhFH(ciVhi-26Aq
+p(ejj$KrBXhDA'4C5Q[`A#UiK[Y[Z!9J-cAAcDfb`"B*EHH`4'U%&Cb%9j9p`YkC
+!C)3N4E4`5LdhXU0r"MrH-HNmIU6[j(Ydq$&aApa`$Mr@J#k(BQS8!6!Pi`H,qQb
+NThiE3'92@'XaK4k9Hl3CA'F429c@"cH`ihrQ2VeQjRRm50r*Yq2`Jr)0PI#Mk4a
+qE)"&1KiLeJk4AiJ%#MTY&-MKdZe8-3-D#q!$S`Eb-bPU8"6-bXhK2-MFQ%VhaH*
+cq8(+q*!!KX126Z)$SR603IDBJ!mP5BkQq"FlB-VTMTflqKb#V1YbShHbeqPQXAh
+YTFUCQ#,F`1hJr3c@H0Vr-kpK9&iYq[$`$YqR(cqA(lZ-(fNiqBLUq%(hkHArLKr
+BX1ZSPiiFSeN(c1BNMN%5F9EMA[$TNHr%b#!-K!IeF35TA"iY0!JblT)LKTJ-$`j
+$b[kBUJrm%H8RqX#d(hrIH34*(!BYVHjX+F)JN!#I(&Jla&HX,'@N+%Ad`UC6NR@
+A[$G1B%qGe-2l133q5f,A@bII-k8dQFpPVLG-8AeJDC5(p9mrHXjI[1c[PFD6lbc
+I!Iqh2KY%0A0SRJrjQZ-48J80-%-2C3kG(A$(**1Q%djI*c+Qi(*G,LB)S8Z$9-M
++FEK4a2cA[rc'4r[[r99*rjH'iqm@qkYH3%46[3D@l)ALjXqL0d@X-qDc)NiY3lU
+`48`A"P9S(faaNEFC"-GGY6h3rZ'%%,NSbm08pBA@[12TZ9+q'()a*5@(ZTJ@KR(
+dcpbIlicmj2iNrI"rNI'j2bm-)J8H$$V!F)&QZK"Z1a@XL$L`l#AX!Yh+8Z*jJah
+f5ZN+1kN82%p$UKf-P%@Q@hS3KKlf[2Q1-3AlCGMGGDd8P6#'R8CFTLl9,0c'ME%
+ZVY*CF%-9ja4LCmdY@KaV!9pqc#k,a'rB5i3BKDle@0!,LHi$G,Q9&FJK%-8)1,1
+&i-bqLbb'!b%mD!!H012Q2Hari"%%,&[NS!Z$*qY@@KMP8Ah(MppbrVlp4GQGqrE
+m)+SF3)582,dSCm&ESi)U1fN"R,G,q$,%i0Q02EikP,6*%rIPq!,'ieXZh(2*FU1
+aVMi,%V8HkYrYlec3A2'GDiFbL3rUVr`6lhjbIj!![h)D6[lBDIrZX*5N$58APNH
+4BL'Bd6Adq#"`X%H(Z9H(2#lQQJ&PZb3C*$a4MrI&`5Z@'GMJ!NEqFG2Cp&TBSQc
+bCMBZcYYF#&`r*'6RdP"21mcG,&R@66Rm-P#qI)L2d!4lJN9m[ELX&B@aPqk6Gj9
+m`VqQmrK$cC93Kra4Q(mYj[eU$ES[3%4%!akf`3FEXaDk9FQ4f-3EFA3Y"eYdL8)
+d[8J$-SH!M%@Z'HCLR8V4M@AkVcBJiX1l%H,dFAlq$E)lq!"qAKD4p@F9I&J36Sl
+J08,6#8XE4F8KPTjFP(RVRFV304[fqcf)XI$iI[q!M-pqNckXXYrcTGc,X%(`khe
+dZaZT+`BZ20jZjrRQ@Sh[ZjrFFIkqqkKmchkhI)MIUh(P)aCY9c25Z8NU$H)ZNE`
+!%T[%FiFMhBhBBC5#&06$eR@-[e3N`1&150$@l@BCm-@(9[cF+!PqBcl-Z"VcmC8
+a`59dFq1CePIme$N#Xkb[q*+X6rjSXiU8V+D%&!Y*1jcE$X$e!X%,`$%KhT501ZV
+iE-l[!,lE*QZJm9K[*N0MfR5E0UXdN9)QfiKe"cb@j-'`5F#4T@HBEaVLb6qM2hl
+IlHIe&@Niq[@6q0*c$Pp@NN["&R)+!aG["5D!,L8'B`Em5BIG3M0Dp1N"Uc`Qq@0
+-)mJ&b+@KH9Sk2-je3VH%*MD*L"[CBIh%6iqH[er6H2bEG!9E2laIffN'a"iUrZY
+hZ6"(G2qS&jb3!1&BB,LX,`jGXH!X!TpKr%L0kd(`6LHFD$Tca@*)PI[LCbirIer
+mMKc3IG(kiIekJqKYi)3dhp4+&"h6QmpIUFeRlJU-kXKpU[I&[rVMqIXLMFFr8&F
+4)EqUr&J(r,f-$8BHUR2k9NqY)l1jG1*0QBK3KjJIA%+Z9j+)BKi`jE'A"EMZ*'X
+fXaYd@5#J!E1Qbm#D8YB8Z5eDcY`@j44L"KrH2d81kIj%2+m*I&Mc-6id"I&KQl-
+GFIMZ()H)h6$-hKI@bT3`!VG'l#@i$'RR+A@6B%6V1%BNrS'+$rFH2Bm2D6cqA@E
+eb,qVJJp,5DR(BQ8'ePhSC!6q&3J4bAC-6(,G5Br0F%e-S`&HX+me%XK3IX`VF@H
++Dkd*qf[EihcUK"$,aK%LmZp5I2MA2rN%(p*jmY&DI&MqiAeC&dVQ)(QrZPTJ56X
+)mBA,bM5G9plNIVBh*(ZHFmU2LCa,JJV,ck!#KR1B(rr!ImZ23JL3!-EM(fP@X(T
+I2RNrk,8jM4BQPDMe'Pd'hcr+'IIS*E&L($1Hp)rmZIrQEd`)NEk6AmrK4rAqA%*
+@HUaZa)c"+8!m*TDE06ZlVAE4fi4S#aLp`BZ8,i3Tp)"Q+qBLq!jPVp&5eJY#M*A
+ML&&38CMliZFTmrdB2[baI!mqV2M`rPa,kYfHeQjQKXkJc`CEG)"f@G'4#k+R'%&
+"pfRCacQ,8qQG+CQkj+FkFA2!,M"'%!baJKqrX&F@#6qUpqRra)rNCLhK"k5IHR8
+BIf`SaiRhH"3r'XIaBi)IrF8pRq"(@SqrXDlHbJr[Mba816DC2+*E$0KCEL'rc-@
+X(`BEM),#hKDY028qkPb+R!lN8))F-eJC8[+X@@QUVZM*'9G`0BiVZ$!QM`qDVr+
+A([S)(j*ma6I)p13VGLM4$83SS34FVYL&*)kf6em(K#l*rI1!%k(-!"b5#5-I62i
+"0(Jap1HY0%jADb(m#Uj!iQbARlJ04NS80J-b-K0IF,1pC3deSc&KV@j#+Z%i96'
+0`S8N*RMCE#aVV1rKND"aV*1RG`a+qY6$QmeV",l8kQPVJbh6CVcG9VI-@&0eZE'
+KUVB'"EJm6%cQ"jN8Z$X0dq8!MK&+03IcCVJeBAa5IkB2h[Vhqk9@*GYc[dJfY-V
+pmJENQbHV8TYFKN#SclE1iV6E'2Y1GiecaXP*1BK(ZT'dL*Qhd3kR(CPNP00&X'E
+Ba29dj2!E6$f-BD'`#9Ra%5h3Q)XQeB$35&d&Rmd"eJ+&J14+#il,K$+*iUbD+Xh
+I4iSr(a*4j&(m5F2a"k[L6j9rq4(C!raTZJM4@2DGFQ`BT)3bYi5#)(JSdM1Y&J8
+&2BC(T*80H48BMA#9PG!SdEC9%V)Er,P2,BZ%2e9p`GYP$r#Rq5cq`+N'FLDJ6Zq
+rSdq,Q,*[c*C043b%2`J0e8"eG5Am5C4cY!"9r2R`arQ3!",mZ96'"hpkcq(2Zf3
+2m+F&BA(-c40%0",6Be5!R3"afJN3(F8K5JKc&S%"AN10ICei"`'(@TJ5Ui"$L9D
+2&U'!2aqC)BI%rh#qS!Vqr)$X!IkdXV!SIGDfl(A)RGNVHT[MCaF04aYPdBPm5i!
+m%lNL@kMcAM'a%#&0S[#V*"DDZ(rZrr&jr,P!aJGrU[c2@f82m'FCa4q+Xc-JY,B
+,f@)NAj[3elTlH5qiD63UXMp`['KK@Ti#&LAD`8)bSKKrIKQ@BBrMcm8b2[K6jAr
+5$rM(jA"A'E&$L#%+D%b+NX'Cp%@)Z-JVK++$#*[S-SK-BG$Nl9hKJ*V1k!pT#5V
+k`epT2+mrr2Fb2[K6jAmSrE(,-+P1K1L9B+FXPqF%fN@--!N@`86EC$0JBbk&GLM
+@NCQXNj!!NJ%[3[C*3Ba%F8KMQlQI99rfdI6cpdZGE)qr0@8JQ-#2pmNHh#mV2VP
+I`"N5XdM+(ZUU(f&+qeY1*6NUZ0*0XMY6YdbLG*`+K9$@arlUmqIeXHNlrJh!*f*
+54ZNY`[M%Aeh%r!bb#8jH)0%9FqNC,E6*Rd&@l)`BZ'D-(XbTUFp#)TD9b,RGq-%
+Ydaa#$$ZL""rdr[feFrQhjbek,jpR'NiqjDUrBBC3JqDKpMBBS8T'ci93hTXA&M'
+b4TCfT)lTCB[C1qN'X6Dl8aNm1DA4b3bHK"%YCc*i0QFM9kUL4M5Z`rI&*alp#$m
+5IrIdRIbGja#FT`LCeZHNZ@`TI@HRp0fQ#VBC$q$C!2C%[91*pD8FX&DDAmTUEhJ
+8kLc`+-6c@UF'ifF)1hLp*X*!MYfIk[pprHC2lJY#J2mZih0Ic#'0TI@)`(mKX2i
+Z"'XL89-E)b3kl!MM4)((Adm[L`eN3lR&lZ+VV8)lE1-(%-aRX0NT)&$B!&rM%GE
+C@EE',NUG$#-b!,h"*B$S`(dhBd)h#mJp0`,`'1i*TRr#YG%!c1S3fK&MECKG(PZ
+JkZqa3i#rRPiH,d(#"%bJ&ljSHEjd"ec4HQ!qMK(eQX(PYH+Zh@k"[ViTVc#RF(i
+ZIb&I@PL8Kb@A#m9QJTAa9[$P0rHG[err9YERIZ9Xf3f#ff`9lpFEb*P3h%apY9N
+4D`ljRjE`4PZV%aF)24U23Vd3#FbGY`HP&MMU)c*ell,(c25pDaa$"%q@RlPi@l-
+,JJJ6$pMT8cjjmGraT6C@*JKI5(H*R,RMq&+"NQRJD82R5&Q$R,UJ6B!iec$%k@J
+!jX5)8dkE+RK$XdM`KPeGRm#E&@I`CN9fm9QmQBM5E23&raCYRH*Ai2pD@b+l`km
+Be!&'$0%J2C6rI4aeNNc`P1f`'FRmKPd`VdHdX4"JV1&I)X`DcSAGN!#DN!#'E44
+(-5EU#GmF[q%+CbFIY-AI6Re%0D&qBmqBKpqPT*iBQjd@b2T)bSbU@,FeX%C(Y5&
+%TaU$HGG!1"TYQ9Tq2G4CMG5fZR("!Mi$Ye9M*Y2&4"j,L-HUc%qm+ZlqrY5GRq!
+6)9!D6RkZDAb5M$G2iY-r)dDA5`V!4@-(LI`-@V(Y'q,9dMM'V%JrCERRUA3i4FG
+VbN2D`P`Q)e4"b-dLUK65iTMmGVm&DHTMpdr00YNGI$P,a"G0EjFJ#c$NXR!k($U
+9*GfSL9C`-UFGK8CK0C1N+*!!cEFD1p0kpFrXrkGI2VrrpmVfl2qbFr[I!2@55D[
+&#T3ZTj3ET@MRaXP2TVc2SFa-FY,#d)em)!86V,V0M#2SNajBGhlrdhIm3HG+qdq
+qL4-)d!4pEUc$a6e))XKB9kQ8EH4"c"a(-df&XTFhQ4(X$db(E%L(KdDiJ$%D5Sr
+L#U9h3I*Q-B1cjbb(,@3Mc5T8Z#'Y`Xd0XA)rI%BVBh3r@2b![m-%IVb#E,$f#&e
+G@AbhZ8A-,(VAa6dHSDA$Jb3`-,JISC!!3TSLbSNjj49U[-pGjPRP&33*V2HG'iI
+6Tchii(Pq+RdRIiIHMq#[*lCr'6'#3YVR%,$N)ZcSSUDIQ#R58h"m%b)61-9,1Cq
+8pemb1'!5%j!!B&SmBj'S3K)6a,H"qRqek)-$QZBArYhVRq!$kD26Gr+"'RaS2)F
+2#dP&&fqcB,l$i"h"0qkb3,Sfe[P[2L!PCdcfJQ0RT"J*e)(,))'634YqiE0Yjqr
+$p*hm`pMr2CJF$VSj8-(XT0pBZ,1Ik9DE`5hBX$q$!U4!NNL2P0$LNpA[DS'1!91
+dRS(aMGJ+*aLS#B@"8Si"T(8RT-YjK),(1`Q8#Aq'+0fFU&`&4dK([j)bPFMX)SL
+K6PT!$"hH8AhVEjrclbhV$rrQ0(im)+q6$qL!TE-CJ6U`MJY*+G0alDbY+kp[V,Z
+%5EP8)mm!)XNUJPSHHEdT)&4fI6#L&2NU'"a*p&h-9Cj1(590LG),TdHXp&U@R5F
+U[8"6A)J*lK6RTkP'1h,'"MU*,kSr[169Mr$&jlX%JY3QbHlNZl5S!S*J0Y,#XcT
+`3fe&DHdU"LTNe)IfKV$X*SU*"CQ+SPk5A",EF#EGr#9jZ#hQ%@0R-`h4Z"(kk#(
+%M3G014G1NXG)8$jFYTX46'M3ic46[E4Q*FC4#PpaUm[3I%YC0%Yj-5m3mm#jQ3'
+642I+f6(aHpE(@"6a*!KRaIKcJ@5#Y,ZXmMhmZA3R5i&E3rk-DkSQ)JDrce!N`UA
+V)Lk6H`9E)(qcQ2Y$4S4ch&q6Dpe*0jF3!kZPYE*QpKYcCpKHSMZU58p()9VpI)I
+GJrAVaZS-`AL(#b%A&2&-[4BhqcB%*AX@Cb(Y+,$LN!"$e-UK3@Q%8ajPj`,S4eQ
+Y(&BD8Fcjfp8,H5'R2BF2rLAQ3`9`)AjS,REXNG&FA!rbQr*ldZqcTGmA5,rR5Em
+[P(jI*2fH,reH)2dQrhMk6Ilap2X5kIH,TGqA5VpI)[fq62Vp8ZRhjG,[+m6IMra
+C*4#Me@9h5*Zr)dI$e,+BDSI(C4(`&@CF5'DFib[@38@i18G6DUDFcAC!r)$&!6I
+p6+P!"E9d5Q3Nc5eD1"6mC[@hQ9*l0ha0EJ+LB6IDU*Sl[aVVKNllV!#q6+R(LH#
+rHEMPV+AR1eQIi)hAkfE+l-h0!SbDYTLlD+"II)GA!8Ce-jBcMdlaB!3Ebd&HXC!
+!QA+K$U'P$F%!KLQc&%6!k&@K$M'pp96-J[(ZX)--JPk5A[6M%d*eYjQGc@DR1Ib
+J%`XrfY'Y@@Dh@ZN5!(@'@p%bVFe06X3(!+E[Yc[a65*6Yi1h)(*c(AfHT+M'Lc(
+'IUhcY!Z!SXf#S+Nd1cX&!"2@TXhC,DlE"Rc'IY!1V,0DVM)hJaE*R!j2R+Rdf,!
+e0`RfYMBREPT-JjBCTJa8&,&#"mcGQK@BT+iTGEr*$1dIZTHaCeB)(H*%Pr!Q2-B
+K"VX'YD$"Ck5M[4NE!hHV)I(VGRJqp!!"ZT!!XL#c`QNAX00ieB8XHHKqNkF$`m&
+QS6CrfS65Kc69GMXf31H0'44%LRJ`!QN*l48#p16j5r'LV1l1V,4JUA*m$CX(lFJ
+@1jBFHE@adTPDh*!!"Sk`V$L'-LCkjD+Y64E-(LLahBjBd#2Vc##9!#`)T*h"(L(
+2%jTFSUP$M!@l&MX`U5j8AS0p(k+P3plbc-QSh*Nc5DIaR8j"M%Q""F--pd,dNE!
+UFBV+r08,+&1r(M"$'#LBKkkLF-6a9d3PaS2%(bE6J("E9'%YPMR+[TZj&2FM4N*
+B5qXBk0RS)b&Ta0ePaZr(c(LS9A2TI93Zi#p64[HK6ZUUMTl+h@[DDDcS0Vk4QYR
+M2+35HCe',-@(HIkLi-@Cd5bcfR&QCYHCR4BD`!"2kHD6jaNJm9!V!"'[HT!!UkD
+2YJ"r1(km'9GRQpZQN3qB*&%DYNNL5A$&!Lri8)d)P2Y$imi`mS5BQP)9iMpFSAe
+3mrVZk%"eAkRcH+B)N80,i6F"69+!LR91TpeC$N(`F,Y,!hi@[RJJAiI5GEMG@#2
+-eDi9cqak9qC&1M%4&d"Yd1&Q&HZN*kjMIYD$hF3P&UdbhX5V[C[A[EIBdJea!"Y
+T3!cQRV!k"fKRpD&R1A%#1FSjbBqk1J&*k(Z%,#0N+!L,d8iMV!pFQ9@"fA%lG9R
+Kq5qQ#mP8!5HMkAF[dSAV-)H&)HBl-,%-!Y45IS)lFC0QlHJXd`i[h8F(QB(NIj3
+Y'+ma)"MHj$NGHl%+[0A3A*J@pY20*5$lJY62(i*[J)dd,9qh!2S*qdp*-f4lSSd
+5@Udi4jNlaU*F#%GhSBFk9dVLNF!$0F*,+j`)$S""5Tk%mVU9$N#S('4G1"kN!(C
+bSLD+E'X69jPUFS&keL+2,"4F,$l3&5r##K'0H@-cA)cfCi5I,4E(fS"NeQ#8J)[
+3QK'c"-2',PBVMd3#b,lIC9e[lSB$,B'`cYR!T#'GH%$!Qh+2K9R`bS`)%$b0LS%
+(qKIP8BLZ$iplmILmqrmalkh!Id&ASJIVdY2$cl*Q*"S"pHeR!3b48I#RrVDci+E
+Bb+J!X2)i8NH"!DrXCLA2CEf3!()VJ)D-+UNNH&3D'KH8S48UdUQ$+(qJA44&`fY
+DTk9",*6k"JUe%LfE!P#KpL[ih-cJ0Y$2'2!5J[f"dT9`bJ2[D9m3NdirEe@%Ub`
+Q4dNqPh'QpTkT"V9K*NRbPpAfl[*(E09QchrBQa6TcFm[HE[V*Iqf5EY(MMf$1Ne
+T"8F',aVb6Z(Ql2f25QeX!Hp6cZBLk*FcbT5*mFSj($mj@MP(XAPbSY+E2b[fUDl
+"4bCG[k[P'0@6+,%rm6IA,r+hhBI&lrqmq"ar1aXI2dljfeQlm(Z'[e96NFF)A&2
+X53Eh$V&L$UFZ@"V3#A3LJE+0@G`+m5UmDj2%XcC*r'Z6a,mf5EaVdqLI&EmQ1@A
+'XT@iKa",I``ZVD`5XXTN0U4UApQMdq48,6G@,p*9d3iP"4'Z2HqUBTe@2'H2UK#
+UVGD&E&h%HJ8&q#ADU4Lqm0[1XEGH[S5h*%aCV6ZTFh+1-(aEV3P'6J[G3Ubb(Id
+H&aN8HSR'XUECh1*aJ4-H!f[#ER#E"G"8H3f0#3[bGG*@4Pq5&SXd$,4@'cb8F#-
+6ZXa5-dX"+M(IapSlh*TPB,K)"4aDJ&DLrr4Zi3R1AJhDeJ&$1I)Nk'"!N3N+FM,
+KHPQF0MMTJ!jES$9'mb4GpiZ9q4r@1jRrRp3-$1*qU&r-[($AG')F3aB`haRa#me
+&CT8*DcaS6EHYXCST-9SBpR0kHY%E8#Cfq5ekJbC*Ep!Nk3fD*,d"DH,NYqJ0QL5
+p3C1N0fL5p!DN`C6ISMGSN[3'6C,HS#Pd,k30d)#Q,Fm$PQQ@Q!Jd0DY-S,kIT!,
+e-NPei!,Yc%q3!)'ZdJNf-"kVl!T6$*iB0)[a"$1)qplfJ6Y[KKR8lLfRBBLXD,h
+a+0Rh0!"bF"Gk-HcJYK8I-S,DG5S!*AKbIXp`JUDKNk5J!i0rC!86p(ZD&M6`m4c
+(&`!LN!"mrYhL4@&eBFc5K5)4,q93cK*6[YCNUDr46ECZN@p+9QQ+Za'b5ILRIai
+@L%l`6amKmlR&CiVrI,*KXPF9liIip+EiT[L(9&ZlRr55*X,GTr)5mYLfTlmp-aF
+Xe%YD(Zk0EIYX54%HIHkTCr*RjkG160l6ePBDfpD3!eUJ)#@$a%ICP9T$BQ*FE',
+@S+*-YCP`rCYR*e9'$A+m)XV,$4YQcdb,'P4X9K-[Q4-l@f(bNUKVVRNUIeEZ)e'
+6NPSH(SKGM"EI1X4(0LQ'q+AiF8'*m[5mbKQ8jNVkefe2LYplEMl(Ae%VAf$me6A
+iAIX4Im8(2DPM(Q1`A,NR15b0r8MDQ@%a05Kc!cRJLKcRr"&`QfrTS1D6*kLY4dB
+9Qj!!%,)GC!lmh1#Nkm*F6c%`i(miNpCUAIK4pQ4eFJ@%3V3A$X$+d+KPF!IDkD2
+e`4me00DZq$F'53r3#Hl#00*Tr,G'r#4m*q"6)!d$Qll'5@N9+*QNTa2pS!bhIE+
+G0@e1HcCf(AV#MDEk-MD)@fSUkXYUUF!3DV5"XCPNPKZ0GI98c0Z6SkR'HF40C+P
+N(6b8YJrKUG(R3Ub'I*LJQmbD'MCR[4eqbI`S8pX"GSdh,c6kEAd`*'"pr-UU"SM
+fi2kAN!"+@bb3!0IP%H3ZHEH9LMkKpYTlpURCCF1b0NXXDl2%XMC,,'Zca,)f5fa
+6Xm3f08YX8l2%0T([J[`@YNR5NG&[BCZD*EDT@@+EQL@fLG+Rb'pKQjSPYUPCBTZ
+Dap!pEB"[FSdpa6LjUPA1b9DBC*hX,C(U`$[jfCpJRN+Y%pa6BEJ6l*0EN63#rXP
+1S-K!*3Z2Cd8-5%pJS@cIU3!me+-cI)D*FLfGj+,X[[e20UU)LNrc83j3RQ'NK2U
+*-513!&,45kq1FSa88Z%B*a995ceJTBSV*5c6h5,re(2cIqDIEJ2rp+0RZ+[k&09
+dETTD[E8PbKmCf45Ef*@Je#Aj%j*+MqR*XE4!C(`NG%lhaMHPa4j*8#Eiij8*H(*
+9XL0+04KTpVGX[1ED2EUAhK`F'9Nb-qfakkp4((elEAV9l[55caD4Z-'((rBA+4S
+jAm6$+aiTqdS5ZHMKimG,&U90+&ZaQ43mb&Gbr1A6VY#A$Kdii,Y#J6ChF!DLL'R
+QPAi586*EiBh2@*V)mAa#SZ,cL8ha%B0qT5*(6hK10dNlHm+fq+m[[F*mQ%qi3V(
+e8S9"kBqINTLQmXCAcNmMKX3daG5)2%0'dq5-Y*LNH0p5db$K%db+KSKHAj6Kk!6
+r4H5)iULI6-T+R'#Bk(@qiFYXmPe1"YhFmi')!ckhBXXXr9"XMS,qU!d-a9kII"d
+@lEqCVdpUSkEc(cJ)%m+h("`ik#0%,IRApF*8PrjfkFraAl5-Id,jVpUlm(Z'rpS
+NG&-$R-IB,e2X5HjVVeM4d9N828RIN!"5#QAk)2lTFiSYG2(8QaJ*&EJ!fIDS%@#
+C"RYNP&-c9kp-@89C969q86L@4)2N`J)N$r&U5(bAQ+0NrK+b0e29S&P483F'aHU
++e1L(qCiHkJ#cMpSE1'TYd0j+I4afDi)C6$+Q8-F`[XdJF%HQIYR+DShN,32eIar
+%2cE56UDqfqBfSh[%"SDl*R85*A+9VcC9S[!`,4)2db,a-#d5$p-Lm6!Y%Jr6)[%
+`,4)2db,a-#d5$p-Lm6!Y%Jr6)[%`,4)2db,a-#d5$d-Th15hm$!Y%Jr6)[%`,5'
+854YJB8aE6h%`TQD9JG(hNrb,BPHU!rYLChk#Hh'96M![b9Jpff,@iA'Z44XjU[r
+hh8BFLljc$%[d)'h!!Q#DAY'*T`+3!#Xa2+8#8#ZQSC2%LY[pIk49%P4iQP3aZ2'
+Fq$m@bcFbcl%TDi$68RQU&&%cp'#FNC'(Lb4F8aiP!*CPBkM5SSr+1+8p&I02cFS
+D(ETE9GM@+$#[CbCLAMM[ppPa0-PqdP9rVmM2l!UEGPAiQ@[)Lq"R`!j%Ipq[Lp4
+2MPAS)T[`#q+I1B-MqINcjhr@3Dl2LqSrA$EK0kV(YbCibp9`al[+kjqcRH4aKK0
+c+NQC6dZif6iSI@SLFiGqrFHCHY4mkf4pC*S#rpF')Kr6TT5BViFk[9(5llaAb[G
+lF2-(r-A&Z#YV8[bi(QY80G!aRD'B$praraq5frmhaQcJT!4r`IjeF1AClHki$"i
+pY!E-BVJ0XSG-9#46CS9Ie5d1XF5YBJDl2UVUKS84b!@im64Q&HUccP5P06Dd@r+
+8kY1(I2LdNZDUCRAm'H5')L-k-UCl$LX2S6YeTcKNpr$VB9[&T`eR-+"5e(kHEfC
+H2XV$P,4#YBG*Y#+2@-%!h%rq--Eqm2EF3Qfl"@b)"43@U,3rk'H%2H!L'5X136*
+MJ!q4f5@i)J%(ei,b'+5LSH,#*"f-f8lfm-c5d+KT3I#16em@(&'$$Dd#ML9)PZ6
+@TcHp)Ur%'d1KdN#TX#mJaeKB8PT9LPUJQ`KT-DP"TJr[cD'fARR*$Njl)9mpZ&9
+$2S2qZVY&@C,G(V1'A,P!J[Nq6QUlDMZ)%T!![Bk,*UZiFQqNK1&Jkr!+rPN8bXj
+l0HU#`NKUY%2LIdI(["I4V"SfKMG*%Gb-h4"Ee096cS'p0)S&F6T&688@MRcD$f!
+bHSflB6LE$qBcLZpli5!33HIA6"la2Y[QX9U4&)hJ@-&!dA%,lG+XC@R4DTe%4IH
+XjNRXf4crQ6hM98Ja@$6DiQr[fF3LZ88Ehm08J$e$aU-q!BXfbM#BEf84$MkaF$@
++8K+"1qicZ%6qN!#m+pjalK*"@!!-GMh!H2)'F38UpiH8BQS!j%0lKmHf*J0#Rea
+)95(,T8!Kbh8$R`pZJGL1EN&`D'$DF!#c"Bf0LiYaQVC['-FH9QS*F"jhJL!-%GG
+lc1YJ9,U2VJHk)(-fN!#eB!XaHDDdm!"XLlc@ADBaH$28q!C51XI`1,i1dbkBR3b
+N$c`@Aaq#"kl2TJ@dES%h0$I2)KdpGJ``#)eMCZ)hUh5A+GA`eI1-$bUHJ%)(e*8
+d6KaR-!FFT4'81S99I!BGb'+afJ%k6KN$1I35f8@,9-6X)4+TQ%*H)eTZ,[RMq#f
+lTKQb5R-15hE8'%LQB+1kA09P+Ulb-aZ#e%Y)c,3[+,[PaVS4c+PIdK&)PkUUf%L
+*-&bkZ#AKI3e[TN-i3(PKL"ASB8"0!mFdSJdBSNJbDKHEN!#-V63kQDE8JiJ8bcG
+ZLdZAk1dN#VI3QlK1XS[cmQGmJp8`Dlh9r-&"kTmceX5@`!Cj3TA6CmNH!518I4R
+ZSUbQC8D+*iRFl6Tq2Zp"aj'cP6RIqa(aKrJ#H0"3b4L$G2QfSFl)HJX&XDLrqQ"
+b@64aBhe$A9A0XT20,!kYV$3%5U'-CYF30GET'LkA',KP6@If#fVErVEZ$pI,[Cl
+C,PrNIbdAa3CMhf2MPS[ZP"IKeC*PiAk4kJUj2lUSY*h(%LZ&mMQm5,#"ZV4QDhQ
+fR6fdrI&&U8&#VE-9Gh"klJV1b,dacJ"Z"G#e!GV'(11!Rm"b$AFcQD$i'[N9q-q
+r*ceM&qKFZR@FCVf[$PIBj!AU#T!!#5MSVRb$[Gi"4"&1QTJ)08qVKfY`(Dr,dX%
+6VA!VB+m+I,MXl2em39"@J$Yq@9EKJUbm`[PCZI-A5'GEi5B-02P"N5C[B3))kLV
+E&DB83,%MXVCiYihb*BYi[I3*Udi8"-jCcMe,6136!b"p31`N9r+@#dHQAjji,@Z
+ir@3LY[)4)1&jClI5%SIjMcFc,T+5X*f0439X1jU+#f3Ee[2S"*lGcf5&#M[k(M*
+*m69Z%REdmV-l#S&+AaI83C2EbFp6%aDcHAj"9Q%4f([XaV*mQBE02$'#CeI6l8p
+K+pp2iZ(XI`jh)mGc4d0FX9k3!(8jN!1kpip(NLJa8jpM[I#RIk3cB3EF@2`rf%b
+Hm1XmZ!PNb(BSKBGq4PD!9,G"@UZiDPf2p#c8G"[f$G+6ad"1SHVU6j*1dMG!GP'
+J#mVmbIZKZ+hKjQ!l9h&(3`bcEZGGf%kNVdY*f-i9rrrYI'V,c'BqZp%[E'Fh+0I
+[E#G5AXaAh-pdX`hNR[',CU10ZVH3!,j$EL*qZi*-4X@9U(MEqaAEU58mbi@,G5p
+'h4li'Id`ZIGXA4qF2bTFH`@C#VMi#2LhhcV,[p&m1LPr9k@)SJ)c,&&FjlY%%3P
+NN!!A3*0PY50C&Ll*AH*UUVJE[3PAjjV@e9Apc9#,eG0+k8eFCP+cMdB5KZeVhTA
+Y$-C13SBhP+G,c+m1T0$%+r(Lbi%f3ldKTdG0%P9&)6hejGaRhQ15SI-C3Kb-Nra
+a9ID8(,9jHZkkXaEJ@cj"hAP,fL!pEbI[AUTJ$YAli5CX43cMSJ*AcCqK4ZiJkP0
+@N!""UV3S[3X'+9NH(d+2FV3Qe&TmZ+B)5,T)CB9RU'p&&3``G'QM+`(rXU`,e#+
+""Bp0p9I)h$S++K)0EM%MD&#a-BG,AE#"qMki!!"Ub'X@NR[1!!kQQ%2%$TV4(DP
+rZ9h",0jGN!$RIDPriAEI6*)"eDm&GZrM[12FVZ*,&ERpmaRF$PAq&lh,NCq(30q
+1dMfKl[)5r&CfX4jj(q&6N!$RVi1!PV*"kYiSefkIhhA&A+%(6(KdLNR%@Y%kSf&
+FFB,BV,ac[$[j9Hdc3fE-b'!$@TLK!m-SaU3Kf8RR0hk"lb$6X(4I`"EqeGN,DQ2
+0K`XS,fGf6`ZN!DbGl!8-[HLL)3FaGd6Q`Z!8hBKmk-$deFL)#6)jjB*j5"T%YZb
+3!!D'"#TDT)J*`cCV0ad!cA5ME9kS%B15mFe@%H$8F("m!+I43#lJPT!!khbLBCr
+GU2@@,Y%dR50d4*Zebp*9MjGI[I4PC86,8M`aSC`GYQ9A`#S%(M8fl`JfG!-%#L0
+8@kp!mQU8jEN2BAeSib#&!i`28lXe6Tp%*i1H$e$D),%[!Z@SkTBPRL,APfCBPm4
+6S#QM(mi)SY!N68`R!'Q9[$PD*@q19XQESeAbjQJGrE1BCHL4hk&#8e&qARjq89j
+",KRp,8h0j0RiQY'hN!$J*#+!(hN6U9+Djbr)3Q+G4riC2-1kmUU'fMV'AZBdTE@
+e+aUU'USVT1rdH'0YMI6eeYVUaTA"TeXE9jC@"1Yf90499G4,(lI8eM485Yr@P*I
+A9G3(Afj[,+fZUUm-PGeBAbVe9M2kFeQ*@I`eNL'R1maL@pdbBdh9jFDa([eia*Q
+P9A*QDC@F@9SPCaE+4#UraCQP9A*QDC@F@9SPCjC@bCQP9A*QDC@F@9SPCjC@bCQ
+P9A*QD4ep!rVk(ml#XGE9SaR!lp[aqhITlc8pQLhir9TmIaYqefd`pr4S[23,AVi
+G[pq!PjqM[r(p(9PAQ-fDhU`VM%E0Yr'Y6r-9I&ZRZ4E[HeTk0(hdGhZ2jMVDD9q
+2CL2p[Dj(FchY&0rI56[&laqMrH(hMp2hr6fD'qPlr(iAIBrIlkE[mIXpY1qK(Nd
+rrEfe4h-,V6IFSpP&kq(h6p&kq2dq@Jqrlk'rYr9S[N$ViI[[dGrirZQX+qbDVfC
+G8D[C3cXBkp&mNAD!hqqR(H$hcp,+q2eQq[Z@(XfcU0LRH3BPefRZb,V#j4Vp!h)
+98Uj@+pr$(F,f@FC%I85!'lLF(bk3!,5H$FFX(CH-[SXl!HD@j&j%LNPBL-$%8CQ
+`p!%rRELjTeaeBN1%h*JdAS`&FQ-U8m3,+8Jem83ZqmbR`R+Zfl)q&9B0i@-X8F%
+$ScZj64U'0)4TX(`EN8BJh!AKi%5'Z6&0(!+f"1E66N!qXRJ#hZriqIS2R),LH9Z
+TG@jXc+&ahhGXKC!!!a&RCZbHmS4c`IRQhYF%j%k2,b050G+YmK16&T*Z`h0K@6K
+B,bLDGp+qmr)-YNB*p*``0bV81fNZkDT0f)+mX-32bJCXF@@*DH,'eLHHQ29*UZ$
+fZ0f3!!hJP#LG'r8Iq*TiVj[apc`E4im&&iR[6#BG`1qJ2"I4`6`cP5bIR5d+9jb
+fT$bTe!8Y%lp2YXl$e0GhVk6&,MISX1pEr5@5jD5p#!Dre@&*m9*B%SHZhek5K*T
+2'K6)rPC["Zq$)eVKM2j@DiRl6R45Z&XR6H#FU$Y*Kbb"YB(1`I9UEFRFNh)IjZc
+`GDPR-cThFrh$AQLcFQK@&FqT!*e'qrbpL58bkV!*mFQC'V!0*B&aDN#ld8UN!)b
+ZV&i1Uf(1lj5!T9#+29Q(ll3B,F)r$XUUK&&Hh(YGA5BrR2Y23lCi*r2p(Nb0K,G
+c(!MlMmQMj1SRZa46KTC%Eh$0eX0f1@+8)iFXmTdL,-UK,14c('%I+$R9(Q3['V&
+BmHe3&U,Vpq((3(H@dG2Z3F-GJJ0#0`SE4ES,j&`CT3'UFMAfGH+VYC!!Y0#(F2H
+lU$dBJD1CH1"Q$$3#kTjk0je6ip3h0Ce$Tp3P09MXM4U*6%"NZK4I08Hc4qCbD'G
+,D'[iFLL,*[+R(`0iJrD@d2iSUfBZKhDiK,AiS'CmJ(VKSeHcIXkfb#cJNr`02Gf
+&H"%3USQKVY"SGS`8m4HrT$Bec"ATJh[#MDKFXIl-)"TJ'JdA'E2U9+iKpd`hN!$
+c`dk4Ha+A40Y8SRTh'%@)jGR)S[e'P@(MIPfCY)%6,ZijMH!H-N0-$cJYD+Am%SR
+!pD`Qd4rbB$KrIF8ImR)i,0d!TjASlkcBSFSS2iND9Je94MD4@2aH%GRfl1$-%ZZ
+E*iD'r%-DI0qG2,LYEHhZh6IQmr6lQFISpklGZcIQHpRl1E-'Yhh1r-lZM@q+pHB
+N$FBfQAYhEb5"i2Gh0*Zhl,ia[NRmI[jJE%R6QlYBIrIeaZI(*b88P5Y*C"2L)[r
+1d0UR5'3+L98Qk'1haUZRV%T8$Q9&CJdTYbJHAMMrkTP&EkHFQ,rfX@HLCLSI5rP
+XS+6c9d8R2Y-emX[Z`i-PVqq*QYRpkkDBq#82cqrmJM8`[fRq$pZR+kFVRhjJlH(
+jeQ2@PlaAGYqh1II`B1Gpmc9Ib(fi+@CVZTE2er91VP18CX5CdMM[K3C[+@I)8-3
+E*X5V%e)+,[*UbT3(bI'KY%T(24l1mQUQa"BNND3bcXYjKbEVdcQ[TP5935)''f"
+#8hr)1hPfc-&"cK4M1Y$!HDrN6!M9mCQ,5`r'H$-8hTJYdb+(ir96Qf+QT3c("p)
+jImaAH[0QkU2L*aC%`Thc%K,E&!Y,cBHMYqCP%eAmP2*)K$lmbbh0qZll8U*+MNj
++Z6TPBNR81irGfM9TqSCR5SE9cTQjQ192DSiqd2P!j2c)(lBpCF9NIhTqdh$8e[J
+CmHVm$+*1m#IKmi+*q(EHF#jmfKIPHYAaq[M)b4M'lA-jVeUAR6PSQ"IMK3hS0E-
+9[X%BSYLCf8LDKXSMBT*'"[fZr-GQVEKqCY5@42h`+Z8I1qpV'RaTT(02lV820%9
+Z66`q2$IUl@B$5H@*+U%T-M%`[&ljKeEL)%9,SdC(4j8M"Me*jL[`lHq9`dZ`%Cm
+jG2b3!$H$C$4&EKP188e4*NBQF%VabfALPbXijF&0`h(kqLEL6h,%dqp[Lmr2jl`
+,kr3c[)kQS@6$8'65Tr+c[BBKAHA)i(8P0rE1MH6mFj6q"'@L-U+qD#33Q6*ibm`
+LriVVZ'Z'8VR'`FDBQicc0LPZRa2KQpM5D'U+QEGc-+,4X(bbBZZZ)FF4r5-N`K!
+6[hPqqmbf`E@rkAdXCHdVHe5IVqHdVhp(0lJcSX+`2%lK(EUiArm`L8aX!m,X'Rc
+*Vqami+A$me9Ek`XF8Ik*m5QP85651f65Xb+h*edqb"X8[CYj-NmeZ`NEGf&X(K6
+T-SkD4X1K#-AYdB0&#!%*5i&,99ZF-iY'505HPX(T45GbVmYp2@PSZUSqX[-,55m
+0EU5GrYTmYKdGbXHQ*kdGl1ep2@AY2AZ##r0cQr"l[RqDQAl(UUa)E*SGQbYp[#3
+$RpifBP*F3dDmJb2qNEIII1cj$19)ENa[ik$4j22ZR1GlASA2YDBTA!4qeab2(6%
+SJ('AS-UVBVK'SbPrRLp'46Gf[RqU2jkeHCNr2YMqVp$fViVb*c40B8mZ`[cP5dp
+NmUe&E`DNMfGH2phk`p$,1G0,6Rld,mmIqhMQ5lH@[#3eX#!TQ925AY(c"qM[PbA
+Tmb,*X86f'KrRqr(TE52kU-MB`FqqCL[1+AV6(c'LMpN8-kJaU4Xc'ZEj)NDd-DA
+D#Tp*Tf$IQKh%T%23J,p-bc-N+#04l%8a`2!DNkm""@MND2CADE-G5X,jP92&#Fr
+5"6re+'F@(AZf5"VAV1R@BcqdiZ2E&)1IECRNEe2Hjae1LShAaMLR0F8LRF$(KP0
+5B[)$rSQ$PdFl*LSIQrABF'*XI'a-h65[Eh,DB,4K-MR8IfMAF&P$4'*$c*DkYTD
+@@8Q$NEPI8VCr`HiGQX(`m194DFe4N!#Jc[+1F(18PmFMD3'qY%dM[XNYNr(Zl&d
+MR$3kE-1X!"R8Yb6lb6mV0dD-a"e[KLGTV9841C+U['i`mTDd+-89MYL)NG3A'`G
+MGUE&p*N1*J)'2SmMj)ai2R*NU4)30@FN39A+H8N5UP+GlBNi'9!R,-K9h)QbTYa
+G*d3FadM`p8qDm29Y)paJC2YeLlF6EPI8jjZlr+3TmKJZRYVVrAjPdV#ajGJ2Lq*
+jpGEi)l-R'"+LKbY`8Cb9X$e+F93c0b9@849Cp)-9KY`MqdIm`h--*r$X0qBG5Tc
+NMfK3V24QU!kBEKqk8'(310daN@Sb"5'm(VVDXlF4qI+ckS5BK-KKp5$h1r0eHRh
+Z,R@cRk$'R"&ekC&$ma*e%3f$H`dNXr3Q8q5`0P)M$C0QqD,"@1)RbX-N9N5j"E'
+)Vd$IhME#Fim0lZKj,#9klDph4)l`LVf$GCUB3p''`VV)NBZp4+ZBTkX`4)l%"A6
++Ip)TkCIEGGcKq-LSN5D&$lYjRbjL1EYqd1T(0fdGR[A1)-kD5bEU5BYkH%Qaee#
+UeT-QpA#YmMV11fMfVrhM+hXq'iJBVXfEV2!1l[-CP[FIdY4($&qS9b9imp9apB#
+a-a-#q42*FAbCPG#8(mPj)dC-U2B"AkRL%&FIh0*2ErSDCR[Q89aQd9m5eFEq`3b
+[$C&)GkDI#Uhcj0q05eRplk2"&qK25)PC0!r@ITEPZEd$XXVGpR2PD`fQZTS'',M
+q#[YmMZ)e`K1NH-!rA-b@jpJ!02Xb)CHPN!#Aq*GikqJ2H*0T),Yb0+$rbZKVqTc
+40qS0['ddN!#,K"$mH`MDiGPipcHVJZrQi1ZAYpY'rlM)-2UDf%(l,r%&rE5e9pT
+'Ak[XI0T"Ihr`d)c2M2ikp+C0I(2"V2D,,XaqZZLJLqpmZLLemkNrN!!1qRhVhIa
+bXCX0(84pBGES$qjm3Dc`H`q%+l5e,mNDr3hqrh,0h62Rk@G9qM-0Sfq*GCGQN!!
+V+rf([dc8E@V(k&bJiZfaG8XYkQrC4PqaNcpA9[mNk860P6PIU[(8A$,kIA&VjVk
+SSYSCZ+[9q%aepGJIE)EiS@"Am)mqRD8`M,ipqNZP9P'RA"D4SI`MfdhrQ[HFFS&
+LZ4!i&Eq[RL3Q8I9rCm!AijhXbqhrJJm[fhTLk@",Nl'JERP!pC*T,fVFRGQ(KpN
+'Be8e"5#UFRk0Kpp+A4aKe6RJF6rar`%!N!1r*3!!!3#3!d6S!!"$k!!!!TB!!,T
+Z"d0-DA0d,Q-!N"365(P`CA*#D@*8C9J`16KK,R0PB3)!!J""8&"-BA9cG!)!39"
+36'&eFh3J!*!AUK08NJ!%,Bi!!%Gq!*!0Ib8!N!1kEJe$Eh"j,e"KFh4P6LjM!*!
+8!XNP!*!$ZQi&3e*$,Q-!N"`#c58!N!1kEJC$8f9d,QJ!N"8$+J!!`-("J3&!``%
+$`!+!`N('!3E!"i$(338!aF(%J34!c!%-`!f!c8%2!-r"cS%13!S!bX(,J3Y!b3%
+*`!L!b%(B!4M!'B$C34X!fm(DJ4T!(J$H`Gq"(d$G!4h!()$F343!e-(9J49!e`%
+A`"D!eN(5!4,!%i$634%!dF(3J4"!m!%``$'!m8%c!22"mS%b3$B!pX(hJ6G!p3%
+e`$5!p%%m!2c"rB%p32m"2m!qJ2j"qJ%k`$Z!qd%j!2R"q)%i3#J!k-(TJ5P!k`%
+V`#U!kN(Z!5l!,i$[35d!lF(XJ5a!j!%N`#@!j8%R!1I"jS%Q3#)!iX(MJ50!i3%
+K`##!i%'J!@$!BB#K3@-!Sm'LJ@*!CJ#Q`DH"Cd#P!@A!C)#N3@`!V-'YJ@e!V`&
+[`'k!VN'U!@V!Di#V3@N!UF'SJ@K!H!#i`EQ"H8#l!A[!HS#k3Ei"IX"rJ,p"I3#
+p`Eb"I%#d!A6!GB#e3AF!Ym'fJAC!FJ#b`E1"Fd#a!A(!F)#`39!!N!$"NB&43*-
+"8m"5J**"PJ&@`&H!Pd&9!*A"P)&83*`"A-"GJ*e"A`#I`Ck"AN"D!*V"Qi&E3*N
+"@F"BJ*K"L!&)`%Q!L8&,!)["LS&+3%i!MX'2J8p!M3&0`%b!M%&%!)6"KB&&3)F
+"4m"'J)C"JJ&#`%1!Jd&"!)("J)&!3!!!"#jcDA3!"#jcC@%!N!3"!*!$!3!$!!F
+!$`!I!$m!I`$r!Im$r`Ir$rmIrcrr!*!$#!3-!JS'$J%*"3d$#`F2!!!&f!X!N!4
+B#!#3"%!)!*!%`!J!N!-)!*!%H!F!N!3V"J#3""3&!*!%$!8!N!3F"3#3""X&!*!
+%#`B!N!33"3#3"#!'!*!%1!F!N!3B"`#3"0J*!*!$#pJ-!*!$!B!+!*!$"S!,!*!
+$!i!,!*!$$i!-!*!$"i!-!*!$")!,!*!%J!X!N!-#J!X!N!-$f!`!N!-2f!`!N!-
+(f!`!N!-*f!`!N!-"f!`!N!3%"3#3"!%#!*!%!J)!N!3(!`#3"!-%!*!%#!8!N!-
+$,T!$!bk3!`#3"60"4%05!3!!@!#3"b-!LJ!F!RB!!J#3!`%'!K!%!J!%%JX2rb-
++,a![%#i3!U)!M!#3"LE%384$8J%!-hS!N!BQY!"!!&!!!R!BS4iV52E+)$b3!!*
+!!5"4"[cFdI`!!3!!+dMmb'!6!)#K)T%Bd%(S3*%Bc%3Le1!-!!8%83ElDK%8i!`
+"IqK5"Xj"k(ri3!M54$E@6R8!!%j@rrB[,J!)2bi!$%KZrrS"!+"-r%KYq1UTM5m
+Zrr`r2!!+!%#TA82ZrrB`I!!+S$XLJ1&B3L!!CkPG6Pk"2J!!51FI'#KZ!!J!!#C
+Z!!`q&$`X!!)k,!!%1#`!N!-'0J@@4ci%RNC+EJ!3Ca)!!$`61LX!"*T'5-@,r!!
+'fNB!$'!D2"-J!dM!JIcJL(HM!TT!fJ!)4M`$h%8i+`!#)!G$YMBV!!BJ!*C%5-1
+(m,Q@30C%1!IB3cL&!!!j4J!%18-!!MP%!!C-haMi!B$6Frrm51F2'%+R,ca%6%p
+(B%J!3JLTS#KI)%bJC'!&+5C82R#MRL5!8cb!cCaVi)JYr6bDEIdiQNI#U!!!!JC
+&!!Si,IdqQ'hp1TK'5!3!a)R`Z5"8-)8`"G"()&3a3!!##J3J1d3!!M!%d%BL1`E
+#pdP86#!!!&3r+!!5UD!YArrm)'lrr+!)!%T#Ck&36VSF9NSYq2*8MfFQ"%"#Tm"
+,&%KYpZ)J9"mS!!S`83M!3%Kirrp#*m",3&QU5bCIB#4@F13M5Tpii9LTI5C4"#S
+J#a$Xm09c,`c"5d'B!%a59'hrd&`"5"!D,a41Z[j1)!`@`#K!A0Gc!D&(#%kkrl`
+S3%*ABD2J4#!J#UQ'2KpJ"5S`"dcI%)$IX[q1A8PDZSI[`d&f4V0J@VU&lm2rkZ&
+%U(2S42*"!+*3E[rdUBfJ623[22rmrrbSU3#",c`!!`!$U*ZMjJ!3!"#SX&$`)#J
+"!!'SQp6`mNMR!aLJJ!L`I!`m!!JZ!"3q&!a(!!CR$T!!&3KQ(JJ!)#`!N!-2CaD
+hl!!#CK$4T$m'""%[#c#fHP#2B&53!"8$C`D3!"8&CNJ5!#j`K`+(!#(rF!f`KfF
+'F!1`Kd!MCM)[#cm'S%cfS%a"hrLTM@"EmL!!*&!-+!$r!"&R%L$`Qc#'SblmSJ!
+3F!&J!R!!61iB`2rLe!Aq3Qi%!IrqS%cq5(J!EZ&%6VS!6$!Zra+8rYpm!#"`D3K
+)D!!#3)NSjid!!11)""$rdR'8X'J!)PI!4!")CX`[!b)"!r"U-K&$lIEQ*Y"*FC3
+N!dK#B"!!!%*!%"Lc!0"!-$%!!1"*X8%!X9(,rqj4b[rUJUq"*Kr9m15I8R5LB#"
+Z@)pR(R@88A"#TkQ,3UI3,B*1@!1krH5$F0DE"q"%$Z'rBD01ZLf12J#3!dr[!!T
+Q,JJY!!6j+QF5,bd%!2NmBrN!p$i!A)pJ&#YZ!!VjJ-!m3Hhj$+*#-L%*2J!`"bj
+8fd*f"!!!1,"&+Li!#Ri"I!%l4[NS+`!N4INm1d6j)N(YqT!!'2NH-5&`#3!*SQ"
++3'B!!*+N"PBQ%!m[!cm%!B%`-VK+3&b2Cm5$A!$J5'hk!)0F2#!Y%N9(`80"2cS
+KJ%kk)Y*+32!!%'H!#BC54Ri!B)"2FMFM2`"3Gk*+3&3!))pR!2pBIJ"54Q!!re!
+4a`$i5DMAF`F!8!m),X!d,`Fr"M!b'M*L2U1R6%!!3R*VBUJXG%Cb4[NL+fhjF,X
+I1K4)!$j"GM$aI6!&60m!i0Id3Uh$5k)N%"3J%!q`VS!#&M!Yq5b`X(eQ$$X)#Ac
+rrq&&q3bJ&HIi,'E4&@F11dH"L12MF!+LB'$Je5hrQ#qKR5i!%Q!5L!)@U"m`!`a
+R2'%*2E"prl"#V[qd%!3Y92qi`()-6VS@RP"A["eZ!"Y)!2r&,F!Frmc3)Jlrd%(
+ZrjK`)J!&SQ![$+QM+&rAF`mf-#`Z!!iq!3!!r%Ki!!%r"bmm5801)bm',i)3"B*
+HHR!#,S#K4@PME$3Q6@4`!d8aCP8i*Ne1F!4P9A2(6$K`"@CQ4eXLF!CL"QCQCf%
+-61i!m2rQQNMR!@B+`a39'!Li,Kr!&*!!-4@Z)!I3Rf!&*%Ti!JL!)'BLa)1B)Pr
+6e#!()&5J,X5$!!D')"mL9#"6S#i3Q@5XrYC)jam'8$KJ2r%-$Le-r`Sp4rm1dL)
+SF(i8)!""l[liF&"20J"R"M!$B!!#KN!!,@lr'2lNd0!FrZ!),J!&rb"3B'B'F!!
+3c'bKJMm(6VS#RM*LXq&@"BLJ6(+J6**#CbmZrZ!r8Bkk!NM$HdN9j1!b29"rrki
+3Z+c5)XE!Y+K`$,)YEK!!rZ$rbR!UPR!PSQ"#CkQ829m!JrlH3LHTQd*RS%A"TJ`
+I2!!"m"B#'2c3(Y`-E[rrrYaQ%0%V-55TVc!J!"pJ!!(5dcXr,[lFUCK`"+%L"#!
+S5+&-,8Mqm#*83T&f!F$d2%)!'%j%6+J0YPpZ!!&#`CkKAcm$U!)!$L#8#fF!!5i
+J5k!TF!M3Nb3)!%!-NY&*CKBX#L"')NC$k3!+!!!k+!!%5-APMGU*B"3U#L"&&!!
+L4@'-2''4aZ@1h)Pq!*A+B!!%#!$5`@Y'8N9'2c*B#(!"(dU%C`#3",K#,[lX3Ql
+qfL"%)&!p!!"S!!6qf$!ZrYT)`1@),8$q!!MSB#iJE[lS3I"S"T!!8r3`%,!!+'l
+qf'B5(A`!!IlXB12d)-m#rK!BeQ!88M$)@+lqk#"'iGA!S`4[aR+!5X$%Cc,"Dp&
+*8%E@U"mYArlS5U!'6!TR'P%@)FX[%0Ifr1l`!!`K)b!3X+k3!+$qj'FB)5-LES"
+985+3!#m-d#E`)1m!K'j3Me*(@)SJ4EjJd'm!rbK3G`!B+Lm,UD053f!!rV*K"h)
+-92qf+3$$IK-+8&Hk`2Arrm-YI("KG@cr2LV1``j6!R)8)#pJir#J)f!&)e*'QP!
+@hUNLLCKBFLZLB1"dha`NRrqBd!J8rkT6#!N48!J1rf!0!!Vrc()U*k*JF@NJV[q
+U![cJMDM8"3T`$"a5##"`&)3Y52mUF#!)&#e!rbj`&!T`-+*JX0S%riKQB!8%F2p
+J(R!-SikZFLSJ%TS+-+lrX"8%k+(NN!!(!*!!TUbSEUMq82!!rrmJ(`!!S$+T%UN
+`UFa#TkPlU&!)1##%!!B#MPFJU"Y!q2,"A@Cc)##J8!!Lk%kk$pj+AfB)X,X"rq[
+3[`"J#!!#F!'3!2Ec6VSMI$!m#3!l32N+!!LJ(3Dbh`T#EIMm1h`!$2Mq6S"!Z[4
+56VS92NI-1fhj,2X%J,Sm"%,l"N%h2MJ#&%4(dHj#EINS-LF(#3#K$R!!X0Fk,`"
+1V3"#$)!!+!#!!!"GaN3'5)E5lZlrl#Y)q5a`)'38+d$j-%!h'%T'CJ"aq3`4Yi"
+5%S!!5UlrpQF--H!8!K4`!L(!!jKe!%#**P$(`08iFC5!f!a`!"!B5%!3'9!!S$a
+6303&NR#Y#(B!3Lhl!#Ym!)3!!!N3q4ilEIX%-EMl"[Nm3$F%#5JEi2Ej*dKYqD!
+9*DCK`4['5N!!!&L2CJ!$`L"YpXS`VINNF!*360#YpXSJF5a!5MK`&L&a-5HJ!Q'
+*'`B*P['030*Z6VSBGK(@$'J!&3CQ(%iS!,SCV!$rVR&V5'hrKNkk*Laq!5'3!2!
+d!!#NIU$6qJ")H!N3F!S@$)!(!!2k!&#2Ed)3,4!@F)EjrG$!3qj!32rAF!5J,X"
+P"2r@5'hlAU"@eJ%P-$)+5N"3MfB5J$TNSclqq0&#C`3'1&N`*m%88e45)$mm!J'
+"!D%qJDJPX!N%XbB5,Z!iJA3IP%'dm%0X#R!IN!#T8""L'd!3&QlK12T!LK5i8)r
+)8J#%!5NJ!$!Yr6j)iVF'32p@28$rq$em!*%!-[rf6VS091"BpLm8F39#Ti!k!UJ
+8d1d"UHT+,IX8CJUa`IX"idU!1J)S$)!k#MmYqaT1ZL5JS$kfJ$SH6J"DZL83+fh
+l$2X3S$k@SEYJYrj`&0BM%'"V-E8+q5*(5JaY3N6j62!T'QF@03"#ki$J,`kcUe!
+A!!(HGJ!f,IP++U%!%!pi!#`%!23L!23N5S"[5Lm&)!#),IrFd+hrf0#&8i$L98V
+BJ'$r)LMNi!2Jh)$!(L$rK@B1!253!''*&Ri3,&52B-+J@!ErcQDkdD(`&QS3)+j
++!S#'3(0dYS4X1L!%N!#$,`!["G&ApK)[SK@`!5UK2R1FN!$SSZS%3#lcCVMN0NT
+(K%TQ@U'l,bhl$$#c#P!92X,r#QDarVC*$,G6pB4K`4NSa&X!!2U4`l-IF!DLB-N
+)B4dC#[2a!0k#2U$)&bS[F+S9d#kY3!$r'+NL,bd!J#01ZK3N6VSA&N8!B,'5`2N
+!!,#3!+8!CJ!!U%T(C`E!K%)Yri*J&+1lN3JMH,&-ri*3Mm39%T-@Ue)Fl2!T#Q"
+LT#4Jp"9FUe)LE-4ENS!HUe,dXQ&M'&E%@bK`F0#Zrj,K%FP8X%"ZrjKI')$`+E!
+D%l,`Q8E`&MK3&55K!a(@1e$j*$,V!C+@S2[3+SG1Z[*FA"C!Mp$*+*m$m3`)IJ!
+H&"`8#!GJ&`J%"!`Xm'0XCMC+"fXbF2`%CL`-"L!#!!GR*JL3!)m!!@F$rfTQ&NS
+X!!J&!@X3S"3%!!&Q!4N(-#8J5LhrJ!)#CU2SJ8kkmC!!A)pK%IX!'d$rJ"QiK($
+I%'H6d,MPL0#Z!!M`1l"&3)N'f$J@3$LK#q#P$!#ZQ#K,*%FF%dL')+)#!!"J&"J
+85)5B4NT%ELj+4'B'!!#kE!!#Bb4BM,k-BZCJ("J5#33MC'dBS'`1ZQS!!P3Jp8L
+!5N"Z!!!'@BUhbQAHYFaM##`8+*)N!%#'B+bhbQB%@)YJ0L`6*Z#H)!!!#T!!Lq5
+!)JGCJC++j)'bJ'm3""![#Lq4-@j(kJ!%m"!1,`G)DJ)!!'#jre`Z#P#2)!H3!)Y
+CJ')!))(rBNcI(1Kj!"LeI#!8+0-Q`1ETD!'6*S!3Q3$91('8-0"%8d"b!#$")#"
+!`9()rrV4"6mm#!![,Ic3-$,D`!*1ZJL-A)q"G4(a"i'eiL!YpYU`%)+YpYjQF(X
+HN!"J$"$@fP+YpYS!Q!!!%$i!2!IS4QB'HJM+4f!#HJ""!!*(!!F'4`#3!&J%5$m
+m%1%*b&%!-!k#2Vbb#-``$RC#EIcJ3Uhmf!3!5NEaY'G'F","aNRYrE63M#L!J8!
+[&$mm!8(!#S"2#$iZV!!%iA1!3#"Yr-K)D%"!G`JU2L`!$0"l#%P!S#JYr+"9#"M
+`+4CJ9%T&Cb6RF`D%F`!LJ)&$k8!!i5N!TB#"S#j3jG"@KA8&)"2F2V`"38H!"Fc
+aBU@3!!@q`"5k!!Ve"0$*i04mqR'Y3B"")U#VqLD!JA`!2Aar)!(rrrjJ-"NE(@K
+V*dM!%LhmiH-%!DL!!&dV32cB8%"C$'d!'2cJE3!+b$JYr0S#4!rr!&%%i%@,*%"
+i!*!$'#S!!Ja%!!aZ%MB5)#hm+"(Bk+!aijP!@@"B33eb$1*5%J4Y!*!$$2cJ1")
+L"%M"jiR5VIc8*SJ43@!ZS#3!r0[Jb(#MB!3`B-Bi!#"!+34)`1H)d1%X3%%0iS!
+a%e0"k&2r!)$rCm`f%`a$!3"N*L!'8SE!43!*h#"!%)--KJ$`ffd+%AS1AR`!,""
+BMh(*m*P'NjB#9#CZrrU!96jN2S6N-!-JKJ"@3$S!V3#m'4XFA'rB$pfMka%&JAa
+Q($S4mN8$rd)B#QBE#[cJB#T*3S"93'EbDJh-!%(B1P#1bQhmfN)B$e%HCKX2r1"
+3)8',da[5Eid2MUrVi%@Yr-`[VZrpl`m2'B8R*(N`+J!%S$PJ!XNp*'e(8L*2!!!
+5H!"+3fGLF2r33ci!H!([FJ"XLlBDrQq0$ikMMb"0d-I3ac!Sqe3"F-!3UiKL4qj
+5%Tp!&9*%-%5mL'b!%!kB4M"%*McaCjD)B!E3!`D@L!J!-%8SiJDBL,L$E`5iKQi
+k)!--59+$`er&@b*!%T!!Q@8-,+&Z$)2bC`)!X(B!8d9QbQ!!r3SJ"X%L)-`$`5)
+!35K!-%AFL"6Fm$,kB!$ml"&V#i!'mNcZ(2MrfY%&5!"lX#N"qfiq,4!!qfiJ"h&
+"+%"J&LC-eqhme%))!'X!"'"[!MDmrrp54e#-$%F(D$d%EH33mi#"&N)[1,!0$J"
+4d%6`1k"hqI)!"(i!I!"k!(J!Pm[`%%MHKL"-!!$4baB35)-N5pA-ZN0R&$S$!!!
+-4IrrCJ4m!'!QF##3!!9m!B!)iDj+4@mD2f!#2`8[F1J!)Lk!#6,MR`#8m5P54&L
+,Z0#"CE)`iLDIF!!#!#5`48(Yqj!!%J,SJJ*"!!r3-'4C%!$PjZP!MqlZmN)4kZQ
+!K1i[p`r$q3+N%%)!`[dJ!0e2+0"%2Li!%*!!'`aZ+!"!I!([ERS!B"B`45!%d)M
+KqbJ!!%!iVJ!5'8F!!YT'$%83!'d#!13!9,Sm"!*'$rmU"(!-i+ei#&6df%F!83E
+PL%Rc#*!!Fc#3!%63F2`-!!)8!"pR%"Lm!"maAP*YqfidKa!-B'Bq%P#f"3!!Cbj
+cBN#!e$``#!+!"(0L5I!)"%T'C`3`"Q!+-,"IJ3V4@ML!2J"J,(TU!RCa!Vpf2J$
+LMG!`-!464)"5PR0L`#,8)%!`!#)liKmB"XNkd!I4N!!SEIYUIJ#(!A)C'aI#Eid
+"MPBJJ3"Ga1F331h-33d#J!!!$rrL[0!Q`!T!1"0f!"CKaJ!1jP)5Pd!9-J3%33#
+3!am-33!&BJ!!mN2k!66538!"d[%3!%l4!%-(i"k-*N"54KD'9@J!-H3(jP-6lG)
+(jKDm!2m!-F#J@,%d$J"!-!G54h)!-J$PL4Q''!!)pSC$kNY)!$'-H!I)%2*84%%
+0jP*+9d%9,2mdN!"#U1S*$Q"1H$q"&3C%!!T"$Ha5'ee2(4B3!$mIi1i3"`j`!G!
+%&S!F!&Y54lTJ)8GL!2kim+IJPc#JjcQ(#!+52I!["L!-N!$)X1&1Z[a@61iBq2r
+Nd3AqqJ"-rYEqk2m-rd$rI)"B-29J+!%1jb!#L%RYqk!KE6m(%)#,5)!r!#m8+5E
+$#[d3mY0(N!!-*@A5d-!@K!%iJk1Abc4)B"3KTM9!*R"T$K5`F!#!3iZqdGRQ*`R
+36p',XP,lbV"4J2rNHIrk`23m3h9d!T!!)D!qqNkk!#!pArrq5P!$CK#`J)!BqQF
++-$`!!f"GqNk3!0Eei!DSRkF))%B[#1%TS+fM4V(IC`iJd!HKV3+!)V"p)SKJ*N(
+k!$B`21T4)Y!(!!#bQ'F'5TKR%Q$f3rS!)023"!"1dB,JJ%*!28!!%%jH)&p3M`3
+%6Y#`kP*JlRCPFR-!4'"YB@0S34!!'Q4cHA0f!"U)F(*[B`!DNQC`K""e)!!DRR&
+N)!%ak'YLC!!a!4TK!)*dE'X!!!&#E@fK-!&NFQ&Y!6cX!)KX!%`!3iJ!'J*9J%#
+#)RJ#VR!%$!!#D3"e!!KR%JaT`#m)CJ453'#!SJB31!bcA)$`Ff!!$MJ"@["c9J!
+[#!!i!5q3!'d!rdS-1!!%!5pR1!J"!H#)#b*R0#"2mJ#imbF`&bj)$!#)3"mBCaB
+-3$mBCa"3T6KR$P#I+-!iC`L!iJk!3!T`!Q!'F!0JN!"+m(-!+!!-H$rr!SjZ($!
+mFFdN)Y+V!`3VTdEK+3%!Y)KQJ(Z!X`EK+3)!Krl1%!!31!)Hd1B@)NJ5''F!rY+
+b!%!!C[D4b5!)m9F$%`X#!3B("!8%!!J*J!e+1!+4DaB51!(l!J%!#&!2$!%a*5"
+i!Y`3+!!(m&H%))F#%!N",fd@!Am-X3`!3fF-B#F$E3466J"!Nle`dKM+U)pJd$J
+"#,5)C`TCMb%!d#S@U)mJm%$q1L*I)&qJ*5k!%!"U!N+A!!"I%Km`(dS"C`5R4J#
+!B!+M4Lk)6Y&19[r1)%maX(e33`!BS!(J"JTK#P4J$a"S`#"2)F!F!#))%[*Z&U!
+9i!B16PiLAm#md5*I%!"B(b"ICJ5L&@!#TK9JBjH-&%#A&!&3D*X'F!HLB'!%F!H
+QB'UE#N#A#J'+BCXJE`!%)#m!#*!!'Zj`$%p1d(+a%#"3UH%LN!#b)SJr3!!),Tq
+$K9P2A!![2-"6J(U3!&kJJ1!-3K%J(fFL)%!J!#"3-"JbX&*R&V*!BK*`!&0"!-"
+R"K!BdF"JpK!38N#J,Q8+%'J)3X`["p!)%2rH9BqJ2Xa`!"p!Krq'!%$J`p#"-+l
+riR(I)+lrr$e(!"3`!#iZrmKK#['$6Y#(5%G&9&C26)b)!!!4rp!$$[rH8!J-rq,
+3!`Mrr'N(3%Aqh$eI!"*N*!SK*P0h+iB["e!)&N3Jrjc3!a,rYY)cQ%)Zrk!Gd",
+rS95UF!"JN!#LBJH'F`[qb1)4#1!6RL!F'0!J#Sb#C#33)5C28%918NCc-**-&2r
+LF(kQ@HELB"S'rQML%4$J%p$k!!aK'(3Ak#!F&L%3f#!16Y#*!#TA4%P14Npb-1K
+)jjJ"$`JBX&+`$3SUi$a3$a)-H!B!!9UN%'ddSFQK4U#Vk$%qU"T`!@%0rBBJ!!3
+ZrqL`RfF89Bmrd%i[$"m%U!TB'Z"#&!!4c$emrj!$l"I(S!RZ-+VHN!!32KpQ$"$
+(,[q`hIeB2Kr!R!J-4`48rmm`Q)j9Mh!!,`#J#I#J#I)`ULaGG4$JGK,N-IYK9rL
+J#I``U[)3!&bMp+(*-!K))6!3!"C9MbrJPcm!(`5Ta0#hJ0UTV`!12Kp`!V#ZrrK
+Qd"(apQ$km#mZrd%NdId81"pJ%+3-,[r`)&2J1)$VCJ*!!$i%-FF+B&"bl!!861i
+3m2r8#34R*)a))R4&8dC*6%8!'NMR(cJmJ"!m$0SJ"NM!83EpX#K)`9*3Ff8#!(6
+3+S#TS#iI*Nak!#"(*&"i!!!"B'a+"'F)%"*)J1K!B!33!!!D5)"f$mB!5J4Aa%3
+%5J0Q#S%JVB-#F,QD!"E&)jGJ,J`$!!q2R`8"%D,Dek8)F2R3!i'a8dC+4Qb1+i#
+#62h'5H`"3D#rbV6$cNRX!"#`+3K9#rh5-Di$rrh8S,rBY-2FY-2JT-X0K#Vpj$'
+Z#rrpjU#rkV6$lV6$mU6,$[e#+IBaVK2rrILJ[rbc`ri!Y2J%TF[q#)&+-p2q#LY
+-rJkdq"+d"aDacriD0!!F*BN`RIL&K3%BS3Yq!E%0B"*`&`a5%`!N`1!6&l"`!!M
+!QJ!I&,"(E1DbPf5UF$!!*,S&C#YYr0cq3#Z`Erj%X!XJrJ!!6$YYraEq1%+YrLa
+"lIiJT'!3!dKYq2MK4-!+h%kkiA,a*8TYrJ$)-'lk2bhq-%kk"BMbM34#%%,@"8M
+PEImFijm3,0DE"h%A2K%,"QC`$3'!3,0)NS`[,3''B"L3!!`2CJ%D#!K!AJ!&e23
++!1M6,5m36rmBU(0)EIpHU+-r,3!!rf"`r0"Yrf)r!+L62LhrC%"!RQhrB%*RS*J
+FU)bqAf`UJV4U%0#SM*jIL,3'8bhr('$ZS*KZSEB`ULLS`P#2SVD%d#ee6VS"8M!
+bPN"r2)%5&#$rqR&SCa*,UKP)EIN'UK53!+D8U"+PRH&%U++3!+DFU*ebiJDKXDS
+8e+6qdB&9!"+@9P+F@1+L@M'S5Qhr3'p3-'hr#!Nq,`Ka48kkqI4a%kL%FQXm!!%
+!N!#UJ%kkqZ)5U)6J$8$f%Fak'!*a(rQLDS`"U)4!Ij*151F$i%laP%UYrd*[I#X
+JLQhr6[MUX$p5q1j3V&43X&!-VB$j)N8!J$X`-%I`%AJ"i6G'd$pD,`$42b`EF!!
+AJPG#deS36Ud!@L`!B"Sa8p#"!9P##N!Xi6G#&@3`,IMXd%Bl32M`B&(U%B-`UX4
+BMe$(`%jedrr5J49#EIMU-)ZL$1``3@MilM""CS0mU+23EI#Zq1USpV@6Ja)`X&,
+4B!M4"9*3$S-5`6Rr3Y5Nr#qJqd&%dR'm+err5V!,8[p1X!X*re#`#f!!%Ip51h`
+"![p8X!XYreD`#drr@"&4X!XpreV!`J$rA,!,32pHXXaJX!Y1"!ArBX,8C#"YrdS
+3hT!!`%!X!!D3!'b!!!!#1d$rCM+!HC*81d(rD$3Y#%6p2T3J+T4!5-+&r1$`3[M
+Xm2im%3$`!ML83A)'N!0#!"3l3[MUd'd8Z[MXNAV5F)`l3IMZFZ)L8HCKIU#BFP$
+D!BJ3SNKirrp#*d+RUN9!XKKJ)&JVXJ9d@bqT%d%ldiK#3-G`E6j`5%"#VIp'!8&
+`6%)r,IMmU)FJ8[kSLLKIdJ@k0-F-lY+"&)-5F0`)dC!!6G%&F%af6R@"DK2H3%!
+S3%TX!!65$6j`rl#YrhE5$6)"9,!jGQB'+f`!%2pfd%9f3$)Q%FjRJJ)%F-%8,Lh
+rGV!rZY"m"R$r+d$r'!*f)!I3m45%)'hfbL(K3qhrK#Y*K#Rj,,&Dq6K`F#&a`6R
+j1M,P!Q(Z!6iI520VF*'3!%V4"C%dIJ!X,Ir#%8lrX"11-!!!"f!b%#hrK@XF"!!
+!)@F5DU#J&&)!Da$!alS`-XlH3'$5X-m3T,Jc!0"-`H9J[P1%3$)J5N"R%NKi!!J
+J!0!IS$*`!4Y!rhSE32Z!!K"!Ue0XJ&%SH!&-B$SqN!$VN!!-!fF'NM`LS"3!!!%
+!&'FD)#`!#"'h!2pb,V+!CK)!#Y%UUFL!3!kjq!&3C`BS9#!-N!!)CX*`!0@Mrr#
+3!%Ce)"rJHRaN%%)J)#Fr2)&+S!E`UA&+(fF3N8G`EV4@d*p3RAa&-K!bm%*24U&
+9F#RSd)m8N!!a"N+M-,!S3UHSB)"C#U&9%#'N@)r9r8U`1KQBdJdm5N!1dSmb6VS
++l$#`1[84pB4e4B&$P8B!K8kkfF+cUr'Ke(hi51F(S(N!A'3),-!TXBL3!)D'T,J
+),``3)4CB)G*J-HHUJ*!!%Si5B2rNi!2Ji&bkrC*J!!,L%#%#+8B3)H`V62NH1a$
+[+dDd(`KK[Ip-#`6bDrZb@K#lULm-,`BrF1J*)LYm8!#JBA*dq5`VI&0*9#(j-&E
+*$E!j9K6Bm@)3+mK!3LL`P`,j*il$#Q'prZ)kUJJYB0`!i01%N!!LpV!ri2rdX!I
+BrrK#!+KA%Lhrl%L"2`&b!2!4mC3AXj3A)T(`P"H%2`&9e3)8S&J&ri6aPQF'X!G
+i`+Vrq*'#m++!8'"RCPb21dAj*$2PS(4!@25`EIrSCl!Vq`"Q'Z'Z85ZTTZVBLST
+b!"5#`)ZkqMk`1G`3m[+5-`!!kNrd*kp4bA$RS+N(jQ&MrJB"ra@PXl,!14+NZ83
+!(`ZSJ058"H6b#Gcrq$km!!(`%He'&Hq8&bTeXT3AlT3AKAFM!4bL+)A`*4M#,5!
+P!"5+bC+C-`4U2cMrkSp&4H[Am)[iKX&6q8+5JXS''&8Pf4*Lr5MaBJ!4PU!YB$(
+BdMS!,J*!M+2A"`3#EIrqrmj+,Iq#mQ)843#`QK$bH-*R#,!(`[NfB!B#EIlr4"(
+rcM""c[NdX!I'J10YrmUJkfhrd-3)q95`"p6j@&IYSLM1CaDJ+!$rcQHb+!j9*G`
+`m@+`QJb`ZUKU"M*e39"+i2m#!1M9I3JZ!!B!%fF)1fi!&2N!dK*JN!"Xq3$8!GU
+!DQ%8$M!@5`b3!&"M""J)+,`!(k!'i#m,6VS("2$+C+8M"[C!!``Z!"[ri(!L"X!
+fd$-3,[rJ5)#!6afm!#i!i9*J1d%!mA#J"K!2mE"`+YXK!1-k3rB!iH!kfNL!5-#
+J,Ja(!kKBjfm%J$3Xi9A4B6YZrq$K[f")#'!f`L%%`lpRK#m,S501ZJCki%,Z')$
+rcLNTea3I#%#J#,')IJ#6@`)#3DMfi+RfCJ'"d*23,@hre2rLFl3pEIr1rqC!Q5J
+"b2rS`*,+%2&Yrf!aeaJ@!%S$8"BJMr#aiAR+e3dG32rV5J0R'V!jUQBLGJD`1Dj
+R$X#5U[rd`*)J*@$!,e!P`#NrQJB&-)#da(!'UJ&fJ[T&-,M'((!'SQ!SN3!3@cm
+Yq5$qqZ6aDfB!!8`m,Iqd%3V!NX,rhV1UB!!"-"9T3iUV+flrhTJLq6T`dVBhZrU
+Dp1F#`*+krpkMUGDH#""`F#j!)2LH5NCBMfB'X*FKri84%H,6!!#%)YNFDRVJiAC
+64U!0KLm%R5#5ck6dTK)%Nbi%@)!qF2Nm+dI!i'lr!),Lq9JlE[rSq6T!3qEj0%S
+$mQ)+B!c!r25!f'lrq2N`5Llrkl$bF,YQ'J%)dC[ji-R!8Icj0M%%F!ULB'"88`)
+$4UHipV"1Z[9F&@Nb""JYEINkre+NfUFXr9"JXq$JbpSZJ+FXqHc`*455JXJ&!2l
+-er(rmY%Ui86J4!cJ4""1ZY4)%E(#F!jR#-!f!3!8-"!Z!"4R8"!brS&U3!!q2!2
+SB"kKfG)8+%![$+Kc5%JBE3"kSB+TN5!bJe*(9-*lm[X(U"p36NUICY,54&k"%[r
+dF&Y5SK&T2K!`LrJ'!8*!$K!EcLY!pYS!j0il4[m@3Qe8"IkUB1i`3%U@3%SF3%+
+Z3%)d-LhipN!9!N(r$fF38%,k)-i0-,rQ!"(Z+Ld%%2rd!!bq$)8!!(riE3JK%Rr
+iB!!i!LJ&5'hq)%kk!NaaBC!!,K"2pY)a9N$AMTU%Ja6`*4*Y#"%&X4dQd5+D8#F
+F(8"`+iD!D"%Ym$m"ATU$6VVhj%S4+a,!0'pF5Qhj($&K%H2i0[,R5*%MS-N%,b+
+D,E)ZK%U$m#81Ec#!8TBb9[$Fq!Vb@QQ6J$rqQU"G!j!!Ar&%@2&PNirr2T-M!CU
+3!#-TJ"!p!C,`+bV34IK1ZZ'+@)pJ(Z&V!q94+j9'!)C1ZY'bYH3li&,ip&#%)Tq
+4a*%0&KX!!)D`1I4ZS*S!$)E!6E!Arr4X"K'!B)6dB!EK+Ari,J!VEIE1pYS9D8X
+!3HC31c"`ZGVjd%Vj$+!#,Lhj0#`!"!HGVIrd)!E3VIE"ipj1Z[C8!""+Kfi@$'h
+rfINFC`SMiIFD9!S3Mh#4'"(,p6"1Z[-1@)m3DGT5VE1N!be8p&ErX+f`$4*`C3k
+`!0*Z#R%(N3!+#`!`%!!+1G!5!"K#V!!-3Q`!,#PZ%"!!$J!NX"i)!#!J6+3#i(6
+B,bb-!`!Ni#qJNr+U+#"8eQm$Ha**k`!35J!N9'lm2K4#U`!-*l"p!##J53`!!1)
+N0h`!)!!X0fk!6aJJ5hC23CQ!EC!!GY)`2SI`h&*--A[de6K3&"$a4j!!F2"!2c9
+5iBd`S$Eme6K`D20R#R%AF"S3D`Ca&k,TB@36!!$!13k3!-@`5MAC48T`#D*Je6M
+2JcZCUY$@q5Ja"0H*riC`A*K5Mja`Ik"`A+*`Il)#TR!UKR"!Sh!A#Z!6TS$J$L+
+ZrlB`L1)ZrjE@D3Gq!G$(*N!+#2NL39p&c-'M)!"+3'B8)"A5"M!Yq5*J"P*(B%M
+ScR!!f5d!',AS*Y`Qh%MAP"#$BK0#i#J#"+Qj3$[mB16mS#PKj5m3U&&1G3!!U&"
+1G@F%F!&J!R!!60mB!2$r6Pj1G3#3!h!!N!1!!!!*0J#3!f!!N!-J!LSr2!!"UI!
+!NMmm!!'Tm!#Q2c`!!DR`!,Sr2!!"UI!!eMmm!!'Tm!%-2c`!!DR`!5`r2!!"UI!
+"6Mmm!!'Tm!&Z2c`!!DR`!LJr2!!"UI!,-Mmm!!+Tm#l82c`!!UR`!*!$#J$!!!F
+)!!!(#!#3!`2P384$8J%!"&J!N!B$e3!!"&J!#!%G!,X#H`!4![m-!"!%rj!%m!3
+!!!J!!1!)!!#l!!##!J!"(Ki!!3!+4J)(!Ki*-%Q)1V8!QTc`13!L!&`#)!!H#H%
+3i4!!)`!H!!!X!!N!!`C(C@jPGQ%!!!-!#)%$!!e!35i!"!!!)`!3!,-"AU*E!!!
+S!#B"A6*"E'&NC'PZ)&0j!!"cG'9YFbFJ8h4eCQC*G#"%!!*PE(9iCDSJEh)fGNa
+TG'@U,J#3"#J!'3&Q,P4SDA-J8f9X!!"Q,89iG(*KBh4TEQFJBA*M!!"SDACP)(G
+KFb"MFQ9KG'9NL!JJGA2`U3!!"`!M!3!`4J)S!)-"#!!N+%B!KfPZCQpbE@&dD@p
+Z)%%Ji0eXD@0PEP(#,#"MEfjd`+BZ,J-iF)p4*)!#9J#C!R3!N!!J9FAbcI`"!&3
+0!2J!([`%!R`!!Ri%"Mm!![8*(i!!"J%!m!`2$i#J!!l!9&993!UUUX!!3!999q!
+#UUIJ!98$m!!UN!!U!1%!N!!Ur!(i!+3aa6)#)im"*!#E!Bi!-!#B!!i!T6LY4!%
+*"3!-!!`-`2N3&!!0#32#5J$`!!2pX&!(`8S!!CJ"!!&A$`d2'2MiqCZ"Jc22RQl
+R!!#!$`%E'IkC#*f"`cCQ-hGX!!$!$J%c'IfC"i$M*`CRCQi!!)!2!$rq'`NCQB"
+cBiamCQGJ83!)Br`c"`!c3FaJc-1!F--crR-!!!Jc!c1-c'E-fB!2$F-cXE%!!,-
+c!H-(Mcc-c`!'qJ!!"[XC"3,*$2X!!PNN)!#G)$QGX2FS!+S")`!!%c%f05"ACA0
+dFQPNCf8J4!)!FL#a!#S-&9GKG(0[ERCTE'`!#'8X)%0")$Ne-$Ff3C!!UJ'C%!!
+!F'JZ)$3`1#mh0M%Y0M)`-%)"!,$b%'CKH#N60N#4UJ(q&N&26!!!,d&`F'aP6'P
+ZDcSJ38a"4!J!4%P185!@3fpYF(9cCA*fC6S!"#!h06-`-#`a0MEa*fN"0cj$!!"
+[F(PbD@GSG##T)$%j16!Y33!3Dc-JBRNJI'BX)%PZBbiJB@k!#'3J8Q&jE@q3!(p
+-BA9"#e`"J5)"52"&E@9bBfPKE#"%DF(RBR9Lfe)9i',QBq#p!!)M,J(#!%i"iJ#
+KqS@PMDi$"!'M%"L!!!!%3!!!#3!i%j!!!!!RN!!!b!!!35"@J3)#a`)(`)!%$q"
+!!!!)''!J%"[m%#3DP!K-'[3N!!#I-J3b6$ASq53e+$)30rJN!!!)-1!)""rJ%!)
+!`#!"!r"!!)!!J!#!!%#"!!!JJJ!!%q4!Y`%!3-!%N!!!!!)J!!!"3!#3!i!!r2m
+!r`!!!9P"4%05!3!"EJ#3"J&*!!!"EJ!(!!S!EJ%8!"%#r``!%!6rN!43"!!!"J!
+!S!J!!'i!!+)+!!%H(J!"8!3'9!3(!Ki)8!3*-%Q)!'JkYCc`13!L!Pm"I!!H#H%
+3iK!M"33!(JF!)`%!#!!)!$!f!Jd!$!!Z"!3!"!!B!!!3!'J"#N*@+cJM$98!!'j
+6G(9QCQPZCbk3!`!U(38!!%CTE'8k!!!S!&%!%!Y*ER03&(4KE'c`CMU!5&J!%N"
+@$3)M$J!4m3"`6M%!N!!J82@0rC8#8J!#J!!!"%!!!%!!#5!!!"13!!!!*mJ!!%%
+J8B%#!!)#3J)(`)!%$q"!#"KJ)"!E!!$m%#3DP!K-'[3NRc)%-N`e!!$Sq53e+$)
+30rJN#$$J#!3I!!$J%!)!`#!"!r"!!)!!J!"!S!'"!!!JJT!!Sq4!Rd#U"*!!!!!
+#)!!!r!!"3!#3!i!!!2m!!!A6384$8J%!"RF!N!B&``!!Z*KiGh@AGSGhN!0iCiG
+SCcB#1l!+)!KCSJBJ#(D(Ck!(GBKCGAPh!!"iD(GRFlCPYRDACdHD+NU(DIq`#SC
+i)!KS*$-J#(Ha0#%B)6Da0l%d)MSN2E-m3`1`$#)cD'1'HU!(Kk88)4@'GiD3"!!
+!KhD'KfGdTiBfL(KfKhD@K`J!Gi5Q%%q5YC5QPS9iGCD'KR8!!+GRKi@(KC9hGi@
+MTj1(KT3!!)@SCi@PPBCSChH@H(@'Gk8")C!!FDCePS@(PC8!ID@'KBH46(GR!!K
+fCTTeTC5AGTCfP4"+Kh@PPN3(KBB3E)@@KS#TPB#@N9Z3!'QQKBD9KJ!!PBC&DAK
+hKfGT@(PSH)GiCJ!!L'KSGhD(D'KT@&T,GSKTCd#!Th#IN!#NK#!)L4GhHkH'KhI
+!eJL!ChKhS&ThGR1fKjCQKhD&Kc!b!3!35RKQGRH(KRKfGSDPCjGhK`!!KhCQ@@G
+CGfTPKRL8GiKhH"$$KSCfL#-@GSH')!J3)*ChGhBJ(`#p!)#@KC@'Kh@)GiGAH(D
+'GTB36`!*KiCfGiCiH&F33)@P%&#'KBC6"##BH,$%H@GjKBGTCfKiD8$AKfB!3*G
+SD(D&H)GRPfGdSLKh-$*i"JTSXI!`d9PR@QL3!m"fCl!ID(KC@!!'GRGSH'KCD9K
+S-R"!KPGiChKf)!#)@'Gk4V!GD'KQH(KSD&PSD3J!D&PR3(eT@@GSCfPT9hPS@9P
+#&&R!GPKiCeR"I(KBGN#DD%'ND9PC#S*BdEeD3)GC@'KQ4c!fGiGfKiHK4L`!CjD
+J@V!dGK#aL(H&KSYf#[N(1!)F9l"kGj&hehGkCc``FX"mX$GSGRG'%@R#H$"bKhG
+R-'pBX#"SH'HbL(H(G`6lGQH4QTGBChPAS2fJrPN`-V(6-6+K&,%d3lZ`F5-pD(G
+fD+!CGl(X)a&f-!ZK$V%3GM(k'%)TGiJ`8EBm5RG+G,!AT(T(GU!'HK!35S1bKk$
++PSD@GRL(Gi"cPQ@e`)#9PRGhKRD3!%i4+CCAGi@AKBD"Q5%3X)&hPBCe%%YjD)5
+@GV-`lBDPG`!!9VCSKC1fPC@&PD@9P@Q&P3!)KBD'Pi5&YS5PPD6`YfL9CUB"!2"
+lKT1eKRH8PT@@K@L8Kj@'!!#'Nl5MXkD'KB@@GSCNDAKS!9``)fGjD(PC9SHBD,#
+1X)JJe(JJ'RK!D+D!Vi%i4l(KL3GjYj!!R)F32l"5CJN6%,*dTL!QKRGfGk!))!L
+(C6$aGBL&!!KfKj9hKSH'PS9fDEN8KCCPQ)!qGiGRKRH(CT'FGa!J)#DJ$T*0!)k
+(CIB*Pa!rN!"'G5!MN!"ES%)J"b$4GiBJ+jCeP9D"!D$0H)KRKiGB)$1JdjCCL$H
+*D@N!#)5@ChGA5eLhJ)i0X$Q(D(P*#5)J'PTR`I"+D'PRDF$%CfPh3HpQD#!!KfK
+h@QLbqhKRDPPR9j9iGiB!!)KAGfKRHACfQ'KeD)KBKeS!%&GjCePi59KhH8PS@E#
+"5(PR!D&!R'KCG@TSGNb`HPPT9TE!GRI!@!S5Cd"E@%#`D8Ph@@I!@'9))!5@L(8
+3!)H@Kj8aA(GhPQL'Gi9DJG@9!!"SQA5BG`Rj#PTQ@(H(NAGh-N$T)K9ePb%)`'e
+R1ePhGeGj9k"5P`(J-+ThGh@9GhPePeGhH9L`+b!)N!#-!2Z(@*9iCBSj@##!)5L
+()4Ub0l-A)1)a$HrJX4FL06!K-3YS)+`X0F"YGMLAChNT2622*"%J"R,&KSDBS%-
+FK5iJ#"")KSDJ[8P!!*GQ5)K)D+%aH'DQKi1&L(KQ!!#R9SGU4SPfThD(G++'GhP
+Q!)#f5'H+0SKhTD@ak6PiH(@K&J!!D&KjD8TC+@Sm1dCiGBPfL4"!5PD)1l$2KeH
+A1)G@Yi5)N!!kU!%!`&Y+5@PADPPBCiGDGAKT9TFB!hGc#$&4--ahGiH`),"@GSD
+A@(Gi"!"BH,"FGC@hF)q!TSGPCRKk&rcrGh!!N!-9&%PZFh4KE'`JFfpQG(GKFQ8
+JBA-k!*!$#!FJCQpXC'9b!*!$43-(J!#3!`8c,M!Z0cJc,M!Z0b`J!+NJ-6Nj-#d
+j-b`J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z)'&ZC#"5BAPYEfjN)%aKG3#3!ai$"i!
+!N!-&-bi`,MF48h4eCQC*G#"648%J-bi`,MF!N!-2!!)%)'pQ)!FJDA4PEA-Z!*!
+$$!!S!#J!YJ%F"!&993#3!``!)!!)!+)"(!##998!N!--!')!NJ$`!CJ!K999!*!
+$$!!S!#J!G3%m!)G993#3!``!4J#Q!,S"eJ#'998!N!--!#!!#!#L!4`!J&99!*!
+$$!!S!#J!VJ&1!,9993#3!a8!0!!!!4%"CJ!"!3!"!*!&!qJ!N!5#!!%!N!9T!'-
+!I3#I"!*25`#3"cd!B!$cL'&8D'9bC5"TFb"ZEh3JC@j[G@GS)(*[EfdJEfiJdPi
+`db"dEb"`CA*QEh*Y)(4SC5"TER0dB@aXBA4TEfiZ)#""EL"KC'4TG'P[EQ&X)&i
+a)'*jG'9c)'&bC5"ZC@9NC@3Z#!#3!e)!!3#3"@d!CJ#"!+)%!Np,!*!&"!")!'F
+"!iJb8fpbFRNX)'*eG#"K)'4TFfXJFQ9XBA4PC#"PFR*[FL!SAM!T)'KKFb"[Bf0
+eFR*PC#i!N!01!!)!N!8a!'F!43#Y"!44G@Pd!*!&#J"3!"`"%)JF5@jcG'&XE'&
+dD@pZ)(GKFb"cG@0MCA0cCR9X)3#3"3J!$J!S!#kJ!J!"!*!$+!!"!*!&`!#1!03
+!dJ3)3fpZG'PZG@8!N!8%!!3!Y`&L`!)$k!#3!hi!!3#3"9-!F`"R!+m%!Np,!*!
+&"!"*!%8",SKG3@iJDA4PE5"hBA-JBfpYF(*PFh0PC#"hDA4S)'%JE@9dD'pN)(4
+SBA3JG'KTFb"fCA*cD@pZ)'pQ)(4SC5"cC@aQ,@9iG(*KBh4[FL"NEf9c)'j[G#"
+SB@jNE'8Z!*!%@J!"!*!&A3"`!(%!V!3#6dX!N!G+!&8"%iJk8fpbFRNZ)#"*ER0
+dB@aXBA4TEfiJBf&Z)'pZE(NJBQ8JF'9bCQpbE@9N)'pZ)%K'8b"fEfaeE@9c,J#
+3!fi!!3#3"@J!HJ"m!,B%!Np,!*!(5!"H!5@)6P0[E@8JDA4PEA-JGf9bC5"cDfP
+`F'9N)'*PBf&eFf8JG'KPH5"KFQ8JEQpd)(0eF("[FR4PC#"LH5"dD'Pc)(0PE'B
+YCAKdFQ&MG'pb,J#3!eS!!3#3"9d!F!"a!+`%!Np,!*!(5J"9!41)1P4SC5"QD@a
+P)0*H-0-JE@&j)'*P)'4KE@&RC@3Z)#"3E'9KFf8JGA0P)'Pd)(GTG'JJBf&eG'P
+[ELi!N!-)!#!J!3!#!*!&('&eFh3!N!-"4P*&4J#3"B"*3diM!*!&J!#3!bmZU5!
+a16N`,6Nb)%&XB@4ND@iJ8hPcG'9YFb`J5@jM)'&ZC#"5BAPYEfjN)%aKG3#3!`G
+"8&"-!*!&!3!!!3#3!`+!!!!%3!!!#5!!!"13!!!!*mJ!!%%%!!#"!J!"!!%!!JI
+!J!32i%!)''!J%"[m%#3DP!K-'[3NRc)%-N`ek2NN05Jb%$Ii*!J`i!J%(q!3!J$
+!)!%$m%!!J!#!!%#"!!!JJJ!!%q3!!!R)!!!%N!!!!!)J!!!"3!#3!i!!!!%!N!-
+$J!!!"m!!!!rJ!!!Im!!!2rJ!!(rm!!$rrJ!"rrm!!rrrJ!Irrm!2rrrJ(rrrm$r
+rrrKrrrrmrj!$rRrrN!-rrrrq(rrrr!rrrrJ(rrr`!rrri!(rrm!!rrq!!(rr!!!
+rrJ!!(r`!!!ri!!!(m!!!!q!!!!(!!*!$J!#3!`6b!*!$#J#3!h*#H!T+RFj1ZJ!
+N3QG)H3!!rrp)E`!%5&G)H!!")MVrhNke%!!JE3"X6T!!UI4CMbmm@N956d*RUD!
+N9eQ2,ca%394"3QHTS#"A)&!LH!N)*&*J$M,BCJSb'Q!#3KP4bIrmZmPQlUQMUD0
+CMbmm4&*&6%*RUD!J9k!P)&$L3#30B!Bb'0@e%!"4b2riUD01G5"I-KJd',"B9mR
+rqNT#Crj1m#$m)&mb'$3BX*KAbIrk5N*RrNl`)2SJAc)B0"L`3Qi+N!""E3E33%(
+`!!)`%'Iq6[!!!#![!!3[33!%)Lm!##pI!!4)jc`!*!!Q!8K#a--S!#S"5%A)aG4
+%5%+3!m$"d)*-h`!m)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!R%cI!)`L(dj
+e)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ"m)!&-h`#-)Kp1G5![!!3[33!%)Lm!##p
+I!!4)jc%!6VS!,%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ!-)!&-h`#
+-)Kp1G8U!DKa+J@S-4)"%J8kk!#"%J8je4)"1ZJ!@4)"%J8je5S&U#N5"6VS!"N5
+!6R8Z2!!!rrqbJ'-')J"`!%jeX)GL$)$"5%!b!%*!5%"1GE+(BKSZ!%*!5%#!`8K
+!5%Fq!%K(MX%`"dK(-JG1G53!*J(LL1+*XSGLq)$"`)Fb!m,!,J0)4ml!5%I5Kf8
+)NS*L"%5"6R963'$N6R91F8+RB3!!&&L2C`TK!2h-B3!"&+Rd6R'Tp%j@rr4)ja%
+B3JHK'Le)rrK+,J!,C`BJH!+QS"X[2!!!S2a1ZJ(`,8$rr&K2C`!!c#mZrra1ZJ&
++5J"B6fF'F!&J!!$!)$`!!%!!S4iQ5#!,C`!!U&Q2,ca%3de32c`!J+JI+&mJ$'B
+))%ZJ(f!!!)`[$+Q5)%bJC#"-S#NJ9#&Zrr`!$#"8)8X!%#mm!!#KQ%kk!B)Y32r
+d,c`!!+LI6VS"G#)Zrr5`J9E$4!0)JdM$)&3K3`!8,a3r2+$m,c`!!+$m6VS"+&L
+2(`"1ZJ(#,c`!!+'B6VS"2NU!6qm!$'F%6VS"`$!i!9VJ3!a!!!CQ#%(k!"SKb!-
+mIJ%JE[riS"X3"dcZ')Mrj%jH6R919J!!51F"'%)(,c`!!+$m6VS!pLK!)!aB6fG
+-,`a1ZJ"85J"B6fG!,b`!$$mmS2`[2!!!S2a1ZJ#S@)mI!%kk!8)J6+%S*NJL8b"
+T!"#J(b",S#-`1!&Di%!-3!!'CJC`!#(!!caq!4!(61iBJ2rd6Pj1G8j@!!")ja!
+)+'i!#(B!$+a"6%&%!!*Q&!bX4%008!!'CJT`!E"X!!TQ!RB"%!0-lK!)rrK1ANj
+e6PB!!&Q22cbSER!"(`"1ZJ#b@Bmr2+TZF!%I!%kk!+3J(l#ICJB`2!)!B!3`2!3
+!6Pj1G8j@!!![!c!m#!$!EJ!+FJ!b!%U"8X0%!fF%F!&J!R!!*Llrr%jH6R919J!
+!51FI!$iZ!!T)abm(6VVraKS!F!!3"3a!!!&B6fB3!NF(rdkkrhb`4fi%F!"J+PQ
+22cbSRh!"(`"1ZJ!S+"pCMcm((`91ZJ!F,"qiKPI$4!0R"(!!B!)J"NcZ!2Mrl%j
+H6R8LAa)I-"p+!@F%TdCJ!U0',SK1d5*I%Km`(b"I5J&R"+C(B!+L4dl4)Pp`!D'
+B6Y%!!!0QB&C"6%&%4%008!!"!*!F51GJm(3bRm)[5!!J)%mL9$&T!"3!'#&!!#3
+aI!!"!#c5N5&"!#kJ!Yr#60m2"Nje5RJ+AQF-)#S!#'F-)%!J%'F',cVrS%je51F
+I"N(krk*`$#)U!!6#Z!-DBD4Q!!$N5(VrNNkk!SaB6fF!!-+K'Li)##S!"J!%C`B
+JH!+QS"XX+J!%+LS!#"JU!!5Ae*A8)$VrAU%HCJ!!SLa))$Vr8L)'`VJ$'PK"B3$
+r9L!krdV!Z!-D5S9Q"+%LB!3J4D!RCR3U5%KkrcB[%#!krb44J#m!)!j3J#m!,cV
+r$Q%!!($Hr!!8)%kJ(b"(S"Yb!")%j`RM'H34!!%!)!)"!1!J6D"T!J!!(i!")%f
+JDYA8ep4"q[lD5T!!C`K`!D'BF!1KQ#"0*8J!#(!!60pJq%je60pJq'!!r`iJ6U!
+IeG6Ae#"(S"X`1!)J-F!+B*()B1!JE`!)F!!3%!`!!!&Q"[rrB!!"F%MR(cj"qJ&
+U)NJN5#C)+%JU5#a))!JL##3)*JJS##S),!JJE`!Xd2a!!#im!!!"1L%*51$qIP(
+2rrSNE`!`8)SQE`!i+'m!-0R[!$3U6*Vm!#"f!(J"+J-J!b)$ZFTR!!%!$%3!!@B
+1'"S!K!!"!!!3'Z&)L%"d$l[+EJ*d!1+-C!!!SLa,F!!3'M`!!NB!$`*!!2$T5")
+DJ!%Z!19)d+m!,#"!)P!@f4EC&YP4c[rm,$`!N!2r5N0[6#"1NF-L5(!!%"M3'0!
+3!N!!(Zp)d%AP50#[!#`J3##*8NA+KP9$CL*555"*F!!3'0!Bd"!#3!!HldM34H9
+)d+m!,#"!))P54FU'GJ!#Krq3!`$HKH@2hUm!,#"())j54FU'8FVrB'!!rcS@fP*
+$$%-!!fBU)%YA5#*)F!!3'0!Bd"!#3!!HldM34H9)d+m!,#"!))P543+&!*!$rhB
+#8FVr*'!!r[kAl`!i)'m!2##,60pmq%je)*!&U6%j16)J3@aKC'4TEL"6HA0dC@e
+c,#"*EQ-Z6PB!!%MR%!JSEJ!)GJ"`!$!8$)!!!%&%CLC`!$!X!!)-J!!!3e*Q'#)
+X!!4#38K"i%P6JC1"8S%-!3!"CJ*f!4!$61i3#2ri6Pj1G3#3!a!!43!F!6)#&`#
+3"J-!N!-"!*!$41J!!%2S!!!#PJ"0N`!80!#3!a`#KJ!64%&833#3!k*D49*2!*!
+$VN4548`!N!1k3dp%43!#!-C659T&!*!$kP"*3e3!!3$f8(0PG!!!!3j69&)J!!%
+"'RCPFR-!!3%b8e45)`!!!8T"6&*8!!B"9N4-6dF!!!'U4%P86!!(!EC'C@&d!!!
+#&N*14%`!!!)LBA9cG!!!!Lj'8N9'!!!#1NP$6L-!!!*'4%008!!!!P*6CA4R!!!
+#AJ!!rrmS!*!*rrm)!!-Z!*!'rrmS!!0P!*!&![rr1!!$D3#3"3(rra`!1h3!6GP
+i!!$rrbJ!+M%!N!6rN!3!!#UP!*!%!qMrr`!!+V-!N!@!rrm!!#kF!*!&J2rr!!!
+[q3#3"!)!N!-J!$A3!*!%!J%!"b!!0HN!N!8"rrmJ!$Ae!*!&![rr)!!f2J#3"B$
+rr`!!0Q!!N!3%!Irr)!!fF`#3"B,rrb!!0S-!N!@&rrmN!$D6!%hCV!#(rrmJ!$D
+M!*!&K[rr*!!fX`"0f13!J2rr)!!f``#3"B(rrb!!0Y-!N!3$k2rr)!!fi`#3"!3
+"rrmJ!$Em!*!&KIrr*!!hJJ"0f'`!Krrr!!!hf!#3"!2SrrmJ!$JU!*!&K[rr*!!
+i9J"0f5J!J2rr!!!if!#3"EArrb!!16B!N!@#rrm!!$QS!*!'rrmJ!$S'!*!&J2r
+r!!!k%J#3"[rr!!!k-J#3"B$rr`!!1Q8!N!@!rrmJ!$T`!*!&J2rr!!"!DJ#3"[r
+r!!"$e!"0fGJ'F(*[EA"d#-3JFh9QCQPi!@3:
diff --git a/biblio/bibtex/utils/ietfbibs/CHANGELOG.md b/biblio/bibtex/utils/ietfbibs/CHANGELOG.md
new file mode 100644
index 0000000000..c34e792647
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/CHANGELOG.md
@@ -0,0 +1,11 @@
+## [v1.0.0](https://github.com/mor1/ietfbibs/tree/v1.0.0) (2016-06-08)
+[Full Changelog](https://github.com/mor1/ietfbibs/compare/v0.0.1...v1.0.0)
+
++ Update RFC and Internet Draft parsers
++ Provide script harnesses
++ Provide PDF generation via LaTeX
+
+
+## [v1.0.0](https://github.com/mor1/ietfbibs/tree/v0.0.1)
+
+First import to GitHub.
diff --git a/biblio/bibtex/utils/ietfbibs/LICENSE.md b/biblio/bibtex/utils/ietfbibs/LICENSE.md
new file mode 100644
index 0000000000..b32a9b991e
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (c) 2000-2016 Richard Mortier <mort@cantab.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/biblio/bibtex/utils/ietfbibs/Makefile b/biblio/bibtex/utils/ietfbibs/Makefile
new file mode 100644
index 0000000000..c6f7b0b561
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/Makefile
@@ -0,0 +1,20 @@
+.PHONY = all clean
+
+LATEX = latexmk -xelatex
+
+all: rfcs.pdf ids.pdf
+
+clean:
+ $(LATEX) -C
+ $(RM) rfcs.bib rfcs.bbl rfcs.run.xml
+ $(RM) ids.bib ids.bbl ids.run.xml
+ $(RM) -r auto
+
+rfcs.bib:
+ ./rfc2bib >| rfcs.bib
+
+ids.bib:
+ ./id2bib >| ids.bib
+
+%.pdf: %.tex %.bib
+ $(LATEX) $*
diff --git a/biblio/bibtex/utils/ietfbibs/README.md b/biblio/bibtex/utils/ietfbibs/README.md
new file mode 100644
index 0000000000..16780407d0
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/README.md
@@ -0,0 +1,9 @@
+IETF BibTeX Creation
+====================
+
+This project is licensed under the MIT license.
+
+These are some [gawk](https://www.gnu.org/software/gawk/) scripts for processing
+various IETF index files to produce BibTeX. As regex based parsers they're quite
+brittle and rely on consistent formatting of the input. Also included are some
+shell scripts to drive them.
diff --git a/biblio/bibtex/utils/ietfbibs/id2bib b/biblio/bibtex/utils/ietfbibs/id2bib
new file mode 100755
index 0000000000..56e017897d
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/id2bib
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (c) 2000-2016 Richard Mortier <mort@cantab.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+INDEX=id-abstract.txt
+DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'id2bib')
+
+curl http://www.ietf.org/download/$INDEX >| $DIR/$INDEX
+gawk -f id2bib.awk -- $DIR/$INDEX
+
+rm $DIR/$INDEX
+rmdir $DIR
diff --git a/biblio/bibtex/utils/ietfbibs/id2bib.awk b/biblio/bibtex/utils/ietfbibs/id2bib.awk
new file mode 100644
index 0000000000..9a999611d0
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/id2bib.awk
@@ -0,0 +1,96 @@
+# Copyright(c) 2000-2016 Richard Mortier <mort@cantab.net>
+# Copyright(c) 2010 Paul Jakma <paul@jakma.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+BEGIN {
+ FS="[\"<>]";
+ RS="(\n[A-Za-z0-9].*\n[^ ]+\n)* \"";
+
+ # banner
+ printf("% This file auto-generated from id-index.txt by id2bib.awk\n");
+ printf("% by Richard Mortier <mort@cantab.net>.\n");
+ printf("%\n");
+ printf("% Date: %s\n", strftime());
+ printf("\n");
+ printf("@string{ietf=\"{IETF}\"}\n\n");
+}
+
+function get_authors(field, i, first) {
+ first = 1;
+ authors = "";
+
+ for (i = field; i <= NF; i++) {
+ if (length($i) == 0) continue;
+ if ($i ~ /[0-9]{1,2}[-/][[:alpha:]]{3}[-/][0-9]{2}/)
+ break;
+ if ($i ~ /(19|20)[0-9]{2}-[0-9]{2}-[0-9]{2}/)
+ break;
+
+ if (first) first = 0;
+ else authors = authors " and ";
+ authors = authors $i;
+ }
+ return i;
+}
+
+NF > 1 {
+ # guard '$', '_', '#' from BibTeX/LaTeX in all fields
+ gsub(/\$/, "\\$", $0 ); # ");
+ gsub(/_/, "\\_", $0 ); # ");
+ gsub(/#/, "\\" "#", $0 ); # ");
+
+ for (i = 1; i <= NF; i++) {
+ gsub(/[ \n\t]+/, " ", $i);
+ sub(/^[ ]+/,"",$i);
+ }
+
+ title = gensub(/([A-Z])/, "{\\1}", "g", $1);
+ idstr = $3;
+ abstract = $4;
+
+ authors = "";
+ n=split($2, authors_date, ",");
+ for (i=0; i<n-1; i++)
+ {
+ a = authors_date[i];
+ gsub(/[ \n\t]+/, " ", a);
+ sub(/^[ ]+/, "", a);
+
+ if(a == "") continue;
+ else if(authors == "") authors = a
+ else authors = authors " and " a;
+ }
+ date = authors_date[n-1];
+ split(date, ymd, "-");
+ year = ymd[1];
+ month = ymd[2];
+ day = ymd[3];
+
+ printf("@Misc{id:%s,\n", idstr) ;
+ printf(" author = {%s},\n", authors) ;
+ printf(" title = {%s},\n", title) ;
+ printf(" howpublished = {Internet Draft},\n") ;
+ printf(" month = %s,\n", month) ;
+ printf(" year = %s,\n", year) ;
+ printf(" note = {%s},\n", "<" idstr ".txt>") ;
+ printf(" abstract = {%s},\n", abstract) ;
+ printf(" url = {{http://tools.ietf.org/html/%s}},\n", idstr);
+ printf("}\n\n") ;
+}
diff --git a/biblio/bibtex/utils/ietfbibs/ids.tex b/biblio/bibtex/utils/ietfbibs/ids.tex
new file mode 100644
index 0000000000..32b25731d3
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/ids.tex
@@ -0,0 +1,16 @@
+\documentclass{book}
+
+\usepackage{showkeys}
+\usepackage[
+ backend=biber,
+ natbib=true,
+ style=numeric,
+ sorting=none
+ ]{biblatex}
+
+\bibliography{ids}
+
+\begin{document}
+\nocite{*}
+\printbibliography
+\end{document}
diff --git a/biblio/bibtex/utils/ietfbibs/rfc2bib b/biblio/bibtex/utils/ietfbibs/rfc2bib
new file mode 100755
index 0000000000..7404463445
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/rfc2bib
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (c) 2000-2016 Richard Mortier <mort@cantab.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+INDEX=rfc-index.txt
+DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'rfc2bib')
+
+curl -Ss http://www.ietf.org/download/$INDEX >| $DIR/$INDEX
+gawk -f rfc2bib.awk -- $DIR/$INDEX
+
+rm $DIR/$INDEX
+rmdir $DIR
diff --git a/biblio/bibtex/utils/ietfbibs/rfc2bib.awk b/biblio/bibtex/utils/ietfbibs/rfc2bib.awk
new file mode 100644
index 0000000000..093788a018
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/rfc2bib.awk
@@ -0,0 +1,117 @@
+# Copyright(c) 2000-2016 Richard Mortier <mort@cantab.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files(the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+BEGIN {
+ FS="[.] "; RS="\n\n";
+
+ printf("% This file auto-generated from rfc-index.txt by rfc2bib.awk\n");
+ printf("% by Richard Mortier <mort@cantab.net>.\n");
+ printf("%\n");
+ printf("% Date: %s\n", strftime());
+ printf("\n");
+ printf("@string{ietf=\"{IETF}\"}\n\n");
+}
+
+/^[0-9][0-9][0-9][0-9] Not Issued./ {
+ number = substr($1, 0, 4);
+ gsub(/^0+/, "", number);
+
+ printf("@TechReport{rfc:%s,\n", number);
+ printf(" key = {RFC%s},\n", number);
+ printf(" author = {N/A},\n");
+ printf(" title = {{Not Issued}},\n");
+ printf(" institution = ietf,\n");
+ printf(" type = {{RFC}},\n");
+ printf(" year = {N/A},\n");
+ printf("}\n\n");
+ next;
+}
+
+/^[0-9][0-9][0-9][0-9] /{
+ gsub(/[\n]/, "", $0);
+ gsub(/[ ]+/, " ", $0);
+
+ # guard '$', '_', '#' from BibTeX/LaTeX in all fields
+ gsub(/\$/, "\\$", $0 ); # ");
+ gsub(/_/, "\\_", $0 ); # ");
+ gsub(/#/, "\\" "#", $0 ); # ");
+
+ number = substr($1, 0, 4);
+ gsub(/^0+/, "", number);
+ printf("@TechReport{rfc:%s,\n", number);
+ printf(" key = {RFC%s},\n", number);
+
+ # authors are all the fields "in the middle"; can be separated by
+ # commas or ampersands
+ authors = $2;
+ for(i=3; i < NF-1; i++)
+ {
+ if(length( $(i) ) > 1)
+ {
+ authors =( authors ".~" $(i) );
+ }
+ else
+ {
+ authors =( authors "." $(i) );
+ }
+ }
+ gsub(/,| &/, " and", authors);
+ gsub(/^ /, "", authors);
+ if(length(authors) == 0)
+ {
+ authors = "author list not available";
+ }
+ printf(" author = {%s},\n", authors );
+
+ # guard capitals and '&' in the title
+ tmp = substr($1, 6);
+ title = gensub(/([A-Z])/, "{\\1}", "g", tmp);
+ gsub(/&/, "\\" "\\&", title ); # ");
+ gsub(/ - /, " -- ", title ); # ");
+ printf(" title = {%s},\n", title);
+
+ # just let the institution be the IETF for now
+ printf(" institution = ietf,\n");
+
+ y_fld = $(NF-1);
+ y_pos = length(y_fld) - 3;
+ year = substr(y_fld, y_pos, 4);
+ if(length(year) == 0)
+ {
+ year = "{year not available}";
+ }
+ printf(" year = %s,\n", year);
+
+ printf(" type = {RFC},\n");
+ printf(" number = %s,\n", number);
+
+ # early RFCs: mmm-dd-yyyy; later RFCs: month yyyy
+ m_fld = $(NF-1);
+ gsub(/-| |\n|[0-9]/, "", m_fld);
+ month = substr(tolower(m_fld), 0, 3);
+ if(length(month) == 0)
+ {
+ month = "{month not available}";
+ }
+ printf(" month = %s,\n", month);
+
+ printf(" annote = {%s},\n", $NF);
+ printf("}\n\n");
+}
diff --git a/biblio/bibtex/utils/ietfbibs/rfcs.tex b/biblio/bibtex/utils/ietfbibs/rfcs.tex
new file mode 100644
index 0000000000..6878b612ba
--- /dev/null
+++ b/biblio/bibtex/utils/ietfbibs/rfcs.tex
@@ -0,0 +1,16 @@
+\documentclass{book}
+
+\usepackage{showkeys}
+\usepackage[
+ backend=biber,
+ natbib=true,
+ style=numeric,
+ sorting=none
+ ]{biblatex}
+
+\bibliography{rfcs}
+
+\begin{document}
+\nocite{*}
+\printbibliography
+\end{document}
diff --git a/biblio/bibtex/utils/isi2bibtex/README b/biblio/bibtex/utils/isi2bibtex/README
new file mode 100644
index 0000000000..61ca6bf3bd
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/README
@@ -0,0 +1,77 @@
+isi2bibtex 0.40
+----------------
+
+Isi2bibtex converts an ISI (Institute for Scientific Information)
+bibliographic database file to a BibTeX file for use in TeX and LaTeX
+documents. Both formats hold bibliographic data on scientific and other
+academic documents.
+
+(In the UK, the ISI databases are commonly known as 'BIDS' or 'MIMAS WoS')
+
+See man page for detailed instructions.
+
+Installation:
+--------------
+
+ If you don't have Perl installed, it can be got (free) from
+ http://www.perl.com/ . LaTeX, BibTeX and everything else TeX can
+ be downloaded from http://www.CTAN.org/ .
+
+ Unix
+
+ set the first line of the script to point to your copy of perl
+ (eg. /usr/bin/perl or /usr/local/bin/perl)
+
+ make it executable (eg. chmod +x ./isi2bibtex)
+
+ put it somewhere your OS can find it (eg ~/bin or /usr/local/bin):
+ you may need to change your PATH environment variable
+
+ if you want, put the configuration file (isi2bibtexrc) in your home
+ directory (rename it as ~/.isi2bibtexrc first)
+
+ put the manpage (isi2bibtex.1) somewhere where man will find it
+ (eg. /usr/local/share/man/man1/), or just use the html or text
+ copies instead
+
+ Microsoft Windows
+
+ [Note: apparently some newer windows systems do not have a DOS shell
+ by default. If you find you don't have a shell, you will probably
+ have to install one - there are several free ones available.]
+
+ change the name of the script to isi2bibtex.pl (you'll have to use
+ it as
+ isi2bibtex.pl [OPTIONS] inputfile.txt [outputfile.bib]
+ rather than
+ isi2bibtex [OPTIONS] inputfile.txt [outputfile.bib]
+ because the windows DOS shell doesn't know about the #! line)
+
+ put it in your Perl bin directory, eg C:\Perl\bin (obviously if
+ you don't have perl installed, you need to do that first: see
+ below)
+
+ if that doesn't work check the PATH environment variable
+ contains your perl bin directory, and as a last resort try
+
+ perl C:\Perl\bin\isi2bibtex.pl inputfile.txt
+
+ if you want, put the configuration file (isi2bibtexrc) somewhere
+ and change the @CONFIG variable in the script to point to that
+ file.
+
+ Other platforms
+
+ I have no idea, but it should work on any platform that runs
+ Perl 5, perhaps with a few small modifications. Isi2bibtex has
+ been tested on Windows (95 and NT) and Unix. Please send me any
+ portability changes.
+
+
+COPYRIGHT
+ Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone,
+ John J. Lee
+
+ Isi2bibtex is covered by the GPL -- see the script for details.
+
+ Send bug reports to <jjl@pobox.com>.
diff --git a/biblio/bibtex/utils/isi2bibtex/isi2bibtex b/biblio/bibtex/utils/isi2bibtex/isi2bibtex
new file mode 100644
index 0000000000..fc357cb7f8
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/isi2bibtex
@@ -0,0 +1,1325 @@
+#!/usr/local/bin/perl -w
+
+# last modified 25 October 2000
+
+=pod
+
+=head1 NAME
+
+isi2bibtex - convert ISI database files to BibTeX format
+
+=cut
+
+# COPYRIGHT INFORMATION
+
+# isi2bibtex version 0.40
+# ISI SCI to BibTeX database format converter
+# Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone, John J. Lee
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 US
+
+# The maintainer of this program, John J. Lee, may be reached by email at
+# phrxy@csv.warwick.ac.uk
+
+# A copy of the GNU General Public License is available from, for example,
+# http://www.eff.org/
+
+=head1 SYNOPSIS
+
+B<isi2bibtex> [B<OPTIONS>] B<inputfile> [B<outputfile>]
+
+If no output file is specified, inputfile.bib is used.
+
+Records are appended if the output file exists.
+
+=head1 DESCRIPTION
+
+Isi2bibtex converts an ISI (Institute for Scientific Information)
+bibliographic database file to a BibTeX file for use in TeX and LaTeX
+documents. Both formats hold bibliographic data on scientific and other
+academic documents.
+
+(In the UK, the ISI databases are commonly known as 'BIDS' or 'MIMAS WoS')
+
+Another way to do the same job isi2bibtex does is with bp, which has the
+advantage of converting between many different bibliographic formats and
+character sets. If you don't want that, isi2bibtex understands BIDS standard
+format in addition to the others, and is stand-alone and so presumably easier
+to get working.
+
+=head2 Options
+
+B<-h>, B<--help> display help and exit
+
+B<-v>, B<--version> display version information and exit
+
+B<-q>, B<--quiet> no informational output
+
+B<-a>, B<--abstract> include abstract in output file
+
+B<-c>, B<--check> make some checks on field contents (default)
+
+B<-n>, B<--nocheck> don't make checks on field contents
+
+=head2 Input databases
+
+Although isi2bibtex was written for SCI (Science Citation Index), all the ISI
+databases should work (SCI, SSCI, A&HCI, ISTP). Isi2bibtex will probably make
+a bad job of editing the content of these other databases, and would have to
+be changed a bit (not difficult), but you may be lucky.
+
+In the UK, probably most of the other databases on BIDS should work either
+straight away or with a small amount of modification of the script. BIDS
+Pascal for instance works with downloading format, and would work with a small
+amount of modification with standard format.
+
+=head2 Input formats
+
+If you use a web interface to ISI, isi2bibtex will only convert text output
+(whether emailed or saved directly), not saved web pages or other bibliography
+formats such as Procite or Reference Manager. Specifically, the formats that
+are understood are:
+
+ISI generic output format version 1.0:
+
+I presume this is the format used in most of the world.
+In the UK, this is output by MIMAS WoS 'save records' or 'email records'.
+
+BIDS standard format:
+
+(any of: Title only; Title, authors & journal; Full record excluding
+citations; Full record)
+
+BIDS downloading format:
+
+(any of: Title, authors & journal in downloading format; Full record in
+downloading format)
+
+
+You can mix and match record formats in one file. Deleting fields and / or
+record numbers from records should be okay. Any fields may be present in any
+order. Don't change the indentation of records: isi2bibtex will ignore
+records if they're too different from the usual layout due to ambiguity of
+field labels and field contents.
+
+=head2 Output fields
+
+For ISI generic format (eg MIMAS WoS output) and BIDS downloading format,
+fields other than title (TI), author (AU), source ie journal (SO), page range
+(BP, EP), year (PY) and abstract (AB) are ignored.
+
+For standard BIDS format, fields other than Title (TI:), author (AU:), journal
+(JN:) and abstract (AB:) are ignored (the JN: field contains the page numbers,
+volume, date, etc as well as the journal name).
+
+At the moment isi2bibtex only outputs the more useful fields, but this may
+change in the future (when someone gets round to it). Which fields are output
+can be controlled with a configuration file (see below). Those that don't
+correspond to the standard BibTeX fields (such as abstract) won't be
+recognised by BibTeX by default, but they'll be there if you need to use them.
+
+=head2 Output formatting
+
+Output is tidied up as much as possible, but some editing is still required.
+
+Output formatting defaults can be modified with a configuration file.
+/etc/isi2bibtexrc and ~/.isi2bibtexrc (or whatever you set in the @CONFIG
+variable in the script) are looked at in that order for configuration
+settings, with the latter overriding the former. See the example
+configuration file provided.
+
+If they are switched on, things like journal title abbreviations and acronym
+capitalisations can be added and removed at the end of the script (very easy
+to do by looking at what's there already). Newer ISI entries have lower case
+as well as upper, and isi2bibtex always leaves the capitalization as-is for
+those records.
+
+=cut
+
+# TODO
+
+# add field include configs (hash) (check which are standard BibTeX fields)
+
+# check record is an article, (DT: field in BIDS), and allow records for
+# books, proceedings, etc.
+
+# add a properly unique but not very human readable key option, for relatively
+# big databases
+
+# warn of duplicate keys
+
+# Rewrite to detect format of record first, then convert it, rather than
+# guessing each field. Would make it easy to add BIDS Pascal format etc.
+
+=head1 DOESN'T WORK?
+
+Remember to:
+
+=head2 Unix
+
+set the first line of this script to point to your copy of perl
+(eg. /usr/bin/perl or /usr/local/bin/perl)
+
+make it executable (eg. chmod +x ./isi2bibtex)
+
+put it somewhere your OS can find it (eg ~/bin or /usr/local/bin): you may
+need to change your PATH environment variable
+
+=head2 Microsoft Windows
+
+change the name of this script to isi2bibtex.pl (you'll have to use it as
+
+isi2bibtex.pl [OPTIONS] inputfile.txt outputfile.bib
+
+rather than
+
+isi2bibtex [OPTIONS] inputfile.txt outputfile.bib
+
+because the windows DOS shell doesn't know about the #! line)
+
+put it in your Perl bin directory, eg C:\Perl\bin (obviously if you don't have
+perl installed, you need to do that first: see below)
+
+if that doesn't work check the PATH environment variable contains your perl
+bin directory, and as a last resort try
+
+ perl C:\Perl\bin\isi2bibtex.pl inputfile.txt
+
+=head2 Other platforms
+
+I have no idea, but it should work on any platform that runs Perl 5, perhaps
+with a few small modifications. Isi2bibtex has been tested on Windows (95 and
+NT) and Unix. Please send me any portability changes.
+
+Email <jjl@pobox.com> if it still doesn't work.
+
+=head1 KNOWN PROBLEMS
+
+It only does articles, not books, proceedings etc, and won't notice if a
+record isn't an article.
+
+It ignores some fields (mostly those that don't correspond to the standard
+BibTeX 'article' fields).
+
+ISI access providers' output other than BIDS and MIMAS WOS haven't been
+tested. Send me an output file and I'll make it work with that format (for
+SCI).
+
+Please tell me about any bugs you find, at <jjl@pobox.com>.
+
+=head1 SEE ALSO
+
+If you don't have Perl installed, it can be got (free) from
+http://www.perl.com/ . LaTeX, BibTeX and everything else TeX can be
+downloaded from http://www.CTAN.org/ .
+
+bp converts between many bibliography database formats (including
+conversion from BIDS downloading and ISI generic formats to BibTeX), and
+many character sets.
+
+Ben Bolker (author of the BIDS / MIMAS WOS specification for bp) has a
+page describing his modifications to bp:
+
+http://www.zoo.ufl.edu/bolker/bp.html
+
+Dana Jacobsen (author of bp) has a web page with lots of bibliography
+software information and details of his bp package:
+
+http://www.ecst.csuchico.edu/~jacobsd/bib/index.html
+
+
+Some other BibTeX utilities that may or may not be useful (these are just
+the ones I've got round to looking at):
+
+bibclean checks and formats BibTeX databases
+
+bibsort sorts BibTeX databases
+
+bib2dvi converts BibTeX databases to DVI files (DVI files are output by
+LaTeX and are DeVice Independent typeset documents, a bit like postscript
+or pdf -- you can read them on most computer systems)
+
+bibextract, citefind and citetags respectively extract BibTeX records from a
+BibTeX database, extract LaTeX references from a LaTeX document, and look up
+LaTeX references in a BibTeX database.
+
+bibindex makes an index for fast lookup by biblook, if you have a huge
+database that needs it I suppose
+
+BibTool is an all-singing all-dancing general purpose BibTeX management
+utility
+
+bibview is a simple interactive searching utility for BibTeX files
+
+findbib gets BibTeX records corresponding to references in a LaTeX file from a
+preprint server (don't know if it still works)
+
+both refer2bibtex and r2bib convert refer files (whatever they are) to BibTeX
+files
+
+tkbibtex is a graphical tool for editing and searching BibTeX databases
+
+Text::BibTeX is a Perl module for doing things to BibTeX databases.
+
+=head1 COPYRIGHT
+
+Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone, John J. Lee
+
+Isi2bibtex replaces and is derived from bids.to.bibtex (as of 29 Jan 1998) and
+isi2bib 0.1.
+
+bids.to.bibtex was based on a perl script written by Jonathan Swinton, and
+subsequently modified by Ben Bolker and Anthony Stone.
+
+isi2bib 0.1 was written by John J. Lee <jjl@pobox.com>
+
+This script is covered by the GPL. See the script for copyright information.
+
+=head1 FILES
+
+/etc/isi2bibtexrc, ~/.isi2bibtexrc (or whatever you set in the @CONFIG
+variable) are looked at in that order for default configuration settings,
+with the latter overriding the former. See the example configuration file
+provided.
+
+=head1 VERSION
+
+0.40
+
+=cut
+
+# HISTORY
+#
+# 0.3 first released version
+# 0.31 oops forgot to change version number, was labelled as 0.3
+# mostly bug fixes
+# 0.32 mostly bug fixes, slightly better formatting
+# name changed to isi2bibtex from isi2bib because the bp converter
+# for ISI is also called isi2bib
+# 0.33 bugfix: now insists on indentation of input file being standard due
+# to ambiguity otherwise (misinterpretation of field contents as
+# field label)
+# 0.40 added configuration file and some command line switches; worked around
+# ISI SCI database sometimes having missing JI field; some error checking
+# for missing fields; bug fixes
+# 0.41 change of email address; tiny bug fixes
+
+use Getopt::Long;
+use Config;
+use FileHandle;
+use Text::Wrap;
+
+$VERSION = 0.40;
+$SCRIPT = 'isi2bibtex';
+if ($Config{'osname'} !~ /win|mac/i) {
+ @CONFIG = (glob("~/.isi2bibtexrc"),);
+} else {
+# put your configuration file name in quotes inside the brackets below:
+ @CONFIG = ();
+}
+
+
+# Default options to alter output formatting
+# -------------------------------------------
+
+#************************************
+# NOTE: USE THE CONFIG FILE INSTEAD!
+#************************************
+
+# can't 'use constant' as it isn't installed everywhere
+$AUTHORKEY = 1; # use key for record generated from author's
+ # names and publication date rather than key
+ # from input file and line number
+$HEADER = 1; # attach header information to output file
+ # If you leave several email header sections
+ # (or other non-record text) in the file,
+ # header() will run several times.
+# case is only ever guessed for fields that are all in upper case:
+$TITLECASE = 1; # guess case of title
+$AUTHORCASE = 1; # " authors
+$FORMULACASE = 0; # " chemical formulas
+ # and crystal planes (badly)
+$JOURNALCASE = 1; # " journal
+$SPECIAL = 1; # do some special case cases
+$JABBREV = 1; # do some journal abbreviations
+
+# MIMAS WOS only option
+$ISOTITLE = 1; # Use the ISO abbreviated title field (JI)
+ # instead of SO, the full title.
+ # If JI is missing, this will use J9 instead.
+ # If you set this to 0 and use SO, the script
+ # will abbreviate according to journalabbrev()
+ # if $JABBREV is set.
+
+# fields to include
+$AUTHOR = 1;
+$TITLE = 1;
+$JOURNAL = 1;
+$YEAR = 1;
+$VOLUME = 1;
+$PAGES = 1;
+$ABSTRACT = 0;
+
+# NOT DONE YET:
+#$ISSUE = 0;
+#$MONTH = 0;
+#$ADDRESS = 0;
+#$REFERENCES = 0;
+#$DOCTYPE = 0;
+
+$LINELENGTH = 78;
+$INDENT = " "x8;
+$INDENTX = " "x2; # field indenting strings, like so:
+#@ARTICLE{bidstest64,
+# author = {Braun, J. and Bishop, G. G. and Ermakov, A. V. and
+# Goncharova, L. V. and Hinch, B. J.},
+# title = {Adsorption of pf3 on cu(001): ordered overlayer
+# ...
+# note the spaces before the author field ($INDENT) plus the extra
+# spaces before the next line ($INDENTX)
+$INDENT2 = $INDENT.$INDENTX; # alternative to setting $INDENTX
+# following are for lining up your equals signs and / or '{'s.
+$INDENTB = " "x4; # indent before padding of field name
+$INDENTA = "= "; # " after "
+
+$ADASHES = 2; # join up long words that have been split at the end
+ # of the line in abstract
+ # 0: leave as-is
+ # 1: cut space
+ # 2: remove the dash as well
+ # note this won't have an effect unless $ABSFORMAT
+ # is set to 1
+$TDASHES = 2; # same as $ADASHES for title
+
+$ABSFORMAT = 1; # if unset, leave the abstract exactly as-is, and
+ # don't try to reformat it to fit your line length
+ # - this is useful because there are no blank
+ # lines to mark paragraph breaks in ISI format so
+ # isi2bibtex can only guess where they are
+$ABSPARAS = 1; # guess paragraphs in abstract when reformatting
+$PARAGAP = 10; # how many spaces at end of line after end of
+ # sentence before guessing this is a para end.
+
+# abstract indentation (only when $ABSFORMAT = 0)
+$ABSLENGTH = 63; # abstract field line length in the ISI database
+$FORLUCK = 5;
+$ABSINDENT = ' 'x($LINELENGTH - $ABSLENGTH - $FORLUCK);
+
+$CHECK = 1;
+$QUIET = 0;
+$USAGE = 'Usage: '.$SCRIPT.($Config{'osname'} =~ /win/i ? '.pl' : '' ).
+ " [OPTIONS] inputfile [outputfile]\n".
+ "isi2bibtex - convert ISI database files to BibTeX format\n\n".
+ "OPTIONS:\n".
+ " -h, --help\t\tdisplay this help and exit\n".
+ " -v, --version\t\tdisplay version number and exit\n".
+ " -q, --quiet\t\tno informational output\n".
+ " -a, --abstract\tinclude abstract in output file\n".
+ " -c, --check\t\tmake some checks on field contents (default)\n".
+ " -n, --nocheck\t\tdon't make any checks on field contents\n\n".
+# " -, --\n".
+ "Try `perldoc isi2bibtex' or 'man isi2bibtex' for more information.\n\n".
+ 'Report bugs to <phrxy@csv.warwick.ac.uk>.'."\n";
+
+#************************************
+# NOTE: USE THE CONFIG FILE INSTEAD!
+#************************************
+
+# End of options to alter output formatting
+# -----------------------------------------
+
+# You probably don't need to worry about what's below this point, other
+# than the lists of acronyms, abbreviations, etc. near the end of the
+# script.
+
+sub qwarn ($) {
+ $warning = shift;
+ warn $warning if not $QUIET;
+}
+
+for $config_file (@CONFIG) {
+ read_config($config_file);
+}
+
+Getopt::Long::config('bundling', 'auto_abbrev');
+@option_spec = (
+ "version|v",
+ "help|h",
+ "quiet|q",
+ "abstract|a",
+ "check|c!",
+);
+GetOptions(\%options, @option_spec) or exit;
+#for (@option_spec) {
+# s/\|.*//;
+# if (not defined($options{$_})) {
+# $options{$_} = '';
+# }
+#}
+
+if ($options{'version'}) {
+ print STDERR "$SCRIPT version $VERSION\n\n".
+ "Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone, ".
+ "John J. Lee\n".
+
+ "This is free software; see the source for copying conditions. There ".
+ "is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A ".
+ "PARTICULAR PURPOSE.\n";
+ exit;
+}
+if ($options{'help'}) {
+ print STDERR $USAGE;
+ exit;
+}
+
+if (defined $options{'abstract'}) {
+ $ABSTRACT = ($options{'abstract'} ? 1 : 0);
+}
+if (defined $options{'quiet'}) {
+ $QUIET = ($options{'quiet'} ? 1 : 0);
+}
+if (defined $options{'check'}) {
+ $CHECK = ($options{'check'} ? 1 : 0);
+}
+
+$date = gen_date('long', 0);
+
+$Text::Wrap::columns = $LINELENGTH;
+
+$line = ""; # current line of field data
+# actually, bad name: this ends up with a whole field in it
+# $_ is current line as usual
+
+# BIDS format field identifiers
+%name = (
+ 'TI'=>'title',
+ 'AU'=>'author',
+ 'NA'=>'address',
+ 'JN'=>'journal',
+ 'PY'=>'year',
+ 'VO'=>'volume',
+ 'NO'=>'issue',
+ 'PG'=>'pages',
+ 'AB'=>'abstract',
+ 'KP'=>'keywords'
+ #'CR'=>'', 'RF'=>'', 'PA'=>'' # don't know, don't care
+);
+
+# The journal field includes volume, issue, pages and year in BIDS
+# standard format.
+
+# Following are the MIMAS WOS format field identifiers, which claims to be
+# ISI Generic Export Format version 1.0 at the moment.
+# Most are ignored by this script.
+# Can't believe anybody would wan't to use all of these, but here they are
+# anyway
+
+%mname = (
+# 'FN'=>'filetype', # File type
+# 'VR'=>'version', # File format version number
+# 'PT'=>'pubtype', # Publication type
+ # (eg. book, journal, book in series)
+ 'AU'=>'author',
+ 'TI'=>'title', # Article title
+ 'SO'=>'sourcetitle', # eg. journal title, in full
+# 'LA'=>'language',
+# 'DT'=>'doctype', # eg. review, book, article
+# 'NR'=>'refcount',
+# 'SN'=>'ISSN',
+# 'PU'=>'publisher',
+# 'C1'=>'addresses', # Research addresses (of all authors)
+# 'DE'=>'authkeywords', # Author keywords
+# 'ID'=>'keywordsplus', # KeyWords Plus
+ 'AB'=>'abstract',
+# 'CR'=>'citedrefs',
+# 'TC'=>'citetimes', # Times cited
+ 'BP'=>'1stpage',
+ 'EP'=>'lastpage',
+# 'PG'=>'pagecount',
+ 'JI'=>'abbrtitle', # ISO source title abbr.
+# 'SE'=>'seriestitle', # Book series title
+# 'BS'=>'seriessub', # Book series subtitle
+ 'PY'=>'year', # Publication year
+# 'PD'=>'pubdate', # Publication date eg. JUN 8
+ 'VL'=>'volume',
+# 'IS'=>'issue',
+# 'PN'=>'partno', # Part number
+# 'SU'=>'supplement',
+# 'SI'=>'special', # Special issue
+# 'GA'=>'ISIno', # ISI document delivery number
+# 'PI'=>'pubcity', # Publisher city
+# 'WP'=>'pubURL', # Publisher web address
+# 'RP'=>'reprintaddr', # Reprint address
+# 'CP'=>'patent', # Cited patent
+ 'J9'=>'titleabbr', # 29-character source title abbr.
+# 'PA'=>'pubaddr', # Publisher address
+# 'ER'=>'endrecord',
+);
+
+# hash to store fields and also to remember where we are
+@record{'header', 'separator', 'key', 'title', 'author',
+ 'journal', 'isojournal', 'j9journal',
+ 'volume', 'year', 'issue', 'pages', 'keywords',
+ 'abstract', 'other'} = ('')x14;
+
+for (keys %record) { $record{$_} = '' }
+
+# count of records in total and under the last header
+@recordcount{'total', 'header'} = (0, 0);
+$field = 'header';
+$std = 0; # BIDS standard format flag
+$mimas = 0; # MIMAS WOS flag
+
+$temp = ''; # general purpose temp string
+$fileout = ''; # output filename
+$filein = ''; # input filename
+
+
+# If there's only one argument, "file", read that in and output
+# "file.bib". If there's two arguments, read in first as input, and
+# output to the second:
+
+if ($#ARGV == 1) { $fileout = $ARGV[1] }
+elsif ($#ARGV == 0) { $fileout = join ("",$ARGV[0],'.bib') }
+else { die $USAGE }
+$filein = $ARGV[0];
+$temp = '>';
+if (-e $fileout) {
+ qwarn "isi2bibtex: file $fileout exists: appending records\n" if
+ not $QUIET;
+ $temp = '>>';
+}
+
+open(IPTBIDS, $filein)
+ or die "isi2bibtex: couldn't open $filein for input: $!\n";
+open(OPTBIB, $temp.$fileout)
+ or die "isi2bibtex: couldn't open $fileout for output: $!\n";
+print STDERR
+ "isi2bibtex: converting BIDS file $filein to BibTeX output ".
+ "$fileout...\n" if not $QUIET;
+
+# read BIDS file and convert it
+convert();
+
+# output BibTeX file
+print OPTBIB $output;
+close OPTBIB;
+
+# end of main program
+
+
+sub convert {
+# input loop for ISI/BIDS file
+my $temp = '';
+
+while (<IPTBIDS>) {
+ chomp;
+ if (/^\s*Record - / or /^\s*$/) { # match ISI format record
+ if (/^\s*$/ and $field eq 'header') {
+ # we're still in the header,
+ # and we want to keep this blank line
+ # so don't match yet
+ }
+ else {
+ end_field() if $field eq 'header';
+ if ($field ne 'separator') {
+ end_record() if $field ne 'header';
+ $field = 'separator';
+ }
+ else {
+ # twiddle thumbs - in record separator
+ }
+ next;
+ }
+ }
+ elsif
+ (/(?: {6}|\(\d\) |\(\d\d\) |\(\d\d\d\) )([A-Z]{2}): (.*)/) {
+ # match BIDS standard format field
+ if (!$std and $field ne 'separator' and $field ne
+ 'header') {
+ # not a standard format record, don't match here
+ }
+ else {
+ end_field();
+ $std = 1;
+ $line = $2;
+ $temp = $1;
+ for ($line) {
+ s/^\s+//;
+ s/\s+$//;
+ }
+ if (defined($name{$temp})) {
+ $field = $name{$temp};
+ }
+ else {
+ $field = 'other';
+ }
+ next;
+ }
+ }
+ elsif
+ (/^([A-Z]{2})- /) { # match BIDS downloading format field
+ end_field();
+ $temp = $1;
+ if (defined($name{$temp})) {
+ $field = $name{$temp};
+ $line = strip($_); # extract data
+ }
+ else {
+ $field = 'other';
+ }
+ next;
+ }
+ elsif
+ (/^((?:[A-Z]{2})|J9) /) { # match MIMAS WOS format field
+ end_field();
+ $mimas = 1;
+ $temp = $1;
+ if (defined($mname{$temp})) {
+ $field = $mname{$temp};
+ $line = strip($_); # extract data
+ mimas(); # map to output fields
+ }
+ else {
+ $field = 'other';
+ }
+ next;
+ }
+ else { # match mid-field line
+# for multiline headers eg Subject: line split over two lines
+ /^\s/ ? ($singleline = 0) : ($singleline = 1);
+# cut whitespace
+ s/^\s+//;
+ s/\s+$//;
+# if we're not in a record and we didn't recognise it, it's a header
+ if ($field eq 'separator' and $_ ne '') {
+ $field = 'header';
+ next;
+ }
+# keep header exactly as it is (other than leading and trailing space)
+# - and the abstract as well if required
+ elsif ($field eq 'header') {
+ if ($singleline) {
+ $line = join("\n", $line, $_);
+ } else {
+ $line = join(" ", $line, $_);
+ }
+ }
+# make MIMAS author format look like BIDS downloading format
+ elsif ($field eq 'author' and $mimas) {
+ $line = join(';', $line, $_);
+ }
+ elsif ($field eq 'title') {
+ $line = join(' ', $line, $_)
+ unless title_dashes();
+ }
+ elsif ($field eq 'abstract') {
+ $line = join("\n".$ABSINDENT, $line, $_);
+ }
+# join everything else with a space
+ else { $line = join(' ', $line, $_) }
+ }
+}
+}
+
+sub title_dashes {
+# cut dashes from title if required
+# abstract dashes are dealt with in abstract() - kludge
+ if ( ($line =~ /\b-$/) and ($TDASHES and $field eq 'title') ) {
+ if ($TDASHES == 2) { $line =~ s/\b-$// }
+ $line = join('', $line, $_);
+ }
+}
+
+sub mimas {
+# map MIMAS fields onto output fields
+# first page should be put in page field
+ if ($field eq '1stpage') { $field = 'pages' }
+# last page no. should be appended to first
+ if ($field eq 'lastpage') {
+ $field = 'pages';
+ $line = $record{'pages'}.'-'.$line;
+ };
+# remember all forms of journal title, decide in end_record() which to use
+ if ($field eq 'sourcetitle') { # full journal title
+ $field = 'journal';
+ }
+ if ($field eq 'abbrtitle') { # ISO abbr
+ $field = 'isojournal';
+ }
+ if ($field eq 'titleabbr') { # other abbr
+ $field = 'j9journal';
+ }
+}
+
+sub strip {
+# get field data out of first line of BIDS downloading / ISI format field
+ my ($string) = $_[0];
+ for ($string) {
+# chop off initial field identifier and whitespace
+ s/^\s*(?:(?:[A-Z]{2})|(?:J9))-?\s*//;
+# chop off trailing whitespace
+ s/\s+$//;
+ }
+ $string;
+}
+
+sub end_field {
+# stuff to do at end of each field
+
+# put the field we have built up in the appropriate part of %record
+ for ($line) {
+ s/^\s+//;
+ s/\s+$//;
+ }
+ $record{$field} = $line;
+ $line = '';
+ if ($field eq 'header') {
+ header() if $HEADER;
+ $recordcount{'header'} = 0;
+ }
+}
+
+sub end_record {
+# stuff to do at end of each record
+# reached end of record, so must have just reached end of the last field
+ end_field();
+ $recordcount{'total'}++;
+ $recordcount{'header'}++;
+# do some editing
+# substitute one of the other journal title fields if ISO abbr missing
+ if ($mimas and $ISOTITLE) {
+ if ($record{'isojournal'} ne '') {
+ $record{'journal'} = $record{'isojournal'};
+ } elsif ($record{'j9journal'} ne '') {
+ $record{'journal'} = $record{'j9journal'};
+ }
+ }
+ makejournal();
+ makeauthor();
+# more editing and output record to file
+ key();
+ author() if $AUTHOR;
+ title() if $TITLE;
+ journal() if $JOURNAL;
+ year() if $YEAR;
+ volume() if $VOLUME;
+ pages() if $PAGES;
+ abstract() if $ABSTRACT;
+ terminator();
+
+# reinitialize variables
+ $field = 'separator';
+ for (keys %record) { $record{$_} = '' }
+ $std = 0;
+ $mimas = 0;
+}
+
+sub makekey {
+# generate unique-ish key for BibTeX to refer to record by
+
+ if ($AUTHORKEY) {
+# make unique-ish key out of first surname + first letter of subsequent
+# authors names, followed by last two digits of year
+# names already in key field from makeauthor()
+ $record{'key'} =~ s/\s*//g;
+# append last two digits of year to flag
+ $record{'key'} .= substr($record{'year'}, -2);
+ $record{'key'} =~ s/ //g;
+ }
+ else {
+# make unique-ish key out of input filename (minus extension) with the
+# current source file line number appended
+# this is probably more likely to be unique than author key, but less
+# intelligible
+ $record{'key'} = $fileout;
+ $record{'key'} =~ s/\.bib//;
+ $record{'key'} .= $.;
+ }
+}
+
+sub check_field($) {
+# check field for sense
+ my $field = shift;
+ my $warn = '';
+ return 1 if not $CHECK;
+ if ($field eq 'pages') {
+ if ($record{$field} !~
+ /^[A-Z]?[ \d]{0,5}-?[A-Z]?[ \\&\d]{1,5}(?:\s*\(\d{1,3}\s+pages?\))?$/) {
+ $warn = "$SCRIPT: warning: missing or unusual page number at ";
+ $warn .= "line ${.}, record $recordcount{'total'}\n";
+ qwarn $warn;
+ return 0;
+ } else { return 1 }
+ }
+ @check_ignore{'abstract', 'year', 'volume'} = (1)x3;
+ return 1 if $check_ignore{$field};
+ if ($record{$field} =~ /(?:^\s*$)|(?:^.{0,2}$)/) {
+ $warn = "$SCRIPT: warning: missing or very short $field field at ";
+ $warn .= "line ${.}, record $recordcount{'total'}\n";
+ qwarn $warn;
+ return 0;
+ }
+ return 1;
+}
+
+sub makeauthor {
+# convert author field to BibTeX format
+ my ($author,$surname,$firstnames,$authsep,$namesep);
+ my @authors;
+
+# set author and name separators for appropriate format
+ if (! $std) {
+ $authsep = q/;/;
+ $namesep = q/, /;
+ }
+ elsif ($std) {
+ $authsep = q/, /;
+ $namesep = q/_/;
+ }
+ @authors = split(/$authsep/, $record{'author'});
+ $record{'key'} = '';
+ foreach $author (@authors) {
+ ($surname, $firstnames) = split(/$namesep/, $author);
+ if ( not (defined($surname) and defined($firstnames)) ) {
+ qwarn "$SCRIPT: badly formed author field at line $.\n";
+ $surname = $author;
+ $firstnames = 'unknown';
+ }
+ for ($firstnames) {
+ s/(\w)/$1. /g; # add full stops to initials
+ s/^\s+//; # cut whitespace
+ s/\s+$//; # "
+ }
+ if ($AUTHORCASE and ($record{'author'} !~ /[a-z]/)) {
+ $surname = initupper($surname); # capitalise
+ $surname =~ s/^(Mac|Mc|O')([a-z])/$1\u$2/;
+ # special cases
+ }
+ $author = "$surname, $firstnames";
+# get surname of first author, and first letter of other authors' surnames
+ if ($record{'key'} eq '') { $record{'key'} = $surname }
+ else { $record{'key' } .= substr($surname,0,1); }
+ }
+ $record{'author'} = join (' and ', @authors);
+ makekey(); # make BibTeX unique record key
+}
+
+sub makejournal {
+# convert journal field to BibTeX format
+ if ($std) {
+# separate out BibTeX fields from the BIDS journal field
+ $record{'journal'} =~
+ /(.*),\s*(\d{4}),\s*Vol\.\s*(.+?),.*p{1,2}\.\s*(.*)/;
+ $record{'journal'} = $1;
+ $record{'year'} = $2;
+ $record{'volume'} = $3;
+ $record{'pages'} = $4;
+ for (keys %record) {
+ $record{$_} = '' unless defined($record{$_});
+ }
+ }
+# set the case for the journal if it's all in upper caps
+ if ($JOURNALCASE and ($record{'journal'} !~ /[a-z]/)) {
+ $record{'journal'} = initupper($record{'journal'});
+ }
+ $record{'journal'} = journalabbrev($record{'journal'})
+ if ($JABBREV and ! ($ISOTITLE and $mimas));
+}
+
+sub key {
+# output record key
+ my $fld = "\@ARTICLE";
+ check_field('key');
+ $output .= pastewrap("{$record{'key'}", "", $fld, $INDENT2);
+}
+
+sub author {
+# output author field
+ my $fld = $INDENT.'author'.$INDENTB.' '.$INDENTA;
+ $record{'author'} = texsafety($record{'author'});
+ check_field('author');
+ $output .= ",\n".pastewrap("{$record{'author'}}",
+ "", $fld, $INDENT2);
+}
+
+sub title {
+ my $fld = $INDENT.'title'.$INDENTB.' '.$INDENTA;
+# set the case for the title if it's all in upper caps
+ if ($TITLECASE and ($record{'title'} !~ /[a-z]/)) {
+ $record{'title'} = firstupper($record{'title'});
+ $record{'title'} = formulas($record{'title'}) if $FORMULACASE;
+ $record{'title'} = special($record{'title'}) if $SPECIAL;
+ }
+ $record{'title'} = texsafety($record{'title'});
+ check_field('title');
+ $output .= ",\n".pastewrap("{$record{'title'}}",
+ "", $fld, $INDENT2);
+}
+
+sub journal {
+# output journal field to file
+ my $fld = $INDENT.'journal'.$INDENTB.' '.$INDENTA;
+ $record{'journal'} = texsafety($record{'journal'});
+ check_field('journal');
+ $output .= ",\n".pastewrap("{$record{'journal'}}",
+ "", $fld, $INDENT2);
+}
+
+sub year {
+# output year field to file
+ my $fld = $INDENT.'year'.$INDENTB.' '.$INDENTA;
+ $record{'year'} = texsafety($record{'year'});
+ check_field('year');
+ $output .= ",\n".pastewrap("{$record{'year'}}",
+ "", $fld, $INDENT2);
+}
+
+sub volume {
+# output volume field to file
+ my $fld = $INDENT.'volume'.$INDENTB.' '.$INDENTA;
+ $record{'volume'} = texsafety($record{'volume'});
+ check_field('volume');
+ $output .= ",\n".pastewrap("{$record{'volume'}}",
+ "", $fld, $INDENT2);
+}
+
+sub pages {
+# output pages field to file
+ my $fld = $INDENT.'pages'.$INDENTB.' '.$INDENTA;
+ $record{'pages'} = texsafety($record{'pages'});
+ check_field('pages');
+ $output .= ",\n".pastewrap("{$record{'pages'}}", "",
+ $fld, $INDENT2);
+}
+
+sub abstract {
+# output abstract field to file
+ my $fld = $INDENT.'abstract'.$INDENTB.''.$INDENTA;
+ my $abs = '';
+ $record{'abstract'} = texsafety($record{'abstract'});
+ if ($ABSFORMAT) {
+ $record{'abstract'} =~ s/^\s+//mg; # unindent
+# stick abstract together, guessing paragraph positions if required
+ for (split(/\n/, $record{'abstract'})) {
+ s/^\s+//;
+ s/\s+$//;
+ if (
+ /[.?!]$/
+ and length() < ($ABSLENGTH - $PARAGAP)
+ and $ABSPARAS
+ )
+ { $abs .= $_."\n" }
+ else
+ { $abs .= $_.' ' }
+ }
+ $abs =~ s/ $//; # cut off final space
+ $abs = ",\n".wrap($fld, $INDENT2, '{'.$abs.'}');
+ for ($abs) {
+ s/\b- \b/-/ if ($ADASHES == 1);
+ s/\b- \b// if ($ADASHES == 2);
+ }
+ }
+ else {
+ if ($record{'abstract'} eq '') {
+ $abs = ",\n".$fld."{}";
+ }
+ else {
+ $abs = ",\n".$fld."{\n";
+ $abs .= $ABSINDENT.$record{'abstract'}."}";
+ }
+ }
+ check_field('abstract');
+ $output .= $abs;
+}
+
+sub terminator {
+# add record terminator to file
+ $output .= "\n}\n\n";
+}
+
+sub header {
+# add informational header to BibTeX output file
+# modify this to insert whatever comments are helpful to you
+# see flags at top of script to turn header off
+ my $temp;
+
+ $temp = "This file was automatically generated from entries from the ISI\n"
+ ."(Institute for Scientific Information) databases of scientific and\n"
+ ."other academic documents, using isi2bibtex version $VERSION, a perl\n"
+ ."script which converts ISI or BIDS format files to BibTeX format files\n"
+ ."for inclusion in documents typeset using the LaTeX document processor.";
+ $output .= pastewrap($temp)."\n\n";
+
+ $temp = "Try perldoc isi2bibtex for instructions, or read the script.";
+ $output .= pastewrap($temp)."\n\n";
+
+# output the whole header
+#$output .= $record{'header'}."\n\n";
+
+# get subject line from header
+ $temp = "This file generated on $date, from file '$filein', which has ".(
+ ($record{'header'} =~ /Subject:\s*(.*)/)
+ ? "the subject line '$1'."
+ : "no subject line. "
+ );
+ $output .= pastewrap($temp)."\n\n";
+}
+
+sub initupper {
+ my $string = $_[0];
+# capitalise initial letter of every word, lower-case the rest
+ $string =~ s/(\w+)/\u\L$1/g;
+# if you have words like "don't" in your references, try this
+# (pinched from the perlfaq):
+# $string =~ s/ (
+# (^\w+) # at the beginning of the line
+# | # or
+# (\s\w+) # preceded by whitespace
+# )
+# /\u\L$1/xg;
+# $string =~ /([\w']+)/\u\L$1/g;
+ $string;
+}
+
+sub firstupper {
+ my $string = $_[0];
+# capitalise initial letter of every sentence, lower-case the rest
+ $string =~ s/\b(\w)(.*)/\U$1\E\L$2/;
+ $string =~ s/([.?!]\s+)(\l\w)/$1\u$2/g;
+ $string;
+}
+
+sub lowercase {
+ my $string = $_[0];
+# decapitalise everything
+ $string =~ s/(.*)/\L$1/;
+ $string;
+}
+
+sub lowertrivial {
+ my $string = $_[0];
+# decapitalise short words
+ for ($string) {
+# s/\bA\b/a/g; # causes trouble eg. Phys. Rev. A
+ s/\bAn\b/an/g;
+ s/\bAnd\b/and/g;
+ s/\bThe\b/the/g;
+ s/\bOf\b/of/g;
+ s/\bTo\b/to/g;
+ s/\bFrom\b/from/g;
+ s/\bIn\b/in/g;
+ s/\bWith\b/with/g;
+ }
+ $string;
+}
+
+sub journalabbrev {
+ my $journal = $_[0];
+# substitute journal abbreviations
+# for MIMAS you can just use the pre-abbreviated title field (see options
+# at top of script)
+# obviously, put stuff in here that makes sense for you
+ for ($journal) {
+ s/\bjournal\b/J./gi;
+ s/\b(chemical|chemistry)\b/Chem./gi;
+ s/\b(physics|physical)\b/Phys./gi;
+ s/\bsociety\b/Soc./gi;
+ s/\bcommunications\b/Comm./gi;
+ s/\btransactions\b/Trans./gi;
+ s/\breviews\b/Rev./gi;
+ s/-chemical\b/ Chem./gi;
+ s/-faraday\b/ Faraday/gi;
+ s/\bdiscussions\b/Disc./gi;
+ s/\bamerican\b/Amer./gi;
+ s/\bapplied\b/Appl./gi;
+ s/\bresearch\b/Res./gi;
+ s/\bcrystallograph[a-z]+\b/Crystallog./gi;
+ s/\bletters\b/Lett./gi;
+ s/\b(surface|surfaces)\b/Surf./gi;
+ s/\b(science|sciences)\b/Sci./gi;
+ s/^Sci\.$/Science/;
+ s/\bphilosoph\l\w+\b/Philos./gi;
+ s/\bengineer\l\w+\b/Engin./gi;
+ s/\bphenomena\b/Phenom./gi;
+ s/\bspectroscop\l\w+\b/Spectrosc./gi;
+ s/\bproceedings\b/Proc./gi;
+ s/\bnational\b/Nat./gi;
+ s/\bacademy\b/Acad./gi;
+ s/\broyal\b/Roy./gi;
+ s/\bopinion\b/Opin./gi;
+ s/\b(material|materials)\b/Mater./gi;
+ s/\bcondensed\b/Cond./gi;
+ s/\bmolec\l\w+\b/Mol./gi;
+ s/\bstructur\l\w+\b/Struct./gi;
+ s/\bmatter\b/Matt./gi;
+ s/\binternational\b/Int./gi;
+ s/\bbulletin\b/Bull./gi;
+ s/\bannual\b/Ann./gi;
+ s/\bcatalysis\b/Catal./gi;
+ s/\breview\b/Rev./gi;
+ s/\btechnolog\l\w+\b/Technol./gi;
+ s/\bprogress\b/Prog./gi;
+ s/\bscientific\b/Sci./gi;
+ s/\binstrument\l\w+\b/Instrum./gi;
+ s/\bvacuum\b/Vac./gi;
+ s/^Vac\.$/Vacuum/;
+
+# you may or may not want to remove these words from journal titles
+# s/\ba\b//g;
+# s/\ban\b//gi;
+# s/\band\b//gi;
+ s/\bthe\b//gi;
+ s/\bof\b//gi;
+# s/\bto\b//gi;
+# s/\bfrom\b//gi;
+# s/\bin\b//gi;
+# s/\bwith\b//gi;
+
+ $journal = lowertrivial($journal);
+
+ s/\s+/ /g;
+ }
+ $journal
+}
+
+sub special {
+ my $string = $_[0];
+# set case of some special words
+
+# put your own words here
+# note that the upper-case replacement is enclosed in braces so that BibTeX
+# doesn't put it back into lower-case
+ for ($string) {
+ s/\bscf\b/{SCF}/g;
+ s/\bmc(-*)scf\b/{MC$1SCF}/g;
+ s/\bci\b/{CI}/g;
+ s/\b([0-9]-[0-9]+)g\b/{$1G}/g;
+ s/\bdna\b/{DNA}/g;
+ s/\bvanderwaals\b/{Van} der {Waals}/g;
+ s/\bmoller-plesset\b/{M}{\\o}ller--{Plesset}/g;
+# s/\b\b/{}/g;
+ }
+ $string;
+}
+
+sub formulas {
+ my $string = $_[0];
+# attempt to set case of chemical formulas
+ $string =~ s/(\b\l[a-z]+[1-9]+[a-z0-9]+\b)/{\U$1}/gi;
+# attempt to set crystal planes eg Al(111)
+ $string =~ s/\b(\l[a-z]{1,2}\(\d\d\d\))/{\u$1}/gi;
+ $string;
+}
+
+sub texsafety {
+ my $string = $_[0];
+# escape TeX special characters
+# ie. replace % and & with \% and \&.
+ $string =~ s:\&:\\&:g;
+ $string =~ s:\%:\\%:g;
+ $string;
+}
+
+sub pastewrap {
+ my @strings = @_;
+# paste together lines separated by newlines then wrap text
+# parameters: string, final string, initial tab, tab
+ for ($strings[0]) {
+ s/^\s+//;
+ s/\s+$//;
+ s/\n/ /mg;
+ }
+ foreach $i (1,2,3)
+ { if (! defined $strings[$i]) { $strings[$i] = '' } };
+ $strings[0] .= $strings[1]; # add final newlines or whatever
+ wrap($strings[2], $strings[3], $strings[0]);
+}
+
+sub gen_date ($$) {
+# generate current date string
+# 1st parameter is format:
+# 'long': Monday 23rd December 2000
+# 'short': 2000-12-23
+# 2nd parameter is time flag
+ my ($format, $time) = @_;
+ my ($day_name, $month_name);
+ my @td = localtime(time);
+ my ($min, $hour, $day, $month, $year, $weekday) = @td[1..6];
+ $year += 1900;
+ if ($time) { $time = "${hour}:${min}" }
+ if ($day == 1) { $ord = 'st' }
+ elsif ($day == 2) { $ord = 'nd' }
+ elsif ($day == 3) { $ord = 'rd' }
+ else { $ord = 'th' }
+ $day_name = (
+ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
+ )[$weekday];
+ $month_name = (
+ January, February, March, April, May, June, July, August, September,
+ October, November, December
+ )[$month];
+ $year = $td[5] + 1900;
+ if ($format eq 'long') {
+ $date = "$day_name $day$ord $month_name $year";
+ } elsif ($format eq 'short') {
+ $date = "${year}-${month}-${day}";
+ }
+ if ($time) { $date .= $time };
+ $date;
+}
+
+sub read_config ($) {
+ my $file = shift;
+# read configuration file
+ return if not ($fh = new FileHandle($file));
+ while(<$fh>) {
+ next if /^#/;
+ next if /^\s*$/;
+ SWITCH: {
+ /^\s*authorkey\s*=\s*(.*)\s*$/ and $AUTHORKEY = $1, last;
+ /^\s*header\s*=\s*(.*)\s*$/ and $HEADER = $1, last;
+ /^\s*titlecase\s*=\s*(.*)\s*$/ and $TITLECASE = $1, last;
+ /^\s*authorcase\s*=\s*(.*)\s*$/ and $AUTHORCASE = $1, last;
+ /^\s*journalcase\s*=\s*(.*)\s*$/ and $JOURNALCASE = $1, last;
+ /^\s*specialcase\s*=\s*(.*)\s*$/ and $SPECIAL = $1, last;
+ /^\s*formulacase\s*=\s*(.*)\s*$/ and $FORMULACASE = $1, last;
+ /^\s*jabbrev\s*=\s*(.*)\s*$/ and $JABBREV = $1, last;
+ /^\s*isotitle\s*=\s*(.*)\s*$/ and $ISOTITLE = $1, last;
+ /^\s*author\s*=\s*(.*)\s*$/ and $AUTHOR = $1, last;
+ /^\s*title\s*=\s*(.*)\s*$/ and $TITLE = $1, last;
+ /^\s*journal\s*=\s*(.*)\s*$/ and $JOURNAL = $1, last;
+ /^\s*year\s*=\s*(.*)\s*$/ and $YEAR = $1, last;
+ /^\s*volume\s*=\s*(.*)\s*$/ and $VOLUME = $1, last;
+ /^\s*pages\s*=\s*(.*)\s*$/ and $PAGES = $1, last;
+ /^\s*abstract\s*=\s*(.*)\s*$/ and $ABSTRACT = $1, last;
+ /^\s*linelength\s*=\s*(.*)\s*$/ and $LINELENGTH = $1, last;
+ /^\s*indent\s*=\s*"(.*)"\s*$/ and $INDENT = $1, last;
+ /^\s*indentx\s*=\s*"(.*)"\s*$/ and $INDENTX = $1, last;
+ /^\s*indentb\s*=\s*"(.*)"\s*$/ and $INDENTB = $1, last;
+ /^\s*indenta\s*=\s*"(.*)"\s*$/ and $INDENTA = $1, last;
+ /^\s*adashes\s*=\s*(.*)\s*$/ and $ADASHES = $1, last;
+ /^\s*tdashes\s*=\s*(.*)\s*$/ and $TDASHES = $1, last;
+ /^\s*absformat\s*=\s*(.*)\s*$/ and $ABSFORMAT = $1, last;
+ /^\s*absparas\s*=\s*(.*)\s*$/ and $ABSPARAS = $1, last;
+ /^\s*paragap\s*=\s*(.*)\s*$/ and $PARAGAP = $1, last;
+ /^\s*abslength\s*=\s*(.*)\s*$/ and $ABSLENGTH = $1, last;
+ /^\s*quiet\s*=\s*(.*)\s*$/ and $QUIET = $1, last;
+ /^\s*check\s*=\s*(.*)\s*$/ and $CHECK = $1, last;
+# /^\s*\s*=\s*(.*)\s*$/ and $ = $1, last;
+ die "$SCRIPT: syntax error in config file at line $.\n";
+ }
+ }
+}
diff --git a/biblio/bibtex/utils/isi2bibtex/isi2bibtex.1 b/biblio/bibtex/utils/isi2bibtex/isi2bibtex.1
new file mode 100644
index 0000000000..5cc617ec3f
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/isi2bibtex.1
@@ -0,0 +1,443 @@
+.rn '' }`
+''' $RCSfile$$Revision$$Date$
+'''
+''' $Log$
+'''
+.de Sh
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+.de Ip
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.de Vb
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve
+.ft R
+
+.fi
+..
+'''
+'''
+''' Set up \*(-- to give an unbreakable dash;
+''' string Tr holds user defined translation string.
+''' Bell System Logo is used as a dummy character.
+'''
+.tr \(*W-|\(bv\*(Tr
+.ie n \{\
+.ds -- \(*W-
+.ds PI pi
+.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.ds L" ""
+.ds R" ""
+''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+''' \*(L" and \*(R", except that they are used on ".xx" lines,
+''' such as .IP and .SH, which do another additional levels of
+''' double-quote interpretation
+.ds M" """
+.ds S" """
+.ds N" """""
+.ds T" """""
+.ds L' '
+.ds R' '
+.ds M' '
+.ds S' '
+.ds N' '
+.ds T' '
+'br\}
+.el\{\
+.ds -- \(em\|
+.tr \*(Tr
+.ds L" ``
+.ds R" ''
+.ds M" ``
+.ds S" ''
+.ds N" ``
+.ds T" ''
+.ds L' `
+.ds R' '
+.ds M' `
+.ds S' '
+.ds N' `
+.ds T' '
+.ds PI \(*p
+'br\}
+.\" If the F register is turned on, we'll generate
+.\" index entries out stderr for the following things:
+.\" TH Title
+.\" SH Header
+.\" Sh Subsection
+.\" Ip Item
+.\" X<> Xref (embedded
+.\" Of course, you have to process the output yourself
+.\" in some meaninful fashion.
+.if \nF \{
+.de IX
+.tm Index:\\$1\t\\n%\t"\\$2"
+..
+.nr % 0
+.rr F
+.\}
+.TH ISI2BIBTEX 1 "perl 5.005, patch 03" "26/Oct/2000" "User Contributed Perl Documentation"
+.UC
+.if n .hy 0
+.if n .na
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.de CQ \" put $1 in typewriter font
+.ft CW
+'if n "\c
+'if t \\&\\$1\c
+'if n \\&\\$1\c
+'if n \&"
+\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+'.ft R
+..
+.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+. \" AM - accent mark definitions
+.bd B 3
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds ? ?
+. ds ! !
+. ds /
+. ds q
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.ds oe o\h'-(\w'o'u*4/10)'e
+.ds Oe O\h'-(\w'O'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds v \h'-1'\o'\(aa\(ga'
+. ds _ \h'-1'^
+. ds . \h'-1'.
+. ds 3 3
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+. ds oe oe
+. ds Oe OE
+.\}
+.rm #[ #] #H #V #F C
+.SH "NAME"
+isi2bibtex \- convert ISI database files to BibTeX format
+.SH "SYNOPSIS"
+\fBisi2bibtex\fR [\fBOPTIONS\fR] \fBinputfile\fR [\fBoutputfile\fR]
+.PP
+If no output file is specified, inputfile.bib is used.
+.PP
+Records are appended if the output file exists.
+.SH "DESCRIPTION"
+Isi2bibtex converts an ISI (Institute for Scientific Information)
+bibliographic database file to a BibTeX file for use in TeX and LaTeX
+documents. Both formats hold bibliographic data on scientific and other
+academic documents.
+.PP
+(In the UK, the ISI databases are commonly known as \*(L'BIDS\*(R' or \*(L'MIMAS WoS')
+.PP
+Another way to do the same job isi2bibtex does is with bp, which has the
+advantage of converting between many different bibliographic formats and
+character sets. If you don't want that, isi2bibtex understands BIDS standard
+format in addition to the others, and is stand-alone and so presumably easier
+to get working.
+.Sh "Options"
+\fB\-h\fR, \fB--help\fR display help and exit
+.PP
+\fB\-v\fR, \fB--version\fR display version information and exit
+.PP
+\fB\-q\fR, \fB--quiet\fR no informational output
+.PP
+\fB\-a\fR, \fB--abstract\fR include abstract in output file
+.PP
+\fB\-c\fR, \fB--check\fR make some checks on field contents (default)
+.PP
+\fB\-n\fR, \fB--nocheck\fR don't make checks on field contents
+.Sh "Input databases"
+Although isi2bibtex was written for \s-1SCI\s0 (Science Citation Index), all the \s-1ISI\s0
+databases should work (\s-1SCI\s0, \s-1SSCI\s0, A&\s-1HCI\s0, \s-1ISTP\s0). Isi2bibtex will probably make
+a bad job of editing the content of these other databases, and would have to
+be changed a bit (not difficult), but you may be lucky.
+.PP
+In the \s-1UK\s0, probably most of the other databases on \s-1BIDS\s0 should work either
+straight away or with a small amount of modification of the script. \s-1BIDS\s0
+Pascal for instance works with downloading format, and would work with a small
+amount of modification with standard format.
+.Sh "Input formats"
+If you use a web interface to \s-1ISI\s0, isi2bibtex will only convert text output
+(whether emailed or saved directly), not saved web pages or other bibliography
+formats such as Procite or Reference Manager. Specifically, the formats that
+are understood are:
+.PP
+\s-1ISI\s0 generic output format version 1.0:
+.PP
+I presume this is the format used in most of the world.
+In the \s-1UK\s0, this is output by \s-1MIMAS\s0 WoS \*(L'save records\*(R' or \*(L'email records\*(R'.
+.PP
+\s-1BIDS\s0 standard format:
+.PP
+(any of: Title only; Title, authors & journal; Full record excluding
+citations; Full record)
+.PP
+\s-1BIDS\s0 downloading format:
+.PP
+(any of: Title, authors & journal in downloading format; Full record in
+downloading format)
+.PP
+You can mix and match record formats in one file. Deleting fields and / or
+record numbers from records should be okay. Any fields may be present in any
+order. Don't change the indentation of records: isi2bibtex will ignore
+records if they're too different from the usual layout due to ambiguity of
+field labels and field contents.
+.Sh "Output fields"
+For \s-1ISI\s0 generic format (eg \s-1MIMAS\s0 WoS output) and \s-1BIDS\s0 downloading format,
+fields other than title (\s-1TI\s0), author (\s-1AU\s0), source ie journal (\s-1SO\s0), page range
+(\s-1BP\s0, \s-1EP\s0), year (\s-1PY\s0) and abstract (\s-1AB\s0) are ignored.
+.PP
+For standard \s-1BIDS\s0 format, fields other than Title (\s-1TI\s0:), author (\s-1AU\s0:), journal
+(\s-1JN\s0:) and abstract (\s-1AB\s0:) are ignored (the \s-1JN\s0: field contains the page numbers,
+volume, date, etc as well as the journal name).
+.PP
+At the moment isi2bibtex only outputs the more useful fields, but this may
+change in the future (when someone gets round to it). Which fields are output
+can be controlled with a configuration file (see below). Those that don't
+correspond to the standard BibTeX fields (such as abstract) won't be
+recognised by BibTeX by default, but they'll be there if you need to use them.
+.Sh "Output formatting"
+Output is tidied up as much as possible, but some editing is still required.
+.PP
+Output formatting defaults can be modified with a configuration file.
+/etc/isi2bibtexrc and ~/.isi2bibtexrc (or whatever you set in the \f(CW@CONFIG\fR
+variable in the script) are looked at in that order for configuration
+settings, with the latter overriding the former. See the example
+configuration file provided.
+.PP
+If they are switched on, things like journal title abbreviations and acronym
+capitalisations can be added and removed at the end of the script (very easy
+to do by looking at what's there already). Newer \s-1ISI\s0 entries have lower case
+as well as upper, and isi2bibtex always leaves the capitalization as-is for
+those records.
+.SH "DOESN'T WORK?"
+Remember to:
+.Sh "Unix"
+set the first line of this script to point to your copy of perl
+(eg. /usr/bin/perl or /usr/local/bin/perl)
+.PP
+make it executable (eg. chmod +x ./isi2bibtex)
+.PP
+put it somewhere your \s-1OS\s0 can find it (eg ~/bin or /usr/local/bin): you may
+need to change your \s-1PATH\s0 environment variable
+.Sh "Microsoft Windows"
+change the name of this script to isi2bibtex.pl (you'll have to use it as
+.PP
+isi2bibtex.pl [\s-1OPTIONS\s0] inputfile.txt outputfile.bib
+.PP
+rather than
+.PP
+isi2bibtex [\s-1OPTIONS\s0] inputfile.txt outputfile.bib
+.PP
+because the windows \s-1DOS\s0 shell doesn't know about the #! line)
+.PP
+put it in your Perl bin directory, eg C:\ePerl\ebin (obviously if you don't have
+perl installed, you need to do that first: see below)
+.PP
+if that doesn't work check the \s-1PATH\s0 environment variable contains your perl
+bin directory, and as a last resort try
+.PP
+.Vb 1
+\& perl C:\ePerl\ebin\eisi2bibtex.pl inputfile.txt
+.Ve
+.Sh "Other platforms"
+I have no idea, but it should work on any platform that runs Perl 5, perhaps
+with a few small modifications. Isi2bibtex has been tested on Windows (95 and
+\s-1NT\s0) and Unix. Please send me any portability changes.
+.PP
+Email <jjl@pobox.com> if it still doesn't work.
+.SH "KNOWN PROBLEMS"
+It only does articles, not books, proceedings etc, and won't notice if a
+record isn't an article.
+.PP
+It ignores some fields (mostly those that don't correspond to the standard
+BibTeX \*(L'article\*(R' fields).
+.PP
+ISI access providers\*(R' output other than BIDS and MIMAS WOS haven't been
+tested. Send me an output file and I'll make it work with that format (for
+SCI).
+.PP
+Please tell me about any bugs you find, at <jjl@pobox.com>.
+.SH "SEE ALSO"
+If you don't have Perl installed, it can be got (free) from
+http://www.perl.com/ . LaTeX, BibTeX and everything else TeX can be
+downloaded from http://www.CTAN.org/ .
+.PP
+bp converts between many bibliography database formats (including
+conversion from BIDS downloading and ISI generic formats to BibTeX), and
+many character sets.
+.PP
+Ben Bolker (author of the BIDS / MIMAS WOS specification for bp) has a
+page describing his modifications to bp:
+.PP
+http://www.zoo.ufl.edu/bolker/bp.html
+.PP
+Dana Jacobsen (author of bp) has a web page with lots of bibliography
+software information and details of his bp package:
+.PP
+http://www.ecst.csuchico.edu/~jacobsd/bib/index.html
+.PP
+Some other BibTeX utilities that may or may not be useful (these are just
+the ones I've got round to looking at):
+.PP
+bibclean checks and formats BibTeX databases
+.PP
+bibsort sorts BibTeX databases
+.PP
+bib2dvi converts BibTeX databases to DVI files (DVI files are output by
+LaTeX and are DeVice Independent typeset documents, a bit like postscript
+or pdf -- you can read them on most computer systems)
+.PP
+bibextract, citefind and citetags respectively extract BibTeX records from a
+BibTeX database, extract LaTeX references from a LaTeX document, and look up
+LaTeX references in a BibTeX database.
+.PP
+bibindex makes an index for fast lookup by biblook, if you have a huge
+database that needs it I suppose
+.PP
+BibTool is an all-singing all-dancing general purpose BibTeX management
+utility
+.PP
+bibview is a simple interactive searching utility for BibTeX files
+.PP
+findbib gets BibTeX records corresponding to references in a LaTeX file from a
+preprint server (don't know if it still works)
+.PP
+both refer2bibtex and r2bib convert refer files (whatever they are) to BibTeX
+files
+.PP
+tkbibtex is a graphical tool for editing and searching BibTeX databases
+.PP
+Text::BibTeX is a Perl module for doing things to BibTeX databases.
+.SH "COPYRIGHT"
+Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone, John J. Lee
+.PP
+Isi2bibtex replaces and is derived from bids.to.bibtex (as of 29 Jan 1998) and
+isi2bib 0.1.
+.PP
+bids.to.bibtex was based on a perl script written by Jonathan Swinton, and
+subsequently modified by Ben Bolker and Anthony Stone.
+.PP
+isi2bib 0.1 was written by John J. Lee <jjl@pobox.com>
+.PP
+This script is covered by the GPL. See the script for copyright information.
+.SH "FILES"
+/etc/isi2bibtexrc, ~/.isi2bibtexrc (or whatever you set in the \f(CW@CONFIG\fR
+variable) are looked at in that order for default configuration settings,
+with the latter overriding the former. See the example configuration file
+provided.
+.SH "VERSION"
+0.40
+
+.rn }` ''
+.IX Title "ISI2BIBTEX 1"
+.IX Name "isi2bibtex - convert ISI database files to BibTeX format"
+
+.IX Header "NAME"
+
+.IX Header "SYNOPSIS"
+
+.IX Header "DESCRIPTION"
+
+.IX Subsection "Options"
+
+.IX Subsection "Input databases"
+
+.IX Subsection "Input formats"
+
+.IX Subsection "Output fields"
+
+.IX Subsection "Output formatting"
+
+.IX Header "DOESN'T WORK?"
+
+.IX Subsection "Unix"
+
+.IX Subsection "Microsoft Windows"
+
+.IX Subsection "Other platforms"
+
+.IX Header "KNOWN PROBLEMS"
+
+.IX Header "SEE ALSO"
+
+.IX Header "COPYRIGHT"
+
+.IX Header "FILES"
+
+.IX Header "VERSION"
+
diff --git a/biblio/bibtex/utils/isi2bibtex/isi2bibtexrc b/biblio/bibtex/utils/isi2bibtex/isi2bibtexrc
new file mode 100644
index 0000000000..800256c2a0
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/isi2bibtexrc
@@ -0,0 +1,110 @@
+# Config file for isi2bibtex
+#----------------------------
+
+# isi2bibtex will look for this in ~/.isi2bibtexrc
+# you can change this in the @CONFIG variable in the script.
+
+
+# Use key for record generated from author's names and publication date (eg.
+# 'PinnockM97' if authors are 'Pinnock, C. B. and Marshall, V. R. and
+# publication date is 1997) rather than key from input file and line number
+# (eg 'three50' if the input filename is 'three' and the line number of that
+# record is 50).
+authorkey = 1
+
+# Attach header information to output file - may be just some plain ascii
+# comments, or an email header. The function header() will run for each
+# non-BibTeX section isi2bibtex finds in your input file. By default,
+# header() outputs the email subject line and some other stuff.
+header = 1
+
+# Whether to guess case of various fields and other things. Case is only ever
+# guessed for fields that are in all upper case.
+titlecase = 1
+authorcase = 1
+journalcase = 1
+# do some special case cases
+specialcase = 1
+# Guess case of chemical formulas and crystal planes (badly). If you have a
+# better way of doing this, I'd like to know what it is!
+formulacase = 0
+
+# do some journal abbreviations
+jabbrev = 1
+
+# Note: this option doesn't apply to BIDS format.
+# Use the ISO standard abbreviated title field (JI) instead of SO, the full
+# title. If JI is missing, this will use J9 instead. If you set this to 0
+# and use SO, the script will abbreviate according to the journalabbrev()
+# function if you have jabbrev set.
+isotitle = 1
+
+# Fields to include in output.
+author = 1
+title = 1
+journal = 1
+year = 1
+volume = 1
+pages = 1
+abstract = 0
+# NOT DONE YET:
+#issue = 0
+#month = 0
+#address = 0
+#references = 0
+#doctype = 0
+
+# Output line length.
+linelength = 78
+
+# Field indentation
+#-------------------
+
+# Following is an example record, which is how the output should look if you
+# don't change anything:
+
+#@ARTICLE{bidstest64,
+# author = {Braun, J. and Bishop, G. G. and Ermakov, A. V. and
+# Goncharova, L. V. and Hinch, B. J.},
+# title = {Adsorption of pf3 on cu(001): ordered overlayer
+# ...
+
+# Eight spaces is one standard tab width.
+
+# Indent for whole field.
+indent = " "
+# Extra indent on second and subsequent lines in a field.
+indentx = " "
+# Indent before padding of field name.
+indentb = " "
+# Indent after padding of field name to standard length (XXX is this correct?)
+indenta = "= "
+
+# Join up long words that have been split at the end of the line in abstract:
+# 0: leave as-is
+# 1: cut space
+# 2: remove the dash as well
+# Note this won't have an effect unless absformat is set to 1.
+adashes = 2
+
+# Same as adashes, but for title field.
+tdashes = 2
+
+# If unset, leave the abstract exactly as-is, and don't try to reformat it to
+# fit your line length - this is useful because there are no blank lines to
+# mark paragraph breaks in ISI format so isi2bibtex can only guess where they
+# are.
+absformat = 1
+
+# If absformat = 1, guess where the paragraphs are in the abstract, rather
+# than outputting a uniform chunk of text.
+absparas = 1
+
+# Minimum number of spaces at end of line after end of sentence before
+# guessing this is a paragraph end.
+paragap = 10
+
+# If you have absformat = 0, you need to specify the abstract field line
+# length in the ISI database so that the abstract can be indented and still
+# fit in the line length available.
+abslength = 63
diff --git a/biblio/bibtex/utils/isi2bibtex/manual.htm b/biblio/bibtex/utils/isi2bibtex/manual.htm
new file mode 100644
index 0000000000..3e7be5a758
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/manual.htm
@@ -0,0 +1,464 @@
+<HTML>
+<HEAD>
+<TITLE>isi2bibtex - convert ISI database files to BibTeX format</TITLE>
+<LINK REV="made" HREF="mailto:">
+</HEAD>
+
+<BODY>
+
+<!-- INDEX BEGIN -->
+
+<UL>
+
+ <LI><A HREF="#NAME">NAME</A></LI>
+ <LI><A HREF="#SYNOPSIS">SYNOPSIS</A></LI>
+ <LI><A HREF="#DESCRIPTION">DESCRIPTION</A></LI>
+ <UL>
+
+ <LI><A HREF="#Options">Options</A></LI>
+ <LI><A HREF="#Input_databases">Input databases</A></LI>
+ <LI><A HREF="#Input_formats">Input formats</A></LI>
+ <LI><A HREF="#Output_fields">Output fields</A></LI>
+ <LI><A HREF="#Output_formatting">Output formatting</A></LI>
+ </UL>
+
+ <LI><A HREF="#DOESN_T_WORK_">DOESN'T WORK?</A></LI>
+ <UL>
+
+ <LI><A HREF="#Unix">Unix</A></LI>
+ <LI><A HREF="#Microsoft_Windows">Microsoft Windows</A></LI>
+ <LI><A HREF="#Other_platforms">Other platforms</A></LI>
+ </UL>
+
+ <LI><A HREF="#KNOWN_PROBLEMS">KNOWN PROBLEMS</A></LI>
+ <LI><A HREF="#SEE_ALSO">SEE ALSO</A></LI>
+ <LI><A HREF="#COPYRIGHT">COPYRIGHT</A></LI>
+ <LI><A HREF="#FILES">FILES</A></LI>
+ <LI><A HREF="#VERSION">VERSION</A></LI>
+</UL>
+<!-- INDEX END -->
+
+<HR>
+<P>
+<HR>
+<H1><A NAME="NAME">NAME</A></H1>
+<P>
+isi2bibtex - convert ISI database files to BibTeX format
+
+</P>
+<P>
+<HR>
+<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
+<P>
+<STRONG>isi2bibtex</STRONG> [<STRONG>OPTIONS</STRONG>] <STRONG>inputfile</STRONG> [<STRONG>outputfile</STRONG>]
+
+</P>
+<P>
+If no output file is specified, inputfile.bib is used.
+
+</P>
+<P>
+Records are appended if the output file exists.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
+<P>
+Isi2bibtex converts an ISI (Institute for Scientific Information)
+bibliographic database file to a BibTeX file for use in TeX and LaTeX
+documents. Both formats hold bibliographic data on scientific and other
+academic documents.
+
+</P>
+<P>
+(In the UK, the ISI databases are commonly known as 'BIDS' or 'MIMAS WoS')
+
+</P>
+<P>
+Another way to do the same job isi2bibtex does is with bp, which has the
+advantage of converting between many different bibliographic formats and
+character sets. If you don't want that, isi2bibtex understands BIDS
+standard format in addition to the others, and is stand-alone and so
+presumably easier to get working.
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Options">Options</A></H2>
+<P>
+<STRONG>-h</STRONG>, <STRONG>--help</STRONG> display help and exit
+
+</P>
+<P>
+<STRONG>-v</STRONG>, <STRONG>--version</STRONG> display version information and exit
+
+</P>
+<P>
+<STRONG>-q</STRONG>, <STRONG>--quiet</STRONG> no informational output
+
+</P>
+<P>
+<STRONG>-a</STRONG>, <STRONG>--abstract</STRONG> include abstract in output file
+
+</P>
+<P>
+<STRONG>-c</STRONG>, <STRONG>--check</STRONG> make some checks on field contents (default)
+
+</P>
+<P>
+<STRONG>-n</STRONG>, <STRONG>--nocheck</STRONG> don't make checks on field contents
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Input_databases">Input databases</A></H2>
+<P>
+Although isi2bibtex was written for SCI (Science Citation Index), all the
+ISI databases should work (SCI, SSCI, A&amp;HCI, ISTP). Isi2bibtex will
+probably make a bad job of editing the content of these other databases,
+and would have to be changed a bit (not difficult), but you may be lucky.
+
+</P>
+<P>
+In the UK, probably most of the other databases on BIDS should work either
+straight away or with a small amount of modification of the script. BIDS
+Pascal for instance works with downloading format, and would work with a
+small amount of modification with standard format.
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Input_formats">Input formats</A></H2>
+<P>
+If you use a web interface to ISI, isi2bibtex will only convert text output
+(whether emailed or saved directly), not saved web pages or other
+bibliography formats such as Procite or Reference Manager. Specifically,
+the formats that are understood are:
+
+</P>
+<P>
+ISI generic output format version 1.0:
+
+</P>
+<P>
+I presume this is the format used in most of the world. In the UK, this is
+output by MIMAS WoS 'save records' or 'email records'.
+
+</P>
+<P>
+BIDS standard format:
+
+</P>
+<P>
+(any of: Title only; Title, authors &amp; journal; Full record excluding
+citations; Full record)
+
+</P>
+<P>
+BIDS downloading format:
+
+</P>
+<P>
+(any of: Title, authors &amp; journal in downloading format; Full record in
+downloading format)
+
+</P>
+<P>
+You can mix and match record formats in one file. Deleting fields and / or
+record numbers from records should be okay. Any fields may be present in
+any order. Don't change the indentation of records: isi2bibtex will ignore
+records if they're too different from the usual layout due to ambiguity of
+field labels and field contents.
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Output_fields">Output fields</A></H2>
+<P>
+For ISI generic format (eg MIMAS WoS output) and BIDS downloading format,
+fields other than title (TI), author (AU), source ie journal (SO), page
+range (BP, EP), year (PY) and abstract (AB) are ignored.
+
+</P>
+<P>
+For standard BIDS format, fields other than Title (TI:), author (AU:),
+journal (JN:) and abstract (AB:) are ignored (the JN: field contains the
+page numbers, volume, date, etc as well as the journal name).
+
+</P>
+<P>
+At the moment isi2bibtex only outputs the more useful fields, but this may
+change in the future (when someone gets round to it). Which fields are
+output can be controlled with a configuration file (see below). Those that
+don't correspond to the standard BibTeX fields (such as abstract) won't be
+recognised by BibTeX by default, but they'll be there if you need to use
+them.
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Output_formatting">Output formatting</A></H2>
+<P>
+Output is tidied up as much as possible, but some editing is still
+required.
+
+</P>
+<P>
+Output formatting defaults can be modified with a configuration file.
+/etc/isi2bibtexrc and ~/.isi2bibtexrc (or whatever you set in the
+<CODE>@CONFIG</CODE> variable in the script) are looked at in that order
+for configuration settings, with the latter overriding the former. See the
+example configuration file provided.
+
+</P>
+<P>
+If they are switched on, things like journal title abbreviations and
+acronym capitalisations can be added and removed at the end of the script
+(very easy to do by looking at what's there already). Newer ISI entries
+have lower case as well as upper, and isi2bibtex always leaves the
+capitalization as-is for those records.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="DOESN_T_WORK_">DOESN'T WORK?</A></H1>
+<P>
+Remember to:
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Unix">Unix</A></H2>
+<P>
+set the first line of this script to point to your copy of perl (eg.
+/usr/bin/perl or /usr/local/bin/perl)
+
+</P>
+<P>
+make it executable (eg. chmod +x ./isi2bibtex)
+
+</P>
+<P>
+put it somewhere your OS can find it (eg ~/bin or /usr/local/bin): you may
+need to change your PATH environment variable
+
+</P>
+<P>
+<HR>
+<H2><A NAME="Microsoft_Windows">Microsoft Windows</A></H2>
+<P>
+change the name of this script to isi2bibtex.pl (you'll have to use it as
+
+</P>
+<P>
+isi2bibtex.pl [OPTIONS] inputfile.txt outputfile.bib
+
+</P>
+<P>
+rather than
+
+</P>
+<P>
+isi2bibtex [OPTIONS] inputfile.txt outputfile.bib
+
+</P>
+<P>
+because the windows DOS shell doesn't know about the #! line)
+
+</P>
+<P>
+put it in your Perl bin directory, eg C:\Perl\bin (obviously if you don't
+have perl installed, you need to do that first: see below)
+
+</P>
+<P>
+if that doesn't work check the PATH environment variable contains your perl
+bin directory, and as a last resort try
+
+</P>
+<P>
+<PRE> perl C:\Perl\bin\isi2bibtex.pl inputfile.txt
+</PRE>
+</P>
+<P>
+<HR>
+<H2><A NAME="Other_platforms">Other platforms</A></H2>
+<P>
+I have no idea, but it should work on any platform that runs Perl 5,
+perhaps with a few small modifications. Isi2bibtex has been tested on
+Windows (95 and NT) and Unix. Please send me any portability changes.
+
+</P>
+<P>
+Email &lt;<A HREF="mailto:jjl@pobox.com" jjl@pobox.com</A>&gt;
+if it still doesn't work.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="KNOWN_PROBLEMS">KNOWN PROBLEMS</A></H1>
+<P>
+It only does articles, not books, proceedings etc, and won't notice if a
+record isn't an article.
+
+</P>
+<P>
+It ignores some fields (mostly those that don't correspond to the standard
+BibTeX 'article' fields).
+
+</P>
+<P>
+ISI access providers' output other than BIDS and MIMAS WOS haven't been
+tested. Send me an output file and I'll make it work with that format (for
+SCI).
+
+</P>
+<P>
+Please tell me about any bugs you find, at &lt;<A
+HREF="mailto:jjl@pobox.com">jjl@pobox.com</A>&gt;
+
+</P>
+<P>
+<HR>
+<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
+<P>
+If you don't have Perl installed, it can be got (free) from <A
+HREF="http://www.perl.com/">http://www.perl.com/</A> . LaTeX, BibTeX and
+everything else TeX can be downloaded from <A
+HREF="http://www.CTAN.org/">http://www.CTAN.org/</A> .
+
+</P>
+<P>
+bp converts between many bibliography database formats (including
+conversion from BIDS downloading and ISI generic formats to BibTeX), and
+many character sets.
+
+</P>
+<P>
+Ben Bolker (author of the BIDS / MIMAS WOS specification for bp) has a page
+describing his modifications to bp:
+
+</P>
+<P>
+<A
+HREF="http://www.zoo.ufl.edu/bolker/bp.html">http://www.zoo.ufl.edu/bolker/bp.html</A>
+
+
+</P>
+<P>
+Dana Jacobsen (author of bp) has a web page with lots of bibliography
+software information and details of his bp package:
+
+</P>
+<P>
+<A
+HREF="http://www.ecst.csuchico.edu/~jacobsd/bib/index.html">http://www.ecst.csuchico.edu/~jacobsd/bib/index.html</A>
+
+
+</P>
+<P>
+Some other BibTeX utilities that may or may not be useful (these are just
+the ones I've got round to looking at):
+
+</P>
+<P>
+bibclean checks and formats BibTeX databases
+
+</P>
+<P>
+bibsort sorts BibTeX databases
+
+</P>
+<P>
+bib2dvi converts BibTeX databases to DVI files (DVI files are output by
+LaTeX and are DeVice Independent typeset documents, a bit like postscript
+or pdf -- you can read them on most computer systems)
+
+</P>
+<P>
+bibextract, citefind and citetags respectively extract BibTeX records from
+a BibTeX database, extract LaTeX references from a LaTeX document, and look
+up LaTeX references in a BibTeX database.
+
+</P>
+<P>
+bibindex makes an index for fast lookup by biblook, if you have a huge
+database that needs it I suppose
+
+</P>
+<P>
+BibTool is an all-singing all-dancing general purpose BibTeX management
+utility
+
+</P>
+<P>
+bibview is a simple interactive searching utility for BibTeX files
+
+</P>
+<P>
+findbib gets BibTeX records corresponding to references in a LaTeX file
+from a preprint server (don't know if it still works)
+
+</P>
+<P>
+both refer2bibtex and r2bib convert refer files (whatever they are) to
+BibTeX files
+
+</P>
+<P>
+tkbibtex is a graphical tool for editing and searching BibTeX databases
+
+</P>
+<P>
+Text::BibTeX is a Perl module for doing things to BibTeX databases.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="COPYRIGHT">COPYRIGHT</A></H1>
+<P>
+Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone, John J. Lee
+
+</P>
+<P>
+Isi2bibtex replaces and is derived from bids.to.bibtex (as of 29 Jan 1998)
+and isi2bib 0.1.
+
+</P>
+<P>
+bids.to.bibtex was based on a perl script written by Jonathan Swinton, and
+subsequently modified by Ben Bolker and Anthony Stone.
+
+</P>
+<P>
+isi2bib 0.1 was written by John J. Lee &lt;<A
+HREF="mailto:jjl@pobox.com">jjl@pobox.com</A>&gt;
+
+</P>
+<P>
+This script is covered by the GPL. See the script for copyright
+information.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="FILES">FILES</A></H1>
+<P>
+/etc/isi2bibtexrc, ~/.isi2bibtexrc (or whatever you set in the
+<CODE>@CONFIG</CODE> variable) are looked at in that order for default
+configuration settings, with the latter overriding the former. See the
+example configuration file provided.
+
+</P>
+<P>
+<HR>
+<H1><A NAME="VERSION">VERSION</A></H1>
+<P>
+0.40
+
+</P>
+
+</BODY>
+
+</HTML>
diff --git a/biblio/bibtex/utils/isi2bibtex/manual.txt b/biblio/bibtex/utils/isi2bibtex/manual.txt
new file mode 100644
index 0000000000..fff2501f48
--- /dev/null
+++ b/biblio/bibtex/utils/isi2bibtex/manual.txt
@@ -0,0 +1,263 @@
+NAME
+ isi2bibtex - convert ISI database files to BibTeX format
+
+SYNOPSIS
+ isi2bibtex [OPTIONS] inputfile [outputfile]
+
+ If no output file is specified, inputfile.bib is used.
+
+ Records are appended if the output file exists.
+
+DESCRIPTION
+ Isi2bibtex converts an ISI (Institute for Scientific
+ Information) bibliographic database file to a BibTeX file for
+ use in TeX and LaTeX documents. Both formats hold bibliographic
+ data on scientific and other academic documents.
+
+ (In the UK, the ISI databases are commonly known as 'BIDS' or
+ 'MIMAS WoS')
+
+ Another way to do the same job isi2bibtex does is with bp, which
+ has the advantage of converting between many different
+ bibliographic formats and character sets. If you don't want
+ that, isi2bibtex understands BIDS standard format in addition to
+ the others, and is stand-alone and so presumably easier to get
+ working.
+
+ Options
+
+ -h, --help display help and exit
+
+ -v, --version display version information and exit
+
+ -q, --quiet no informational output
+
+ -a, --abstract include abstract in output file
+
+ -c, --check make some checks on field contents (default)
+
+ -n, --nocheck don't make checks on field contents
+
+ Input databases
+
+ Although isi2bibtex was written for SCI (Science Citation
+ Index), all the ISI databases should work (SCI, SSCI, A&HCI,
+ ISTP). Isi2bibtex will probably make a bad job of editing the
+ content of these other databases, and would have to be changed a
+ bit (not difficult), but you may be lucky.
+
+ In the UK, probably most of the other databases on BIDS should
+ work either straight away or with a small amount of modification
+ of the script. BIDS Pascal for instance works with downloading
+ format, and would work with a small amount of modification with
+ standard format.
+
+ Input formats
+
+ If you use a web interface to ISI, isi2bibtex will only convert
+ text output (whether emailed or saved directly), not saved web
+ pages or other bibliography formats such as Procite or Reference
+ Manager. Specifically, the formats that are understood are:
+
+ ISI generic output format version 1.0:
+
+ I presume this is the format used in most of the world. In the
+ UK, this is output by MIMAS WoS 'save records' or 'email
+ records'.
+
+ BIDS standard format:
+
+ (any of: Title only; Title, authors & journal; Full record
+ excluding citations; Full record)
+
+ BIDS downloading format:
+
+ (any of: Title, authors & journal in downloading format; Full
+ record in downloading format)
+
+ You can mix and match record formats in one file. Deleting
+ fields and / or record numbers from records should be okay. Any
+ fields may be present in any order. Don't change the indentation
+ of records: isi2bibtex will ignore records if they're too
+ different from the usual layout due to ambiguity of field labels
+ and field contents.
+
+ Output fields
+
+ For ISI generic format (eg MIMAS WoS output) and BIDS
+ downloading format, fields other than title (TI), author (AU),
+ source ie journal (SO), page range (BP, EP), year (PY) and
+ abstract (AB) are ignored.
+
+ For standard BIDS format, fields other than Title (TI:), author
+ (AU:), journal (JN:) and abstract (AB:) are ignored (the JN:
+ field contains the page numbers, volume, date, etc as well as
+ the journal name).
+
+ At the moment isi2bibtex only outputs the more useful fields,
+ but this may change in the future (when someone gets round to
+ it). Which fields are output can be controlled with a
+ configuration file (see below). Those that don't correspond to
+ the standard BibTeX fields (such as abstract) won't be
+ recognised by BibTeX by default, but they'll be there if you
+ need to use them.
+
+ Output formatting
+
+ Output is tidied up as much as possible, but some editing is
+ still required.
+
+ Output formatting defaults can be modified with a configuration
+ file. /etc/isi2bibtexrc and ~/.isi2bibtexrc (or whatever you set
+ in the @CONFIG variable in the script) are looked at in that
+ order for configuration settings, with the latter overriding the
+ former. See the example configuration file provided.
+
+ If they are switched on, things like journal title abbreviations
+ and acronym capitalisations can be added and removed at the end
+ of the script (very easy to do by looking at what's there
+ already). Newer ISI entries have lower case as well as upper,
+ and isi2bibtex always leaves the capitalization as-is for those
+ records.
+
+DOESN'T WORK?
+ Remember to:
+
+ Unix
+
+ set the first line of this script to point to your copy of perl
+ (eg. /usr/bin/perl or /usr/local/bin/perl)
+
+ make it executable (eg. chmod +x ./isi2bibtex)
+
+ put it somewhere your OS can find it (eg ~/bin or
+ /usr/local/bin): you may need to change your PATH environment
+ variable
+
+ Microsoft Windows
+
+ change the name of this script to isi2bibtex.pl (you'll have to
+ use it as
+
+ isi2bibtex.pl [OPTIONS] inputfile.txt outputfile.bib
+
+ rather than
+
+ isi2bibtex [OPTIONS] inputfile.txt outputfile.bib
+
+ because the windows DOS shell doesn't know about the #! line)
+
+ put it in your Perl bin directory, eg C:\Perl\bin (obviously if
+ you don't have perl installed, you need to do that first: see
+ below)
+
+ if that doesn't work check the PATH environment variable
+ contains your perl bin directory, and as a last resort try
+
+ perl C:\Perl\bin\isi2bibtex.pl inputfile.txt
+
+ Other platforms
+
+ I have no idea, but it should work on any platform that runs
+ Perl 5, perhaps with a few small modifications. Isi2bibtex has
+ been tested on Windows (95 and NT) and Unix. Please send me any
+ portability changes.
+
+ Email <jjl@pobox.com> if it still doesn't work.
+
+KNOWN PROBLEMS
+ It only does articles, not books, proceedings etc, and won't
+ notice if a record isn't an article.
+
+ It ignores some fields (mostly those that don't correspond to
+ the standard BibTeX 'article' fields).
+
+ ISI access providers' output other than BIDS and MIMAS WOS
+ haven't been tested. Send me an output file and I'll make it
+ work with that format (for SCI).
+
+ Please tell me about any bugs you find, at
+ <jjl@pobox.com>.
+
+SEE ALSO
+ If you don't have Perl installed, it can be got (free) from
+ http://www.perl.com/ . LaTeX, BibTeX and everything else TeX can
+ be downloaded from http://www.CTAN.org/ .
+
+ bp converts between many bibliography database formats
+ (including conversion from BIDS downloading and ISI generic
+ formats to BibTeX), and many character sets.
+
+ Ben Bolker (author of the BIDS / MIMAS WOS specification for bp)
+ has a page describing his modifications to bp:
+
+ http://www.zoo.ufl.edu/bolker/bp.html
+
+ Dana Jacobsen (author of bp) has a web page with lots of
+ bibliography software information and details of his bp package:
+
+ http://www.ecst.csuchico.edu/~jacobsd/bib/index.html
+
+ Some other BibTeX utilities that may or may not be useful (these
+ are just the ones I've got round to looking at):
+
+ bibclean checks and formats BibTeX databases
+
+ bibsort sorts BibTeX databases
+
+ bib2dvi converts BibTeX databases to DVI files (DVI files are
+ output by LaTeX and are DeVice Independent typeset documents, a
+ bit like postscript or pdf -- you can read them on most computer
+ systems)
+
+ bibextract, citefind and citetags respectively extract BibTeX
+ records from a BibTeX database, extract LaTeX references from a
+ LaTeX document, and look up LaTeX references in a BibTeX
+ database.
+
+ bibindex makes an index for fast lookup by biblook, if you have
+ a huge database that needs it I suppose
+
+ BibTool is an all-singing all-dancing general purpose BibTeX
+ management utility
+
+ bibview is a simple interactive searching utility for BibTeX
+ files
+
+ findbib gets BibTeX records corresponding to references in a
+ LaTeX file from a preprint server (don't know if it still works)
+
+ both refer2bibtex and r2bib convert refer files (whatever they
+ are) to BibTeX files
+
+ tkbibtex is a graphical tool for editing and searching BibTeX
+ databases
+
+ Text::BibTeX is a Perl module for doing things to BibTeX
+ databases.
+
+COPYRIGHT
+ Copyright (C) 2000 Jonathan Swinton, Ben Bolker, Anthony Stone,
+ John J. Lee
+
+ Isi2bibtex replaces and is derived from bids.to.bibtex (as of 29
+ Jan 1998) and isi2bib 0.1.
+
+ bids.to.bibtex was based on a perl script written by Jonathan
+ Swinton, and subsequently modified by Ben Bolker and Anthony
+ Stone.
+
+ isi2bib 0.1 was written by John J. Lee <jjl@pobox.com>
+
+ This script is covered by the GPL. See the script for copyright
+ information.
+
+FILES
+ /etc/isi2bibtexrc, ~/.isi2bibtexrc (or whatever you set in the
+ @CONFIG variable) are looked at in that order for default
+ configuration settings, with the latter overriding the former.
+ See the example configuration file provided.
+
+VERSION
+ 0.40
+
diff --git a/biblio/bibtex/utils/lookbibtex/Makefile b/biblio/bibtex/utils/lookbibtex/Makefile
new file mode 100644
index 0000000000..f80e34b912
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/Makefile
@@ -0,0 +1,69 @@
+
+#
+# lookbibtex makefile
+# very simple, right?
+# Actually, it was simple, once.
+#
+
+#
+# The following parameters you may wish to change.
+#
+
+BINDIR=/usr/dist/bin
+BINOWN=johnh
+BINMOD=755
+
+MANEXT=1
+MANDIR=/usr/dist/share/man/man$(MANEXT)
+MANOWN=johnh
+MANMOD=644
+
+# perl path in scripts.dist
+OLDPERLPATH=/usr/dist/bin/perl
+# perl path on your system
+NEWPERLPATH=/usr/dist/bin/perl
+
+#
+# End of stuff to localize
+#
+
+
+
+PROGRAMS=lookbibtex bibdestringify
+
+
+default: $(PROGRAMS)
+ @echo "bibtex tools are up-to-date."
+
+lookbibtex: lookbibtex.dist
+ sed s:#!$(OLDPERLPATH):#!$(NEWPERLPATH):p <lookbibtex.dist >lookbibtex
+
+bibdestringify: bibdestringify.dist
+ sed s:#!$(OLDPERLPATH):#!$(NEWPERLPATH):p <bibdestringify.dist >bibdestringify
+
+
+
+# install things in the right place
+install: $(PROGRAMS)
+ cp lookbibtex.1 $(MANDIR)/lookbibtex.$(MANEXT)
+ chmod $(MANMOD) $(MANDIR)/lookbibtex.$(MANEXT)
+ chown $(MANOWN) $(MANDIR)/lookbibtex.$(MANEXT)
+ cp bibdestringify.1 $(MANDIR)/bibdestringify.$(MANEXT)
+ chmod $(MANMOD) $(MANDIR)/bibdestringify.$(MANEXT)
+ chown $(MANOWN) $(MANDIR)/bibdestringify.$(MANEXT)
+ cp lookbibtex $(BINDIR)
+ chmod $(BINMOD) $(BINDIR)/lookbibtex
+ chown $(BINOWN) $(BINDIR)/lookbibtex
+ cp bibdestringify $(BINDIR)
+ chmod $(BINMOD) $(BINDIR)/bibdestringify
+ chown $(BINOWN) $(BINDIR)/bibdestringify
+
+
+# package up a shar for distribution
+shar:
+ shar README lookbibtex.1 lookbibtex.dist \
+ bibdestringify.1 bibdestringify.dist release \
+ Makefile>lookbibtex.`cat release`.shar
+ compress <lookbibtex.`cat release`.shar >lookbibtex.`cat release`.shar.Z
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/README b/biblio/bibtex/utils/lookbibtex/README
new file mode 100644
index 0000000000..f3a67f81ea
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/README
@@ -0,0 +1,61 @@
+lookbibtex release 1.43
+-----------------------
+
+To install lookbibtex and bibdestringify, adjust the Makefile
+to any local peculiarities and type "make install".
+
+Lookbibtex is released under the GNU Public License, Version 1 (Feb 89).
+A copy of the GPL should be included with your Perl distribution.
+
+Release 1.1 (28-Nov-90) fixes three problems of release 1.0. End
+right curley brackets not in the first column were missed in 1.0.
+Umlauts and multi-line fields with curley brackets are now handled
+correctly.
+
+Release 1.2 (17-Jan-91) includes bibdestringify, a tool for replacing all
+strings in a bibtex file. To support this, it adds the -s option
+to lookbibtex.
+
+The speed in previous versions of bibdestringify was absymal. This
+release, release 1.3 (26-Aug-91) fixes this with an order of mangitude
+speed improvement. Documentation for both programs is also slightly
+improved. Notice that the -k flag to lookbibtex has been renamed to -f.
+
+Release 1.31 (27-Aug-91) fixes a couple of minor bugs. The @string
+pattern in bibdestringify is made a little more general (to allow c++,
+for example) [from Vick Khera <khera@cs.duke.edu>], and a bug in the
+lookbibtex man page is fixed [from wald@theory.lcs.mit.edu (David Wald)].
+
+Release 1.32 (28-Aug-91) fixes the usage string in lookbibtex
+and improves the installation part of the makefile, both at
+the suggestion of Henk P. Penning <henkp@cs.ruu.nl>.
+
+Release 1.4 (5-Sep-91) changes the order of the arguments to resemble grep(1).
+At the suggestion of Tim Wilson <Tim.Wilson@cl.cam.ac.uk>,
+when no bibtex file is specified, all files in your BIBINPUTS path
+are selected. Makefile now automatically sets perl script paths.
+
+Release 1.41 (11-Sep-91) Makes the bibdestringify matching a little more
+general, and fixes a bug in the makefile.
+
+Release 1.42 (29-Jan-92) Fixes a bug in handling of mixed-case @string's
+in lookbibtex at the suggestion of Dana Jacobsen <jacobsd@frisby.cs.orst.edu>.
+
+Release 1.43 (7-May-92) Added ftp site to README document.
+
+Perl is the very pratical extraction and report language from Larry
+Wall. It may be obtained by anonymous ftp from
+jpl-devvax.jpl.nasa.gov in pub/perl.4.0, or by e-mail to Larry Wall
+<lwall@jpl-devvax.jpl.nasa.gov>.
+
+Lookbibtex is available by anonymous ftp from ftp.cs.ucla.edu in
+pub/ficus.
+
+Any comments are welcome.
+
+ -John Heidemann
+ <johnh@cs.ucla.edu>
+ 29 January 1992
+
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/bibdestringify.1 b/biblio/bibtex/utils/lookbibtex/bibdestringify.1
new file mode 100644
index 0000000000..daf8413dae
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/bibdestringify.1
@@ -0,0 +1,47 @@
+.\" bibdestringify.1
+.TH BIBDESTRINGIFY 1 "26 August 1991"
+
+.SH NAME
+bibdestringify \- replace string substitutions in a bibtex database
+
+.SH SYNOPSIS
+.B bibdestringify
+
+.SH DESCRIPTION
+bibdestringify reads a bibtex file from standard input.
+It produces the same file, but with all string substitutions
+(@string{foo = "bar"}) replaced in the text.
+
+For example, to tell your friend about your favorite new
+breakfast cereal, you might use the command:
+.IP
+.B
+lookbibtex -s kellogg | bibdestringify | mail lk
+.LP
+Lookbibtex -s passes string defintions through;
+"kellogg" is the search regular expression.
+bibdestringify expands these definitons, so that when
+Leonard (lk) gets your mail,
+there will be no references to unknown strings.
+
+.SH AUTHOR
+John Heidemann <johnh@cs.ucla.edu>
+
+.SH SEE ALSO
+.BR bibtex (1),
+.BR lookbibtex (1),
+.BR perl (1).
+
+.SH BUGS
+Like lookbibtex,
+bibdestringify is written in Perl, so it will not run on machines
+which do not have perl installed.
+
+Although previous versions of bibdestringify (0.9) were quite
+slow, this version is reasonably fast.
+.\" Its speed is O(nm) where
+.\" n is the number of defined strings
+.\" and m is the number of lines with potential replacement.
+
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/bibdestringify.dist b/biblio/bibtex/utils/lookbibtex/bibdestringify.dist
new file mode 100644
index 0000000000..d7815aaac5
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/bibdestringify.dist
@@ -0,0 +1,48 @@
+#!/usr/dist/bin/perl
+
+#
+# bibdestringify 1.02
+# a perl script to remove strings from a bibtex file.
+# Comments to <johnh@cs.ucla.edu>.
+#
+# Copyright (C) 1990 by John Heidemann
+# This is distributed under the GNU Public Licence, Version 1 (Feb 89).
+# See the Perl documentation for a copy of that license.
+#
+# Timings (from ./bibdestringify <bibdestringify.example >/dev/null):
+# version time (with /bin/time)
+# 0.90 14.6 real 13.8 user 0.2 sys
+# 0.91 12.6 real 11.9 user 0.2 sys
+# 1.0 1.7 real 1.4 user 0.2 sys
+#
+# 17-Jan-91 It is begun. bibdestringify 0.9
+# 15-Feb-91 It is documented, and given out to khera@cs.duke.edu.
+# 26-Aug-91 Speed slightly improved. bibdestringify 0.91
+# 26-Aug-91 Changed to remember patterns and process with eval.
+# Speed dramatically (order of magnitude) improved.
+# My hat is off to the mighty eval! bibdestringify 1.0
+# 27-Aug-91 Patched to allow a more liberal definition of @strings
+# at the suggestion of Vick Khera <khera@cs.duke.edu>. bibdestringify 1.01
+# 11-Sep-91 A positivly radical definition of @strings. bibdestringify 1.02
+#
+
+
+$replace = 's/\"\s*\#\s*\"//g;'; # the replacement pattern
+ # (default to doing string concatination)
+
+
+while (<STDIN>) {
+ if (($name,$value) = /\@string\s*{\s*(\S+)\s*=\s*(.*)\s*}/) {
+ $name =~ s/(\W)/\\\1/g; # quote special chars
+ $value =~ s/(\W)/\\\1/g;
+ $replace = "s/\\b$name\\b/$value/g;\n" . $replace;
+ } else {
+# if (!$done) { print "$replace\n"; $done=1; };
+ eval $replace;
+ $@ && die ("Error in eval, $@");
+ print $_;
+ };
+};
+
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/lookbibtex.1 b/biblio/bibtex/utils/lookbibtex/lookbibtex.1
new file mode 100644
index 0000000000..9c77bf7aaa
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/lookbibtex.1
@@ -0,0 +1,129 @@
+.\" lookbibtex.1
+.TH LOOKBIBTEX 1 " 5 September 1991"
+
+.SH NAME
+lookbibtex \- find references in a bibtex database
+
+.SH SYNOPSIS
+.B lookbibtex
+[ \-s
+]
+[ \-f
+.I field
+]
+.I regexp
+[
+.I bibfiles...
+]
+
+.SH DESCRIPTION
+lookbibtex searches through bibtex databases,
+printing entries that match
+.I regexp.
+See
+.BR bibtex (1)
+for a description of bibtex databases.
+.I Regexp
+is a Perl regular expression.
+See
+.BR perl (1)
+for an explanation of differences between perl and standard regular
+expressions.
+
+The \-s option passes @string defintions through.
+By default, they're eaten.
+
+Searches can be limited to particular bibtex fields
+with the \-f option.
+
+If no
+.I bibfiles
+are specified,
+all bibtex files in the path
+.SM BIBINPUTS
+are used.
+A \- for
+.I bibfiles
+reads a bibtex database from standard input.
+
+To do "and" searches on two fields use shell pipes, reading
+the output of one search as the bibliography of the second
+(using
+.RB ` \- '
+for
+.I bibfiles
+in a pipeline).
+For example, to find what someone named Kafka wrote
+about emacs keyboard layout, do:
+.IP
+.B
+lookbibtex \-f author kafka | lookbibtex \-f title meta \-
+.LP
+
+To do "or" searches, use regular expressions.
+For example, you could be concerned with
+only careful authors, like Kunth and Kafka:
+.IP
+.B
+lookbibtex \-f author 'kunth\||\|kafka'
+.LP
+
+More sophisticated searches can be achieved by combining
+these techniques.
+
+
+.SH AUTHOR
+John Heidemann <johnh@cs.ucla.edu>
+
+
+.SH "ENVIRONMENT VARIABLES"
+
+.TP
+.SM BIBINPUTS
+The path
+.SM BIBINPUTS
+is searched for
+.B .bib
+files if none are given on the command line. See
+.BR TeX (1)
+for a description of the path format.
+
+
+.SH SEE ALSO
+.BR bibtex (1),
+.BR bibdestringify (1),
+.BR perl (1).
+
+
+.SH BUGS
+.B Lookbibtex
+is written in Perl, so it will not run on machines
+which do not have perl installed (although this arguably
+a bug of the person too lazy to install such a useful tool).
+
+Multiple bibtex fields on one line will be missed.
+
+There should be a way of switching off the file name prefixing when
+searching multiple files. For now, simply
+.I cat
+the files into
+.IR lookbib .
+
+This program does not implement a full bibtex parser,
+just a good approximation. Because of this, it may
+fail on unusual bibtex files. In particular,
+the @ that begins a bibtex entry, and the } which end it
+must be the first non-whitespace character on their line, or they
+will be missed.
+Also, multi-line fields surrounded with double quotes or
+curley brackets
+are handled correctly,
+but ugly combinations of quotes and brackets and backslashed
+versions of the same may fail.
+Umlaut accents are removed from the search
+string.
+
+I make no predictions as to how this program will react
+to bibtex files with syntax errors.
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/lookbibtex.dist b/biblio/bibtex/utils/lookbibtex/lookbibtex.dist
new file mode 100644
index 0000000000..4f0b008d07
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/lookbibtex.dist
@@ -0,0 +1,220 @@
+#!/usr/dist/bin/perl
+
+#
+# lookbibtex 1.22
+# Look in to a bib file.
+# Comments to <johnh@cs.ucla.edu>.
+#
+# Copyright (C) 1990 by John Heidemann
+# This is distributed under the GNU Public Licence, Version 1 (Feb 89).
+# See the Perl documentation for a copy of that license.
+#
+# 4-Oct-90 it is hacked together.
+# 19-Nov-90 Now it remembers "'s and join such lines.
+# It also removes nasty characters like {} from the search string.
+# 20-Nov-90 Umlaut accents handled correctly.
+# 28-Nov-90 A simple heuristic to handle multi-line fields with {}'s is added.
+# In addition, we compress all whitespace to single spaces in the
+# searched version. lookbibtex 1.1
+# 4-Jan-91 Converted the -k option to -f, since field makes more sense than
+# keyword. lookbibtex 1.11
+# 17-Jan-91 Added -s option to pass through strings, instead of ignoring them.
+# 31-May-91 ficus directory moved
+# 26-Aug-91 Documentation fixed. The environment variable LOOKBIBTEXFILE
+# will set the default bibtex file to use.
+# lookbibtex 1.12 released, posted to anonymous ftp at cs.ucla.edu.
+# 28-Aug-91 Usage string fixed at suggestion of
+# Henk P. Penning <henkp@cs.ruu.nl>.
+# 5-Sep-91 Argument processing re-done (now matches grep, as it always
+# should have). Changes from Tim Wilson <tdw@cl.cam.ac.uk> to
+# handle multiple bib files and select default bib files from BIBINPUTS.
+# lookbibtex 1.2
+# 29-Jan-92 Bug reported by Dana Jacobsen <jacobsd@frisby.cs.orst.edu>:
+# "badkeys" are handled in a case sensitive manner. Fixed.
+# lookbibtex 1.21
+# 25-Feb-92 Sigh. Bug fixes always make more bugs. Bug in last fix, fixed.
+# lookbibtex 1.22
+#
+# This program relies on the convention that the closing } of a
+# bib entry is the only } in the first non-whitespace column,
+# and that the opening @ is also there.
+#
+
+
+
+$* = 1; # make searches on vars with imbedded newlines work
+$prog = substr($0,rindex($0,'/')+1);
+
+
+$badkeys = "string"; # keys to ignore (list in lowercase only)
+
+
+#
+# do argument processing
+#
+
+@files = (); # files to search
+$passthroughbad = 0; # -s flag
+undef ($pattern); # will be set below
+undef ($keyword); # may be set below
+
+sub remember_file {
+ local ($file) = @_;
+ local ($dev, $ino) = stat ($file);
+ local ($key) = "$dev,$ino";
+ if (!defined($files{$key})) {
+ $files{$key} = $file;
+ push (@files, $file);
+
+ };
+# warn ("file $file ($key) remembered.\n");
+};
+
+while ($#ARGV >= 0) {
+ if ($ARGV[0] eq "-s") {
+ $passthroughbad = 1;
+ } elsif ($ARGV[0] eq "-f" && $#ARGV >= 1) {
+ $keyword = $ARGV[1];
+ shift (@ARGV);
+ } elsif (defined($pattern)) {
+ &remember_file ($ARGV[0]);
+ } else {
+ $pattern = $ARGV[0];
+ };
+ shift (@ARGV);
+};
+
+if (!defined($pattern)) {
+ die ("Usage: $prog [-s] [-f field] regexp [bibfile.bib ...]\n" .
+ " Fields restricts the regexp search to that bibtex " .
+ "field entry (author, etc.)\n" .
+ " Default bibfile is $defaultfile, - indicates stdin.\n" .
+ " Regexp is a Perl regexp.\n");
+};
+
+#
+# handle the keyword by modifying the pattern
+#
+if (defined($keyword)) {
+ $pattern = "^\\s*${keyword}\\s*=.*${pattern}";
+# print "pattern is $pattern\n";
+};
+
+#
+# Handle choosing default bib files:
+# Select anything from BIBINPUTS.
+#
+if ($#files == -1) {
+ $searchpath = ($ENV{'BIBINPUTS'} || ".");
+ foreach $dir (split(/:/, $searchpath)) {
+ opendir(DIR, $dir) || do {
+ warn "$prog: Can't open directory `$dir', skipping\n";
+ next;
+ };
+ foreach $file (grep(/\.bib$/, readdir(DIR))) {
+ &remember_file ($dir . "/" . $file);
+ };
+ closedir(DIR);
+ };
+};
+
+die ("$prog: no files on command line or in BIBINPUTS\n") if ($#files == -1);
+
+$manyfiles = ($#files > 0); # remember if to show filenames or not
+
+
+
+#
+# Certain keys we really want to ignore because
+# they're not bib entries. They're listed here.
+#
+@badkeys = split(/,/, $badkeys);
+foreach $i (@badkeys) {
+ $badkeys{$i} = "bad"; # just make them defined
+};
+
+
+
+#
+# To do searches right, we have to make everything
+# for a field on one line.
+# This routine does that, and also gets rid of {}'s
+# which tend to get in the way for searches. In the
+# same vein, it collapses all whitespace to single spaces.
+#
+# To know when to join lines, we use two simple heuristics:
+# is there are a odd number of "'s on a line, we must enter or exit
+# multi-line mode. If there are more {'s than }'s, we must enter,
+# and if there are more }'s than {'s we must exit (anything on
+# the first line is ignored).
+#
+
+sub printtosearch {
+ local ($print) = @_;
+ local ($search, $mode) = ("", 1);
+ local ($opencurley, $closecurley) = (0,0);
+
+ @lines = split(/\n/, $print);
+ @lines[0] =~ s/{/ /;
+ foreach $ln (@lines) {
+ # remove and count curley brackets
+ $opencurley = ($ln =~ s/[{]//g);
+ $closecurley = ($ln =~ s/[}]//g);
+ if ($opencurley-$closecurley < 0) {
+ $mode = 1;
+ } elsif ($opencurley-$closecurley > 0) {
+ $mode = 0;
+ } else {
+ # remove umlauts so quote handling works,
+ # and then change modes if required.
+ $ln =~ s/\\"//g;
+ $mode = !$mode if (($ln =~ tr/"/"/) % 2 == 1);
+ };
+ $search .= $ln;
+ $search .= "\n" if ($mode);
+ };
+ $search =~ s/[ \t]+/ /g;
+ return $search;
+}
+
+
+#
+# looking for beginning of bib entry is state 1, in bib is state 2
+#
+$LOOKING = 1; $INBIB = 2;
+
+foreach $file (@files) {
+ open (INF, "<$file") || warn ("cannot open bibfile $file\n");
+ $state = $LOOKING;
+
+ while (<INF>) {
+# print "line ", $i++, " state=$state: " . "$_\n";
+ # beware RCS munging $state:...$
+ if ($state == $LOOKING) {
+ if (/^[ \t]*@(\w+)/) { # beginning of entry
+ ($key = $1) =~ tr/A-Z/a-z/;
+ # case insensitive keywords
+ if (! defined($badkeys{$key})) {
+ $state = $INBIB;
+ $bibentry = $_;
+ } elsif ($passthroughbad) {
+ print "$_"; # a hack for @string
+ };
+ };
+ } elsif ($state == $INBIB) {
+ $bibentry .= $_;
+ if (/^[ \t]*}/) { # ending
+ $searchentry = &printtosearch($bibentry);
+ if ($searchentry =~ /$pattern/i) {
+ print "$file:\n" if ($manyfiles);
+ print "$bibentry\n";
+ };
+ $state = $LOOKING;
+ }
+ } else {
+ die ("state problem, $state\n");
+ };
+ };
+};
+
+
diff --git a/biblio/bibtex/utils/lookbibtex/release b/biblio/bibtex/utils/lookbibtex/release
new file mode 100644
index 0000000000..d9d7ef5a4b
--- /dev/null
+++ b/biblio/bibtex/utils/lookbibtex/release
@@ -0,0 +1 @@
+1.43
diff --git a/biblio/bibtex/utils/ltb2bib/README b/biblio/bibtex/utils/ltb2bib/README
new file mode 100644
index 0000000000..23f00073d9
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/README
@@ -0,0 +1,58 @@
+ +---------------------------------------+
+ | ltb2bib |
+ | |
+ | Convert a .ltb bibliography to .bib |
+ | |
+ | By Laurent Bartholdi, |
+ | laurent.bartholdi@gmail.com |
+ +---------------------------------------+
+
+Description
+===========
+
+This package implements a LaTeX command that converts an amsrefs
+bibliographical database (.ltb) to a BibTeX bibliographical database
+(.bib).
+
+The typical usage is to run LaTeX on a document such as
+
+\documentclass{article}
+\usepackage{ltb2bib}
+\begin{document}
+\writebib{bblsource}{bibdest}
+\end{document}
+
+This will convert the bibliographical entries in bblsource.ltb to
+BibTeX format, and write them to bibdest.bib.
+
+ltb2bib is the reverse of the "amsxport" option in amsrefs. Typical uses are:
+
+* produce bib entries for some publishers which don't accept amsrefs
+ (Taylor & Francis, for example);
+
+* import an ltb database in a database management program, e.g. for sorting;
+
+* access one's ltb database within emacs's RefTeX mode.
+
+
+Change log (reverse chronological order)
+=====================
+
+2017-04-03 ltb2bib 0.01
+ First release in the wild
+
+
+Copyright and License
+=====================
+
+Copyright (C) 2017 Laurent Bartholdi
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX version
+2008/05/04 or later.
diff --git a/biblio/bibtex/utils/ltb2bib/bibdest.bib b/biblio/bibtex/utils/ltb2bib/bibdest.bib
new file mode 100644
index 0000000000..f598b5ca73
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/bibdest.bib
@@ -0,0 +1,17 @@
+% Converted bibliography from bblsource[.ltb] to bibdest.bib
+@Article{Jones2004,
+ author={{Jones, David M.}},
+ note={distributed with the \protect \textsf {amsrefs} code},
+ title={User's Guide to the \protect \textsf {amsrefs} Package},
+}
+
+@Book{SOS99,
+ author={{Swanson, Ellen} and {O'Sean, Arlene} and {Schleyer, Antoinette}},
+ year={1999},
+ edition={updated},
+ publisher={American Mathematical Society},
+ title={Mathematics into Type},
+ year={1999},
+}
+
+% End of bibdest.bib
diff --git a/biblio/bibtex/utils/ltb2bib/doltb2bib.tex b/biblio/bibtex/utils/ltb2bib/doltb2bib.tex
new file mode 100644
index 0000000000..06002b1f03
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/doltb2bib.tex
@@ -0,0 +1,5 @@
+\documentclass{article}
+\usepackage{ltb2bib}
+\begin{document}
+\writebib{bblsource}{bibdest}
+\end{document}
diff --git a/biblio/bibtex/utils/ltb2bib/ltb2bib.dtx b/biblio/bibtex/utils/ltb2bib/ltb2bib.dtx
new file mode 100644
index 0000000000..3b54394a4d
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/ltb2bib.dtx
@@ -0,0 +1,359 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017 by Laurent Bartholdi <laurent.bartholdi@gmail.com>
+% ---------------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Laurent Bartholdi.
+%
+% This work consists of the files ltb2bib.dtx and ltb2bib.ins
+% and the derived filebase ltb2bib.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{ltb2bib.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{ltb2bib}
+%<*package>
+ [2017/04/03 0.01 First release in the wild]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{ltb2bib.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{452}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{0.01}{2017/04/03}{Converted to DTX file}
+%
+% \DoNotIndex{\def,\newwrite,\newskip,\newenvironment,\gdef,\immediate,\let}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{ltb2bib.dtx}
+% \title{The \textsf{ltb2bib} package}
+% \author{Laurent Bartholdi \\ \url{laurent.bartholdi@gmail.com}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% The \textsf{amsrefs} package is a wonderful, pure-\LaTeX\
+% implementation of bibliographical databases. In a format close to
+% Bib\TeX's, one writes entries in database files (say
+% \verb+ltbsource.ltb+); \LaTeX\ extracts from these files the entries
+% required for the document (say \verb+myarticle.tex+), writes them to
+% myarticle.bbl and incorporates them in the document's bibliography
+% section. The file \verb+myarticle.bbl+ can be sent to the publisher
+% along with \verb+myarticle.tex+, or can be directly incorporated
+% into it.
+%
+% It happens, sometimes, that one needs the bibliographical entries in
+% Bib\TeX\ format:
+% \begin{itemize}
+% \item Some publishers (Taylor \& Francis, for example) refuse
+% to process \textsf{amsrefs} files, and require the authors to manually
+% retype them;
+% \item \textsf{amsrefs} cannot sort entries, so it may be useful to
+% convert a \textsf{amsrefs} database to Bib\TeX\ format to feed them to
+% bibliography management software;
+% \item \textsf{emacs}'s Ref\TeX\ mode, for example, requires the database
+% in Bib\TeX\ format.
+% \end{itemize}
+%
+% For these purposes, I have written this short \LaTeX\ package that
+% converts an \textsf{amsrefs} bibliography file to Bib\TeX.
+%
+% Note that the inverse operation, namely producing a \textsf{amsrefs}
+% bibliographical database out of a Bib\TeX\ one, is implemented by
+% the \verb+amsxport+ option of \textsf{amsrefs}.
+%
+% \section{Usage}
+%
+% The only command supplied by this package is \verb+\writebib+. It is
+% typically used in a driver-document \verb+doltb2bib.tex+ such as
+% the following:
+% \begin{verbatim}
+% \documentclass{article}
+% \usepackage{ltb2bib}
+% \begin{document}
+% \writebib{ltbsource}{bibdest}
+% \end{document}
+% \end{verbatim}
+% which, when invoked with `\verb+latex doltb2bib+', produces from
+% \verb+ltbsource.ltb+ the file \verb+bibdest.bib+.
+%
+% \DescribeMacro{\writebib}
+%
+% This command takes two arguments: an input and an output
+% filename. If the input filename is given without extension, then the
+% actual filename may have the extension \verb+.ltb+; and similarly
+% the output will be written to a file with the \verb+.bib+ extension
+% added.
+%
+% This command reads all \verb+\bib+ entries from the input file, and
+% writes corresponding Bib\TeX\ entries to the output file. It produces no
+% output.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\ProvidesPackage{ltb2bib}[2017/04/03 v0.01]
+\@ifundefined{thebibliography}{\newenvironment{thebibliography}{}{}}{}
+\@ifundefined{footnotesize}{\let\footnotesize\relax}{}
+\RequirePackage{amsrefs}
+\RequirePackage{xpatch}
+\newwrite\@bibfile
+% \end{macrocode}
+% make a copy of protected@iwrite, and patch it to add \verb+\immediate+
+% \begin{macrocode}
+\let\protected@iwrite\protected@write
+\xpatchcmd{\protected@iwrite}{\write}{\immediate\write}{}{}
+\def\bib@write#1{\protected@iwrite\@bibfile{\let~\relax\def\ndash{--}}{#1}}
+\gdef\space{ }
+\gdef\spsp{\space\space}
+% \end{macrocode}
+%
+% treat the multiple entries to be coalesced, with \verb+\name+ prepended to names
+% \begin{macro}{\@author}
+% \begin{macrocode}
+\def\@author#1{\toks0={}\toks1={}%
+ \def\name##1{\toks0=\expandafter{\the\toks0\the\toks1{##1}}\toks1={\spsp and }}%
+ #1
+ \bib@write{\spsp author={\the\toks0},}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@editor}
+% \begin{macrocode}
+\def\@editor#1{\toks0={}\toks1={}%
+ \def\name##1{\toks0=\expandafter{\the\toks0\the\toks1{##1}}\toks1={\spsp and }}%
+ #1
+ \bib@write{\spsp editor={\the\toks0},}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@translator}
+% \begin{macrocode}
+\def\@translator#1{\toks0={}\toks1={}%
+ \def\name##1{\toks0=\expandafter{\the\toks0\the\toks1{##1}}\toks1={\spsp and }}%
+ #1
+ \bib@write{\spsp translator={\the\toks0},}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Keys which may appear multiply, but which we don't coalesce
+% \begin{macrocode}
+\def\@contribution#1{\bib@write{\spsp contribution=\@charlb#1\@charrb,}}
+\def\@isbn#1{\def\fld@elt##1{\bib@write{\spsp isbn=\@charlb##1\@charrb,}}#1}
+\def\@issn#1{\def\fld@elt##1{\bib@write{\spsp issn=\@charlb##1\@charrb,}}#1}
+\def\@review#1{\def\MR##1{\let\MR\relax\bib@write{\spsp review={\MR{##1}},}}#1}
+\def\@partial#1{\bib@write{\spsp partial=\@charlb#1\@charrb,}}
+% \end{macrocode}
+%
+% Keys which translate directly to simple keys
+% \begin{macrocode}
+\def\@accessdate#1{\bib@write{\spsp accessdate=\@charlb#1\@charrb,}}
+\def\@address#1{\bib@write{\spsp address=\@charlb#1\@charrb,}}
+\def\@book#1{\bib@write{\spsp book=\@charlb#1\@charrb,}}
+\def\@booktitle#1{\bib@write{\spsp booktitle=\@charlb#1\@charrb,}}
+\def\@conference#1{\bib@write{\spsp conference=\@charlb#1\@charrb,}}
+\def\@copula#1{\bib@write{\spsp copula=\@charlb#1\@charrb,}}
+\def\@date#1{\bib@write{\spsp year=\@charlb#1\@charrb,}}
+\def\@doi#1{\bib@write{\spsp doi=\@charlb#1\@charrb,}}
+\def\@edition#1{\bib@write{\spsp edition=\@charlb#1\@charrb,}}
+\def\@eprint#1{\bib@write{\spsp eprint=\@charlb#1\@charrb,}}
+\def\@fulljournal#1{\bib@write{\spsp fulljournal=\@charlb#1\@charrb,}}
+\def\@hyphenation#1{\bib@write{\spsp hyphenation=\@charlb#1\@charrb,}}
+\def\@institution#1{\bib@write{\spsp institution=\@charlb#1\@charrb,}}
+\def\@journal#1{\bib@write{\spsp journal=\@charlb#1\@charrb,}}
+\def\@label#1{\bib@write{\spsp label=\@charlb#1\@charrb,}}
+\def\@language#1{\bib@write{\spsp language=\@charlb#1\@charrb,}}
+\def\@name#1{\bib@write{\spsp name=\@charlb#1\@charrb,}}
+\def\@note#1{\bib@write{\spsp note=\@charlb#1\@charrb,}}
+\def\@number#1{\bib@write{\spsp number=\@charlb#1\@charrb,}}
+\def\@organization#1{\bib@write{\spsp organization=\@charlb#1\@charrb,}}
+\def\@pages#1{\bib@write{\spsp pages=\@charlb#1\@charrb,}}
+\def\@part#1{\bib@write{\spsp part=\@charlb#1\@charrb,}}
+\def\@place#1{\bib@write{\spsp place=\@charlb#1\@charrb,}}
+\def\@publisher#1{\bib@write{\spsp publisher=\@charlb#1\@charrb,}}
+\def\@reprint#1{\bib@write{\spsp reprint=\@charlb#1\@charrb,}}
+\def\@school#1{\bib@write{\spsp school=\@charlb#1\@charrb,}}
+\def\@series#1{\bib@write{\spsp series=\@charlb#1\@charrb,}}
+\def\@setup#1{\bib@write{\spsp setup=\@charlb#1\@charrb,}}
+\def\@status#1{\bib@write{\spsp status=\@charlb#1\@charrb,}}
+\def\@subtitle#1{\bib@write{\spsp subtitle=\@charlb#1\@charrb,}}
+\def\@title#1{\bib@write{\spsp title=\@charlb#1\@charrb,}}
+\def\@translation#1{\bib@write{\spsp translation=\@charlb#1\@charrb,}}
+\def\@type#1{\bib@write{\spsp type=\@charlb#1\@charrb,}}
+\def\@url#1{\bib@write{\spsp url=\@charlb#1\@charrb,}}
+\def\@volume#1{\bib@write{\spsp volume=\@charlb#1\@charrb,}}
+\def\@xref#1{\bib@write{\spsp xref=\@charlb#1\@charrb,}}
+\def\@year#1{\bib@write{\spsp year=\@charlb#1\@charrb,}}
+% \end{macrocode}
+%
+% We create a bib specification to output the data in Bib\TeX\ format,
+% rather than as a formatted bibliography.
+% \begin{macro}{\make@bibspec}
+% \begin{macrocode}
+\def\make@bibspec#1#2{\BibSpec{#1}{%
+ +{}{\bib@write{@#2\@charlb\current@citekey,}}{transition}
+ +{}{\@author} {author}
+ +{}{\@editor} {editor}
+ +{}{\@translator} {translator}
+ +{}{\@contribution} {contribution}
+ +{}{\@isbn} {isbn}
+ +{}{\@issn} {issn}
+ +{}{\@review} {review}
+ +{}{\@partial} {partial}
+ +{}{\@accessdate} {accessdate}
+ +{}{\@address} {address}
+ +{}{\@book} {book}
+ +{}{\@booktitle} {booktitle}
+ +{}{\@conference} {conference}
+ +{}{\@copula} {copula}
+ +{}{\@date} {date}
+ +{}{\@doi} {doi}
+ +{}{\@edition} {edition}
+ +{}{\@eprint} {eprint}
+ +{}{\@fulljournal} {fulljournal}
+ +{}{\@hyphenation} {hyphenation}
+ +{}{\@institution} {institution}
+ +{}{\@journal} {journal}
+ +{}{\@label} {label}
+ +{}{\@language} {language}
+ +{}{\@name} {name}
+ +{}{\@note} {note}
+ +{}{\@number} {number}
+ +{}{\@organization} {organization}
+ +{}{\@pages} {pages}
+ +{}{\@part} {part}
+ +{}{\@place} {place}
+ +{}{\@publisher} {publisher}
+ +{}{\@reprint} {reprint}
+ +{}{\@school} {school}
+ +{}{\@series} {series}
+ +{}{\@setup} {setup}
+ +{}{\@status} {status}
+ +{}{\@subtitle} {subtitle}
+ +{}{\@title} {title}
+ +{}{\@translation} {translation}
+ +{}{\@type} {type}
+ +{}{\@url} {url}
+ +{}{\@volume} {volume}
+ +{}{\@xref} {xref}
+ +{}{\@year} {year}
+ +{}{\bib@write{\@charrb^^J}}{transition}
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% amsrefs treats bib entries as items in an enumeration. We'll just make
+% sure nothing is produced in the output, and set the paragraph skips between
+% items to be 0.
+% \begin{macrocode}
+\newskip\ltb@baselineskip
+\newskip\ltb@parskip
+% \end{macrocode}
+%
+% The main command: just run \verb+bibselect+ on the input file, after
+% having set up the desired bibspec.
+% \begin{macro}{\writebib}
+% \begin{macrocode}
+\newcommand\writebib[2]{%
+ \immediate\openout\@bibfile=#2.bib
+ \bib@write{\@percentchar\space Converted bibliography from #1[.ltb] to #2.bib}%
+ \typeout{Writing bibliography to #2.bib...}%
+ \make@bibspec{article}{Article}%
+ \make@bibspec{partial}{InCollection}%
+ \make@bibspec{contribution}{InCollection}%
+ \make@bibspec{book}{Book}%
+ \make@bibspec{collection.article}{InCollection}%
+ \make@bibspec{conference}{Conference}%
+ \make@bibspec{innerbook}{InBook}%
+ \make@bibspec{report}{TechReport}%
+ \make@bibspec{thesis}{PhdThesis}%
+ \make@bibspec{webpage}{Misc}%
+% \end{macrocode}
+% Set paragraph separation to 0, so that all \verb+\item+s produced by
+% \textsf{amsrefs} appear superimposed in the output:
+% \begin{macrocode}
+ \ltb@parskip=\parskip
+ \ltb@baselineskip=\baselineskip
+ \let\ltb@item=\item
+ \parskip=0pt
+ \baselineskip=0pt
+ \let\item=\relax
+% \end{macrocode}
+% \verb+\fld@elt+ is defined to be ``?'' by
+% \textsf{amsrefs}. Sometimes this character gets shipped out; we
+% simply remove it by redefining \verb+\fld@elt+.
+% \begin{macrocode}
+ \let\fld@elt=\relax
+ \bibselect*{#1}%
+ \bib@write{\@percentchar\space End of #2.bib}%
+ \immediate\closeout\@bibfile
+ \parskip=\ltb@parskip
+ \baselineskip=\ltb@baselineskip
+ \let\item=\ltb@item
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/biblio/bibtex/utils/ltb2bib/ltb2bib.ins b/biblio/bibtex/utils/ltb2bib/ltb2bib.ins
new file mode 100644
index 0000000000..03ccba25f4
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/ltb2bib.ins
@@ -0,0 +1,57 @@
+%% Copyright (C) 2017 by Laurent Bartholdi <laurent.bartholdi@gmail.com>
+%% --------------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Laurent Bartholdi.
+%%
+%% This work consists of the files ltb2bib.dtx and ltb2bib.ins
+%% and the derived filebase ltb2bib.sty.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/ltb2bib}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2017 by Laurent Bartholdi <laurent.bartholdi@gmail.com>
+--------------------------------------------------------------------------
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{ltb2bib.sty}{\from{ltb2bib.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* ltb2bib.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file ltb2bib.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/biblio/bibtex/utils/ltb2bib/ltb2bib.pdf b/biblio/bibtex/utils/ltb2bib/ltb2bib.pdf
new file mode 100644
index 0000000000..512a619b3f
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/ltb2bib.pdf
Binary files differ
diff --git a/biblio/bibtex/utils/ltb2bib/ltbsource.ltb b/biblio/bibtex/utils/ltb2bib/ltbsource.ltb
new file mode 100644
index 0000000000..a1b1ffe304
--- /dev/null
+++ b/biblio/bibtex/utils/ltb2bib/ltbsource.ltb
@@ -0,0 +1,14 @@
+\bib{Jones2004}{article}{
+ author={Jones, David M.},
+ title={User's Guide to the \textsf{amsrefs} Package},
+ note={distributed with the \textsf{amsrefs} code}
+}
+\bib{SOS99}{book}{
+ author={Swanson, Ellen},
+ author={O'Sean, Arlene},
+ author={Schleyer, Antoinette},
+ title={Mathematics into Type},
+ edition={updated},
+ year={1999},
+ publisher={American Mathematical Society},
+}
diff --git a/biblio/bibtex/utils/mab2bib/README b/biblio/bibtex/utils/mab2bib/README
new file mode 100644
index 0000000000..44f4203324
--- /dev/null
+++ b/biblio/bibtex/utils/mab2bib/README
@@ -0,0 +1,143 @@
+mab2bib & utf8_to_latex
+=======================
+
+Version: 2009-06-15
+
+
+----- [de] ------
+
+Lizenz: Python-Lizenz (Open Source)
+Autor: Henning Hraban Ramm, fiëé visuëlle
+Email: hraban@fiee.net
+URL: http://www.fiee.net
+
+
+Beschreibung
+------------
+
+Zwei kleine Hilfsprogramme zu BibTeX:
+
+"mab2bib" konvertiert Bibliografiedaten im MAB-Format zu BibTeX
+
+"utf8_to_latex" konvertiert Textdateien in UTF-8-Encoding zu LaTeX-ASCII
+
+
+Voraussetzungen
+---------------
+
+- Python 2.5 (ab 2.3 müsste gehen)
+- LaTeX-Codec von D. Eppstein (latex.py, wird mitgeliefert)
+
+
+Verwendung
+----------
+
+Die Datei latex.py muss im gleichen Verzeichnis liegen
+wie die beiden anderen Skripte!
+(Sie darf natürlich auch sauber als Codec installiert werden,
+das erkläre ich jetzt aber nicht.)
+
+* Konvertierung von Textdateien in UTF-8 in LaTeX mit Babel (aus ä wird "a):
+
+ [python] utf8_to_latex.py <Eingabedatei> [<Ausgabedatei>]
+
+ Fehlt der Ausgabename, wird die alte Datei mit der Endung .bak gesichert
+ und überschrieben.
+
+ Das Skript kann übrigens für andere Textkonvertierungen einfach kopiert
+ und umbenannt werden, z.B. "macroman_to_latin1.py", die Möglichkeiten
+ richten sich nach den vorhandenen Codecs in der Python-Distribution.
+
+* Konvertierung von MAB-Dateien in Latin-1 (ISO 8859-1) in BibTeX:
+
+ [python] mab2bib.py <MAB-Datei> [<BibTeX-Datei>]
+
+ Ist keine Ausgabedatei angegeben, wird an die Eingabedatei '.bib' angehängt.
+
+
+Probleme
+--------
+
+- Die Skripte sind sehr einfach und fangen viele Fehler nicht ab.
+- An den Ausgabe-Dateien ist in den meisten Fällen noch Handarbeit nötig.
+- Wenn die Eingabecodierung nicht Latin-1 ist (sondern z.B. Mac Roman),
+ muss man in mab2bib.py an der einzigen Stelle, wo "latin-1" steht, die
+ richtige Codierung eintragen (z.B. "mac-roman").
+- Ich hatte keine vollständige Liste von möglichen MAB-Nummern und BibTeX-
+ Schlüsseln, daher muss die Zuweisungstabelle in mab2bib.py eventuell
+ angepasst werden (einfach mal reinschauen, dürfte verständlich sein).
+
+----- [en] -----
+
+License: Python License (Open Source)
+Author: Henning Hraban Ramm, fiëé visuëlle
+Email: hraban@fiee.net
+URL: http://www.fiee.net
+
+Abstract
+--------
+
+Two small tools for BibTeX:
+
+"mab2bib" converts bibliographical data in MAB format into BibTeX
+
+"utf8_to_latex" converts text files in UTF-8 encoding into LaTeX ASCII
+
+
+Prerequisites
+-------------
+
+- Python 2.5 (2.3 and up should work)
+- LaTeX-Codec by D. Eppstein (latex.py, included)
+
+
+Usage
+-----
+
+The file latex.py must stay in the same directory as the other two scripts!
+(It may get properly installed as a coded instead, but I won't explain that.)
+
+* Convert a text file in UTF-8 into LaTeX with Babel (ä becomes "a)
+
+ [python] utf8_to_latex.py <input file> [<output file>]
+
+ If the output file name is missing, the input file is saved with a .bak
+ extension and overwritten.
+
+ BTW you can simply copy and rename the script for other text conversions,
+ e.g. "macroman_to_latin1.py", only limited by the codecs in your Python
+ installation.
+
+* Convert a MAB file in Latin-1 (ISO 8859-1) into BibTeX:
+
+ [python] mab2bib.py <MAB file> [<BibTeX file>]
+
+ Without an output file name, the input file name is used with a .bib
+ extension added.
+
+
+Problems
+--------
+
+- The scripts are very simple and don't catch a lot or errors.
+- In most cases there's manual work needed at the output files.
+- If the input encoding is any other that Latin-1 (e.g. Mac Roman),
+ you must change the only place in mab2bib.py where you find
+ "latin-1" into the right encoding (e.g. "mac-roman").
+- I didn't get a complete list of MAB numbers and BibTeX keys, therefore
+ you must eventually adapt the mapping table in mab2bib.py (just look
+ into it, it should be easy to understand).
+
+
+
+
+----- [*] -----
+
+Links
+-----
+
+- fiëé Repository: http://github.com/fiee/tools/tree/master
+- BibTeX und Koala: http://www.ub.uni-konstanz.de/serviceangebote/literaturverwaltung/bibtex.html
+- Python: http://www.python.org
+- Python-Lizenz: http://python.org/psf/license/
+
diff --git a/biblio/bibtex/utils/mab2bib/latex.py b/biblio/bibtex/utils/mab2bib/latex.py
new file mode 100644
index 0000000000..e8a82b1c38
--- /dev/null
+++ b/biblio/bibtex/utils/mab2bib/latex.py
@@ -0,0 +1,531 @@
+#!/bin/env python
+"""latex.py
+
+Character translation utilities for LaTeX-formatted text.
+
+Usage:
+ - unicode(string,'latex')
+ - ustring.decode('latex')
+are both available just by letting "import latex" find this file.
+ - unicode(string,'latex+latin1')
+ - ustring.decode('latex+latin1')
+where latin1 can be replaced by any other known encoding, also
+become available by calling latex.register().
+
+We also make public a dictionary latex_equivalents,
+mapping ord(unicode char) to LaTeX code.
+
+D. Eppstein, October 2003.
+source: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252124
+License: Python license (http://python.org/doc/Copyright.html)
+modified for mab2bib 2005/2006 by Henning Hraban Ramm
+"""
+
+#from __future__ import generators
+import codecs
+import re
+from sets import Set
+
+def register():
+ """Enable encodings of the form 'latex+x' where x describes another encoding.
+ Unicode characters are translated to or from x when possible, otherwise
+ expanded to latex.
+ """
+ codecs.register(_registry)
+
+def getregentry():
+ """Encodings module API."""
+ return _registry('latex')
+
+def _registry(encoding):
+ if encoding == 'latex':
+ encoding = None
+ elif encoding.startswith('latex+'):
+ encoding = encoding[6:]
+ else:
+ return None
+
+ class Codec(codecs.Codec):
+ def encode(self,input,errors='strict'):
+ """Convert unicode string to latex."""
+ output = []
+ for c in input:
+ if encoding:
+ try:
+ output.append(c.encode(encoding))
+ continue
+ except:
+ pass
+ if ord(c) in latex_equivalents:
+ output.append(latex_equivalents[ord(c)])
+ else:
+ output += ['{\\char', str(ord(c)), '}']
+ return ''.join(output), len(input)
+
+ def decode(self,input,errors='strict'):
+ """Convert latex source string to unicode."""
+ if encoding:
+ input = unicode(input,encoding,errors)
+
+ # Note: we may get buffer objects here.
+ # It is not permussable to call join on buffer objects
+ # but we can make them joinable by calling unicode.
+ # This should always be safe since we are supposed
+ # to be producing unicode output anyway.
+ x = map(unicode,_unlatex(input))
+ return u''.join(x), len(input)
+
+ class StreamWriter(Codec,codecs.StreamWriter):
+ pass
+
+ class StreamReader(Codec,codecs.StreamReader):
+ pass
+
+ return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+def _tokenize(tex):
+ """Convert latex source into sequence of single-token substrings."""
+ start = 0
+ try:
+ # skip quickly across boring stuff
+ pos = _stoppers.finditer(tex).next().span()[0]
+ except StopIteration:
+ yield tex
+ return
+
+ while 1:
+ if pos > start:
+ yield tex[start:pos]
+ if tex[start] == '\\' and not (tex[pos-1].isdigit() and tex[start+1].isalpha()):
+ while pos < len(tex) and tex[pos].isspace(): # skip blanks after csname
+ pos += 1
+
+ while pos < len(tex) and tex[pos] in _ignore:
+ pos += 1 # flush control characters
+ if pos >= len(tex):
+ return
+ start = pos
+ if tex[pos:pos+2] in {'$$':None, '/~':None}: # protect ~ in urls
+ pos += 2
+ elif tex[pos].isdigit():
+ while pos < len(tex) and tex[pos].isdigit():
+ pos += 1
+ elif tex[pos] == '-':
+ while pos < len(tex) and tex[pos] == '-':
+ pos += 1
+ elif tex[pos] != '\\' or pos == len(tex) - 1:
+ pos += 1
+ elif not tex[pos+1].isalpha():
+ pos += 2
+ else:
+ pos += 1
+ while pos < len(tex) and tex[pos].isalpha():
+ pos += 1
+ if tex[start:pos] == '\\char' or tex[start:pos] == '\\accent':
+ while pos < len(tex) and tex[pos].isdigit():
+ pos += 1
+
+class _unlatex:
+ """Convert tokenized tex into sequence of unicode strings. Helper for decode()."""
+
+ def __iter__(self):
+ """Turn self into an iterator. It already is one, nothing to do."""
+ return self
+
+ def __init__(self,tex):
+ """Create a new token converter from a string."""
+ self.tex = tuple(_tokenize(tex)) # turn tokens into indexable list
+ self.pos = 0 # index of first unprocessed token
+ self.lastoutput = 'x' # lastoutput must always be nonempty string
+
+ def __getitem__(self,n):
+ """Return token at offset n from current pos."""
+ p = self.pos + n
+ t = self.tex
+ return p < len(t) and t[p] or None
+
+ def next(self):
+ """Find and return another piece of converted output."""
+ if self.pos >= len(self.tex):
+ raise StopIteration
+ nextoutput = self.chunk()
+ if self.lastoutput[0] == '\\' and self.lastoutput[-1].isalpha() and nextoutput[0].isalpha():
+ nextoutput = ' ' + nextoutput # add extra space to terminate csname
+ self.lastoutput = nextoutput
+ return nextoutput
+
+ def chunk(self):
+ """Grab another set of input tokens and convert them to an output string."""
+ for delta,c in self.candidates(0):
+ if c in _l2u:
+ self.pos += delta
+ return unichr(_l2u[c])
+ elif len(c) == 2 and c[1] == 'i' and (c[0],'\\i') in _l2u:
+ self.pos += delta # correct failure to undot i
+ return unichr(_l2u[(c[0],'\\i')])
+ elif len(c) == 1 and c[0].startswith('\\char') and c[0][5:].isdigit():
+ self.pos += delta
+ return unichr(int(c[0][5:]))
+
+ # nothing matches, just pass through token as-is
+ self.pos += 1
+ return self[-1]
+
+ def candidates(self,offset):
+ """Generate pairs delta,c where c is a token or tuple of tokens from tex
+ (after deleting extraneous brackets starting at pos) and delta
+ is the length of the tokens prior to bracket deletion.
+ """
+ t = self[offset]
+ if t in _blacklist:
+ return
+ elif t == '':
+ for delta,c in self.candidates(offset+1):
+ if self[offset+delta+1] == '}':
+ yield delta+2,c
+ elif t == '\\mbox':
+ for delta,c in self.candidates(offset+1):
+ yield delta+1,c
+ elif t == '$' and self[offset+2] == '$':
+ yield 3, (t,self[offset+1],t)
+ else:
+ q = self[offset+1]
+ if q == '' and self[offset+3] == '}':
+ yield 4, (t,self[offset+2])
+ elif q:
+ yield 2, (t,q)
+ yield 1, t
+
+latex_equivalents = {
+ 0x0009: ' ',
+ 0x000a: '\n',
+ 0x0023: '\#',
+ 0x0026: '\&',
+ 0x00a0: '~',
+ 0x00a1: '!`',
+ 0x00a2: '\\not{c}',
+ 0x00a3: '\\pounds',
+ 0x00a7: '\\S',
+ 0x00a8: '\\"{}',
+ 0x00a9: '\\copyright',
+ 0x00af: '\\={}',
+ 0x00ac: '\\neg',
+ 0x00ad: '\\-',
+ 0x00b0: '\\mbox{$^\\circ$}',
+ 0x00b1: '\\mbox{$\\pm$}',
+ 0x00b2: '\\mbox{$^2$}',
+ 0x00b3: '\\mbox{$^3$}',
+ 0x00b4: "\\'{",
+ 0x00b5: '\\mbox{$\\mu$}',
+ 0x00b6: '\\P',
+ 0x00b7: '\\mbox{$\\cdot$}',
+ 0x00b8: '\\c{}',
+ 0x00b9: '\\mbox{$^1$}',
+ 0x00bf: '?`',
+ 0x00c0: '\\`A',
+ 0x00c1: "\\'A",
+ 0x00c2: '\\^A',
+ 0x00c3: '\\~A',
+ 0x00c4: '\\"A',
+ 0x00c5: '\\AA',
+ 0x00c6: '\\AE',
+ 0x00c7: '\\c{C}',
+ 0x00c8: '\\`E',
+ 0x00c9: "\\'E",
+ 0x00ca: '\\^E',
+ 0x00cb: '\\"E',
+ 0x00cc: '\\`I',
+ 0x00cd: "\\'I",
+ 0x00ce: '\\^I',
+ 0x00cf: '\\"I',
+ 0x00d1: '\\~N',
+ 0x00d2: '\\`O',
+ 0x00d3: "\\'O",
+ 0x00d4: '\\^O',
+ 0x00d5: '\\~O',
+ 0x00d6: '\\"O',
+ 0x00d7: '\\mbox{$\\times$}',
+ 0x00d8: '\\O',
+ 0x00d9: '\\`U',
+ 0x00da: "\\'U",
+ 0x00db: '\\^U',
+ 0x00dc: '\\"U',
+ 0x00dd: "\\'Y",
+ 0x00df: '\\ss',
+ 0x00e0: '\\`a',
+ 0x00e1: "\\'a",
+ 0x00e2: '\\^a',
+ 0x00e3: '\\~a',
+ 0x00e4: '\\"a',
+ 0x00e5: '\\aa',
+ 0x00e6: '\\ae',
+ 0x00e7: '\\c{c}',
+ 0x00e8: '\\`e',
+ 0x00e9: "\\'e",
+ 0x00ea: '\\^e',
+ 0x00eb: '\\"e',
+ 0x00ec: '\\`\\i',
+ 0x00ed: "\\'\\i",
+ 0x00ee: '\\^\\i',
+ 0x00ef: '\\"\\i',
+ 0x00f1: '\\~n',
+ 0x00f2: '\\`o',
+ 0x00f3: "\\'o",
+ 0x00f4: '\\^o',
+ 0x00f5: '\\~o',
+ 0x00f6: '\\"o',
+ 0x00f7: '\\mbox{$\\div$}',
+ 0x00f8: '\\o',
+ 0x00f9: '\\`u',
+ 0x00fa: "\\'u",
+ 0x00fb: '\\^u',
+ 0x00fc: '\\"u',
+ 0x00fd: "\\'y",
+ 0x00ff: '\\"y',
+
+ 0x0100: '\\=A',
+ 0x0101: '\\=a',
+ 0x0102: '\\u{A}',
+ 0x0103: '\\u{a}',
+ 0x0104: '\\c{A}',
+ 0x0105: '\\c{a}',
+ 0x0106: "\\'C",
+ 0x0107: "\\'c",
+ 0x0108: "\\^C",
+ 0x0109: "\\^c",
+ 0x010a: "\\.C",
+ 0x010b: "\\.c",
+ 0x010c: "\\v{C",
+ 0x010d: "\\v{c",
+ 0x010e: "\\v{D",
+ 0x010f: "\\v{d",
+ 0x0112: '\\=E',
+ 0x0113: '\\=e',
+ 0x0114: '\\u{E}',
+ 0x0115: '\\u{e}',
+ 0x0116: '\\.E',
+ 0x0117: '\\.e',
+ 0x0118: '\\c{E}',
+ 0x0119: '\\c{e}',
+ 0x011a: "\\v{E",
+ 0x011b: "\\v{e",
+ 0x011c: '\\^G',
+ 0x011d: '\\^g',
+ 0x011e: '\\u{G}',
+ 0x011f: '\\u{g}',
+ 0x0120: '\\.G',
+ 0x0121: '\\.g',
+ 0x0122: '\\c{G}',
+ 0x0123: '\\c{g}',
+ 0x0124: '\\^H',
+ 0x0125: '\\^h',
+ 0x0128: '\\~I',
+ 0x0129: '\\~\\i',
+ 0x012a: '\\=I',
+ 0x012b: '\\=\\i',
+ 0x012c: '\\u{I}',
+ 0x012d: '\\u\\i',
+ 0x012e: '\\c{I}',
+ 0x012f: '\\c{i}',
+ 0x0130: '\\.I',
+ 0x0131: '\\i',
+ 0x0132: 'IJ',
+ 0x0133: 'ij',
+ 0x0134: '\\^J',
+ 0x0135: '\\^\\j',
+ 0x0136: '\\c{K}',
+ 0x0137: '\\c{k}',
+ 0x0139: "\\'L",
+ 0x013a: "\\'l",
+ 0x013b: "\\c{L",
+ 0x013c: "\\c{l",
+ 0x013d: "\\v{L",
+ 0x013e: "\\v{l",
+ 0x0141: '\\L',
+ 0x0142: '\\l',
+ 0x0143: "\\'N",
+ 0x0144: "\\'n",
+ 0x0145: "\\c{N",
+ 0x0146: "\\c{n",
+ 0x0147: "\\v{N",
+ 0x0148: "\\v{n",
+ 0x014c: '\\=O',
+ 0x014d: '\\=o',
+ 0x014e: '\\u{O}',
+ 0x014f: '\\u{o}',
+ 0x0150: '\\H{O}',
+ 0x0151: '\\H{o}',
+ 0x0152: '\\OE',
+ 0x0153: '\\oe',
+ 0x0154: "\\'R",
+ 0x0155: "\\'r",
+ 0x0156: "\\c{R",
+ 0x0157: "\\c{r",
+ 0x0158: "\\v{R",
+ 0x0159: "\\v{r",
+ 0x015a: "\\'S",
+ 0x015b: "\\'s",
+ 0x015c: "\\^S",
+ 0x015d: "\\^s",
+ 0x015e: "\\c{S",
+ 0x015f: "\\c{s",
+ 0x0160: "\\v{S",
+ 0x0161: "\\v{s",
+ 0x0162: "\\c{T",
+ 0x0163: "\\c{t",
+ 0x0164: "\\v{T",
+ 0x0165: "\\v{t",
+ 0x0168: "\\~U",
+ 0x0169: "\\~u",
+ 0x016a: "\\=U",
+ 0x016b: "\\=u",
+ 0x016c: "\\u{U",
+ 0x016d: "\\u{u",
+ 0x016e: "\\r{U",
+ 0x016f: "\\r{u",
+ 0x0170: "\\H{U",
+ 0x0171: "\\H{u",
+ 0x0172: "\\c{U",
+ 0x0173: "\\c{u",
+ 0x0174: "\\^W",
+ 0x0175: "\\^w",
+ 0x0176: "\\^Y",
+ 0x0177: "\\^y",
+ 0x0178: '\\"Y',
+ 0x0179: "\\'Z",
+ 0x017a: "\\'Z",
+ 0x017b: "\\.Z",
+ 0x017c: "\\.Z",
+ 0x017d: "\\v{Z",
+ 0x017e: "\\v{z",
+
+ 0x01c4: "D\\v{Z",
+ 0x01c5: "D\\v{z",
+ 0x01c6: "d\\v{z",
+ 0x01c7: "LJ",
+ 0x01c8: "Lj",
+ 0x01c9: "lj",
+ 0x01ca: "NJ",
+ 0x01cb: "Nj",
+ 0x01cc: "nj",
+ 0x01cd: "\\v{A",
+ 0x01ce: "\\v{a",
+ 0x01cf: "\\v{I",
+ 0x01d0: "\\v\\i",
+ 0x01d1: "\\v{O",
+ 0x01d2: "\\v{o",
+ 0x01d3: "\\v{U",
+ 0x01d4: "\\v{u",
+ 0x01e6: "\\v{G",
+ 0x01e7: "\\v{g",
+ 0x01e8: "\\v{K",
+ 0x01e9: "\\v{k",
+ 0x01ea: "\\c{O",
+ 0x01eb: "\\c{o",
+ 0x01f0: "\\v\\j",
+ 0x01f1: "DZ",
+ 0x01f2: "Dz",
+ 0x01f3: "dz",
+ 0x01f4: "\\'G",
+ 0x01f5: "\\'g",
+ 0x01fc: "\\'\\AE",
+ 0x01fd: "\\'\\ae",
+ 0x01fe: "\\'\\O",
+ 0x01ff: "\\'\\o",
+
+ 0x02c6: '\\^{}',
+ 0x02dc: '\\~{}',
+ 0x02d8: '\\u{}',
+ 0x02d9: '\\.{}',
+ 0x02da: "\\r{",
+ 0x02dd: '\\H{}',
+ 0x02db: '\\c{}',
+ 0x02c7: '\\v{}',
+
+ 0x03c0: '\\mbox{$\\pi$}',
+ # consider adding more Greek here
+
+ 0xfb01: 'fi',
+ 0xfb02: 'fl',
+
+ 0x2013: '--',
+ 0x2014: '---',
+ 0x2018: "`",
+ 0x2019: "'",
+ 0x201c: "``",
+ 0x201d: "''",
+ 0x2020: "\\dag",
+ 0x2021: "\\ddag",
+ 0x2122: "\\mbox{$^\\mbox{TM}$",
+ 0x2022: "\\mbox{$\\bullet$",
+ 0x2026: "\\ldots",
+ 0x2202: "\\mbox{$\\partial$",
+ 0x220f: "\\mbox{$\\prod$",
+ 0x2211: "\\mbox{$\\sum$",
+ 0x221a: "\\mbox{$\\surd$",
+ 0x221e: "\\mbox{$\\infty$",
+ 0x222b: "\\mbox{$\\int$",
+ 0x2248: "\\mbox{$\\approx$",
+ 0x2260: "\\mbox{$\\neq$",
+ 0x2264: "\\mbox{$\\leq$",
+ 0x2265: "\\mbox{$\\geq$",
+}
+for _i in range(0x0020):
+ if _i not in latex_equivalents:
+ latex_equivalents[_i] = ''
+for _i in range(0x0020,0x007f):
+ if _i not in latex_equivalents:
+ latex_equivalents[_i] = chr(_i)
+
+# Characters that should be ignored and not output in tokenization
+_ignore = Set([chr(i) for i in range(32)+[127]]) - Set('\t\n\r')
+
+# Regexp of chars not in blacklist, for quick start of tokenize
+_stoppers = re.compile('[\x00-\x1f!$\\-?\\{~\\\\`\']')
+
+_blacklist = Set(' \n\r')
+_blacklist.add(None) # shortcut candidate generation at end of data
+
+# Construction of inverse translation table
+_l2u = {
+ '\ ':ord(' ') # unexpanding space makes no sense in non-TeX contexts
+}
+
+for _tex in latex_equivalents:
+ if _tex <= 0x0020 or (_tex <= 0x007f and len(latex_equivalents[_tex]) <= 1):
+ continue # boring entry
+ _toks = tuple(_tokenize(latex_equivalents[_tex]))
+ if _toks[0] == '' and _toks[-1] == '}':
+ _toks = _toks[1:-1]
+ if _toks[0].isalpha():
+ continue # don't turn ligatures into single chars
+ if len(_toks) == 1 and (_toks[0] == "'" or _toks[0] == "`"):
+ continue # don't turn ascii quotes into curly quotes
+ if _toks[0] == '\\mbox' and _toks[1] == '' and _toks[-1] == '}':
+ _toks = _toks[2:-1]
+ if len(_toks) == 4 and _toks[1] == '' and _toks[3] == '}':
+ _toks = (_toks[0],_toks[2])
+ if len(_toks) == 1:
+ _toks = _toks[0]
+ _l2u[_toks] = _tex
+
+# Shortcut candidate generation for certain useless candidates:
+# a character is in _blacklist if it can not be at the start
+# of any translation in _l2u. We use this to quickly skip through
+# such characters before getting to more difficult-translate parts.
+# _blacklist is defined several lines up from here because it must
+# be defined in order to call _tokenize, however it is safe to
+# delay filling it out until now.
+
+for i in range(0x0020,0x007f):
+ _blacklist.add(chr(i))
+_blacklist.remove('{')
+_blacklist.remove('$')
+for candidate in _l2u:
+ if isinstance(candidate,tuple):
+ if not candidate or not candidate[0]:
+ continue
+ firstchar = candidate[0][0]
+ else:
+ firstchar = candidate[0]
+ _blacklist.discard(firstchar)
diff --git a/biblio/bibtex/utils/mab2bib/mab2bib.py b/biblio/bibtex/utils/mab2bib/mab2bib.py
new file mode 100644
index 0000000000..5a8eaf5dfd
--- /dev/null
+++ b/biblio/bibtex/utils/mab2bib/mab2bib.py
@@ -0,0 +1,218 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Konvertierung vom MAB-Format in das BibTeX-Format
+"""
+import os.path, sys, re, string, codecs, latex
+
+AppInfo = """
+MAB2Bib 0.2a : bibliographischer Konverter von MAB nach BibTeX
+
+(r) 2005 by fiëé TeXnique, Henning Hraban Ramm, hraban@fiee.net
+im Auftrag von Uwe Jochum, Uni Konstanz, uwe.jochum@uni-konstanz.de
+LaTeX-Codec von D. Eppstein
+Lizenz: Python-Lizenz (http://python.org/doc/Copyright.html)
+"""
+
+AppHelp = """Aufruf: [python] mab2bib.py <MAB-Datei> [<BibTeX-Datei>]
+Ist keine Ausgabedatei angegeben, wird an die Eingabedatei '.bib' angehängt.
+
+Die Datei latex.py muss im gleichen Verzeichnis liegen!
+"""
+
+class Datensatz(dict):
+ """Datensatz einer bibliografischen Datenbank
+ Als Felder (Schlüssel) werden die MAB-felder verwendet, weil sie genauer sind
+ """
+
+ # Zuordnung von MAB-Feldern auf BibTeX-Felder
+ mab2bib = {
+ 'id' : None,
+ '081': 'title',
+ '089': 'series',
+ '100': 'author',
+ '100b': 'editor',
+ '100c': 'editor',
+ '100e': 'author',
+ '100f': 'author',
+ '104': 'author',
+ '104a': 'author',
+ '104b': 'editor',
+ '104c': 'editor',
+ '104e': 'author',
+ '104f': 'author',
+ '108': 'author',
+ '108a': 'author',
+ '108b': 'editor',
+ '108c': 'editor',
+ '108e': 'author',
+ '108f': 'author',
+ '112': 'author',
+ '112a': 'author',
+ '112b': 'editor',
+ '112c': 'editor',
+ '112e': 'author',
+ '112f': 'author',
+ '200': 'institution',
+ '200b': 'title',
+ '204': 'institution',
+ '304': 'title',
+ '310': 'title',
+ '331': 'title',
+ '333': 'author',
+ '334': 'annote',
+ '335': 'title',
+ '359': 'note',
+ '376': 'journal',
+ '400': 'edition',
+ '403': 'edition',
+ '410': 'address',
+ '412': 'publisher',
+ '415': 'address',
+ '417': 'publisher',
+ '425': 'year',
+ '433': 'pages',
+ '434': 'annote',
+ '451': 'series',
+ '454': 'series',
+ '455': 'volume',
+ '456': 'volume',
+ '501': 'annote',
+ '519': 'type',
+ '531': 'copyright',
+ '533': 'annote',
+ '540': 'ISBN',
+ '540a': 'ISBN',
+ '540b': 'ISBN',
+ '542': 'ISSN',
+ '544': 'LCCN',
+ '590': 'howpublished',
+ '596': 'howpublished',
+ '25': None
+ }
+
+ # Trennzeichen zwischen gleichartigen Einträgen in BiBTeX
+ glue = {
+ 'default': '; ',
+ 'author':' and ',
+ 'editor':' and ',
+ 'title':'. ',
+ 'series': '/',
+ }
+
+ # Ãœbersetzung von MAB-Zeichen in TeX-Zeichen
+ # Achtung, reguläre Ausdrücke!
+ # das meiste wird von latex.py erledigt!
+ tex_trans = {
+ '\xAC' : ' ', # Negationszeichen zur Bezeichnung eines Nicht-Sortierwortes(?) entfernen
+ '&lt;' : '', # werden die spitzen Klammern gebraucht?
+ '&gt;' : '',
+ '\.{2,}' : '\\dots',
+ ' - ' : ' -- ',
+ '\s+' : ' '
+ }
+
+ def __init__(self, *args, **kwargs):
+ dict.__init__(self, *args, **kwargs)
+
+ def __setitem__(self, key, value):
+ if key in self.mab2bib.keys():
+ dict.__setitem__(self, key, value)
+ else:
+ print "Unbekannter Schlüssel '%s' (Wert: '%s')" % (key, value)
+
+ def update(self, updatedict):
+ "überschrieben, damit das eigene __setitem__ verwendet wird"
+ for key in updatedict.keys():
+ self[key] = updatedict[key]
+
+ def translate(self, s, table, deletechars=None):
+ "ersetzt Sonderzeichen usw.; ähnlich string.translate"
+ for k in self.tex_trans.keys():
+ s = re.sub(k, self.tex_trans[k], s)
+ s = unicode(string.strip(s), 'latin-1').encode('latex') # evtl. mac-roman
+ return s
+
+ def BibTeXdict(self):
+ btd = {}
+ felder = self.keys()
+ felder.sort()
+ for key in felder:
+ bkey = self.mab2bib[key]
+ if not bkey: continue
+ val = self.translate(self[key], self.tex_trans)
+ if self.glue.has_key(bkey):
+ glue = self.glue[bkey]
+ else:
+ glue = self.glue['default']
+ if btd.has_key(bkey):
+ btd[bkey] = string.join((btd[bkey], val), glue)
+ else:
+ btd[bkey] = val
+ return btd
+
+ def toBibTeX(self):
+ erg = []
+ btd = self.BibTeXdict()
+ for key in btd.keys():
+ erg.append("%s\t= {%s}" % (key, btd[key]))
+ return "@book { %s,\n%s\n}\n\n" % (self['id'], string.join(erg, ",\n"))
+
+
+
+class MABfile(file):
+ """?"""
+
+ reMABzeile = re.compile('^(?P<key>\d+\w?)\s+(?P<val>.+)$', re.IGNORECASE)
+ reLeerzeile = re.compile('^\s*$')
+
+ def process(self):
+ """Lese MAB-Datei und erzeuge Liste von Datensätzen als self.daten"""
+ self.daten = []
+ dsno = -1
+ inds = False
+ for zeile in self.readlines():
+ if self.reLeerzeile.match(zeile):
+ if inds: inds = False
+ continue
+ zeile = string.strip(zeile)
+ m = self.reMABzeile.match(zeile)
+ if not m:
+ print "Ungültige MAB-Zeile: %s" % zeile
+ continue
+ key = string.lower(m.group('key'))
+ val = string.strip(m.group('val'))
+ if not inds:
+ # neuer Datensatz
+ inds = True
+ dsno += 1
+ self.daten.append(Datensatz())
+ id = string.replace(string.lower(string.split(val, None, 2)[0]), ',', '')
+ self.daten[dsno]['id'] = id + str(dsno)
+ self.daten[dsno][key] = val
+
+ def writeBibTeXfile(self, dateiname):
+ if not hasattr(self, 'daten'): self.process()
+ btf = open(dateiname, 'w')
+ for ds in self.daten:
+ btf.write(ds.toBibTeX())
+ btf.close()
+
+
+def help():
+ print AppInfo
+ print AppHelp
+ sys.exit(0)
+
+if __name__=='__main__':
+ if len(sys.argv) < 2: help()
+ mabname = sys.argv[1]
+ if not os.path.isfile(mabname):
+ print "MAB-Datei '%s' nicht gefunden!" % mabfile
+ sys.exit(1)
+ bibname = mabname+'.bib'
+ if len(sys.argv) > 2:
+ bibname = sys.argv[2]
+
+ mabfile = MABfile(mabname, 'r')
+ mabfile.writeBibTeXfile(bibname)
+ mabfile.close()
diff --git a/biblio/bibtex/utils/mab2bib/utf8_to_latex.py b/biblio/bibtex/utils/mab2bib/utf8_to_latex.py
new file mode 100755
index 0000000000..3636464d68
--- /dev/null
+++ b/biblio/bibtex/utils/mab2bib/utf8_to_latex.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+Universelle Textcodierung
+2009-06-15 by Henning Hraban Ramm, fiムe virtuムlle
+
+quellcodierung_to_zielcodierung.py [Optionen] Quelldatei [Zieldatei]
+
+Es kレnnen auch ganze Verzeichnisse bearbeitet werden.
+
+Die gew゚nschte Codierung wird aus dem Dateinamen ermittelt.
+Mレgliche Werte sind z.B.
+latin1 (iso-8859-1), utf8, macroman, latex (sofern latex.py vorhanden ist)
+
+Optionen:
+--filter=Dateiendung
+--overwrite (sonst wird die Originaldatei gesichert)
+--hidden (sonst werden versteckte Dateien ignoriert)
+"""
+
+import os, os.path, sys, codecs, getopt, shutil
+try:
+ import latex
+except:
+ pass
+
+modes = ('filter', 'overwrite', 'hidden')
+mode = {}
+
+def help(message=""):
+ print message
+ print __doc__
+ sys.exit(1)
+
+def backup(datei):
+ original = datei
+ pfad, datei = os.path.split(datei)
+ datei, ext = os.path.splitext(datei)
+ count = 0
+ while os.path.exists(os.path.join(pfad, u"%s.%d%s" % (datei, count, ext))):
+ count += 1
+ neudatei = os.path.join(pfad, u"%s.%d%s" % (datei, count, ext))
+ print u"Sichere %s als %s" % (original, neudatei)
+ shutil.copy(original, neudatei)
+ return neudatei
+
+def is_hidden(datei):
+ return (datei.startswith('.') or os.sep+'.' in datei)
+
+def convert(source, target, so_enc, ta_enc):
+ from_exists = os.path.exists(source)
+ to_exists = os.path.exists(target)
+ from_isdir = os.path.isdir(source)
+ to_isdir = os.path.isdir(target)
+ from_path, from_name = os.path.split(source)
+ to_path, to_name = os.path.split(target)
+ #from_name = os.path.basename(source)
+ #to_name = os.path.basename(target)
+
+ if not from_exists:
+ help(u"Quelle '%s' nicht gefunden!" % from_name)
+
+ if from_isdir:
+ if is_hidden(source) and not mode['hidden']:
+ print u"Ignoriere verstecktes Verzeichnis %s" % source
+ return
+ if not to_isdir:
+ help(u"Wenn die Quelle ein Verzeichnis ist, muss auch das Ziel ein Verzeichnis sein!")
+ print u"Verarbeite Verzeichnis %s" % source
+ dateien = os.listdir(source)
+ #if not mode['hidden']:
+ # dateien = [d for d in dateien if not is_hidden(d)]
+ if mode['filter']:
+ dateien = [d for d in dateien if d.endswith(mode['filter'])]
+ for datei in dateien:
+ s = os.path.join(source, datei)
+ t = os.path.join(target, datei)
+ convert(s, t, so_enc, ta_enc)
+ else:
+ if is_hidden(from_name) and not mode['hidden']:
+ print u"Ignoriere versteckte Datei %s" % source
+ return
+ if to_isdir:
+ target = os.path.join(target, from_name)
+ if not mode['overwrite']:
+ if source==target:
+ source=backup(source)
+ elif os.path.exists(target):
+ backup(target)
+ print u"Konvertiere %s (%s)\n\tnach %s (%s)" % (source, so_enc, target, ta_enc)
+ so_file = file(source, "rU")
+ lines = so_file.readlines()
+ so_file.close()
+ ta_file = file(target, "w")
+ for l in lines:
+ ta_file.write(unicode(l, so_enc).encode(ta_enc))
+ ta_file.close()
+
+
+opts, args = getopt.getopt(sys.argv[1:], "ohf:", ["overwrite","hidden","filter="])
+
+if len(args)<1:
+ help("Zu wenige Parameter angegeben!")
+
+for m in modes:
+ mode[m] = False
+ for (o, a) in opts:
+ if o=='-'+m[0] or o=='--'+m:
+ if a:
+ print u"Modus %s = %s" % (m, a)
+ else:
+ a = True
+ print u"Modus %s aktiv" % m
+ mode[m] = a
+
+#print "modes:", mode
+#print "opts :", opts
+#print "args :", args
+
+# gew゚nschte Codierung aus dem Dateinamen ablesen
+scriptname = os.path.splitext(os.path.basename(sys.argv[0]))[0]
+from_enc, to_enc = scriptname.split("_to_")
+
+from_name = to_name = args[0]
+if len(args)>1: to_name = args[1]
+
+convert(from_name, to_name, from_enc, to_enc)
+ \ No newline at end of file
diff --git a/biblio/bibtex/utils/mathsci2bibtex/mathsci2bibtex b/biblio/bibtex/utils/mathsci2bibtex/mathsci2bibtex
new file mode 100644
index 0000000000..3395f6c856
--- /dev/null
+++ b/biblio/bibtex/utils/mathsci2bibtex/mathsci2bibtex
@@ -0,0 +1,786 @@
+#! /usr/local/bin/perl
+# Change the above row to the location of your perl script
+# mathsci2bibtex
+# This is a beta version! Send your comments to ilya@math.mit.edu
+# $Id: convert,v 1.1 1993/04/19 06:01:35 ilya Exp ilya $
+# $Log: convert,v $
+# Revision 1.1 1993/04/19 06:01:35 ilya
+# Initial revision
+#
+
+sub configure {
+ # user modifiable definitions
+
+ $opt_rm='\\operatorname{'; #what to substitute instead of "{\rm" code
+ $opt_bf='{\\Bbb '; #what to substitute instead of "{\bf" code
+ #separately for any letter to make bold
+ $opt_scr='{\\cal '; #what to substitute instead of "{\scr" code
+ $opt_germ='\\frac '; #what to substitute instead of "\germ" code
+
+ $opt_crc32='n';
+ # use complicated algorithm?
+ $opt_key_db='mathsci.dbk'; # name of the database of keys
+ $opt_r_key_db='y'; # use existing database of keys?
+ $opt_w_key_db='y'; # update existing database of keys?
+ $opt_del_dub='y'; # search previous keys for dublicate of the given?
+ $opt_exp_name='y'; # take the expanded field for the person name?
+ $opt_exp_jrnl='y'; # take the expanded field for the journal name?
+ $opt_believe_jrnl_year='y'; # the year in the JN field has a precedence
+
+ $opt_believe_jrnl='translation'; # if 2 JN fields, take the translation
+ # $opt_believe_jrnl='original'; # if 2 JN fields, take the original
+ $opt_translated_title='n'; # what to do with translation for a generic language
+ $opt_transl_lang='Russian';
+ $opt_orig_lang='';
+ $opt_gener_lang='French:German';
+ if (@ARGV && ($ARGV[$[])=~/^-./) {
+ require "newgetopt.pl";
+ &NGetOpt('h','crc32:s','rm=s','scr=s','germ=s','bf=s','key_db=s','r_key_db:s','w_key_db:s',
+ 'del_dup:s','exp_name:s','exp_jrnl:s','believe_jrnl=s',
+ 'believe_jrnl_year:s','translated_title:s','translated_title:s',
+ 'transl_lang:s','orig_lang:s','gener_lang:s');
+ }
+ else {
+ $opt_h='y' unless @ARGV;
+ }
+
+ #print STDERR $opt_crc32,"\n";
+ $opt_crc32=~s/^.*[-n].*$//;
+ #print STDERR $opt_crc32,"\n";
+ $opt_r_key_db=~s/^.*[-n].*$//;
+ $opt_w_key_db=~s/^.*[-n].*$//;
+ $opt_del_dup=~s/^.*[-n].*$//;
+ $opt_exp_name=~s/^.*[-n].*$//;
+ $opt_exp_jrnl=~s/^.*[-n].*$//;
+ $opt_believe_jrnl_year=~s/^.*[-n].*$//;
+ $opt_translated_title=~s/^.*[-n].*$//;
+ grep(($languages{$_}='translate'),split(":",$opt_transl_lang));
+ grep(($languages{$_}='original'),split(":",$opt_orig_lang));
+ grep(($languages{$_}='generic'),split(":",$opt_gener_lang));
+ #print STDERR %languages;
+
+ #%languages=('Russian','translate'
+ # ,'French','generic'
+ # ,'German','generic'
+ # ); # what to do with title and series, now: translate,
+ # original, or generic (for recognition of a word)
+
+ # user modifiable definitions - end
+$Usage =
+"Converter from the MathSci database format to a BibTeX format.
+Usage: $0 [-options] [MathSci_file]
+ options: (default)
+ -h give this message (n)
+ -crc32 [yn] use the real crc32 for dublicate search ($opt_crc32)
+ -key_db FILE name of the database of existing keys ($opt_key_db)
+ -r_key_db [yn] read existing database of keys? ($opt_r_key_db)
+ -w_key_db [yn] write existing database of keys? ($opt_w_key_db)
+ -del_dup [yn] delete duplicate records? ($opt_del_dup)
+ -exp_name [yn] use the expanded name field? ($opt_exp_name)
+ -exp_jrnl [yn] use the expanded journal name field? ($opt_exp_jrnl)
+ -believe_jrnl_year [yn]
+ believe the year in the journal field? ($opt_believe_jrnl_year)
+ -believe_jrnl translation | original
+ which journal field to believe? ($opt_believe_jrnl)
+ -translated_title [yn]
+ which title to use if there are 2 (for generic language)?
+ ($opt_translated_title)
+ -transl_lang (:-separated list of Languages)
+ For which languages use the translated titles?
+ ($opt_transl_lang)
+ -orig_lang (:-separated list of Languages)
+ For which languages use the original titles?
+ ($opt_orig_lang)
+ -gener_lang (:-separated list of Languages)
+ Some useful names of languages for pattern recognition
+ ($opt_gener_lang)
+ -rm STRING the string to change '{\\rm ' to ($opt_rm)
+ -bf STRING the string to change '{\\bf ' to ($opt_bf)
+ -scr STRING the string to change '{\\scr ' to ($opt_scr)
+ -germ STRING the string to change '\\germ ' to ($opt_germ)
+To work from STDIN use $0 - or $0 --
+" ;
+ die "$Usage" if defined $opt_h;
+}
+
+&configure;
+$rn=0; # record counter
+%codes=('AU','author'
+,'MR','mr_number'
+,'ED','editor'
+,'CT','contributor'
+,'TI','title'
+,'NT','note'
+,'TIC','collection_title'
+,'SE','series'
+,'PY','year'
+,'JN','journal'
+,'JNT','journal_translated'
+,'JNO','journal_original'
+,'RF','reviewed_from'
+,'PUBL','publisher'
+,'LA','language'
+,'SL','summary_language'
+,'PC','primary_code'
+,'SC','secondary_code'
+,'RL','review_length'
+,'RE','reviewer'
+,'RN','reviewer_nonpersonal'
+,'RT','review_type'
+,'AB','abstract'
+,'DEM','primary_descriptor'
+,'DER','secondary_descriptor'
+,'DT','document_type'
+,'IS','issn_isbn'
+,'CO','coden'
+,'XN','cross_ref_mr_number'
+,'XP','cross_paper_number'
+,'AN','accesion_number'
+,'MRI','mr_issue'
+,'SF','subfile'
+,'CMP','CMP_volume_issue');
+ # what to do with special substitutions
+%proc=('author','author'
+ ,'journal','journal'
+ ,'journal_translated','journal'
+ ,'journal_original','journal'
+ ,'publisher','publisher'
+ ,'series','series'
+ ,'editor','editor'
+ ,'collection_title','collection_title'
+ ,'title','title'
+ ,'year','general'
+ ,'note','general'
+ ,'language','general'
+ ,'document_type','general'
+ );
+
+ # begins job
+&init_crc32 if $opt_crc32;
+# read database of keys
+$r_key_db="<$opt_key_db";
+$w_key_db=">>$opt_key_db";
+if ($opt_r_key_db && -f $opt_key_db) {
+ open(r_key_db) || die "cannot open $opt_key_db for read";
+ while (<r_key_db>) {
+ (($key,$cs)=/^(\w+),\s+(\d+)$/) || warn "wrong entry $_ in the checksum database";
+ $cs{$key}=$cs;
+ #$kkey=substr($key,0,1);
+ #eval "\$cs\$kkey{\$key}=\$cs;";
+ }
+ close(r_key_db) || die "cannot close $opt_key_db for read";
+}
+elsif ($opt_r_key_db) {
+ print STDERR "there is no checksum database $opt_key_db\n";
+}
+(open(w_key_db) || die "cannot open $opt_key_db for write") if $opt_w_key_db;
+#select(STDOUT);
+
+$*=1;
+$/="|\n\n";
+
+while (<>) {
+ #s/\r$//g; # DOS files in UNIX - anyway $/ won't work
+ $searchhistory=0;
+ $searchhistory=1, print STDERR
+ "There was a search history in the record $rn of $ARGV.\n"
+# if s/^(\f\nNo\.[^\f]*\f)/\f\f/g; # the search history deletion
+ if s/(\f\nNo\.[^\f]*\f)/\f\f/g; # the search history deletion
+ $searchhistory=1, print STDERR
+ "There was a SilverPlatter mark in the record $rn of $ARGV.\n"
+ if s/^SilverPlatter.*$/\f\f/gi; # the Silverplatter mark deletion
+ #if ($searchhistory) {
+ #foreach (split(/^\f{2,}/)) {
+ foreach (split(/\f+/)) {
+ if (/\w/) {&dorecord;}
+ }
+ #}
+ #else {&dorecord;};
+}
+(close(w_key_db) || die "cannot write to $opt_key_db; disk full?!")
+ if $opt_w_key_db;;
+
+
+sub dorecord {
+ local($code,$lname,%add_list,%item_list,@authors,$key,$incollection,$reference_type,$lang);
+ ++$rn;
+ $incollection=0;
+ s/^\f+$//g; # kill Page breaks
+ s/\|\s+$/\|/g; # just in case...
+ foreach (split(/\|$/)) {
+ s/^(\n+|\s*MathSci\s+Disc[\-\s\d\/]+)\s*\d+\s+of\s+\d+(\s|\n)*\n+//i; # kill this "7 of 67" stuff
+ if ( ( ($code,$lname)=/^([^-:\s]+)\s*([^-:]*)[-:]/ ) && defined $codes{$code}
+ && defined $proc{$codes{$code}}) {
+ eval "&$proc{$codes{$code}}($codes{$code});";
+ }
+ else {&unknown_field;}
+ #print join(':',%item_list), "\n";
+ }
+ #print join(':',%item_list), ":\n";
+ # set year
+ if (!$item_list{'year'}) {
+ $item_list{'year'}=$add_list{'publisher_year'} if $add_list{'publisher_year'};
+ $item_list{'year'}=$add_list{'journal_year'} if $add_list{'journal_year'};
+ }
+ if ($add_list{'publisher_year'}
+ && $add_list{'publisher_year'} != $item_list{'year'}) {
+ $add_list{'???'} .= "; " . $add_list{'publisher_year'};
+ #delete $add_list{'publisher_year'};
+ }
+ if ($add_list{'journal_year'}
+ && $add_list{'journal_year'} != $item_list{'year'}) {
+ $add_list{'???'} .= "; " . $add_list{'journal_year'};
+ }
+ if ($opt_believe_jrnl_year && $add_list{'journal_year'} ) {
+ $item_list{'year'}=$add_list{'journal_year'};
+ }
+ #delete $add_list{'journal_year'};
+ ($tmp)=($item_list{'address'} =~ /(\d+)\s*$/);
+ ($item_list{'year'})=($item_list{'address'} =~ /([-\d\/]+)\s*$/) unless ($tmp < 1500) | ($tmp>2100) | $item_list{'year'};
+ $item_list{'year'} =~ s/;\s*\d{2}(\d{2})/\/\1/g;
+ $item_list{'address'} =~ s/,\s+$item_list{'year'}$//
+ if $item_list{'address'} && $item_list{'year'};
+ $translate_now=$opt_translated_title;
+ $translate_now=1 if $languages{"\u\L$item_list{'language'}"} eq 'translate';
+ $translate_now=0 if $languages{"\u\L$item_list{'language'}"} eq 'original';
+ if ($item_list{'title'} =~ /\.\s+\[(.*)\]\s*$/) {
+ $item_list{'title'} = $translate_now ? $1 : $` ;
+ $item_list{'language'}='' unless $translate_now;
+ }
+ if ($item_list{'series'} =~ /\.\s+\[(.*)\]\s*$/) {
+ $item_list{'series'} = $translate_now ? $1 : $` ;
+ $item_list{'language'}='' unless $translate_now;
+ }
+ if ($add_list{'volume'}) {
+ if ($item_list{'volume'} && $add_list{'volume'}!=$item_list{'volume'}) {
+ $item_list{'title'} .= ", Vol. $add_list{'volume'}";
+ }
+ else {
+ $item_list{'volume'}=$add_list{'volume'};
+ }
+ }
+ #foreach $lang (split(/\W+/,$item_list{'language'})) {
+ # $item_list{'organization'} = ''
+ # if "\L$item_list{'organization'}" eq "\L$lang";
+ # print STDERR "if \L$item_list{'organization'}"," eq \L$lang\n";
+ #}
+ while (1) {
+ ($tmp=$item_list{'organization'})=~s/\W/\\\1/g;
+ $item_list{'organization'} = ''
+ if $item_list{'language'} =~ /$tmp/i;
+ $item_list{'organization'} = '' if
+ defined $languages{"\u\L$item_list{'organization'}"};
+ $item_list{'organization'}=$item_list{'organization?'},
+ delete $item_list{'organization?'}, next
+ if (!$item_list{'organization'} && $item_list{'organization?'});
+ last;
+ }
+ $add_list{'???'} .= "; $item_list{'organization?'}" if $item_list{'organization?'};
+ $item_list{'language'} = $opt_believe_jrnl eq 'original' ? $` : $'
+ if $qualifier && $opt_believe_jrnl && $item_list{'language'} =~ /;/;
+ $item_list{'language'} =~ s/\s*;?\s*English\s*;?\s*//;
+ $item_list{'volume'}=$1
+ if $item_list{'volume'} eq '' &&
+ $item_list{'booktitle'} =~ s/,?\s*vol\.\s+([\divxlcdm]+)$//i ;
+ $item_list{'booktitle'} =~ s/,?\s*vol\.\s+$item_list{'volume'}$//i ;
+ if ($item_list{'author'}) { # set key basing on authors
+ &dokey('author');
+ }
+ elsif ($item_list{'editor'}) { # set key basing on editors
+ &dokey('editor');
+ }
+ elsif ($item_list{'title'}) { # set key basing on title
+ &dotitlekey('title');
+ }
+ else { #something strange happened, set random key
+ $key=int rand(1048576);
+ print STDERR "Cannot construct a key, temporary key $key in the record $rn of $ARGV.\n";
+ }
+ #print join(':',%item_list), "\n";
+ if ($item_list{'journal'}) {
+ $reference_type='article';
+ }
+ elsif ($item_list{'document_type'} =~ /Proceedings-Paper/) { #'Proceedings-Paper'
+ $reference_type='inproceedings';
+ }
+ elsif ($item_list{'document_type'} =~ /Proceedings/) { #'Proceedings'
+ $reference_type='proceedings';
+ }
+ elsif ($item_list{'document_type'} =~ /Book/) { #'Book'
+ $reference_type='book';
+ }
+ elsif ($item_list{'series'} ) { #'Book'???? In fact I don't know...
+ $reference_type='book';
+ }
+ elsif ($incollection) {$reference_type='inproceedings';}
+ else {
+ print STDERR "unknown type of reference, @misc substituted in the record $rn of $ARGV.\n";
+ $reference_type='misc';
+ }
+ $item_list{'pages'}=$add_list{'book_pages'}
+ #, delete $add_list{'book_pages'}
+ unless $item_list{'pages'};
+ $item_list{'pages'}=$add_list{'publisher_pages'}
+ #, delete $add_list{'publisher_pages'}
+ unless $item_list{'pages'};
+ #publisher_pages
+ #undef $item_list{'document_type'};
+ # ship out
+ &latexize('title');
+ &latexize('booktitle');
+ $add_list{'???'} =~ s/^;\s+//;
+ print STDERR "In $key in the record $rn of $ARGV: Cannot recognize: ", $add_list{'???'}, "\n"
+ if $add_list{'???'};
+ next if $opt_del_dup && &cs==0;
+ (print "\n@$reference_type{\t$key\n")
+ || die "cannot write to STDOUT; disk full?!";
+ while (@_=each(%item_list)) {
+ (print ",\t$_[ $[ ]\t={$_[ $[ +1 ]}\n" )
+ || die "cannot write to STDOUT; disk full?!"
+ if $_[ $[ +1 ] && ($_[ $[ ] ne 'document_type');
+ }
+ (print "}\n") || die "cannot write to STDOUT; disk full?!";
+ ((print w_key_db "$cs{$key}\n")
+ || die "cannot write to $opt_key_db; disk full?!") if $opt_w_key_db;
+ # divided in 2 parts for possible error in output writing, the second
+ # part is written after the work is finished
+ #undef %item_list;
+}
+
+sub author {
+ $item_list{'author'} = &name ;
+ }
+
+sub editor {
+ $item_list{'editor'} = &name ;
+ }
+
+sub name {
+ s/^[^-:]+[-:]\s+//;
+ s/((-\w\.)?)[.;,]?\s*$/\1/; # delete the trailing "." if not initial - just
+ # in case
+ s/,-/, /g;
+ s/,\s*\([^()]*\)//g; #the address ", (1-CA)" field
+ if (!$opt_exp_name) {
+ s/\[[^][]*\]//g;} # delete the expanded name [Name Name1] field
+ else {
+ s/(^|;)[^[;]*\[([^];]*)\]/$1$2/g;}
+ # change the name to the expanded name [Name Name1] field
+ s/;/ and /g;
+ s/\s+/ /g;
+ s/^\s+//;
+ s/-(\w{1,2}\.)/ $1/g; # work with initial
+ s/\s(\w{1,2}\.)-/ $1 /g; # work with initial
+ # work with prefixes
+ substr($_,length($`)+length($1),length($2)) =~ s/-/ /g
+ while /(^|\sand\s+)((([a-z]{1,3}|De)-)+)[A-Z]/;
+ $_=join(" and ",grep(s/^([^,]+),([^,]+),\s+(Jr|III|IV).?\s*$/\2 \1, \3/||1,
+ split(" and "))) if /,\s*(Jr|III|IV)\.?(\s|$)/;
+ $_;
+ }
+
+sub journal {
+ $qualifier=''; # translation and original
+ s/^[^-:]+[-:]\s+//;
+ s/[.;,]?\s*$//;
+ $qualifier="\L$1" if s/^(translation|original):\s+//i;
+ return if ($qualifier && $opt_believe_jrnl && $opt_believe_jrnl ne $qualifier
+ && $item_list{'journal'});
+ $add_list{'journal_year'}=$item_list{'volume'}=$item_list{'number'}=
+ $item_list{'pages'} = undef if $item_list{'journal'};
+ # believe the second instance, hence erase the first
+ #$item_list{'journal'}=/^(\S+)(\s*\(\d{1,3}\))?/; # chose the first word before [
+ $item_list{'journal'}=/^(.+)\[/; # chose the first word before [
+ $item_list{'journal'}= $1 if $opt_exp_jrnl && /\[([^]]*)\]/ ;
+ # change the name to the expanded name [Name ] field
+ $item_list{'journal'} =~ s/-/ /g;
+ #s/^\s*\S+\s*(\(\d{1,3}\)\s*)?//; # kill the first word - can be j.-math. (2)
+ s/^.*\[[^]]*\]//; # kill the expanded name and name
+ s/\.\s*$//;
+ $wasPage = 0;
+ $wasYear = 0;
+ foreach (split(/,/)) {
+ $wasPage++ if $wasPage>0;
+ if (/^\s*([-\d\/]+(\([-\d\/]+\))?)\s+\((\d{4}(\/\d+)*)\)\s*$/) {
+ # as: 40/41(141/142) (1990/91)
+ if ($add_list{'journal_year'}) {
+ if ($add_list{'journal_year'} ne $3) {
+ {$add_list{'???'} .= "; " . $3;}
+ }
+ if ($wasPage) {
+ $item_list{'pages'} .= ", $1";
+ }
+ else {$item_list{'pages'}=$1;}
+ }
+ else {
+ $add_list{'journal_year'} = $3;
+ # there is another year field
+ if ($item_list{'volume'}) {
+ if ($wasPage) {
+ $item_list{'pages'} .= ", $1";
+ }
+ elsif ($item_list{'pages'} eq '') {
+ $_=$1;
+ if (/--/) {$item_list{'pages'} = $_ ;}
+ else {
+ $add_list{'???'} .= "; " . $_;
+ }
+ }
+ else {$add_list{'???'} .= "; " . $1;}
+ }
+ else {$item_list{'volume'} = $1;}
+ }
+ }
+ elsif (/^\s*no\.\s*([-\/\d]+(\s*\([-\/\d]+\))?(\s*exp(\.|\w+)(\s*no\.)?\s*[-\/\d]+)?(\s*[ivxlc]+\.?)?)\s*$/i) {
+ #as: no. 3-4(75-76) Exp. No. 708
+ #as: no. 6 i.
+ if ($item_list{'number'}) {$add_list{'???'} .= "; " . $_;}
+ else {$item_list{'number'} = $1;}
+ }
+ elsif (/^\s*\((\d{4}(\/d+)*)\)\s*$/) { #as: (1956/57)
+ if ($item_list{'year'}) {
+ if ($item_list{'year'} eq $1) {$add_list{'journal_year'} = $1;}
+ else {$add_list{'???'} .= "; " . $_;}
+ }
+ else {$item_list{'year'} = $1;}
+ }
+ elsif (/^\s*(\d+)\s*$/) { #as: 56
+ if ($wasPage) {$item_list{'pages'} .= ", $1";$wasPage--;}
+ elsif ($item_list{'volume'} ) { # is it year?
+ if ($1 > 1500 && $1 < 2100) {
+ if ($item_list{'year'} && $item_list{'year'} ne $1)
+ {$add_list{'???'} .= "; " . $_;}
+ else {$item_list{'year'} = $1;}
+ }
+ else {
+ if ($item_list{'pages'}) {$add_list{'???'} .= "; " . $_;}
+ else {$item_list{'pages'} = $1;}
+ }
+ }
+ else {$item_list{'volume'} = $1;}
+ }
+ elsif (/^\s*(pp\.\s*)?(([ivxlcd]+\+)?([-\d]+)|((\w)\d+-+\6\d+))(\s*pp\.?)?\s*$/) {
+ #as: 567--897 or L567--L897 or viii+65 pp.
+ if ($wasPage) {$item_list{'pages'} .= ", $2";$wasPage--;}
+ elsif ($item_list{'pages'}) {$add_list{'???'} .= "; " . $_;}
+ else {
+ $item_list{'pages'} = $2;
+ $wasPage = 1;
+ }
+ }
+ elsif (/^\s*No\.\s+([-\d\/]+(\s*\([-\/\d]+\))?)\s+(pp\.\s*)?([-\d]+)(\s*pp\.?)?\s*$/i) {
+ #as: No. 62 567--897 pp
+ if ($item_list{'number'}) {$add_list{'???'} .= "; " . $_;}
+ else {$item_list{'number'} = $1;}
+ if ($item_list{'pages'}) {$add_list{'???'} .= "; " . $_;}
+ else {
+ $item_list{'pages'} = $4;
+ $wasPage = 1;
+ }
+ }
+ elsif (/^\s*No\.\s+([-\d\/]+(\s*\([-\/\d]+\))?)\s+(pp\.\s*)?([-\d]+)(\s*pp\.?)?(\s*\((\d{4})\))\s*$/i) {
+ #as: No. 62 567--897 pp. (1989)
+ if ($item_list{'number'}) {$add_list{'???'} .= "; " . $_;}
+ else {$item_list{'number'} = $1;}
+ if ($item_list{'pages'}) {$add_list{'???'} .= "; " . $_;}
+ else {
+ $item_list{'pages'} = $4;
+ }
+ if ($item_list{'year'}) {
+ if ($item_list{'year'} eq $7) {$add_list{'journal_year'} = $7;}
+ else {$add_list{'???'} .= "; " . $7;}
+ }
+ else {$item_list{'year'} = $7;}
+ }
+ elsif (/^\s*Numero\s+Hors\s+Serie\s*$/i) {
+ $item_list{'number'} = "Hors Serie" unless $item_list{'number'};
+ }
+ elsif (/^\s*(suppl\.|part)\s*([-\d\/]+)\s*$/i) { # suppl. 2
+ $item_list{'number'} .= " $2" ;
+ }
+ elsif (/^\s*((\w+\.?\s+)*sci\.)\s*$/i) { # Phys. Sci.
+ $item_list{'number'} .= ", " . $1 ;
+ }
+ elsif (length($_)>9 && /^\s*(\D+\s+[\divxlcd]+)\s*$/i) {
+ # Voprosy Kvant. Teor. Polya i Statist. Fiz. 5
+ $item_list{'number'} .= ", " . $1 ;
+ }
+ else {$add_list{'???'} .= "; " . $_;}
+ $wasPage=0 if $wasPage>1;
+ }
+ $item_list{'number'} =~ s/,\s*//;
+ #print join(':',%item_list), "\n";
+ }
+
+sub publisher {
+ #
+ # Dont know how to split into publisher and address
+ # Three cases: with "Inc.,", "Ltd." and "Akad. Nauk" recognized so while
+ #
+ s/^[^-:]+[-:]\s*//;
+ s/[.;,]?\s*$//;
+ $_=$`, $add_list{'publisher_year'}=$1 if /,\s+(\d{4})[,.;]/; # find year
+ $item_list{'publisher'} = $_;
+ $_=$' ? $' : ''; #search rest
+ ($add_list{'publisher_pages'} = $2) =~ s/\s*pp[.,;]?\s*//g
+ if s/(^|[,.:])\s+((((Vol\.\s+[\divxlcdm]+:)?([^.,:]*pp[.,;]?(;\s+)?|pp\.[^.,;]*))|(Vol\.\s+[\divxlcdm]+:)(\sand\s|[\s\divxlcdm+\-])+)+)//i;
+ # possible forms xii+356 pp. or : pp. xii+356
+ # want also ", Vol. 1: xvi+717 pp.; Vol. 2: xii+458 pp.;
+ # Vol. 3: i--xii and 459--834, "
+ # so: allow Vol. OR pp
+ # i.e. (^|[,.:])\s+($2), where $2=$pages+,
+ # $pages=$Pages | $volumemark $pagesmark+,
+ # $Pages=$volumemark? $pagespart
+ # $pagespart=$partpp | $pppart
+ # $partpp=[^.,:]*pp[.,;]?(;\s+)?
+ # $pppart=pp\.[^.,;]*
+ # $volumemark=Vol\.\s+[\divxlcdm]+: $pagesmark= and | "digits-+"
+# if (/(^|[,.:])\s+([^.,:]*pp[.,;]|pp\.[^.,;]*)/) {
+# $add_list{'publisher_pages'} = $2;
+# $add_list{'publisher_pages'} =~ s/\s*pp[.,;]?\s*//;
+# }
+ if ($item_list{'publisher'}=~/,\s+/)
+ {
+ $item_list{'publisher'} = $`;
+ $item_list{'address'} = $';
+ if (($item_list{'publisher'} =~ /^Akad\.\s+Nauk/) ||
+ $item_list{'address'}=~/^(Inc|Ltd)\.,/)
+ {
+ if ($item_list{'address'}=~/,\s+/)
+ {
+ $item_list{'publisher'} .= ", ";
+ $item_list{'publisher'} .= $`;
+ $item_list{'address'} = $';
+ }
+ }
+ }
+}
+
+sub title {
+ s/^[^-:]+[-:]\s+//;
+ s/[.;,]?\s*$//;
+ if (s/vol\.\s+([-\/\divxlcdm]+(,\s*[\divxlcdm]+)*)\s*$//i)
+ {
+ $add_list{'volume'}=$1;
+ s/[.;,]?\s*$//;
+ }
+ $item_list{'title'} = $_;
+ }
+
+
+
+sub collection_title {
+ $incollection=1;
+ s/^[^-:]+[-:](\s+Collection:)?\s*//;
+ s/[.;,]?\s*$//;
+ # I don't know what "pp. 307--400, 678" means
+ # now the problem: I don't know what to do when where is a volume
+ # both in collection_title and series, and if organization
+ # and volume can be in an arbitrary order.
+ # Hence I delete organization now, ignoring the volume,
+ # and leave volume to the end, when I know if there is a series
+ # volume.
+ #
+ # Moreover, there can be something like
+ # vol. 47 (Russian), pp. 27 (MIT), vol. 14.
+ #
+processing:
+ while (1) {
+ s/[,.;]?\s*$//;
+ if (s/\(([^()]*)\)\s*$//) #or language? (MIT) or (French)
+ {
+ if (!$item_list{'organization'}) {$item_list{'organization'}=$1;}
+ else {$add_list{'organization?'}.="; ".$1;}
+ next;
+ }
+ if (s/vol\.\s+([-\/\divxlcdm]+(,\s*[\divxlcdm]+)*)\s*$//i)
+ {
+ if (!$item_list{'volume'}) {$item_list{'volume'}=$1;}
+ else {$add_list{'???'}.="; ".$1;}
+ next;
+ }
+ if (s/vol\.\s+([-\/\divxlcdm]+(,\s*[\divxlcdm]+)*),\s*(pp\.\s*)?\s([\divxlcdm]+(-+[\divxlcdm]+)?(,\s+[\divxlcdm]+(-+[\divxlcdm]+)?)*)\s*$//i)
+ {
+ if (!$item_list{'volume'}) {$item_list{'volume'}=$1;}
+ else {$add_list{'???'}.="; ".$1;}
+ if ($add_list{'book_pages'}) {
+ $add_list{'???'}.="; ".$4;
+ }
+ else {$add_list{'book_pages'} = $4;}
+ next;
+ }
+ do {
+ $add_list{'book_pages'} = $2;
+ next;
+ } if !$add_list{'book_pages'} && s/(,|pp\.)\s+([\divxlcdm]+(-+[\divxlcdm]+)?(,\s+[\divxlcdm]+(-+[\divxlcdm]+)?)*)\s*$//;
+ $add_list{'book_pages'} =~ s/,\s*$//;
+ last;
+ }
+ $item_list{'booktitle'} = $_;
+}
+
+#sub document_type {
+# s/^[^-:]+[-:]\s+//;
+# s/\.\s*$//;
+# $item_list{'document_type'} = $_;
+# #print join(':',%item_list), "\n";
+# }
+
+sub series {
+ s/^[^-:]+[-:]\s+//;
+ s/[.;,]?\s*$//;
+ $item_list{'volume'} = $1 if s/\s*,\s*([\divxlcdm\-\/]+)\s*$//i;
+ $item_list{'number'} = $1 if s/\s*,\s*No\.\s+(\d+)\s*$//i;
+ $item_list{'volume'} = $1, $item_list{'number'} = $2
+ if s/\s*,\s*([\divxlcdm\-\/]+),?\s*part\s*([\divxlcdm]+)\s*$//i;
+ $item_list{'series'} = $_;
+ #print join(':',%item_list), "\n";
+ }
+
+sub general {
+ s/^[^-:]+[-:]\s+//;
+ s/[.;,]?\s*$//;
+ $item_list{$_[0]} = $_;
+ #print join(':',%item_list), "\n";
+ }
+
+sub unknown_field {
+ #print join(':',%item_list), "\n";
+ #print STDERR "unknown field $lname encountered\n";
+}
+
+#sub reset_list {
+# local(@tmp);
+# while (@tmp=each(%item_list)) {$item_list{$tmp[ $[ ]}='';}
+# #undef %item_list; #memory is tight!
+#}
+
+sub dokey {
+ @authors=split(/ and /,$item_list{ $_[ $[ ] });
+ @authors=sort @authors;
+ $i=$[;
+ $key='';
+ do {
+ $authors[$i] =~ s/,.*//; # Delete the first names
+ #$authors[$i] =~ s/^.*\s(\S+)$/$1/; # Delete the titles like von
+ $authors[$i] =~ s/^([a-z]{1,3}\s+)+([A-Z])/$2/;
+ # Delete the titles like von
+ $authors[$i] =~ s/\s//g; # Delete the spaces
+ $key .= &trunk_sound($authors[$i]);
+ #print $key;
+ } while ($i++<2+$[ && $i <= $#authors);
+ $key .= $& if $item_list{'year'} =~ /\d+/;
+ # year can be 1985; 1986, we choose first
+ $key =~ s/\d{2}(\d{2})/\1/; # delete 19 from 1980
+ $key .= "\u\L$1" if $item_list{'title'} =~ /(\w{3})\w/;
+ #undef @authors; #memory is tight!
+}
+
+sub dotitlekey {
+ $key=$item_list{ $_[ $[ ] };
+ $key =~ s/\..*//;
+ @authors=($key =~ /(\w{4,})/g);
+ $i=$[;
+ $key='';
+ do {
+ $tkey = &trunk_sound($authors[$i]);
+ $key .= "\u\L$tkey";
+ } while ($i++<2+$[ && $i <= $#authors);
+ $key .= $1 if $item_list{'year'} =~ /(\d+)/;
+ # year can be 1985; 1986, we choose first
+ $key =~ s/\d{2}(\d{2})/\1/; # delete 19 from 1980
+}
+
+sub latexize {
+ return unless $item_list{$_[ $[ ] };
+ # Capitalize outside of math
+ local(@pieces)=split(/\$/," " . $item_list{$_[ $[ ] } . " ");
+ #add space to avoid losing the first and last "\$"
+ local($i)=0;
+ $item_list{$_[ $[ ] }='';
+ foreach (@pieces) {
+ s/^\s// unless $i++;
+ s/(.)([A-Z]+)/\1{\2}/g if $i % 2 ; # we assume that capital can never
+ # follow math immediately
+ #$i++ unless /(^|[^\\])(\\\\)*\\$/;
+ if (/(^|[^\\])(\\\\)*\\$/) { # this $ is backslashed
+ $item_list{$_[ $[ ] } .= "\$$_" ;
+ $i++; # now the evenness of $i isn't changed
+ }
+ else {
+ if ($i%2) { # nonmath!
+ $item_list{$_[ $[ ] } .= "\$}$_" ;
+ }
+ else {
+ $item_list{$_[ $[ ] } .= "{\$$_" ;
+ }
+ }
+ }
+ #($item_list{$_[ $[ ] }=join("\$",@pieces)) =~ s/(^\s+)|(\s+$)//g;
+ # there is an extra '$}' in the beginning
+ $item_list{$_[ $[ ] } =~ s/(^\$\}\s*)|(\s+$)//g;
+ $item_list{$_[ $[ ] } =~ s/\\germ\s+/$opt_germ/g;
+ $item_list{$_[ $[ ] } =~ s/\{\\scr\s+/$opt_scr/g;
+ $item_list{$_[ $[ ] } =~ s/\{\\rm\s+/$opt_rm/g;
+ $item_list{$_[ $[ ] } =~ s/\{\\bf\s+([^\}]+)\}/$opt_bf.join("}$opt_bf",split("",\1)).'}'/ge;
+}
+
+sub cs {
+ local($cs,$keymod)=(0,'');
+ #foreach (('title','booktitle','journal','year','volume','number','editor'))
+ foreach (keys(%item_list)) {
+ #now the problem is to reach the system independence (like \13\10=\10)
+ ($_=$item_list{$_}) =~ s/\s+/ /g;
+ $cs += unpack('%32C*',$_) unless $opt_crc32;
+ $cs += &crc32($_) if $opt_crc32;
+ }
+ $cs=1 if $cs==0;
+ while ($cs{$key.$keymod}) {
+ #print stderr $key.$keymod,"\n";
+ if ($cs{$key.$keymod}==$cs) {
+ print STDERR
+ "Repeated reference $key$keymod skipped in the record $rn of $ARGV.\n";
+ return 0;
+ }
+ $keymod ? $keymod++ : ($keymod = "A") ;
+ }
+ $key .= $keymod;
+ (print STDERR
+ "Double reference, now $key in the record $rn of $ARGV.\n") if $keymod;
+ $cs{$key}=$cs;
+ ((print w_key_db "$key, ")
+ || die "cannot write to $opt_key_db; disk full?!") if $opt_w_key_db;
+ # divided in 2 parts for possible error in output writing, the second
+ # part is written after the work is finished
+ $cs;
+}
+
+sub trunk_sound {
+ # "ei" is 2 sounds!
+ $_[ $[ ] =~ /^((schtsch)|(shtsh)|(tsch)|(sch)|(wr)|(ck)|(ch)|(ng)|(zh)|(kh)|(sh)|(kn)|(th)|(ph)|(rh)|(wh)|(qu)|(gh)|(ea)|(ee)|(eu)|(au)|(ou)|(oa)|(oo)|(oe)|(ue)|(ae)|(ie)|([a-zA-Z])\31|[a-zA-Z]){0,3}/i;
+ #$_[ $[ ] =~ /^((schtsch)|(shtsh)|(tsch)|(sch)|(wr)|(ck)|(ch)|(ng)|(zh)|(kh)|(sh)|(kn)|(th)|(ph)|(rh)|(wh)|(qu)|(gh)|(ea)|(ee)|(eu)|(au)|(ou)|(oa)|(oo)|(oe)|(ue)|(ae)|(ie)|([a-zA-Z])\31+|[a-zA-Z]){0,3}/i;
+ ($_[ $[ ]=$&) =~ s/([^\Weo])\1$/$1/;
+ $_[ $[ ];
+}
+
+sub crc32 {
+
+ $crc = 0xffffffff; # /* preload shift register, per CRC-32 spec */
+ grep( ($crc = ($crc << 8) ^ $crc32_table[($crc >> 24) ^ unpack('C',$_)]),
+ split("",$_[ $[ ]));
+ return ~$crc; # /* transmit complement, per CRC-32 spec */
+}
+
+#define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */
+
+sub init_crc32 {
+ local($i,$c);
+ local($CRC32_POLY)=0x04c11db7 ;
+ foreach (0 .. 255) {
+ $c=$_<<24;
+ foreach (1..8) #(c = i << 24, j = 8; j > 0; --j)
+ {$c = $c & 0x80000000 ? ($c << 1) ^ $CRC32_POLY : ($c << 1);}
+ $crc32_table[$_] = $c;
+ }
+}
+
diff --git a/biblio/bibtex/utils/mathscinet/README b/biblio/bibtex/utils/mathscinet/README
new file mode 100644
index 0000000000..aa2773b477
--- /dev/null
+++ b/biblio/bibtex/utils/mathscinet/README
@@ -0,0 +1,4 @@
+A Perl script that downloads references from MathSciNet in bibtex format.
+Works with the recently redesigned MathSciNet site.
+
+2006-Jan-06 \ No newline at end of file
diff --git a/biblio/bibtex/utils/mathscinet/mathscinet.PL b/biblio/bibtex/utils/mathscinet/mathscinet.PL
new file mode 100644
index 0000000000..25e4c35cff
--- /dev/null
+++ b/biblio/bibtex/utils/mathscinet/mathscinet.PL
@@ -0,0 +1,85 @@
+#!/usr/bin/perl -w
+
+# mathscinet.PL - automates getting bibtex references from MathSciNet
+#
+# Author: Michael Tweedale <m.tweedale@bristol.ac.uk>
+# Version: 0.1
+# Licence: GPL
+
+use LWP::UserAgent;
+use URI::URL;
+use URI::Escape;
+use Getopt::Long;
+
+$VERSION='0.1';
+$curbox=4; # MathSciNet form has boxes for search terms numbered 4...7
+$search="";
+$ua=new LWP::UserAgent;
+$hdrs=new HTTP::Headers(Accept => 'text/html',
+ User_Agent => "mathscinet.PL $VERSION");
+
+sub version()
+{
+ print STDERR << "EOF";
+mathscinet $VERSION
+This is free software. You may redistribute copies of it under the terms of
+the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Michael Tweedale <m.tweedale\@bristol.ac.uk>.
+EOF
+}
+
+sub usage()
+{
+ print STDERR << "EOF";
+Usage: $0 SEARCH...
+Gets references from MathSciNet in bibtex format.
+
+-t, --title phrase from the title of the article or book
+-a, --author name of one of the authors
+-j, --journal journal the article appeared in
+-s, --series series the book appeared in
+-m, --MR Math Reviews number
+ --help display this help and exit
+ --version output version information and exit
+
+Example 1: $0 -t "free+groups" -t trees -a bestvina
+Example 2: $0 -a serre -j annals
+Example 3: $0 -a brown -s "graduate+texts"
+EOF
+}
+
+sub addterm($$)
+{
+ $curbox<=7 || die("cannot use more than 4 search terms");
+ $search .= "&pg$curbox=" . uri_escape($_[0]) . "&s$curbox="
+ . uri_escape($_[1]) . "&co$curbox=AND";
+ $curbox++;
+}
+
+GetOptions('title|t=s' => sub { addterm("TI",$_[1]); },
+ 'author|a=s' => sub { addterm("AUCN",$_[1]); },
+ 'journal|j=s' => sub { addterm("JOUR",$_[1]); },
+ 'series|s=s' => sub { addterm("SE",$_[1]); },
+ 'MR|m=s' => sub { addterm("MR",$_[1]); },
+ 'help|h' => sub { usage(); exit 0; },
+ 'version|v' => sub { version(); exit 0; });
+
+$search ne "" || usage() && die("no search terms found");
+$url=new URI::URL(
+ "http://www.ams.org/mathscinet/search/publications.html?fmt=bibtex$search");
+$req=new HTTP::Request(GET, $url, $hdrs);
+$resp=$ua->request($req);
+
+$resp->is_success ||
+ print STDERR $resp->message . "\n" &&
+ die("failed to get search results from MathSciNet");
+$resp->as_string =~ /No publications results/ &&
+ die("no results for this search");
+
+map {
+ print $_, (( $_=~ '^}') ? "\n\n" : "\n")
+ if ((/^\s*<pre>/ .. /^\s*<\/pre>/) && ! m{^\s*</?pre>})
+} split "\n", $resp->as_string;
+
diff --git a/biblio/bibtex/utils/misc/README b/biblio/bibtex/utils/misc/README
new file mode 100644
index 0000000000..3089769b82
--- /dev/null
+++ b/biblio/bibtex/utils/misc/README
@@ -0,0 +1,5 @@
+This directory contains single-file utilities that used to
+sit, alongside a bunch of directories, in biblio/bibtex/utils
+
+Robin Fairbairns
+For the CTAN Team
diff --git a/biblio/bibtex/utils/misc/bbl2html.awk b/biblio/bibtex/utils/misc/bbl2html.awk
new file mode 100644
index 0000000000..9c742053cb
--- /dev/null
+++ b/biblio/bibtex/utils/misc/bbl2html.awk
@@ -0,0 +1,495 @@
+#!/opt/local/bin/gawk -f
+#
+# bbl2html.awk v1.2c
+#
+# Released to the public domain (ie. use at your own risk)
+# Rik Blok <rikblok@mail.com>
+# December 13, 2000.
+#
+# Latest version available from
+# http://rikblok.cjb.net/scripts/bbl2html.awk
+#
+# Converts a LaTeX .bbl file to (mostly) formatted html code. Probably
+# also works if applied directly to a .tex file. Sets bookmarks
+# to the keys so you can reference a citation from another page, eg.
+# <a href="bib.html#key">[1]</a> will make a link to "key".
+#
+# bbl2html will use the default label unless you set (on the command-line)
+# override=key or override=number in which case it will use the citation
+# key or numeric format, respectively.
+#
+# I wrote this script out of dissatisfaction with other conversion tools
+# available. Hopefully it will be of use to somebody. Feel free to
+# modify the script to suit you. I've tested it with the bibliography
+# styles abbrv, alpha, apalike, ieeetr, plain, prsty, siam, and unsrt
+# and it works fairly well.
+# For a sample of the output visit http://rikblok.cjb.net/lib/refs.html.
+#
+# Usage:
+# awk -f bbl2html.awk head=<header> foot=<footer> \
+# [override = key|number] [labelwidth=<width>]
+# [bigtable = 0|1] [noabout=0|1] <infile> > <outfile>
+#
+# where
+# <header> and <footer> may be formatted text (enclosed in escaped
+# quotes if containing a space) to be placed at the beginning and end
+# of the output, respectively. As a special case, if either begins with
+# the symbol "@" it is assumed to be a filename and the text is read from
+# the file specified. If neither a header nor a footer is specified
+# <html><body> and </body></html> are used, respectively;
+# override is an optional variable to change the displayed label to
+# the citation key or numeric format;
+# <width> is the width of the column label, in pixels or, if appended
+# by "%", in percent (optional, defaults to 50 (pixels));
+# bigtable is an optional variable which allows the page to be
+# formatted as one big table (=1) or a separate table for each entry (=0)
+# (multiple tables can be displayed incrementally as the page loads but
+# a single table will be rendered faster. Optional, defaults to 0);
+# noabout is an optional variable which tells bbl2html.awk not to
+# print the "Generated by bbl2html.awk..." comment at the bottom of the
+# page (optional, defaults to 0);
+# <infile> is the name of the bibliography file (or LaTeX file?) to
+# be converted; and
+# <outfile> is the name of the html file to be generated.
+#
+# Sample usages:
+# awk -f bbl2html.awk head=\<html\>\<body\> foot=\</body\>\</html\> bib.bbl > bib.html
+# awk -f bbl2html.awk head=@bib.head foot=@bib.foot override=key bib.bbl > bib.html
+# awk -f bbl2html.awk -f myOwnSubstitutions.awk bib.bbl > bib.html
+# awk -f bbl2html.awk labelwidth=20% bigtable=1 bib.bbl > bib.html
+#
+# Notes:
+#
+# 1) You can add your own substitutions fairly easily by setting
+# userfind[] and userreplace[] in the BEGIN action. You can also
+# place the substitutions in a separate awk file (within a BEGIN
+# action) to avoid modifying this script (see the last example above
+# for a sample usage).
+#
+# 2) To generate a complete list of citations from a bibtex file
+# myreferences.bib use the bbl file generated by this latex file:
+#
+# %%%% begin latex file
+# \documentclass{article}
+# \usepackage{url} % if your citations have any \url{} commands
+# \begin{document}
+# \nocite{*}
+# \bibliographystyle{unsrt} % use whichever style you prefer
+# \bibliography{myreferences} % use myreferences.bib
+# \end{document}
+# %%%% end latex file
+#
+# 3) bbl2html.awk needs GNU awk/gawk. On Solaris machines, neither
+# /usr/bin/awk nor /usr/bin/nawk work.
+#
+# 4) If you download this file make sure it has the proper line-endings
+# for your filesystem. Otherwise running the script will probably
+# generate an "^ Invalid char" error. On Unix, process the script
+# with dos2unix if you encounter this error.
+#
+# 5) Any occurrences of "<" and ">" must be escaped in header
+# and footer. Eg. head=\<html\>\<body\> foot=\</body\>\<html\>
+# (not needed in files header/footer may point to).
+#
+# Revisions:
+# v1.2c December 13, 2000
+# - added Unix shell header (!/opt/local/bin/gawk -f) to run script
+# as a shell command. The path may need to be modified on your
+# machine.
+# - labelwidth now defaults to pixels. Append a percent symbol to
+# use as percent (eg. "labelwidth=20%").
+# - more linebreaks allowed in urls
+# - fixed: end-of-line comments ("%\n") left in txt of \href{url}{txt}
+# - adds "Generated by bbl2html.awk..." comment at bottom of file
+# (can be disabled with "noabout=1" command-line parameter)
+# v1.2b December 11, 2000
+# - fixed: chokes on \href{url}%\n{text}
+# - basic math support (italics, super- and sub-scripts)
+# - now has bookmarks (<a name="...">) for both keys and labels
+# (if different)
+# v1.2 December 7, 2000
+# - basic support for \href{url}{txt} (tries to guess how to format
+# 'txt', either as text or as an url)
+# - if neither header nor footer specified, defaults to
+# head="<html><body>" and foot="</body></html>"
+# v1.1 November 5, 2000
+# - added labelwidth option (percentage)
+# - rudimentary support for smallcaps
+# - added notes 4 and 5
+# v1.0c August 25, 2000
+# - replaced userfind[]/userreplace[] indices with descriptive keys
+# v1.0b July 31, 2000
+# - replaceFormat() checks for multiple occurrences of formatting
+# - now handles more general keys
+# - supports most bibliography styles (that I know of)
+# - defaults to using whatever labels are supplied, or numeric (if none)
+# - can override label with override=key or override=number
+# v1.0 July 28, 2000
+# - initial release
+#
+# To do:
+# - nothing urgent
+#
+# Thanks to:
+# - Marc Mutz for bug-hunting and the math substitutions
+#--------------------------------------------------------------------------
+BEGIN {
+ # bbl2html.awk information
+ version = "1.2c";
+ home = "http://rikblok.cjb.net/scripts/index.html#bbl2html.awk";
+
+ # put user-defined substitutions here
+ # arXiv.org preprint archive
+ userfind["arxiv"] = "arXiv:([a-zA-Z\.\-]+\/[0-9][0-9][0-9][0-9][0-9][0-9][0-9])";
+ userreplace["arxiv"] = "<a href=\"http://arXiv.org/abs/\\1\"><tt>arXiv:\\1</tt></a>";
+ # siam style uses a horizontal line in place of repeating author names
+ userfind["siam1"] = "\\\\leavevmode\\\\vrule height 2pt depth -1.6pt width 23pt";
+ userreplace["siam1"] = "<strike>\\&nbsp;\\&nbsp;\\&nbsp;\\&nbsp;\\&nbsp;\\&nbsp;\\&nbsp;\\&nbsp;</strike>";
+ # some trivial math
+ userfind["math"] = "([^\\\\])\\$([^\\$]*)\\$";
+ userreplace["math"] = "\\1<var>\\2</var>";
+ # for super and subscripts:
+ userfind["math.sub"] = "([^\\\\])(\\$|<var>)(.*)_([a-zA-Z0-9]|{.*}|\\\\[a-zA-Z]+)([^\\$]*)(\\$|</var>)";
+ userreplace["math.sub"] = "\\1<var>\\3<sub>\\4</sub>\\5</var>";
+ userfind["math.sup"] = "([^\\\\])(\\$|<var>)(.*)\\^([a-zA-Z0-9]|{.*}|\\\\[a-zA-Z]+)([^\\$]*)(\\$|</var>)";
+ userreplace["math.sup"] = "\\1<var>\\3<sup>\\4</sup>\\5</var>";
+
+ # strip out everything before "\begin{thebibliography}"
+ while (line !~/\\begin{thebibliography}/)
+ getline line;
+
+ NR=0;
+
+ RS = "\\\\bibitem"; # record separator = "\bibitem"
+ FS = "\\\\newblock[ \n]+"; # field separator = "\newblock "
+}
+
+NR == 1 { # on begin, after reading command-line parameters
+ if (!head && !foot) { # if both undefined then use defaults
+ head = "<html><body>";
+ foot = "</body></html>";
+ }
+
+ # put in header
+ printhf(head);
+
+ # default labelwidth = 50 (pixels)
+ if (!labelwidth) labelwidth = 50;
+
+ if (bigtable) print "<table width=\"100%\">";
+}
+
+# every record
+{
+ label = ""; # erase label
+}
+
+# leading "[", set label and strip "[...]" from $1
+$1 ~ /^\[/ {
+ right = matchBrace($1,1);
+ label = substr($1,2,right-2);
+
+ # alpha style
+ sub(/{\\etalchar{\+}}/,"+",label); # replace "{\etalchar{+}}" --> "+"
+
+ # apalike style
+ label = authorFormat(label);
+
+ # strip label from line
+ $1 = substr($1,right+1);
+}
+
+# leading "{"
+$1 ~ /^{/ {
+ keycount++;
+ # if label not already set or override then set to number
+ if (!label || override=="number") label = keycount;
+
+ # get length of key from $1
+ right = matchBrace($1,1);
+
+ # set bookmark to key
+ key = substr($1,2,right-2);
+
+ # use key as label?
+ if (override=="key") label = key;
+
+ if (!bigtable) print "<table width=\"100%\">";
+ print "<tr><td width=\"" labelwidth "\" valign=\"top\">";
+ printf("<a name=\"" key "\">");
+ print "[" label "]";
+ if (key != label) printf("<a name=\"" label "\">");
+ printf("</td><td");
+ # fixing width=100% looks better when using multiple tables
+ if (!bigtable) printf(" width=\"100%\"");
+ printf(">");
+
+ # strip key out of first line
+ line = substr($1,right+1);
+
+ # process each line
+ lineno=1;
+ while (lineno<=NF) {
+ # if last line then check for "\end{thebibliography}"
+ if (lineno==NF) sub(/\n\\end{thebibliography}/,"",line);
+
+ # first take out any urls before any more processing
+ while ((left=match(line,/\\url{/))>0) {
+ right= matchBrace(line,RSTART+4);
+ if (right>left) {
+ urlcnt++;
+ url[urlcnt] = substr(line,left+5,right-left-5); # assumes just one url per line
+ line = substr(line,1,left-1) "__URL" urlcnt "__" substr(line,right+1);
+ }
+ }
+ # repeat for hrefs
+ while ((left=match(line,/\\href{/))>0) {
+ right= matchBrace(line,RSTART+5);
+ if (right>left) {
+ urlcnt++;
+ url[urlcnt] = substr(line,left+6,right-left-6); # assumes just one url per line
+ # now find href text, starting with next '{'
+ if ((left2 = match(substr(line,right+1),/{/))>0) {
+ left2 += right;
+ right = matchBrace(line,left2);
+ txt[urlcnt] = substr(line,left2+1,right-left2-1);
+ }
+ # replace
+ line = substr(line,1,left-1) "__URL" urlcnt "__" substr(line,right+1);
+ }
+ }
+
+ line = authorFormat(line);
+
+ # re-insert formatted urls
+ while (urlcnt) {
+ url[urlcnt] = urlFormat(url[urlcnt],txt[urlcnt]);
+ urlmark = "__URL" urlcnt "__";
+ # can't use sub() because url[urlcnt] may contain "&"
+ # sub(urlmark,url[urlcnt],line);
+ if (match(line,urlmark)) {
+ line = substr(line,1,RSTART-1) url[urlcnt] substr(line,RSTART+RLENGTH);
+ }
+ urlcnt--;
+ }
+ print line "<br>";
+
+ # get ready for next line
+ lineno++;
+ line = $lineno;
+ }
+
+ printf("</td></tr>");
+ if (!bigtable) print "</table>";
+}
+
+END {
+ if (bigtable) print "</table>";
+ if (!noabout) {
+ print "<hr><font size=\"-1\"><address>Generated by <a href=\"" home "\">bbl2html.awk</a> v" version "</address></font>";
+ }
+ if (foot) printhf(foot);
+}
+#--------------------------------------------------------------------------
+function authorFormat( s,
+ left,right)
+# substitute accents in author-type string s.
+{
+ # first replace small-caps formatting style so accents are handled properly
+ s = replaceFormatSC(s);
+
+ # next, replace accents
+ s = gensub(/\\'([AEIOUYaeiouy])/, "\\&\\1acute;", "g", s);
+ s = gensub(/\\`([AEIOUaeiou])/, "\\&\\1grave;", "g", s);
+ s = gensub(/\\\^([AEIOUaeiou])/, "\\&\\1circ;", "g", s);
+ s = gensub(/\\~([AEINOUaeinou])/, "\\&\\1tilde;", "g", s);
+ s = gensub(/\\[\.]([AEIOUaeiou])/, "\\&\\1ring;", "g", s);
+ s = gensub(/\\\"([AEIOUaeiou])/, "\\&\\1uml;", "g", s);
+ s = gensub(/\\([Oo])/, "\\&\\1slash;", "g", s);
+ s = gensub(/\\(AE|ae)/, "\\&\\1lig;", "g", s);
+ gsub(/\\ss/,"\\&szlig;",s); # German sharp s
+ gsub(/~/,"\\&nbsp;",s); # replace nonbreaking spaces: ~ --> &nbsp;
+ gsub(/\\[,@]/," ",s); # replace spaces
+ gsub(/``|''/,"\\&quot;",s); # replace quotes
+ gsub(/---/,"-",s); # replace dashes
+ gsub(/--/,"-",s);
+
+ # these accents can't be displayed in HTML (with my charset) so delete 'em
+ s = gensub(/\\[bcduvH]{([a-zA-Z])}/, "\\1", "g", s); # eg. \u{o}
+ gsub(/{\\AA}/,"A",s); # \AA --> A
+ gsub(/{\\aa}/,"a",s); # \aa --> a
+
+ # user-defined substitutions
+ for (i in userfind) {
+ s = gensub(userfind[i], userreplace[i], "g", s);
+ }
+
+ # replace formatting styles
+ s = replaceFormat(s,"\\em","<em>","</em>"); # replace emphasis
+ s = replaceFormat(s,"\\bf","<b>","</b>"); # replace bold
+ s = replaceFormat(s,"\\it","<i>","</i>"); # replace italics
+ s = replaceFormat(s,"\\tt","<tt>","</tt>"); # replace teletype
+
+ gsub(/{|}/,"",s); # drop any remaining braces
+ gsub(/\\/,"",s); # drop any remaining slashes
+ return s;
+}
+#--------------------------------------------------------------------------
+function urlFormat( url, # function parameters
+ display) # optional variables
+# Format a url. If 'display' is passed then try to determine if it should
+# be displayed formatted author-like or url-like.
+{
+# gsub(/\&/,"\\\\&",url); # escape "&"s (hmm, apparently I don't need this...)
+ gsub(/ /,"",url); # strip spaces
+ gsub(/%\n/,"",url); # strip end-of-line comments
+ gsub(/\n/,"",url); # strip other linebreaks
+ gsub(/%\n/,"",display); # also strip end-of-line comments in display
+
+
+ # guess how to format display, either as an url or authorFormat()
+ if (!display || tolower(display) ~ /:\/\/|^mailto:/) {
+ if (!display) display = url; # default display = formatted url
+ # allow linebreaks after punctuation symbols for display purposes
+ display = "<tt>" gensub(/([^A-Za-z0-9 ])/,"\\1<wbr>","g",display) "</tt>";
+ } else {
+ display = authorFormat(display);
+ }
+
+ return "<a href=\"" url "\">" display "</a>";
+}
+#--------------------------------------------------------------------------
+function printhf( s, # function parameters
+ line) # local variables
+# Prints s (head or foot). If s starts with "@" then is assumed to
+# be a filename and prints the contents of the file
+{
+ # if no leading "@" then just print s
+ if (s !~ /^@/) {
+ print s;
+ return;
+ }
+
+ # else print contents of file s
+ s = substr(s,2); # drop leading "@"
+ while ((getline line < s) > 0)
+ print line;
+ close(s);
+}
+#--------------------------------------------------------------------------
+function replaceFormat( s,find,replaceleft,replaceright, # function parameters
+ left, right) # local variables
+# Replace formatting style marks. Use to change things like {\it et al.}
+# into {<it> et al.</it>} with the usage
+# s = replaceFormat(s,"\\it","<i>","</i>");
+{
+ while ((left = index(s,find))>0) {
+ right = matchBrace(s,left,"{"); # find "}" which matches assumed "{" at position 'left'
+ if (right>left) {
+ s = substr(s,1,right-1) replaceright substr(s,right);
+ }
+ s = substr(s,1,left-1) replaceleft substr(s,left+length(find));
+ }
+ return s;
+}
+#--------------------------------------------------------------------------
+function replaceFormatSC( s, # function parameters
+ find,replaceleft,replaceright, # local variables
+ left, right,l,c,r,cout,i,capslock,ch)
+# Replace small caps "{\sc ...}" formatting style marks.
+# Should be called before accents are replaced (so that "\'a" --> "\'A",
+# for example, instead of "&aacute;" --> "&AACUTE;".)
+# This routine is not robust, it assumes only a small subset of LaTeX
+# commands (such as accents) will be found in the text s. Unanticipated
+# commands will probably be changed to uppercase (but, for now, this can
+# probably be corrected with userfind[]/userreplace[] substitutions).
+{
+ find = "\\sc";
+ replaceleft = "<font size=\"-1\">";
+ replaceright= "</font>";
+ while ((left = index(s,find))>0) {
+ right = matchBrace(s,left,"{"); # find "}" which matches assumed "{" at position 'left'
+ if (right<left) right = length(s);
+ # split s into parts
+ l = substr(s,1,left-1); # left
+ left += length(find);
+ c = substr(s,left,right-left+1)
+ r = substr(s,right+1);
+ # manipulate c
+ capslock=1; # start in uppercase
+ cout = "";
+ for (i=1; i<=length(c); i++) {
+ ch = substr(c,i,1);
+ if (ch ~ /[a-z]/) {
+ if (capslock) {
+ ch = replaceleft toupper(ch);
+ capslock = 0;
+ } else
+ ch = toupper(ch);
+ } else if (ch ~ /[A-Z0-9]/) {
+ if (!capslock) {
+ ch = replaceright ch;
+ capslock = 1;
+ }
+ }
+ cout = cout ch;
+ }
+ if (!capslock) cout = cout replaceright;
+ # correct mangled accents
+ gsub(/\\B{/, "\\b{", cout);
+ gsub(/\\C{/, "\\c{", cout);
+ gsub(/\\D{/, "\\d{", cout);
+ gsub(/\\U{/, "\\u{", cout);
+ gsub(/\\V{/, "\\v{", cout);
+
+ # recombine s
+ s = l cout r;
+ }
+ return s;
+}
+#@include matchBrace.awk
+#--------------------------------------------------------------------------
+# matchBrace.awk - library containing single function matchBrace()
+
+function matchBrace( s,i, # function parameters
+ open, # optional parameters
+ brace,depth,left,right,either,pos,start) # local variables
+# Finds the matching brace for the one at index i (or assume brace==open,
+# if specified) in string s. Returns
+# index of matching brace or zero if not found.
+{
+ # error trap
+ if (!i) return 0;
+
+ # if open not specified then read from substr(s,i,1)
+ if (!open) open = substr(s,i,1);
+
+ # identify type of braces and put in left and right
+ left = "([{<`)]}>'";
+ right= ")]}>'([{<`";
+ pos = index(left,open);
+ if (!pos) { # not in list of braces
+ left = open; # set left and right to the same thing
+ right= left;
+ either = "[" left "|" right "]"; # regexp (not escaped)
+ } else {
+ left = substr(left, pos,1); # found in list, set match
+ right= substr(right,pos,1);
+ either = "[\\" left "|\\" right "]"; # regexp (escaped)
+ }
+
+ # find matching brace
+ pos = i;
+ depth = 1;
+ while (depth) {
+ start += pos;
+ s = substr(s,pos+1);
+ if ((pos = match(s,either))>0) { # another brace found
+ if (substr(s,pos,1)==right) depth--;
+ else depth++;
+
+ } else return 0; # no more braces, return zero
+ }
+ return start+pos;
+}
+#--------------------------------------------------------------------------
diff --git a/biblio/bibtex/utils/misc/bibfind b/biblio/bibtex/utils/misc/bibfind
new file mode 100644
index 0000000000..f2ac1a3760
--- /dev/null
+++ b/biblio/bibtex/utils/misc/bibfind
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# bibfind -- Prints entries in your bib file that match search string.
+#
+# USAGE: bibfind <string> [<file>]
+#
+# Note:
+# Place bibfind in ~/bin, then chmod +x bibfind, then edit bibfind to change
+# the default bib file (see the variable $bibfile on line 29).
+#
+# 2001-07-05, Oyvind.Breivik@dnmi.no
+#
+
+### Arguments
+
+ my ($str,$file) = @ARGV;
+
+### Locals
+
+ my @paragraphs;
+ my $home;
+ my $bibfile;
+
+### Main
+
+ die "USAGE: $0 <string> [<file>]\n" if $#ARGV < 0;
+ $/ = ''; # $INPUT_RECORD_SEPARATOR set to read paragraphs
+ $home = $ENV{"HOME"};
+ $bibfile = "$home/dok/tex/bibtex/Breivik.bib"; # Default bibtex file
+ $file = $bibfile if ($#ARGV < 1);
+
+ open(FILE, $file) or die "ERROR: Can't open $file";
+ print "$file\n";
+ @paragraphs = <FILE>; # Slurp up file by paragraph
+
+ foreach (@paragraphs) {
+ print if /$str/i; # Case ignored, if wanted, remove trailing i.
+ }
diff --git a/biblio/bibtex/utils/misc/noTeX.bst b/biblio/bibtex/utils/misc/noTeX.bst
new file mode 100644
index 0000000000..4f2aa6649a
--- /dev/null
+++ b/biblio/bibtex/utils/misc/noTeX.bst
@@ -0,0 +1,1091 @@
+%
+%
+% BibTeX bibliography style `noTeX' 1.1 (2000/06/18)
+% by Sebastiano Vigna <vigna@acm.org> (starting from the plain.bst style)
+%
+% This stuff is Copyright (C) by the plain.bst author. My changes
+% are public domain.
+%
+% This style generates a number of HTML P elements of class noTeX,
+% one for each entry. The resulting .bbl file can be included in an
+% HTML document. The noTeX field is like the standard note field,
+% but it is only included here, while note is not looked at (so
+% you can have an HTML and a TeX version of the note field). The
+% noTeXtra field is HTML BODY material that is appended to the
+% result; it can contain, say, an abstract, references to ftp
+% sites and so on.
+%
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ noTeX
+ noTeXtra
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ " " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ "<P CLASS=noTeX>" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ noTeXtra empty$
+ { }
+ { noTeXtra write$ }
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<EM>" swap$ * "</EM>" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff{ } }{vv{ } }{ll{ }}{, jj{ }}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ noTeX empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv{ } }{ll{ }}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff{ } }{vv{ } }{ll{ }}{ jj{ }}" format.name$ "others" =
+ { " et al." * }
+ { " and " * editor #2 "{vv{ } }{ll{ }}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ noTeX output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ noTeX "note" output.check
+ format.date output.check
+ new.block
+ noTeX output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
diff --git a/biblio/bibtex/utils/mkbib/ABOUT-NLS b/biblio/bibtex/utils/mkbib/ABOUT-NLS
new file mode 100644
index 0000000000..83bc72ec26
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/ABOUT-NLS
@@ -0,0 +1,1068 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect. Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of November
+2007. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo
+ +----------------------------------------------------+
+ Compendium | [] [] [] [] |
+ a2ps | [] [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | [] |
+ ap-utils | |
+ aspell | [] [] [] [] [] |
+ bash | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] |
+ bison-runtime | [] |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] [] |
+ cpio | |
+ cpplib | [] [] [] |
+ cryptonit | [] |
+ dialog | |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ fetchmail | [] [] () [] [] |
+ findutils | [] |
+ findutils_stable | [] [] [] |
+ flex | [] [] [] |
+ fslint | |
+ gas | |
+ gawk | [] [] [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] |
+ gip | [] |
+ gliv | [] [] |
+ glunarclock | [] |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | [] [] () () [] |
+ gnuedu | |
+ gnulib | [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | |
+ gpe-edit | [] |
+ gpe-filemanager | |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] |
+ gpsdrive | |
+ gramadoir | [] [] |
+ grep | [] [] |
+ gretl | () |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] [] |
+ gst-plugins-ugly | [] [] |
+ gstreamer | [] [] [] [] [] [] [] |
+ gtick | () |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] [] |
+ indent | [] [] [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | [] |
+ jtag | |
+ jwhois | |
+ kbd | [] [] [] [] |
+ keytouch | [] [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | () |
+ ld | [] |
+ leafpad | [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | |
+ libiconv | [] [] |
+ libidn | [] [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lprng | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] |
+ make | [] [] |
+ man-db | [] [] [] |
+ minicom | [] [] [] |
+ nano | [] [] [] |
+ opcodes | [] |
+ parted | [] [] |
+ pilot-qof | |
+ popt | [] [] [] |
+ psmisc | [] |
+ pwdutils | |
+ qof | |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] |
+ shared-mime-info | [] [] [] [] () [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ shishi | |
+ skencil | [] () |
+ solfege | |
+ soundtracker | [] [] |
+ sp | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] |
+ texinfo | [] [] [] |
+ tin | () () |
+ tuxpaint | [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ util-linux-ng | [] [] [] [] |
+ vorbis-tools | [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] |
+ xpad | [] [] [] |
+ +----------------------------------------------------+
+ af am ar az be bg bs ca cs cy da de el en en_GB eo
+ 6 0 2 1 8 26 2 40 48 2 56 88 15 1 15 18
+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ +--------------------------------------------------+
+ Compendium | [] [] [] [] [] |
+ a2ps | [] [] [] () |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] [] |
+ aspell | [] [] [] |
+ bash | [] |
+ bfd | [] [] |
+ bibshelf | [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] [] |
+ cryptonit | [] |
+ dialog | [] [] [] |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ fetchmail | [] |
+ findutils | [] [] [] |
+ findutils_stable | [] [] [] [] |
+ flex | [] [] [] |
+ fslint | |
+ gas | [] [] |
+ gawk | [] [] [] [] () |
+ gcal | [] [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] |
+ gip | [] [] [] [] |
+ gliv | () |
+ glunarclock | [] [] [] |
+ gmult | [] [] [] |
+ gnubiff | () () |
+ gnucash | () () () |
+ gnuedu | [] |
+ gnulib | [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] [] [] [] |
+ gpe-filemanager | [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] [] [] |
+ gpsdrive | [] |
+ gramadoir | [] [] |
+ grep | [] [] [] |
+ gretl | [] [] [] () |
+ gsasl | [] [] |
+ gss | [] [] |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] |
+ gstreamer | [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] [] [] |
+ iso_15924 | [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] |
+ jpilot | [] [] |
+ jtag | [] |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] [] |
+ latrine | [] [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] [] [] |
+ libgpg-error | [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | [] [] |
+ libiconv | [] [] [] |
+ libidn | [] [] |
+ lifelines | () |
+ lilypond | [] [] [] |
+ lingoteach | [] [] [] |
+ lprng | |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] |
+ man-db | [] |
+ minicom | [] [] [] [] |
+ nano | [] [] [] [] [] [] [] |
+ opcodes | [] [] [] [] |
+ parted | [] [] [] |
+ pilot-qof | |
+ popt | [] [] [] [] |
+ psmisc | [] [] |
+ pwdutils | |
+ qof | [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] |
+ solfege | [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] |
+ tin | [] () |
+ tuxpaint | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] [] [] [] |
+ util-linux-ng | [] [] [] [] [] [] [] |
+ vorbis-tools | |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ 85 22 14 2 48 101 61 12 2 8 2 6 53 29 1 52
+
+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn
+ +--------------------------------------------------+
+ Compendium | [] |
+ a2ps | () [] [] |
+ aegis | () |
+ ant-phone | [] |
+ anubis | [] [] [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] |
+ bluez-pin | [] [] [] |
+ cflow | |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] |
+ cpio | [] |
+ cpplib | [] |
+ cryptonit | [] |
+ dialog | [] [] |
+ diffutils | [] [] [] |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ fetchmail | [] [] |
+ findutils | [] |
+ findutils_stable | [] |
+ flex | [] [] |
+ fslint | |
+ gas | |
+ gawk | [] [] |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] |
+ gettext-tools | [] [] |
+ gip | [] [] |
+ gliv | [] |
+ glunarclock | [] [] |
+ gmult | [] [] [] |
+ gnubiff | |
+ gnucash | () () () |
+ gnuedu | |
+ gnulib | [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] |
+ gpe-conf | [] [] [] |
+ gpe-contacts | [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] |
+ gprof | [] |
+ gpsdrive | [] |
+ gramadoir | () |
+ grep | [] [] |
+ gretl | |
+ gsasl | [] |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] |
+ gst-plugins-ugly | [] |
+ gstreamer | [] |
+ gtick | [] |
+ gtkam | [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] |
+ herrie | [] |
+ hylafax | |
+ idutils | [] |
+ indent | [] [] |
+ iso_15924 | [] |
+ iso_3166 | [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | () () |
+ jtag | |
+ jwhois | [] |
+ kbd | [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] |
+ libc | [] [] [] |
+ libexif | |
+ libextractor | |
+ libgpewidget | [] |
+ libgpg-error | |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | [] |
+ libiconv | [] |
+ libidn | [] [] |
+ lifelines | [] |
+ lilypond | [] |
+ lingoteach | [] |
+ lprng | |
+ lynx | [] [] |
+ m4 | [] [] |
+ mailfromd | |
+ mailutils | |
+ make | [] [] [] |
+ man-db | |
+ minicom | [] |
+ nano | [] [] [] |
+ opcodes | [] |
+ parted | [] [] |
+ pilot-qof | |
+ popt | [] [] [] |
+ psmisc | [] [] [] |
+ pwdutils | |
+ qof | |
+ radius | |
+ recode | [] |
+ rpm | [] [] |
+ screem | [] |
+ scrollkeeper | [] [] [] [] |
+ sed | [] [] |
+ shared-mime-info | [] [] [] [] [] [] [] |
+ sharutils | [] [] |
+ shishi | |
+ skencil | |
+ solfege | () () |
+ soundtracker | |
+ sp | () |
+ system-tools-ba... | [] [] [] [] |
+ tar | [] [] [] |
+ texinfo | [] [] |
+ tin | |
+ tuxpaint | () [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] |
+ util-linux-ng | [] [] |
+ vorbis-tools | |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] |
+ xchat | [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn
+ 51 2 25 3 2 0 6 0 2 2 20 0 11 1 103 6
+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ +--------------------------------------------------+
+ Compendium | [] [] [] [] [] |
+ a2ps | () [] [] [] [] [] [] |
+ aegis | () () |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ ap-utils | () |
+ aspell | [] [] [] |
+ bash | [] [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | [] [] |
+ bison | [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] |
+ cryptonit | [] [] |
+ dialog | [] |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ fetchmail | [] [] [] |
+ findutils | [] [] [] |
+ findutils_stable | [] [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ fslint | [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] [] |
+ gip | [] [] [] [] |
+ gliv | [] [] [] [] [] [] |
+ glunarclock | [] [] [] [] [] [] |
+ gmult | [] [] [] [] |
+ gnubiff | () [] |
+ gnucash | () [] |
+ gnuedu | |
+ gnulib | [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] [] [] [] [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] [] [] [] [] [] |
+ gpe-login | [] [] [] [] [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] |
+ gretl | [] [] [] |
+ gsasl | [] [] [] |
+ gss | [] [] [] [] |
+ gst-plugins-bad | [] [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] |
+ gst-plugins-ugly | [] [] [] |
+ gstreamer | [] [] [] [] |
+ gtick | [] |
+ gtkam | [] [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] |
+ herrie | [] [] [] |
+ hylafax | |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] |
+ jpilot | |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] |
+ libextractor | [] [] |
+ libgpewidget | [] [] [] [] [] [] [] [] |
+ libgpg-error | [] [] [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] |
+ libidn | [] [] () |
+ lifelines | [] [] |
+ lilypond | |
+ lingoteach | [] |
+ lprng | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] [] [] [] |
+ minicom | [] [] [] [] [] |
+ nano | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] |
+ pilot-qof | |
+ popt | [] [] [] [] |
+ psmisc | [] [] |
+ pwdutils | [] [] |
+ qof | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] [] |
+ solfege | [] |
+ soundtracker | [] [] |
+ sp | |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | () |
+ tuxpaint | [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ util-linux-ng | [] [] [] [] |
+ vorbis-tools | [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] [] [] |
+ wget | [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ 0 5 77 31 53 4 58 72 3 45 46 9 45 122 3
+
+ tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ +---------------------------------------------------+
+ Compendium | [] [] [] [] | 19
+ a2ps | [] [] [] | 19
+ aegis | [] | 1
+ ant-phone | [] [] | 6
+ anubis | [] [] [] | 11
+ ap-utils | () [] | 4
+ aspell | [] [] [] | 16
+ bash | [] | 6
+ bfd | | 2
+ bibshelf | [] | 7
+ binutils | [] [] [] [] | 9
+ bison | [] [] [] [] | 20
+ bison-runtime | [] [] [] [] | 18
+ bluez-pin | [] [] [] [] [] [] | 28
+ cflow | [] [] | 5
+ clisp | | 9
+ console-tools | [] [] | 5
+ coreutils | [] [] [] | 18
+ cpio | [] [] [] [] | 11
+ cpplib | [] [] [] [] [] | 12
+ cryptonit | [] | 6
+ dialog | [] [] [] | 9
+ diffutils | [] [] [] [] [] | 29
+ doodle | [] | 6
+ e2fsprogs | [] [] | 10
+ enscript | [] [] [] | 16
+ fetchmail | [] [] | 12
+ findutils | [] [] [] | 11
+ findutils_stable | [] [] [] [] | 18
+ flex | [] [] | 15
+ fslint | [] | 2
+ gas | [] | 3
+ gawk | [] [] [] | 16
+ gcal | [] | 5
+ gcc | [] [] [] | 7
+ gettext-examples | [] [] [] [] [] [] | 29
+ gettext-runtime | [] [] [] [] [] [] | 28
+ gettext-tools | [] [] [] [] [] | 20
+ gip | [] [] | 13
+ gliv | [] [] | 11
+ glunarclock | [] [] [] | 15
+ gmult | [] [] [] [] | 16
+ gnubiff | [] | 2
+ gnucash | () [] | 5
+ gnuedu | [] | 2
+ gnulib | [] | 10
+ gnunet | | 0
+ gnunet-gtk | [] [] | 3
+ gnutls | | 4
+ gpe-aerial | [] [] | 14
+ gpe-beam | [] [] | 14
+ gpe-calendar | [] [] | 7
+ gpe-clock | [] [] [] [] | 21
+ gpe-conf | [] [] [] | 16
+ gpe-contacts | [] [] | 10
+ gpe-edit | [] [] [] [] [] | 22
+ gpe-filemanager | [] [] | 7
+ gpe-go | [] [] [] [] | 19
+ gpe-login | [] [] [] [] [] | 21
+ gpe-ownerinfo | [] [] [] [] | 21
+ gpe-package | [] | 6
+ gpe-sketchbook | [] [] | 16
+ gpe-su | [] [] [] [] | 21
+ gpe-taskmanager | [] [] [] [] | 21
+ gpe-timesheet | [] [] [] [] | 18
+ gpe-today | [] [] [] [] [] | 21
+ gpe-todo | [] [] | 8
+ gphoto2 | [] [] [] [] | 21
+ gprof | [] [] | 13
+ gpsdrive | [] | 5
+ gramadoir | [] | 7
+ grep | [] | 12
+ gretl | | 6
+ gsasl | [] [] [] | 9
+ gss | [] | 7
+ gst-plugins-bad | [] [] [] | 13
+ gst-plugins-base | [] [] | 11
+ gst-plugins-good | [] [] [] [] [] | 16
+ gst-plugins-ugly | [] [] [] | 13
+ gstreamer | [] [] [] | 18
+ gtick | [] [] | 7
+ gtkam | [] | 16
+ gtkorphan | [] | 7
+ gtkspell | [] [] [] [] [] [] | 27
+ gutenprint | | 4
+ hello | [] [] [] [] [] | 38
+ herrie | [] [] | 8
+ hylafax | | 0
+ idutils | [] [] | 15
+ indent | [] [] [] [] [] | 28
+ iso_15924 | [] [] | 4
+ iso_3166 | [] [] [] [] [] [] [] [] [] | 54
+ iso_3166_2 | [] [] | 4
+ iso_4217 | [] [] [] [] [] | 24
+ iso_639 | [] [] [] [] [] | 26
+ jpilot | [] [] [] [] | 7
+ jtag | [] | 3
+ jwhois | [] [] [] | 13
+ kbd | [] [] [] | 13
+ keytouch | [] | 8
+ keytouch-editor | [] | 5
+ keytouch-keyboa... | [] | 5
+ latrine | [] [] | 5
+ ld | [] [] [] [] | 10
+ leafpad | [] [] [] [] [] | 24
+ libc | [] [] [] | 19
+ libexif | [] | 5
+ libextractor | [] | 5
+ libgpewidget | [] [] [] | 20
+ libgpg-error | [] | 6
+ libgphoto2 | [] [] | 9
+ libgphoto2_port | [] [] [] | 11
+ libgsasl | [] | 8
+ libiconv | [] [] | 11
+ libidn | [] [] | 11
+ lifelines | | 4
+ lilypond | [] | 6
+ lingoteach | [] | 6
+ lprng | [] | 2
+ lynx | [] [] [] | 15
+ m4 | [] [] [] | 18
+ mailfromd | [] [] | 3
+ mailutils | [] [] | 8
+ make | [] [] [] | 20
+ man-db | [] | 9
+ minicom | [] | 14
+ nano | [] [] [] | 20
+ opcodes | [] [] | 10
+ parted | [] [] [] | 11
+ pilot-qof | [] | 1
+ popt | [] [] [] [] | 18
+ psmisc | [] [] | 10
+ pwdutils | [] | 3
+ qof | [] | 4
+ radius | [] [] | 7
+ recode | [] [] [] | 25
+ rpm | [] [] [] [] | 13
+ screem | [] | 2
+ scrollkeeper | [] [] [] [] | 26
+ sed | [] [] [] [] | 23
+ shared-mime-info | [] [] [] | 29
+ sharutils | [] [] [] | 23
+ shishi | [] | 3
+ skencil | [] | 7
+ solfege | [] | 3
+ soundtracker | [] [] | 9
+ sp | [] | 3
+ system-tools-ba... | [] [] [] [] [] [] [] | 38
+ tar | [] [] [] | 17
+ texinfo | [] [] [] | 15
+ tin | | 1
+ tuxpaint | [] [] [] | 19
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] [] | 20
+ util-linux-ng | [] [] [] | 20
+ vorbis-tools | [] [] | 4
+ wastesedge | | 1
+ wdiff | [] [] | 23
+ wget | [] [] [] | 20
+ xchat | [] [] [] [] | 29
+ xkeyboard-config | [] [] [] | 14
+ xpad | [] [] [] | 15
+ +---------------------------------------------------+
+ 76 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ 163 domains 0 3 1 74 51 0 143 21 1 57 7 45 0 2036
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If November 2007 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites. The most
+up-to-date matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/biblio/bibtex/utils/mkbib/AUTHORS b/biblio/bibtex/utils/mkbib/AUTHORS
new file mode 100644
index 0000000000..8d36b342dc
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/AUTHORS
@@ -0,0 +1,3 @@
+Author:
+Maintainer:
+ Rudra Banerjee <rudra.banerjee@aol.co.uk>
diff --git a/biblio/bibtex/utils/mkbib/COPYING b/biblio/bibtex/utils/mkbib/COPYING
new file mode 100644
index 0000000000..94a9ed024d
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/biblio/bibtex/utils/mkbib/ChangeLog b/biblio/bibtex/utils/mkbib/ChangeLog
new file mode 100644
index 0000000000..ea65cf7c95
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/ChangeLog
@@ -0,0 +1,10 @@
+* 24/05/2013
+- Parsing Complete
+
+* 16/02/2013
+- Complete fileutil to buffer
+
+* 26/10/2012
+- Initial Upload
+
+
diff --git a/biblio/bibtex/utils/mkbib/INSTALL b/biblio/bibtex/utils/mkbib/INSTALL
new file mode 100644
index 0000000000..6e90e07d27
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/biblio/bibtex/utils/mkbib/Makefile.am b/biblio/bibtex/utils/mkbib/Makefile.am
new file mode 100644
index 0000000000..b4cf49ae35
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/Makefile.am
@@ -0,0 +1,55 @@
+# Copyright (C) 2012 Rudra Banerjee*/
+#
+#
+# This file is part of mkBIB.
+#
+# mkBIB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# mkBIB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with mkBIB. If not, see <http://www.gnu.org/licenses/>.
+#
+#
+BUILT_SOURCES = src/bib.h
+AM_YFLAGS = -d
+AM_LFLAGS = -i
+# desktop file
+# (we can't use INTLTOOL_DESKTOP_RULE here due to lp#605826)
+%.desktop: %.desktop.in
+# $(MKDIR_P) $(dir $@); LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+applicationsdir = $(datadir)/applications
+applications_DATA = data/mkbib.desktop
+dist_noinst_DATA = data/mkbib.desktop.in
+
+# gsettings
+#gsettings_SCHEMAS = data/org.mkbib.gschema.xml
+##@INTLTOOL_XML_NOMERGE_RULE@
+##@GSETTINGS_RULES@
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+SUBDIRS= data help po
+pixmapdir=$(datadir)/images
+pixmap_DATA = \
+ images/mkbib.png \
+ images/mkbib.svg \
+ images/icon.png \
+ images/icon.svg
+AM_CFLAGS = @GTK_CFLAGS@ @LIBSOUP_CFLAGS@
+AM_CPPFLAGS= -DPIXMAP=\"$(datadir)/images\"
+bin_PROGRAMS = mkbib
+mkbib_SOURCES = \
+ src/bib.y src/scan.l src/caution.c src/search.c \
+ src/help.c src/mkbib.c src/update_file.c \
+ src/biblst src/main.h src/view.c src/file_util.c
+
+mkbib_LDADD = @GTK_LIBS@ @LIBSOUP_LIBS@ @LEXLIB@
+EXTRA_DIST=$(pixmap_DATA) m4 autogen.sh
+CLEANFILES = src/bib.c src/bib.h *~
+#DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
diff --git a/biblio/bibtex/utils/mkbib/Makefile.in b/biblio/bibtex/utils/mkbib/Makefile.in
new file mode 100644
index 0000000000..b5a466159d
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/Makefile.in
@@ -0,0 +1,1029 @@
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = mkbib$(EXEEXT)
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(dist_noinst_DATA) \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in $(top_srcdir)/build-aux/compile \
+ $(top_srcdir)/build-aux/depcomp \
+ $(top_srcdir)/build-aux/install-sh \
+ $(top_srcdir)/build-aux/missing $(top_srcdir)/build-aux/ylwrap \
+ $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \
+ INSTALL NEWS build-aux/compile build-aux/depcomp \
+ build-aux/install-sh build-aux/missing build-aux/ylwrap \
+ config.rpath src/bib.c src/bib.h src/scan.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(applicationsdir)" \
+ "$(DESTDIR)$(pixmapdir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__dirstamp = $(am__leading_dot)dirstamp
+am_mkbib_OBJECTS = src/bib.$(OBJEXT) src/scan.$(OBJEXT) \
+ src/caution.$(OBJEXT) src/search.$(OBJEXT) src/help.$(OBJEXT) \
+ src/mkbib.$(OBJEXT) src/update_file.$(OBJEXT) \
+ src/view.$(OBJEXT) src/file_util.$(OBJEXT)
+mkbib_OBJECTS = $(am_mkbib_OBJECTS)
+mkbib_DEPENDENCIES =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
+YLWRAP = $(top_srcdir)/build-aux/ylwrap
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+ -e s/c++$$/h++/ -e s/c$$/h/
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
+SOURCES = $(mkbib_SOURCES)
+DIST_SOURCES = $(mkbib_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+DATA = $(applications_DATA) $(dist_noinst_DATA) $(pixmap_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ cscope distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+DIST_TARGETS = dist-bzip2 dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GMSGFMT = @GMSGFMT@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+ITSTOOL = @ITSTOOL@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XMLLINT = @XMLLINT@
+YACC = @YACC@
+YACC_EXISTS = @YACC_EXISTS@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Copyright (C) 2012 Rudra Banerjee*/
+#
+#
+# This file is part of mkBIB.
+#
+# mkBIB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# mkBIB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with mkBIB. If not, see <http://www.gnu.org/licenses/>.
+#
+#
+BUILT_SOURCES = src/bib.h
+AM_YFLAGS = -d
+AM_LFLAGS = -i
+# $(MKDIR_P) $(dir $@); LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+applicationsdir = $(datadir)/applications
+applications_DATA = data/mkbib.desktop
+dist_noinst_DATA = data/mkbib.desktop.in
+
+# gsettings
+#gsettings_SCHEMAS = data/org.mkbib.gschema.xml
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+SUBDIRS = data help po
+pixmapdir = $(datadir)/images
+pixmap_DATA = \
+ images/mkbib.png \
+ images/mkbib.svg \
+ images/icon.png \
+ images/icon.svg
+
+AM_CFLAGS = @GTK_CFLAGS@ @LIBSOUP_CFLAGS@
+AM_CPPFLAGS = -DPIXMAP=\"$(datadir)/images\"
+mkbib_SOURCES = \
+ src/bib.y src/scan.l src/caution.c src/search.c \
+ src/help.c src/mkbib.c src/update_file.c \
+ src/biblst src/main.h src/view.c src/file_util.c
+
+mkbib_LDADD = @GTK_LIBS@ @LIBSOUP_LIBS@ @LEXLIB@
+EXTRA_DIST = $(pixmap_DATA) m4 autogen.sh
+CLEANFILES = src/bib.c src/bib.h *~
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .l .o .obj .y
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+src/bib.h: src/bib.c
+ @if test ! -f $@; then rm -f src/bib.c; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/bib.c; else :; fi
+src/$(am__dirstamp):
+ @$(MKDIR_P) src
+ @: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/$(DEPDIR)
+ @: > src/$(DEPDIR)/$(am__dirstamp)
+src/bib.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/scan.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/caution.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/search.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/help.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/mkbib.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/update_file.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/view.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/file_util.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+mkbib$(EXEEXT): $(mkbib_OBJECTS) $(mkbib_DEPENDENCIES) $(EXTRA_mkbib_DEPENDENCIES)
+ @rm -f mkbib$(EXEEXT)
+ $(LINK) $(mkbib_OBJECTS) $(mkbib_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f src/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/caution.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/file_util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/mkbib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/scan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/search.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/update_file.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/view.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.l.c:
+ $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+.y.c:
+ $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
+install-applicationsDATA: $(applications_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(applications_DATA)'; test -n "$(applicationsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(applicationsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(applicationsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(applicationsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(applicationsdir)" || exit $$?; \
+ done
+
+uninstall-applicationsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(applications_DATA)'; test -n "$(applicationsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(applicationsdir)'; $(am__uninstall_files_from_dir)
+install-pixmapDATA: $(pixmap_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pixmapdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pixmapdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapdir)" || exit $$?; \
+ done
+
+uninstall-pixmapDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pixmapdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+ -rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod u+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(PROGRAMS) $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(applicationsdir)" "$(DESTDIR)$(pixmapdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f src/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f src/bib.c
+ -rm -f src/bib.h
+ -rm -f src/scan.c
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf src/$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-applicationsDATA install-pixmapDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf src/$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-applicationsDATA uninstall-binPROGRAMS \
+ uninstall-pixmapDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ cscopelist-recursive ctags-recursive install install-am \
+ install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-binPROGRAMS \
+ clean-cscope clean-generic cscope cscopelist \
+ cscopelist-recursive ctags ctags-recursive dist dist-all \
+ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-applicationsDATA \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pixmapDATA install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-applicationsDATA \
+ uninstall-binPROGRAMS uninstall-pixmapDATA
+
+# desktop file
+# (we can't use INTLTOOL_DESKTOP_RULE here due to lp#605826)
+%.desktop: %.desktop.in
+#DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/biblio/bibtex/utils/mkbib/NEWS b/biblio/bibtex/utils/mkbib/NEWS
new file mode 100644
index 0000000000..3a9e1b0d11
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/NEWS
@@ -0,0 +1,29 @@
+mkBiB 2.1 2013-06-12
+===============================================================================
+
+* Edit entry corrected, Ignore file added
+
+* Help and icons generated, images/ast_* deleted
+
+* help added
+
+* autogen updated
+
+* m4 Added
+
+* Help and desktop files Created
+
+* All cell editable, help messed
+
+
+mkBiB 2.0 2013-05-24
+===============================================================================
+
+* Parsing update
+
+* Updated parser
+
+
+mkBiB 2.0 2013-04-09
+===============================================================================
+* Initial Import
diff --git a/biblio/bibtex/utils/mkbib/README b/biblio/bibtex/utils/mkbib/README
new file mode 100644
index 0000000000..f33fbe442e
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/README
@@ -0,0 +1,17 @@
+mkBiB - A simple BiBTeX manager.
+
+++++
+Source tree:
+
+ data/
+ contains the .desktop file
+
+ help/
+ mkBiB reference
+
+ images/
+ m4/
+ po/
+ src/
+ contains the source code.
+Jun 12 14:09:52 BST 2013 RudraB <rudra.banerjee (at) aol.co.uk>
diff --git a/biblio/bibtex/utils/mkbib/aclocal.m4 b/biblio/bibtex/utils/mkbib/aclocal.m4
new file mode 100644
index 0000000000..9eba94647e
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/aclocal.m4
@@ -0,0 +1,1728 @@
+# generated automatically by aclocal 1.12.2 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+dnl GLIB_GSETTINGS
+dnl Defines GSETTINGS_SCHEMAS_INSTALL which controls whether
+dnl the schema should be compiled
+dnl
+
+AC_DEFUN([GLIB_GSETTINGS],
+[
+ m4_pattern_allow([AM_V_GEN])
+ AC_ARG_ENABLE(schemas-compile,
+ AS_HELP_STRING([--disable-schemas-compile],
+ [Disable regeneration of gschemas.compiled on install]),
+ [case ${enableval} in
+ yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE="" ;;
+ no) GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-schemas-compile]) ;;
+ esac])
+ AC_SUBST([GSETTINGS_DISABLE_SCHEMAS_COMPILE])
+ PKG_PROG_PKG_CONFIG([0.16])
+ AC_SUBST(gsettingsschemadir, [${datadir}/glib-2.0/schemas])
+ if test x$cross_compiling != xyes; then
+ GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
+ else
+ AC_PATH_PROG(GLIB_COMPILE_SCHEMAS, glib-compile-schemas)
+ fi
+ AC_SUBST(GLIB_COMPILE_SCHEMAS)
+ if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
+ ifelse([$2],,[AC_MSG_ERROR([glib-compile-schemas not found.])],[$2])
+ else
+ ifelse([$1],,[:],[$1])
+ fi
+
+ GSETTINGS_RULES='
+.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
+
+mostlyclean-am: clean-gsettings-schemas
+
+gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
+
+%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
+ $(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$${d}$< && touch [$]@
+
+all-am: $(gsettings_SCHEMAS:.xml=.valid)
+uninstall-am: uninstall-gsettings-schemas
+install-data-am: install-gsettings-schemas
+
+.SECONDARY: $(gsettings_SCHEMAS)
+
+install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
+ @$(NORMAL_INSTALL)
+ if test -n "$^"; then \
+ test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
+ $(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
+ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
+ fi
+
+uninstall-gsettings-schemas:
+ @$(NORMAL_UNINSTALL)
+ @list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
+ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
+
+clean-gsettings-schemas:
+ rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
+
+ifdef gsettings_ENUM_NAMESPACE
+$(gsettings__enum_file): $(gsettings_ENUM_FILES)
+ $(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead " <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod " <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail " </@type@>" --ftail "</schemalist>" [$]^ > [$]@.tmp && mv [$]@.tmp [$]@
+endif
+'
+ _GSETTINGS_SUBST(GSETTINGS_RULES)
+])
+
+dnl _GSETTINGS_SUBST(VARIABLE)
+dnl Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+AC_DEFUN([_GSETTINGS_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
+# Configure paths for GTK+
+# Owen Taylor 1997-2001
+
+dnl AM_PATH_GTK_3_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
+dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES,
+dnl pass to pkg-config
+dnl
+AC_DEFUN([AM_PATH_GTK_3_0],
+[dnl
+dnl Get the cflags and libraries from pkg-config
+dnl
+AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program],
+ , enable_gtktest=yes)
+
+ pkg_config_args=gtk+-3.0
+ for module in . $4
+ do
+ case "$module" in
+ gthread)
+ pkg_config_args="$pkg_config_args gthread-2.0"
+ ;;
+ esac
+ done
+
+ no_gtk=""
+
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+ if test x$PKG_CONFIG != xno ; then
+ if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
+ :
+ else
+ echo "*** pkg-config too old; version 0.7 or better required."
+ no_gtk=yes
+ PKG_CONFIG=no
+ fi
+ else
+ no_gtk=yes
+ fi
+
+ min_gtk_version=ifelse([$1], ,3.0.0,$1)
+ AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
+
+ if test x$PKG_CONFIG != xno ; then
+ ## don't try to run the test against uninstalled libtool libs
+ if $PKG_CONFIG --uninstalled $pkg_config_args; then
+ echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
+ enable_gtktest=no
+ fi
+
+ if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
+ :
+ else
+ no_gtk=yes
+ fi
+ fi
+
+ if test x"$no_gtk" = x ; then
+ GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
+ GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
+ gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_gtktest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $GTK_CFLAGS"
+ LIBS="$GTK_LIBS $LIBS"
+dnl
+dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
+dnl checks the results of pkg-config to some extent)
+dnl
+ rm -f conf.gtktest
+ AC_TRY_RUN([
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main ()
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ fclose (fopen ("conf.gtktest", "w"));
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = g_strdup("$min_gtk_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_gtk_version");
+ exit(1);
+ }
+
+ if ((gtk_major_version != $gtk_config_major_version) ||
+ (gtk_minor_version != $gtk_config_minor_version) ||
+ (gtk_micro_version != $gtk_config_micro_version))
+ {
+ printf("\n*** 'pkg-config --modversion gtk+-3.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
+ $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ printf ("*** was found! If pkg-config was correct, then it is best\n");
+ printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
+ printf("*** to point to the correct configuration files\n");
+ }
+ else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
+ (gtk_minor_version != GTK_MINOR_VERSION) ||
+ (gtk_micro_version != GTK_MICRO_VERSION))
+ {
+ printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
+ GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
+ printf("*** library (version %d.%d.%d)\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ }
+ else
+ {
+ if ((gtk_major_version > major) ||
+ ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
+ ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
+ major, minor, micro);
+ printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
+ printf("***\n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
+ printf("*** correct copy of pkg-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_gtk" = x ; then
+ AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** A new enough version of pkg-config was not found."
+ echo "*** See http://pkgconfig.sourceforge.net"
+ else
+ if test -f conf.gtktest ; then
+ :
+ else
+ echo "*** Could not run GTK+ test program, checking why..."
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $GTK_CFLAGS"
+ LIBS="$LIBS $GTK_LIBS"
+ AC_TRY_LINK([
+#include <gtk/gtk.h>
+#include <stdio.h>
+], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
+ echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(GTK_CFLAGS)
+ AC_SUBST(GTK_LIBS)
+ rm -f conf.gtktest
+])
+
+dnl GTK_CHECK_BACKEND(BACKEND-NAME [, MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Tests for BACKEND-NAME in the GTK targets list
+dnl
+AC_DEFUN([GTK_CHECK_BACKEND],
+[
+ pkg_config_args=ifelse([$1],,gtk+-3.0, gtk+-$1-3.0)
+ min_gtk_version=ifelse([$2],,3.0.0,$2)
+
+ AC_PATH_PROG(PKG_CONFIG, [pkg-config], [AC_MSG_ERROR([No pkg-config found])])
+
+ if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args ; then
+ target_found=yes
+ else
+ target_found=no
+ fi
+
+ if test "x$target_found" = "xno"; then
+ ifelse([$4],,[AC_MSG_ERROR([Backend $backend not found.])],[$4])
+ else
+ ifelse([$3],,[:],[$3])
+ fi
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+
+# PKG_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable pkgconfigdir as the location where a module
+# should install pkg-config .pc files. By default the directory is
+# $libdir/pkgconfig, but the default can be changed by passing
+# DIRECTORY. The user can override through the --with-pkgconfigdir
+# parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_INSTALLDIR
+
+
+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable noarch_pkgconfigdir as the location where a
+# module should install arch-independent pkg-config .pc files. By
+# default the directory is $datadir/pkgconfig, but the default can be
+# changed by passing DIRECTORY. The user can override through the
+# --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_NOARCH_INSTALLDIR
+
+AC_DEFUN([YELP_HELP_INIT],
+[
+AC_REQUIRE([AC_PROG_LN_S])
+m4_pattern_allow([AM_V_at])
+m4_pattern_allow([AM_V_GEN])
+m4_pattern_allow([AM_DEFAULT_VERBOSITY])
+AC_ARG_WITH([help-dir],
+ AC_HELP_STRING([--with-help-dir=DIR],
+ [path where help files are installed]),,
+ [with_help_dir='${datadir}/help'])
+HELP_DIR="$with_help_dir"
+AC_SUBST(HELP_DIR)
+
+AC_ARG_VAR([ITSTOOL], [Path to the `itstool` command])
+AC_CHECK_PROG([ITSTOOL], [itstool], [itstool])
+if test x"$ITSTOOL" = x; then
+ AC_MSG_ERROR([itstool not found])
+fi
+
+AC_ARG_VAR([XMLLINT], [Path to the `xmllint` command])
+AC_CHECK_PROG([XMLLINT], [xmllint], [xmllint])
+if test x"$XMLLINT" = x; then
+ AC_MSG_ERROR([xmllint not found])
+fi
+
+YELP_HELP_RULES='
+HELP_ID ?=
+HELP_POT ?=
+HELP_FILES ?=
+HELP_EXTRA ?=
+HELP_MEDIA ?=
+HELP_LINGUAS ?=
+
+_HELP_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),$(filter $(LINGUAS),$(HELP_LINGUAS)),$(HELP_LINGUAS))
+_HELP_POTFILE = $(if $(HELP_POT),$(HELP_POT),$(if $(HELP_ID),$(HELP_ID).pot))
+_HELP_POFILES = $(if $(HELP_ID),$(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).po))
+_HELP_MOFILES = $(patsubst %.po,%.mo,$(_HELP_POFILES))
+_HELP_C_FILES = $(foreach f,$(HELP_FILES),C/$(f))
+_HELP_C_EXTRA = $(foreach f,$(HELP_EXTRA),C/$(f))
+_HELP_C_MEDIA = $(foreach f,$(HELP_MEDIA),C/$(f))
+_HELP_LC_FILES = $(foreach lc,$(_HELP_LINGUAS),$(foreach f,$(HELP_FILES),$(lc)/$(f)))
+_HELP_LC_STAMPS = $(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).stamp)
+
+_HELP_DEFAULT_V = $(if $(AM_DEFAULT_VERBOSITY),$(AM_DEFAULT_VERBOSITY),1)
+_HELP_V = $(if $(V),$(V),$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE = $(_HELP_LC_VERBOSE_$(_HELP_V))
+_HELP_LC_VERBOSE_ = $(_HELP_LC_VERBOSE_$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE_0 = @echo " GEN "$(dir [$]@);
+
+all: $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(_HELP_LC_FILES) $(_HELP_POFILES)
+
+.PHONY: pot
+pot: $(_HELP_POTFILE)
+$(_HELP_POTFILE): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+ $(AM_V_GEN)$(ITSTOOL) -o "[$]@" $(_HELP_C_FILES)
+
+.PHONY: repo
+repo: $(_HELP_POTFILE)
+ $(AM_V_at)for po in $(_HELP_POFILES); do \
+ if test "x[$](_HELP_V)" = "x0"; then echo " GEN $${po}"; fi; \
+ msgmerge -q -o "$${po}" "$${po}" "$(_HELP_POTFILE)"; \
+ done
+
+$(_HELP_POFILES):
+ $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+ $(AM_V_at)if test ! -f "[$]@" -a -f "$(srcdir)/[$]@"; then cp "$(srcdir)/[$]@" "[$]@"; fi
+ $(AM_V_GEN)if ! test -f "[$]@"; then \
+ (cd "$(dir [$]@)" && \
+ $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \
+ mv "$(notdir [$]@).tmp" "$(notdir [$]@)"); \
+ else \
+ (cd "$(dir [$]@)" && \
+ $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \
+ msgmerge -o "$(notdir [$]@)" "$(notdir [$]@)" "$(notdir [$]@).tmp" && \
+ rm "$(notdir [$]@).tmp"); \
+ fi
+
+$(_HELP_MOFILES): %.mo: %.po
+ $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+ $(AM_V_GEN)msgfmt -o "[$]@" "$<"
+
+$(_HELP_LC_FILES): $(_HELP_LINGUAS)
+$(_HELP_LINGUAS): $(_HELP_LC_STAMPS)
+$(_HELP_LC_STAMPS): %.stamp: %.mo
+$(_HELP_LC_STAMPS): $(_HELP_C_FILES) $(_HELP_C_EXTRA)
+ $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+ $(_HELP_LC_VERBOSE)if test -d "C"; then d="../"; else d="$(abs_srcdir)/"; fi; \
+ mo="$(dir [$]@)$(patsubst %/$(notdir [$]@),%,[$]@).mo"; \
+ if test -f "$${mo}"; then mo="../$${mo}"; else mo="$(abs_srcdir)/$${mo}"; fi; \
+ (cd "$(dir [$]@)" && $(ITSTOOL) -m "$${mo}" $(foreach f,$(_HELP_C_FILES),$${d}/$(f))) && \
+ touch "[$]@"
+
+.PHONY: clean-help
+mostlyclean-am: $(if $(HELP_ID),clean-help)
+clean-help:
+ rm -f $(_HELP_LC_FILES) $(_HELP_LC_STAMPS) $(_HELP_MOFILES)
+
+EXTRA_DIST ?=
+EXTRA_DIST += $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).stamp)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po)
+EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f))))
+
+distdir: distdir-help-files
+distdir-help-files:
+ @for lc in C $(HELP_LINGUAS); do \
+ $(MKDIR_P) "$(distdir)/$$lc"; \
+ for file in $(HELP_FILES); do \
+ if test -f "$$lc/$$file"; then d=./; else d=$(srcdir)/; fi; \
+ cp -p "$$d$$lc/$$file" "$(distdir)/$$lc/" || exit 1; \
+ done; \
+ done; \
+
+.PHONY: check-help
+check: check-help
+check-help:
+ for lc in C $(_HELP_LINGUAS); do \
+ if test -d "$$lc"; \
+ then d=; \
+ xmlpath="$$lc"; \
+ else \
+ d="$(srcdir)/"; \
+ xmlpath="$$lc:$(srcdir)/$$lc"; \
+ fi; \
+ for page in $(HELP_FILES); do \
+ echo "$(XMLLINT) --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \
+ $(XMLLINT) --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \
+ done; \
+ done
+
+
+.PHONY: install-help
+install-data-am: $(if $(HELP_ID),install-help)
+install-help:
+ @for lc in C $(_HELP_LINGUAS); do \
+ $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \
+ done
+ @for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+ if test -f "$$lc/$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir`basename $$f`"; \
+ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir`basename $$f`" || exit 1; \
+ done; done
+ @for f in $(_HELP_C_EXTRA); do \
+ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+ if test -f "$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+ echo "$(INSTALL_DATA) $$d$$f $$helpdir`basename $$f`"; \
+ $(INSTALL_DATA) "$$d$$f" "$$helpdir`basename $$f`" || exit 1; \
+ done
+ @for f in $(HELP_MEDIA); do \
+ for lc in C $(_HELP_LINGUAS); do \
+ if test -f "$$lc$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ mdir=`dirname "$$f"`; \
+ if test "x$mdir" = "x."; then mdir=""; fi; \
+ if ! test -d "$$helpdir$$mdir"; then $(mkinstalldirs) "$$helpdir$$mdir"; fi; \
+ if test -f "$$d$$lc/$$f"; then \
+ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir$$f"; \
+ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir$$f" || exit 1; \
+ elif test "x$$lc" != "xC"; then \
+ echo "$(LN_S) -f $(HELP_DIR)/C/$(HELP_ID)/$$f $$helpdir$$f"; \
+ $(LN_S) -f "$(HELP_DIR)/C/$(HELP_ID)/$$f" "$$helpdir$$f" || exit 1; \
+ fi; \
+ done; \
+ done
+
+.PHONY: uninstall-help
+uninstall-am: $(if $(HELP_ID),uninstall-help)
+uninstall-help:
+ for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir`basename $$f`"; \
+ rm -f "$$helpdir`basename $$f`"; \
+ done; done
+ @for f in $(_HELP_C_EXTRA); do \
+ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir`basename $$f`"; \
+ rm -f "$$helpdir`basename $$f`"; \
+ done
+ @for f in $(HELP_MEDIA); do \
+ for lc in C $(_HELP_LINGUAS); do \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir$$f"; \
+ rm -f "$$helpdir$$f"; \
+ done; \
+ done;
+'
+AC_SUBST([YELP_HELP_RULES])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([YELP_HELP_RULES])])
+])
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.12'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.12.2], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.12.2])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 17
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 19
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated. For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Copyright (C) 1998-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of '-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/intltool.m4])
+m4_include([m4/nls.m4])
diff --git a/biblio/bibtex/utils/mkbib/autogen.sh b/biblio/bibtex/utils/mkbib/autogen.sh
new file mode 100755
index 0000000000..f31828b5f4
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/autogen.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+PKG_NAME="mkBiB"
+
+(test -f $srcdir/configure.ac) || {
+ echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+ echo " top-level gnome-dictionary directory"
+ exit 1
+}
+
+(test -f $srcdir/build-aux/ylwrap) || {
+ autoreconf --install
+}
+
+GNOMEDOC=`which yelp-build`
+ if test -z $GNOMEDOC; then
+echo "*** The tools to build the documentation are not found,"
+echo " please intall the yelp-tool package ***"
+exit 1
+fi
+
+which gnome-autogen.sh || {
+ echo "You need to install gnome-common package"
+ exit 1
+}
+
+USE_GNOME2_MACROS=1 . gnome-autogen.sh
diff --git a/biblio/bibtex/utils/mkbib/build-aux/compile b/biblio/bibtex/utils/mkbib/build-aux/compile
new file mode 100755
index 0000000000..7b4a9a7e1e
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/build-aux/compile
@@ -0,0 +1,342 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-03-05.13; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/mkbib/build-aux/depcomp b/biblio/bibtex/utils/mkbib/build-aux/depcomp
new file mode 100755
index 0000000000..debb6ffa3e
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/build-aux/depcomp
@@ -0,0 +1,707 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2012-03-27.16; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+ # However on
+ # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\':
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ # tcc 0.9.26 (FIXME still under development at the moment of writing)
+ # will emit a similar output, but also prepend the continuation lines
+ # with horizontal tabulation characters.
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form 'foo.o: dependent.h',
+ # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
+ sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
+ < "$tmpdepfile" > "$depfile"
+ sed '
+ s/[ '"$tab"'][ '"$tab"']*/ /g
+ s/^ *//
+ s/ *\\*$//
+ s/^[^:]*: *//
+ /^$/d
+ /:$/d
+ s/$/ :/
+ ' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test "$stat" = 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' "$nl" < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/mkbib/build-aux/install-sh b/biblio/bibtex/utils/mkbib/build-aux/install-sh
new file mode 100755
index 0000000000..377bb8687f
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/build-aux/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/mkbib/build-aux/missing b/biblio/bibtex/utils/mkbib/build-aux/missing
new file mode 100755
index 0000000000..9a5564823d
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/build-aux/missing
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, 'missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file 'aclocal.m4'
+ autoconf touch file 'configure'
+ autoheader touch file 'config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all 'Makefile.in' files
+ bison create 'y.tab.[ch]', if possible, from existing .[ch]
+ flex create 'lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create 'lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running '$TOOL --version' or '$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acinclude.m4' or '${configure_ac}'. You might want
+ to install the Automake and Perl packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified '${configure_ac}'. You might want to install the
+ Autoconf and GNU m4 packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acconfig.h' or '${configure_ac}'. You might want
+ to install the Autoconf and GNU m4 packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+ You might want to install the Automake and Perl packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: '$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get '$1' as part of Autoconf from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: '$1' $msg. You should only need it if
+ you modified a '.y' file. You may need the Bison package
+ in order for those modifications to take effect. You can get
+ Bison from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.l' file. You may need the Flex package
+ in order for those modifications to take effect. You can get
+ Flex from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ Help2man package in order for those modifications to take
+ effect. You can get Help2man from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.texi' or '.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy 'make' (AIX,
+ DU, IRIX). You might want to install the Texinfo package or
+ the GNU make package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: '$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the 'README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing '$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/mkbib/build-aux/ylwrap b/biblio/bibtex/utils/mkbib/build-aux/ylwrap
new file mode 100755
index 0000000000..6879d8debb
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/build-aux/ylwrap
@@ -0,0 +1,232 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2011-08-25.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case "$1" in
+ '')
+ echo "$0: No files given. Try '$0 --help' for more information." 1>&2
+ exit 1
+ ;;
+ --basedir)
+ basedir=$2
+ shift 2
+ ;;
+ -h|--h*)
+ cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+ INPUT is the input file
+ OUTPUT is one file PROG generates
+ DESIRED is the file we actually want instead of OUTPUT
+ PROGRAM is program to run
+ ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--v*)
+ echo "ylwrap $scriptversion"
+ exit $?
+ ;;
+esac
+
+get_dirname ()
+{
+ case $1 in
+ */*|*\\*) printf '%s\n' "$1" | sed -e 's,\([\\/]\)[^\\/]*$,\1,';;
+ # Otherwise, we want the empty string (not ".").
+ esac
+}
+
+quote_for_sed ()
+{
+ # FIXME: really we should care about more than '.' and '\'.
+ sed -e 's,[\\.],\\&,g'
+}
+
+# The input.
+input="$1"
+shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case "$input" in
+ [\\/]* | ?:[\\/]*)
+ # Absolute path; do nothing.
+ ;;
+ *)
+ # Relative path. Make it absolute.
+ input="`pwd`/$input"
+ ;;
+esac
+
+pairlist=
+while test "$#" -ne 0; do
+ if test "$1" = "--"; then
+ shift
+ break
+ fi
+ pairlist="$pairlist $1"
+ shift
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+ [\\/]* | ?:[\\/]*) ;;
+ *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines. But that might take us over the 14-char limit.
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+ 0) "$prog" "$input" ;;
+ *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+ set X $pairlist
+ shift
+ first=yes
+ # Since DOS filename conventions don't allow two dots,
+ # the DOS version of Bison writes out y_tab.c instead of y.tab.c
+ # and y_tab.h instead of y.tab.h. Test to see if this is the case.
+ y_tab_nodot="no"
+ if test -f y_tab.c || test -f y_tab.h; then
+ y_tab_nodot="yes"
+ fi
+
+ input_rx=`get_dirname "$input" | quote_for_sed`
+
+ while test "$#" -ne 0; do
+ from="$1"
+ # Handle y_tab.c and y_tab.h output by DOS
+ if test $y_tab_nodot = "yes"; then
+ if test $from = "y.tab.c"; then
+ from="y_tab.c"
+ else
+ if test $from = "y.tab.h"; then
+ from="y_tab.h"
+ fi
+ fi
+ fi
+ if test -f "$from"; then
+ # If $2 is an absolute path name, then just use that,
+ # otherwise prepend '../'.
+ case "$2" in
+ [\\/]* | ?:[\\/]*) target="$2";;
+ *) target="../$2";;
+ esac
+
+ # We do not want to overwrite a header file if it hasn't
+ # changed. This avoid useless recompilations. However the
+ # parser itself (the first file) should always be updated,
+ # because it is the destination of the .y.c rule in the
+ # Makefile. Divert the output of all other files to a temporary
+ # file so we can compare them to existing versions.
+ if test $first = no; then
+ realtarget="$target"
+ target="tmp-`echo $target | sed s/.*[\\/]//g`"
+ fi
+ # Munge "#line" or "#" directives.
+ # We don't want the resulting debug information to point at
+ # an absolute srcdir.
+ # We want to use the real output file name, not yy.lex.c for
+ # instance.
+ # We want the include guards to be adjusted too.
+ FROM=`echo "$from" | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+ TARGET=`echo "$2" | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+
+ sed -e "/^#/!b" -e "s,$input_rx,$input_sub_rx," -e "s,$from,$2," \
+ -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+
+ # Check whether header files must be updated.
+ if test $first = no; then
+ if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+ echo "$2" is unchanged
+ rm -f "$target"
+ else
+ echo updating "$2"
+ mv -f "$target" "$realtarget"
+ fi
+ fi
+ else
+ # A missing file is only an error for the first file. This
+ # is a blatant hack to let us support using "yacc -d". If -d
+ # is not specified, we don't want an error when the header
+ # file is "missing".
+ if test $first = yes; then
+ ret=1
+ fi
+ fi
+ shift
+ shift
+ first=no
+ done
+else
+ ret=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/mkbib/config.h.in b/biblio/bibtex/utils/mkbib/config.h.in
new file mode 100644
index 0000000000..46b33c085a
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/config.h.in
@@ -0,0 +1,32 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#undef YYTEXT_POINTER
diff --git a/biblio/bibtex/utils/mkbib/config.rpath b/biblio/bibtex/utils/mkbib/config.rpath
new file mode 100755
index 0000000000..c547c68825
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/config.rpath
@@ -0,0 +1,666 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2007 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix4* | aix5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/biblio/bibtex/utils/mkbib/configure b/biblio/bibtex/utils/mkbib/configure
new file mode 100755
index 0000000000..fb0149faea
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/configure
@@ -0,0 +1,7651 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for mkbib 2.1.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='mkbib'
+PACKAGE_TARNAME='mkbib'
+PACKAGE_VERSION='2.1'
+PACKAGE_STRING='mkbib 2.1'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+YELP_HELP_RULES
+XMLLINT
+ITSTOOL
+HELP_DIR
+LN_S
+GSETTINGS_RULES
+GLIB_COMPILE_SCHEMAS
+gsettingsschemadir
+GSETTINGS_DISABLE_SCHEMAS_COMPILE
+GTK_LIBS
+GTK_CFLAGS
+LIBSOUP_LIBS
+LIBSOUP_CFLAGS
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+YACC_EXISTS
+YFLAGS
+YACC
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+DATADIRNAME
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+ALL_LINGUAS
+INTLTOOL_PERL
+GMSGFMT
+MSGFMT
+MSGMERGE
+XGETTEXT
+INTLTOOL_POLICY_RULE
+INTLTOOL_SERVICE_RULE
+INTLTOOL_THEME_RULE
+INTLTOOL_SCHEMAS_RULE
+INTLTOOL_CAVES_RULE
+INTLTOOL_XML_NOMERGE_RULE
+INTLTOOL_XML_RULE
+INTLTOOL_KBD_RULE
+INTLTOOL_XAM_RULE
+INTLTOOL_UI_RULE
+INTLTOOL_SOUNDLIST_RULE
+INTLTOOL_SHEET_RULE
+INTLTOOL_SERVER_RULE
+INTLTOOL_PONG_RULE
+INTLTOOL_OAF_RULE
+INTLTOOL_PROP_RULE
+INTLTOOL_KEYS_RULE
+INTLTOOL_DIRECTORY_RULE
+INTLTOOL_DESKTOP_RULE
+intltool__v_merge_options_0
+intltool__v_merge_options_
+INTLTOOL_V_MERGE_OPTIONS
+INTLTOOL__v_MERGE_0
+INTLTOOL__v_MERGE_
+INTLTOOL_V_MERGE
+AM_DEFAULT_VERBOSITY
+INTLTOOL_EXTRACT
+INTLTOOL_MERGE
+INTLTOOL_UPDATE
+USE_NLS
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_nls
+enable_dependency_tracking
+enable_gtktest
+enable_schemas_compile
+with_help_dir
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+YACC
+YFLAGS
+LIBSOUP_CFLAGS
+LIBSOUP_LIBS
+ITSTOOL
+XMLLINT'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures mkbib 2.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/mkbib]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of mkbib 2.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-nls do not use Native Language Support
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --disable-gtktest do not try to compile and run a test GTK+ program
+ --disable-schemas-compile
+ Disable regeneration of gschemas.compiled on install
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-help-dir=DIR path where help files are installed
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ YACC The `Yet Another Compiler Compiler' implementation to use.
+ Defaults to the first program found out of: `bison -y', `byacc',
+ `yacc'.
+ YFLAGS The list of arguments that will be passed by default to $YACC.
+ This script will default YFLAGS to the empty string to avoid a
+ default value of `-d' given by some make applications.
+ LIBSOUP_CFLAGS
+ C compiler flags for LIBSOUP, overriding pkg-config
+ LIBSOUP_LIBS
+ linker flags for LIBSOUP, overriding pkg-config
+ ITSTOOL Path to the `itstool` command
+ XMLLINT Path to the `xmllint` command
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+mkbib configure 2.1
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by mkbib $as_me 2.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+am__api_version='1.12'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='mkbib'
+ VERSION='2.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+#GETTEXT_PACKAGE=AC_PACKAGE_NAME
+#AC_SUBST(GETTEXT_PACKAGE)
+#AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+
+case "$am__api_version" in
+ 1.01234)
+ as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5
+ ;;
+ *)
+ ;;
+esac
+
+INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.40.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+if test -n "0.40.0"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.40.0" >&5
+$as_echo_n "checking for intltool >= 0.40.0... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
+$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
+ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+ as_fn_error $? "Your intltool is too old. You need intltool 0.40.0 or later." "$LINENO" 5
+fi
+
+# Extract the first word of "intltool-update", so it can be a program name with args.
+set dummy intltool-update; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_UPDATE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE
+if test -n "$INTLTOOL_UPDATE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5
+$as_echo "$INTLTOOL_UPDATE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-merge", so it can be a program name with args.
+set dummy intltool-merge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_MERGE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_MERGE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE
+if test -n "$INTLTOOL_MERGE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5
+$as_echo "$INTLTOOL_MERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-extract", so it can be a program name with args.
+set dummy intltool-extract; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_EXTRACT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT
+if test -n "$INTLTOOL_EXTRACT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5
+$as_echo "$INTLTOOL_EXTRACT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+ as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5
+fi
+
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+ AM_DEFAULT_VERBOSITY=1
+fi
+
+
+INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
+INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
+INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;'
+
+
+
+
+INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
+intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
+intltool__v_merge_options_0='-q'
+
+
+
+
+ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@'
+ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@'
+else
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir'
+fi
+ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check the gettext tools to make sure they are GNU
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $XGETTEXT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+XGETTEXT=$ac_cv_path_XGETTEXT
+if test -n "$XGETTEXT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MSGMERGE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MSGMERGE=$ac_cv_path_MSGMERGE
+if test -n "$MSGMERGE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MSGFMT=$ac_cv_path_MSGFMT
+if test -n "$MSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+ as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+ as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_PERL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
+if test -n "$INTLTOOL_PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5
+$as_echo "$INTLTOOL_PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_PERL"; then
+ as_fn_error $? "perl not found" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5
+$as_echo_n "checking for perl >= 5.8.1... " >&6; }
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+ as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
+else
+ IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
+$as_echo "$IT_PERL_VERSION" >&6; }
+fi
+if test "x" != "xno-xml"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5
+$as_echo_n "checking for XML::Parser... " >&6; }
+ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+ else
+ as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5
+ fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ DATADIRNAME=share
+else
+ case $host in
+ *-*-solaris*)
+ ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
+if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then :
+ DATADIRNAME=share
+else
+ DATADIRNAME=lib
+fi
+
+ ;;
+ *)
+ DATADIRNAME=lib
+ ;;
+ esac
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+
+
+
+#AC_SUBST(GETTEXT_PACKAGE, mkbib)
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.22
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+# Checks for programs.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+if test "x$CC" != xcc; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+if test x"$YACC" = "xyacc"; then
+ # Extract the first word of "yacc", so it can be a program name with args.
+set dummy yacc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC_EXISTS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$YACC_EXISTS"; then
+ ac_cv_prog_YACC_EXISTS="$YACC_EXISTS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC_EXISTS="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_YACC_EXISTS" && ac_cv_prog_YACC_EXISTS="no"
+fi
+fi
+YACC_EXISTS=$ac_cv_prog_YACC_EXISTS
+if test -n "$YACC_EXISTS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC_EXISTS" >&5
+$as_echo "$YACC_EXISTS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test x"$YACC_EXISTS" != xyes; then
+ as_fn_error $? "bison/byacc/yacc not found.
+ Please install bison" "$LINENO" 5
+ fi
+fi
+
+for ac_prog in flex lex
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LEX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+ cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */
+ yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+ return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$LEX conftest.l") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_save_LIBS=$LIBS
+ ac_cv_lib_lex='none needed'
+ for ac_lib in '' -lfl -ll; do
+ LIBS="$ac_lib $ac_save_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ test "$ac_cv_lib_lex" != 'none needed' && break
+ done
+ LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+
+$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi
+if test "x$LEX" != xflex; then
+ as_fn_error $? "Please install flex before installing." "$LINENO" 5
+fi
+if test "x$LEXLIB" != "x-lfl"; then
+ if test "x$LEXLIB" != "x-ll" ; then
+ as_fn_error $? "Please install flex library before installing." "$LINENO" 5
+ fi
+fi
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSOUP" >&5
+$as_echo_n "checking for LIBSOUP... " >&6; }
+
+if test -n "$LIBSOUP_CFLAGS"; then
+ pkg_cv_LIBSOUP_CFLAGS="$LIBSOUP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBSOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBSOUP_LIBS"; then
+ pkg_cv_LIBSOUP_LIBS="$LIBSOUP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBSOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBSOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsoup-2.4 >= 2.26" 2>&1`
+ else
+ LIBSOUP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsoup-2.4 >= 2.26" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBSOUP_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (libsoup-2.4 >= 2.26) were not met:
+
+$LIBSOUP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBSOUP_CFLAGS
+and LIBSOUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBSOUP_CFLAGS
+and LIBSOUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ LIBSOUP_CFLAGS=$pkg_cv_LIBSOUP_CFLAGS
+ LIBSOUP_LIBS=$pkg_cv_LIBSOUP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+# Check whether --enable-gtktest was given.
+if test "${enable_gtktest+set}" = set; then :
+ enableval=$enable_gtktest;
+else
+ enable_gtktest=yes
+fi
+
+
+ pkg_config_args=gtk+-3.0
+ for module in .
+ do
+ case "$module" in
+ gthread)
+ pkg_config_args="$pkg_config_args gthread-2.0"
+ ;;
+ esac
+ done
+
+ no_gtk=""
+
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ if test x$PKG_CONFIG != xno ; then
+ if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
+ :
+ else
+ echo "*** pkg-config too old; version 0.7 or better required."
+ no_gtk=yes
+ PKG_CONFIG=no
+ fi
+ else
+ no_gtk=yes
+ fi
+
+ min_gtk_version=3.4.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ - version >= $min_gtk_version" >&5
+$as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; }
+
+ if test x$PKG_CONFIG != xno ; then
+ ## don't try to run the test against uninstalled libtool libs
+ if $PKG_CONFIG --uninstalled $pkg_config_args; then
+ echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
+ enable_gtktest=no
+ fi
+
+ if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
+ :
+ else
+ no_gtk=yes
+ fi
+ fi
+
+ if test x"$no_gtk" = x ; then
+ GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
+ GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
+ gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-3.0 | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ if test "x$enable_gtktest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $GTK_CFLAGS"
+ LIBS="$GTK_LIBS $LIBS"
+ rm -f conf.gtktest
+ if test "$cross_compiling" = yes; then :
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main ()
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ fclose (fopen ("conf.gtktest", "w"));
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = g_strdup("$min_gtk_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_gtk_version");
+ exit(1);
+ }
+
+ if ((gtk_major_version != $gtk_config_major_version) ||
+ (gtk_minor_version != $gtk_config_minor_version) ||
+ (gtk_micro_version != $gtk_config_micro_version))
+ {
+ printf("\n*** 'pkg-config --modversion gtk+-3.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
+ $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ printf ("*** was found! If pkg-config was correct, then it is best\n");
+ printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
+ printf("*** to point to the correct configuration files\n");
+ }
+ else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
+ (gtk_minor_version != GTK_MINOR_VERSION) ||
+ (gtk_micro_version != GTK_MICRO_VERSION))
+ {
+ printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
+ GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
+ printf("*** library (version %d.%d.%d)\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ }
+ else
+ {
+ if ((gtk_major_version > major) ||
+ ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
+ ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
+ gtk_major_version, gtk_minor_version, gtk_micro_version);
+ printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
+ major, minor, micro);
+ printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
+ printf("***\n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
+ printf("*** correct copy of pkg-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ no_gtk=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_gtk" = x ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5
+$as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; }
+ :
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** A new enough version of pkg-config was not found."
+ echo "*** See http://pkgconfig.sourceforge.net"
+ else
+ if test -f conf.gtktest ; then
+ :
+ else
+ echo "*** Could not run GTK+ test program, checking why..."
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $GTK_CFLAGS"
+ LIBS="$LIBS $GTK_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+
+int
+main ()
+{
+ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version));
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
+ echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ GTK_CFLAGS=""
+ GTK_LIBS=""
+ as_fn_error $? "Gtk+ 3.0.0 or higher required." "$LINENO" 5
+ fi
+
+
+ rm -f conf.gtktest
+
+
+
+
+ # Check whether --enable-schemas-compile was given.
+if test "${enable_schemas_compile+set}" = set; then :
+ enableval=$enable_schemas_compile; case ${enableval} in
+ yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE="" ;;
+ no) GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-schemas-compile" "$LINENO" 5 ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.16
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+ gsettingsschemadir=${datadir}/glib-2.0/schemas
+
+ if test x$cross_compiling != xyes; then
+ GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
+ else
+ # Extract the first word of "glib-compile-schemas", so it can be a program name with args.
+set dummy glib-compile-schemas; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GLIB_COMPILE_SCHEMAS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GLIB_COMPILE_SCHEMAS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GLIB_COMPILE_SCHEMAS="$GLIB_COMPILE_SCHEMAS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GLIB_COMPILE_SCHEMAS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+GLIB_COMPILE_SCHEMAS=$ac_cv_path_GLIB_COMPILE_SCHEMAS
+if test -n "$GLIB_COMPILE_SCHEMAS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_COMPILE_SCHEMAS" >&5
+$as_echo "$GLIB_COMPILE_SCHEMAS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+
+ if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
+ as_fn_error $? "glib-compile-schemas not found." "$LINENO" 5
+ else
+ :
+ fi
+
+ GSETTINGS_RULES='
+.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
+
+mostlyclean-am: clean-gsettings-schemas
+
+gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
+
+%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
+ $(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$${d}$< && touch $@
+
+all-am: $(gsettings_SCHEMAS:.xml=.valid)
+uninstall-am: uninstall-gsettings-schemas
+install-data-am: install-gsettings-schemas
+
+.SECONDARY: $(gsettings_SCHEMAS)
+
+install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
+ @$(NORMAL_INSTALL)
+ if test -n "$^"; then \
+ test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
+ $(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
+ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
+ fi
+
+uninstall-gsettings-schemas:
+ @$(NORMAL_UNINSTALL)
+ @list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
+ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
+
+clean-gsettings-schemas:
+ rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
+
+ifdef gsettings_ENUM_NAMESPACE
+$(gsettings__enum_file): $(gsettings_ENUM_FILES)
+ $(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead " <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod " <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail " </@type@>" --ftail "</schemalist>" $^ > $@.tmp && mv $@.tmp $@
+endif
+'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+
+
+
+
+
+# Check whether --with-help-dir was given.
+if test "${with_help_dir+set}" = set; then :
+ withval=$with_help_dir;
+else
+ with_help_dir='${datadir}/help'
+fi
+
+HELP_DIR="$with_help_dir"
+
+
+
+# Extract the first word of "itstool", so it can be a program name with args.
+set dummy itstool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ITSTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ITSTOOL"; then
+ ac_cv_prog_ITSTOOL="$ITSTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ITSTOOL="itstool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ITSTOOL=$ac_cv_prog_ITSTOOL
+if test -n "$ITSTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ITSTOOL" >&5
+$as_echo "$ITSTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test x"$ITSTOOL" = x; then
+ as_fn_error $? "itstool not found" "$LINENO" 5
+fi
+
+
+# Extract the first word of "xmllint", so it can be a program name with args.
+set dummy xmllint; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_XMLLINT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$XMLLINT"; then
+ ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_XMLLINT="xmllint"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+XMLLINT=$ac_cv_prog_XMLLINT
+if test -n "$XMLLINT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
+$as_echo "$XMLLINT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test x"$XMLLINT" = x; then
+ as_fn_error $? "xmllint not found" "$LINENO" 5
+fi
+
+YELP_HELP_RULES='
+HELP_ID ?=
+HELP_POT ?=
+HELP_FILES ?=
+HELP_EXTRA ?=
+HELP_MEDIA ?=
+HELP_LINGUAS ?=
+
+_HELP_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),$(filter $(LINGUAS),$(HELP_LINGUAS)),$(HELP_LINGUAS))
+_HELP_POTFILE = $(if $(HELP_POT),$(HELP_POT),$(if $(HELP_ID),$(HELP_ID).pot))
+_HELP_POFILES = $(if $(HELP_ID),$(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).po))
+_HELP_MOFILES = $(patsubst %.po,%.mo,$(_HELP_POFILES))
+_HELP_C_FILES = $(foreach f,$(HELP_FILES),C/$(f))
+_HELP_C_EXTRA = $(foreach f,$(HELP_EXTRA),C/$(f))
+_HELP_C_MEDIA = $(foreach f,$(HELP_MEDIA),C/$(f))
+_HELP_LC_FILES = $(foreach lc,$(_HELP_LINGUAS),$(foreach f,$(HELP_FILES),$(lc)/$(f)))
+_HELP_LC_STAMPS = $(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).stamp)
+
+_HELP_DEFAULT_V = $(if $(AM_DEFAULT_VERBOSITY),$(AM_DEFAULT_VERBOSITY),1)
+_HELP_V = $(if $(V),$(V),$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE = $(_HELP_LC_VERBOSE_$(_HELP_V))
+_HELP_LC_VERBOSE_ = $(_HELP_LC_VERBOSE_$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE_0 = @echo " GEN "$(dir $@);
+
+all: $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(_HELP_LC_FILES) $(_HELP_POFILES)
+
+.PHONY: pot
+pot: $(_HELP_POTFILE)
+$(_HELP_POTFILE): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+ $(AM_V_GEN)$(ITSTOOL) -o "$@" $(_HELP_C_FILES)
+
+.PHONY: repo
+repo: $(_HELP_POTFILE)
+ $(AM_V_at)for po in $(_HELP_POFILES); do \
+ if test "x$(_HELP_V)" = "x0"; then echo " GEN $${po}"; fi; \
+ msgmerge -q -o "$${po}" "$${po}" "$(_HELP_POTFILE)"; \
+ done
+
+$(_HELP_POFILES):
+ $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi
+ $(AM_V_at)if test ! -f "$@" -a -f "$(srcdir)/$@"; then cp "$(srcdir)/$@" "$@"; fi
+ $(AM_V_GEN)if ! test -f "$@"; then \
+ (cd "$(dir $@)" && \
+ $(ITSTOOL) -o "$(notdir $@).tmp" $(_HELP_C_FILES) && \
+ mv "$(notdir $@).tmp" "$(notdir $@)"); \
+ else \
+ (cd "$(dir $@)" && \
+ $(ITSTOOL) -o "$(notdir $@).tmp" $(_HELP_C_FILES) && \
+ msgmerge -o "$(notdir $@)" "$(notdir $@)" "$(notdir $@).tmp" && \
+ rm "$(notdir $@).tmp"); \
+ fi
+
+$(_HELP_MOFILES): %.mo: %.po
+ $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi
+ $(AM_V_GEN)msgfmt -o "$@" "$<"
+
+$(_HELP_LC_FILES): $(_HELP_LINGUAS)
+$(_HELP_LINGUAS): $(_HELP_LC_STAMPS)
+$(_HELP_LC_STAMPS): %.stamp: %.mo
+$(_HELP_LC_STAMPS): $(_HELP_C_FILES) $(_HELP_C_EXTRA)
+ $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi
+ $(_HELP_LC_VERBOSE)if test -d "C"; then d="../"; else d="$(abs_srcdir)/"; fi; \
+ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \
+ if test -f "$${mo}"; then mo="../$${mo}"; else mo="$(abs_srcdir)/$${mo}"; fi; \
+ (cd "$(dir $@)" && $(ITSTOOL) -m "$${mo}" $(foreach f,$(_HELP_C_FILES),$${d}/$(f))) && \
+ touch "$@"
+
+.PHONY: clean-help
+mostlyclean-am: $(if $(HELP_ID),clean-help)
+clean-help:
+ rm -f $(_HELP_LC_FILES) $(_HELP_LC_STAMPS) $(_HELP_MOFILES)
+
+EXTRA_DIST ?=
+EXTRA_DIST += $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).stamp)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po)
+EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f))))
+
+distdir: distdir-help-files
+distdir-help-files:
+ @for lc in C $(HELP_LINGUAS); do \
+ $(MKDIR_P) "$(distdir)/$$lc"; \
+ for file in $(HELP_FILES); do \
+ if test -f "$$lc/$$file"; then d=./; else d=$(srcdir)/; fi; \
+ cp -p "$$d$$lc/$$file" "$(distdir)/$$lc/" || exit 1; \
+ done; \
+ done; \
+
+.PHONY: check-help
+check: check-help
+check-help:
+ for lc in C $(_HELP_LINGUAS); do \
+ if test -d "$$lc"; \
+ then d=; \
+ xmlpath="$$lc"; \
+ else \
+ d="$(srcdir)/"; \
+ xmlpath="$$lc:$(srcdir)/$$lc"; \
+ fi; \
+ for page in $(HELP_FILES); do \
+ echo "$(XMLLINT) --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \
+ $(XMLLINT) --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \
+ done; \
+ done
+
+
+.PHONY: install-help
+install-data-am: $(if $(HELP_ID),install-help)
+install-help:
+ @for lc in C $(_HELP_LINGUAS); do \
+ $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \
+ done
+ @for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+ if test -f "$$lc/$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir`basename $$f`"; \
+ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir`basename $$f`" || exit 1; \
+ done; done
+ @for f in $(_HELP_C_EXTRA); do \
+ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+ if test -f "$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+ echo "$(INSTALL_DATA) $$d$$f $$helpdir`basename $$f`"; \
+ $(INSTALL_DATA) "$$d$$f" "$$helpdir`basename $$f`" || exit 1; \
+ done
+ @for f in $(HELP_MEDIA); do \
+ for lc in C $(_HELP_LINGUAS); do \
+ if test -f "$$lc$$f"; then d=; else d="$(srcdir)/"; fi; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ mdir=`dirname "$$f"`; \
+ if test "x$mdir" = "x."; then mdir=""; fi; \
+ if ! test -d "$$helpdir$$mdir"; then $(mkinstalldirs) "$$helpdir$$mdir"; fi; \
+ if test -f "$$d$$lc/$$f"; then \
+ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir$$f"; \
+ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir$$f" || exit 1; \
+ elif test "x$$lc" != "xC"; then \
+ echo "$(LN_S) -f $(HELP_DIR)/C/$(HELP_ID)/$$f $$helpdir$$f"; \
+ $(LN_S) -f "$(HELP_DIR)/C/$(HELP_ID)/$$f" "$$helpdir$$f" || exit 1; \
+ fi; \
+ done; \
+ done
+
+.PHONY: uninstall-help
+uninstall-am: $(if $(HELP_ID),uninstall-help)
+uninstall-help:
+ for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir`basename $$f`"; \
+ rm -f "$$helpdir`basename $$f`"; \
+ done; done
+ @for f in $(_HELP_C_EXTRA); do \
+ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir`basename $$f`"; \
+ rm -f "$$helpdir`basename $$f`"; \
+ done
+ @for f in $(HELP_MEDIA); do \
+ for lc in C $(_HELP_LINGUAS); do \
+ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+ echo "rm -f $$helpdir$$f"; \
+ rm -f "$$helpdir$$f"; \
+ done; \
+ done;
+'
+
+
+
+
+ac_config_files="$ac_config_files Makefile help/Makefile data/Makefile po/Makefile.in"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+ ac_config_commands="$ac_config_commands po/stamp-it"
+
+
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by mkbib $as_me 2.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+mkbib config.status 2.1
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
+ "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "po/stamp-it":C)
+ if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then
+ as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5
+ fi
+ rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp"
+ >"po/stamp-it.tmp"
+ sed '/^#/d
+ s/^[[].*] *//
+ /^[ ]*$/d
+ '"s|^| $ac_top_srcdir/|" \
+ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES"
+
+ sed '/^POTFILES =/,/[^\\]$/ {
+ /^POTFILES =/!d
+ r po/POTFILES
+ }
+ ' "po/Makefile.in" >"po/Makefile"
+ rm -f "po/Makefile.tmp"
+ mv "po/stamp-it.tmp" "po/stamp-it"
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/biblio/bibtex/utils/mkbib/configure.ac b/biblio/bibtex/utils/mkbib/configure.ac
new file mode 100644
index 0000000000..a15581f901
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/configure.ac
@@ -0,0 +1,56 @@
+AC_PREREQ(2.69)
+AC_INIT([mkbib], [2.1],,[mkbib])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([1.9.6 dist-bzip2 subdir-objects foreign])
+
+#GETTEXT_PACKAGE=AC_PACKAGE_NAME
+#AC_SUBST(GETTEXT_PACKAGE)
+#AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
+IT_PROG_INTLTOOL(0.40.0)
+#AC_SUBST(GETTEXT_PACKAGE, mkbib)
+PKG_PROG_PKG_CONFIG([0.22])
+
+# Checks for programs.
+AC_PROG_CC
+AM_PROG_CC_C_O
+
+AC_PROG_YACC
+if test x"$YACC" = "xyacc"; then
+ AC_CHECK_PROG([YACC_EXISTS], [yacc], [yes], [no])
+ if test x"$YACC_EXISTS" != xyes; then
+ AC_MSG_ERROR([[bison/byacc/yacc not found.
+ Please install bison]])
+ fi
+fi
+
+AM_PROG_LEX
+if test "x$LEX" != xflex; then
+ AC_MSG_ERROR([Please install flex before installing.])
+fi
+if test "x$LEXLIB" != "x-lfl"; then
+ if test "x$LEXLIB" != "x-ll" ; then
+ AC_MSG_ERROR([Please install flex library before installing.])
+ fi
+fi
+
+
+
+PKG_CHECK_MODULES(LIBSOUP, libsoup-2.4 >= 2.26)
+AC_SUBST(LIBSOUP_CFLAGS)
+AC_SUBST(LIBSOUP_LIBS)
+
+AM_PATH_GTK_3_0([3.4.0],,AC_MSG_ERROR([Gtk+ 3.0.0 or higher required.]))
+
+GLIB_GSETTINGS
+YELP_HELP_INIT
+
+AC_CONFIG_FILES([
+ Makefile
+ help/Makefile
+ data/Makefile
+ po/Makefile.in
+ ])
+AC_OUTPUT
diff --git a/biblio/bibtex/utils/mkbib/data/Makefile.am b/biblio/bibtex/utils/mkbib/data/Makefile.am
new file mode 100644
index 0000000000..1cdb42d166
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/data/Makefile.am
@@ -0,0 +1,12 @@
+gladedir = $(datadir)/mkbib/glade
+dist_glade_DATA = \
+ main-window.ui
+
+desktop_in_data=mkbib.desktop.in
+desktop_DATA=$(desktop_in_data:.desktop.in=.desktop)
+desktopdir=$(datadir)/applications
+@INTLTOOL_DESKTOP_RULE@
+
+CLEANFILES=$(desktop_DATA)
+
+EXTRA_DIST=mkbib.desktop.in
diff --git a/biblio/bibtex/utils/mkbib/data/Makefile.in b/biblio/bibtex/utils/mkbib/data/Makefile.in
new file mode 100644
index 0000000000..37e3a8a721
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/data/Makefile.in
@@ -0,0 +1,466 @@
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = data
+DIST_COMMON = $(dist_glade_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(gladedir)"
+DATA = $(desktop_DATA) $(dist_glade_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GMSGFMT = @GMSGFMT@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+ITSTOOL = @ITSTOOL@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XMLLINT = @XMLLINT@
+YACC = @YACC@
+YACC_EXISTS = @YACC_EXISTS@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+gladedir = $(datadir)/mkbib/glade
+dist_glade_DATA = \
+ main-window.ui
+
+desktop_in_data = mkbib.desktop.in
+desktop_DATA = $(desktop_in_data:.desktop.in=.desktop)
+desktopdir = $(datadir)/applications
+CLEANFILES = $(desktop_DATA)
+EXTRA_DIST = mkbib.desktop.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-desktopDATA: $(desktop_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \
+ done
+
+uninstall-desktopDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir)
+install-dist_gladeDATA: $(dist_glade_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_glade_DATA)'; test -n "$(gladedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(gladedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(gladedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gladedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(gladedir)" || exit $$?; \
+ done
+
+uninstall-dist_gladeDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_glade_DATA)'; test -n "$(gladedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(gladedir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(gladedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-desktopDATA install-dist_gladeDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-desktopDATA uninstall-dist_gladeDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-desktopDATA install-dist_gladeDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-desktopDATA uninstall-dist_gladeDATA
+
+@INTLTOOL_DESKTOP_RULE@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/biblio/bibtex/utils/mkbib/data/main-window.ui b/biblio/bibtex/utils/mkbib/data/main-window.ui
new file mode 100644
index 0000000000..5bebcb864d
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/data/main-window.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkBox" id="remote_vbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkEntry" id="entry_remote_url">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry_remote_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">URL:</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Name:</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Branches</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow7">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview_remote_branches">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/biblio/bibtex/utils/mkbib/data/mkbib.desktop.in b/biblio/bibtex/utils/mkbib/data/mkbib.desktop.in
new file mode 100644
index 0000000000..3f33747363
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/data/mkbib.desktop.in
@@ -0,0 +1,13 @@
+[Desktop Entry]
+_Name=mkBiB
+_GenericName=mkBiB
+_X-GNOME-FullName=BiBTeX Editor
+_Comment=Manage BiBTeX file
+_Keywords=Editor; BiBTeX
+Exec=mkbib
+Icon=mkbib
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;Utility;Clock;
+StartupNotify=true
+X-GNOME-UsesNotifications=true
diff --git a/biblio/bibtex/utils/mkbib/help/C/contacts.page b/biblio/bibtex/utils/mkbib/help/C/contacts.page
new file mode 100644
index 0000000000..221ce50504
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/contacts.page
@@ -0,0 +1,23 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="contacts">
+
+ <info>
+ <link type="guide" xref="index#troubleshooting" group="first"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc>INFO on <app>BiBTeX</app></desc>
+ </info>
+ <title>Contacts</title>
+ <terms>
+ <item>
+ <title><sys href="mailto:rudra.banerjee@aol.co.uk">Mail Me</sys></title>
+ <p>Contact Me to report bugs and suggested enhancements.</p>
+ </item>
+ </terms>
+</page>
diff --git a/biblio/bibtex/utils/mkbib/help/C/feature.page b/biblio/bibtex/utils/mkbib/help/C/feature.page
new file mode 100644
index 0000000000..1629ea6ed0
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/feature.page
@@ -0,0 +1,80 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="feature">
+
+ <info>
+ <link type="guide" xref="index#overview" group="#first"/>
+ <link type="next" xref="interface"/>
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc><app>mkBiB</app>: what it can and what it cann't</desc>
+ </info>
+
+ <title><app>mkBiB</app>: Features and Limitatioins</title>
+ <section id="features">
+ <title>Features</title>
+ <list>
+ <item>
+ <p>
+ A simple gui to generate and edit bibtex file.
+ </p>
+ </item>
+ <item>
+ <p>
+ Search google scholar from the same interface(Search in google scholar webpage, not withstanding their terms of usage,in my knowledge).
+ </p>
+ </item>
+ <item>
+ <p>
+ Include a complete bibtex entry.
+ </p>
+ </item>
+ </list>
+ </section>
+ <section id="limitations">
+ <title>Limitations</title>
+ <list>
+ <item>
+ <p>
+ <app>BiBTeX</app> can be used with many format. The most popular (very small number of subset) of those format is tested.
+ </p>
+ </item>
+ </list>
+ </section>
+ <section id="File_Type">
+ <title>Acceptable Entry Type</title>
+ <p>Below are two type of accpted and tested entry type</p>
+ <code mime="application/x-latex">
+ @article{RevModPhys.71.1253,
+ title = {Nobel Lecture: Electronic structure of
+ matter\char22{}wave functions and density functionals},
+ author = {Kohn, W.},
+ journal = {Rev. Mod. Phys.},
+ volume = {71},
+ issue = {5},
+ pages = {1253--1266},
+ year = {1999},
+ publisher = {American Physical Society}
+ }
+ </code>
+ <code>
+ @article{RevModPhys.71.1253,
+ title = "Nobel Lecture: Electronic structure of
+ matter\char22{}wave functions and density functionals",
+ author = "Kohn, W.",
+ journal = "Rev. Mod. Phys.",
+ volume = "71",
+ issue = "5",
+ pages = "1253--1266",
+ year = "1999",
+ publisher = "American Physical Society"
+ }
+ </code>
+ <p>When a entry is made by putting value to each key as available in left pane, it will produce a entry shown below.</p>
+ </section>
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/google.page b/biblio/bibtex/utils/mkbib/help/C/google.page
new file mode 100644
index 0000000000..a19742b6df
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/google.page
@@ -0,0 +1,26 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="google">
+
+ <info>
+ <link type="guide" xref="index#usage"/>
+ <link type="next" xref="keyboard-shortcuts"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+
+ <desc>Search <app>Google Scholar</app></desc>
+
+ </info>
+ <title>Search <app>Google Scholar</app></title>
+ <p>Right from the left pane, user can "Search Google Scholar". Just enter <gui>Author</gui>, <gui>Title(As Keyword)</gui> and <gui>Year(Optional)</gui> and hit <gui style="button">Search Google Scholar</gui>. The result will be shown in user's default web browser.
+ </p>
+ <note style="tip"><p>You can do better by turning bibtex link in google scholar setting "on"</p></note>
+
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/images/entry_pane.png b/biblio/bibtex/utils/mkbib/help/C/images/entry_pane.png
new file mode 100644
index 0000000000..a0bedb5972
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/images/entry_pane.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/help/C/images/left_pane.png b/biblio/bibtex/utils/mkbib/help/C/images/left_pane.png
new file mode 100644
index 0000000000..3ae1e0f9bf
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/images/left_pane.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/help/C/images/mkbib.png b/biblio/bibtex/utils/mkbib/help/C/images/mkbib.png
new file mode 100644
index 0000000000..d010b7e167
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/images/mkbib.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/help/C/images/right_pane.png b/biblio/bibtex/utils/mkbib/help/C/images/right_pane.png
new file mode 100644
index 0000000000..47eece605b
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/images/right_pane.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/help/C/index.page b/biblio/bibtex/utils/mkbib/help/C/index.page
new file mode 100644
index 0000000000..4988a3c1b3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/index.page
@@ -0,0 +1,30 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="guide" style="2column task"
+ id="index">
+
+ <info>
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ </info>
+
+ <title>
+ <media type="image" mime="image/png" src="images/mkbib.png"/> mkBiB Manual
+ </title>
+
+ <section id="overview" style="2column">
+ <title>Overview</title>
+ </section>
+
+
+ <section id="usage" style="2column">
+ <title>Using <app>mkBiB</app></title>
+ </section>
+
+ <section id="troubleshooting" style="2column">
+ <title>Common problems and solutions</title>
+ </section>
+</page>
diff --git a/biblio/bibtex/utils/mkbib/help/C/install.page b/biblio/bibtex/utils/mkbib/help/C/install.page
new file mode 100644
index 0000000000..b28b7ecf86
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/install.page
@@ -0,0 +1,58 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="install">
+
+ <info>
+ <link type="guide" xref="index#overview" group="#last"/>
+ <link type="next" xref="index#usage"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc>Installing <app>mkBiB</app>: general and distro specific instruction.</desc>
+ </info>
+
+ <title>Installing <app>mkBiB</app></title>
+ <section id="Download">
+ <title>Download</title>
+ <p>
+ The most recent updated will always be available from <link href="http://download.savannah.gnu.org/releases/mkbib/">SAVANNAH REPO</link>.
+ </p>
+ <p>
+ The stable version will be availavle from <link href="http://www.ctan.org/pkg/mkbib">CTAN REPO</link>
+ </p>
+
+
+ </section>
+ <section id="install_generic">
+ <title>Required Packages</title>
+ <list>
+ <item><p>GTK+-3</p></item>
+ <item><p>libsoup</p></item>
+ <item><p>intltool</p></item>
+ <item><p>yelp-tools</p></item>
+ <item><p>gnu-flex and bison</p></item>
+ </list>
+ </section>
+ <section id="distro">
+ <title>Instruction for specific distro</title>
+ <section id="fedora">
+ <title>Fedora 18</title>
+ <screen>yum install libsoup-devel.x86_64 intltool\
+ yelp-tools intltool gtk3-devel \
+ flex flex-devel bison</screen>
+ </section>
+ <section id="arch">
+ <title>Arch</title>
+ <note>
+ <p>
+ Instruction for Arch and Ubuntu will be updated soon.
+ </p>
+ </note>
+ </section>
+ </section>
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/interface.page b/biblio/bibtex/utils/mkbib/help/C/interface.page
new file mode 100644
index 0000000000..14d3ddab26
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/interface.page
@@ -0,0 +1,51 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="interface">
+
+ <info>
+ <link type="guide" xref="index#overview"/>
+<link type="next" xref="install"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc><app>mkBiB</app>'s Interface</desc>
+ </info>
+
+ <title><app>mkBiB</app> Interface</title>
+ <p><app>mkBiB</app> is an editor and viewer of <app>BiBTeX</app> file. The left hand pane is the main editor, and the right hand pane is the main viewer.</p>
+ <section id="left_pane">
+ <title>Left Pane</title>
+ <p>
+ This Left Pane is the main editing area of <app>mkBiB</app>
+ </p>
+ <media type="image" src="images/left_pane.png" width="240"/>
+ <section id="menu_bar">
+ <title><gui style="menuitem">Menu Bar</gui></title>
+ <p>
+ <gui style="group">Menu Bar</gui> contains standard <gui style="menu">File</gui>, <gui style="menu">Edit</gui> and <gui style="menu">Help</gui>.
+ </p>
+ <p>
+ <gui style="menuitem">File</gui> and <gui style="menuitem">Help</gui> contains traditional <gui style="menuitem">New</gui> , <gui style="menuitem">Open</gui>, <gui style="menuitem">Save</gui>, <gui style="menuitem">Save As</gui> and <gui style="menuitem">About</gui> and <gui style="menuitem">Help</gui> item with their traditional keyboard-shortcuts as listed <code xref="keyboard-shortcuts">here</code>.
+ </p>
+ </section>
+ <section id="entry_bar">
+ <title>Entries</title>
+ <p>This part is used to create a single bibtex entry giving its value one by one. When finished, press <gui style="button">Create</gui> button to create a single bibtex entry.</p>
+ <note style="tip">
+ <p>
+ An entry can be generated using <keyseq><key>Alt</key><key>E</key></keyseq> or <guiseq><gui style="menu">Edit</gui><gui style="menuitem">Edit</gui></guiseq> which will open a empty editor to input a complete entry.
+ </p>
+ </note>
+ </section>
+ </section>
+ <section id="right_pane">
+ <title>Right Pane</title>
+ <p>Right Pane the viewer of the <gui>BiBTeX</gui> and the inline editor of visible columns.</p>
+ <media type="image" src="images/right_pane.png" width="240"/>
+ </section>
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/introduction.page b/biblio/bibtex/utils/mkbib/help/C/introduction.page
new file mode 100644
index 0000000000..e60a8f8069
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/introduction.page
@@ -0,0 +1,25 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="introduction">
+
+ <info>
+ <link type="guide" xref="index"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+
+ <desc>What is <app>mkBiB</app>?</desc>
+
+ </info>
+
+ <title>Introduction</title>
+ <p><app>mkBiB</app> is a BibTeX manager.
+ User can creat, manage and edit a new or existing bibtex file.
+ User can enter each field separately or an complete entry.
+ </p>
+</page>
diff --git a/biblio/bibtex/utils/mkbib/help/C/keyboard-shortcuts.page b/biblio/bibtex/utils/mkbib/help/C/keyboard-shortcuts.page
new file mode 100644
index 0000000000..ad81fff1ec
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/keyboard-shortcuts.page
@@ -0,0 +1,90 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:ui="http://projectmallard.org/experimental/ui/"
+ type="task"
+ id="keyboard-shortcuts">
+
+ <info>
+ <revision pkgversion="3.8" version="0.1" date="2013-03-29" status="candidate"/>
+ <link type="guide" xref="index#usage" group="#last"/>
+ <link type="next" xref="index#troubleshooting"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+
+ <desc>Use keyboard shortcuts to work with <app>mkBiB</app> more efficiently.</desc>
+
+ </info>
+
+ <title>Keyboard shortcuts</title>
+
+ <p>Keyboard shortcuts are combinations of keys that you can use instead of
+ navigating through the menu. The following shortcuts are available:</p>
+
+ <table rules="rows" frame="top bottom" ui:expanded="yes">
+ <title><gui style="guiitem">File</gui></title>
+ <thead>
+ <tr>
+ <td><p>Action</p></td>
+ <td><p>Shortcut</p></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><p>Open A New File</p></td>
+ <td><p><keyseq><key>Ctrl</key><key>N</key></keyseq></p></td>
+ </tr>
+ <tr>
+ <td><p>Open An Existing File</p></td>
+ <td><p><keyseq><key>Ctrl</key><key>O</key></keyseq></p></td>
+ </tr>
+ <tr>
+ <td><p>Save File</p></td>
+ <td><p><keyseq><key>Ctrl</key><key>S</key></keyseq></p></td>
+ </tr>
+ <tr>
+ <td><p>Save As A New/Existing File</p></td>
+ <td><p><keyseq><key>Shift</key><key>Ctrl</key><key>S</key></keyseq></p></td>
+ </tr>
+ <tr>
+ <td><p>Quit</p></td>
+ <td><p><keyseq><key>Ctrl</key><key>Q</key></keyseq></p></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <table rules="rows" frame="top bottom" ui:expanded="yes">
+ <title>Edit</title>
+ <thead>
+ <tr>
+ <td><p>Action</p></td>
+ <td><p>Shortcut</p></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><p>Enter A Full Entry</p></td>
+ <td><p><keyseq><key>Alt</key><key>E</key></keyseq></p></td>
+ </tr>
+ </tbody>
+ </table>
+ <table rules="rows" frame="top bottom" ui:expanded="yes">
+ <title>Help</title>
+ <thead>
+ <tr>
+ <td><p>Action</p></td>
+ <td><p>Shortcut</p></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><p>Help (This Guide)</p></td>
+ <td><p><key>F1</key></p></td>
+ </tr>
+ </tbody>
+ </table>
+
+</page>
diff --git a/biblio/bibtex/utils/mkbib/help/C/legal.xml b/biblio/bibtex/utils/mkbib/help/C/legal.xml
new file mode 100644
index 0000000000..aff1f5a21a
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/legal.xml
@@ -0,0 +1,3 @@
+<license xmlns="http://projectmallard.org/1.0/">
+<p> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is available at <link href="http://www.gnu.org/licenses/fdl-1.3.txt">GNU Free Documentation License</link> </p>
+</license>
diff --git a/biblio/bibtex/utils/mkbib/help/C/new.page b/biblio/bibtex/utils/mkbib/help/C/new.page
new file mode 100644
index 0000000000..d179780b88
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/new.page
@@ -0,0 +1,33 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="new-file">
+
+ <info>
+ <link type="guide" xref="index#usage" group="first"/>
+<link type="next" xref="old-file"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc>Creating a new <app>BiBTeX</app> using <app>mkBiB</app></desc>
+ </info>
+
+ <title>Creating a new <app>BiBTeX</app></title>
+ <p>An antry can be created either by putting values to cell as described in <code xref="#new_cell">New Cell</code> or a complete entry, as described in <code xref="#new_entry">New Entry</code> below.</p>
+ <section id="new_cell">
+ <title>New Cell</title>
+ <p>Entries are adden in the left pane. The <gui style="button">Entry Type</gui> and <gui style="button">bibkey</gui> is compulsury.
+ </p>
+ <media type="image" src="images/left_pane.png" width="200"/>
+ </section>
+ <section id="new_entry">
+ <title>New Entry</title>
+ <p>A complete entry can be added using <guiseq><gui>Edit</gui><gui>Edit</gui></guiseq>
+ Enter the entry in the pane opened, and click <gui style="button">Create</gui> to create the entry.
+ </p><media type="image" src="images/entry_pane.png" width="200"/>
+ </section>
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/old.page b/biblio/bibtex/utils/mkbib/help/C/old.page
new file mode 100644
index 0000000000..355c1d3b8f
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/old.page
@@ -0,0 +1,41 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="old-file">
+
+ <info>
+ <link type="guide" xref="index#usage"/>
+<link type="next" xref="google"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+
+ <desc>Manageing an existing <app>BiBTeX</app> using <app>mkBiB</app></desc>
+
+ </info>
+ <title>Manageing an existing <app>BiBTeX</app></title>
+ <p>
+ Open an existing <app>BiBTeX</app> follows standard method of openning files i.e. <keyseq><key>Ctrl</key><key>O</key></keyseq> or <guiseq><gui>File</gui><gui>Open</gui></guiseq> in <gui style="menuitem">menubar</gui>.
+ </p>
+ <p>Manageing an existing <app>BiBTeX</app> file using <app>mkBiB</app> can be done in two way. </p>
+ <section id="edit_cell">
+ <title>Editing The View Pane</title>
+ <p>
+ All the elements visible in the right pane can be edited by double clicking on the corresponding cell.
+ </p>
+ <note style="warning">
+ <p>Only visible columns, i.e. 5 columns can be edited. For all other columns, you have to do it manually, using a Text Editor.</p>
+ </note>
+ </section>
+ <section id="new-cell">
+ <title>New Entry In Existing File</title>
+ <p>
+ You can enter new entries in existing <app>BiBTeX</app> as described <code xref="new-file#new_cell">here</code> or <code xref="new-file#new_entry">here</code>.
+ </p>
+ </section>
+</page>
+
diff --git a/biblio/bibtex/utils/mkbib/help/C/trouble.page b/biblio/bibtex/utils/mkbib/help/C/trouble.page
new file mode 100644
index 0000000000..3c99555cf4
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/C/trouble.page
@@ -0,0 +1,28 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="bibref">
+
+ <info>
+ <link type="guide" xref="index#troubleshooting" group="first"/>
+ <link type="next" xref="contacts"/>
+
+ <credit type="author copyright">
+ <name>Rudra Banerjee</name>
+ <email>rudra.banerjee@aol.co.uk</email>
+ <years>2013</years>
+ </credit>
+ <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
+ <desc>INFO on <app>BiBTeX</app></desc>
+ </info>
+ <title>Usefule <app>BiBTeX</app> links</title>
+ <terms>
+ <item>
+ <title><sys href="http://bibtex.org">bibtex.org</sys></title>
+ <p>Here you will find everything you need to know about <app>BiBTeX</app>, or such the website clames.</p>
+ </item>
+ <item>
+ <title><sys href="http://www.cs.stir.ac.uk/~kjt/software/latex/showbst.html">Ken Turnet's page on <app>BiBTeX</app></sys></title>
+ <p>A collection of most used <app>BiBTeX</app> style's output. Very Helpful.</p>
+ </item>
+ </terms>
+</page>
diff --git a/biblio/bibtex/utils/mkbib/help/Makefile.am b/biblio/bibtex/utils/mkbib/help/Makefile.am
new file mode 100644
index 0000000000..86bf9ce87c
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/Makefile.am
@@ -0,0 +1,28 @@
+@YELP_HELP_RULES@
+
+HELP_ID = mkbib
+
+HELP_FILES = \
+ contacts.page \
+ feature.page \
+ google.page \
+ index.page \
+ install.page \
+ interface.page \
+ introduction.page \
+ keyboard-shortcuts.page \
+ legal.xml \
+ new.page \
+ old.page \
+ trouble.page
+
+HELP_MEDIA = \
+ images/mkbib.png \
+ images/left_pane.png \
+ images/right_pane.png \
+ images/entry_pane.png
+
+HELP_LINGUAS =
+
+DISTCLEANFILES = \
+ Makefile.in
diff --git a/biblio/bibtex/utils/mkbib/help/Makefile.in b/biblio/bibtex/utils/mkbib/help/Makefile.in
new file mode 100644
index 0000000000..06bc155f98
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/help/Makefile.in
@@ -0,0 +1,404 @@
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = help
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GMSGFMT = @GMSGFMT@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@
+INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
+INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
+INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
+ITSTOOL = @ITSTOOL@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@
+LIBSOUP_LIBS = @LIBSOUP_LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XMLLINT = @XMLLINT@
+YACC = @YACC@
+YACC_EXISTS = @YACC_EXISTS@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+intltool__v_merge_options_ = @intltool__v_merge_options_@
+intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HELP_ID = mkbib
+HELP_FILES = \
+ contacts.page \
+ feature.page \
+ google.page \
+ index.page \
+ install.page \
+ interface.page \
+ introduction.page \
+ keyboard-shortcuts.page \
+ legal.xml \
+ new.page \
+ old.page \
+ trouble.page
+
+HELP_MEDIA = \
+ images/mkbib.png \
+ images/left_pane.png \
+ images/right_pane.png \
+ images/entry_pane.png
+
+HELP_LINGUAS =
+DISTCLEANFILES = \
+ Makefile.in
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign help/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign help/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+@YELP_HELP_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/biblio/bibtex/utils/mkbib/images/icon.png b/biblio/bibtex/utils/mkbib/images/icon.png
new file mode 100644
index 0000000000..f460a7cb62
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/images/icon.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/images/icon.svg b/biblio/bibtex/utils/mkbib/images/icon.svg
new file mode 100644
index 0000000000..286641abe3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/images/icon.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="130"
+ height="80"
+ id="svg3868">
+ <defs
+ id="defs3870" />
+ <metadata
+ id="metadata3873">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-972.36218)"
+ id="layer1">
+ <rect
+ width="130"
+ height="80"
+ x="0"
+ y="0"
+ transform="translate(0,972.36218)"
+ id="rect3878"
+ style="color:#000000;fill:#ffffff;fill-opacity:0.94736843;fill-rule:nonzero;stroke:#e21400;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ x="0"
+ y="1047.3622"
+ id="text4404"
+ xml:space="preserve"
+ style="font-size:90px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="0"
+ y="1047.3622"
+ id="tspan4406">B<tspan
+ id="tspan4408"
+ style="font-size:60px">IB</tspan></tspan></text>
+ <text
+ x="-11.537002"
+ y="70.891838"
+ transform="translate(0,972.36218)"
+ id="text4410"
+ xml:space="preserve"
+ style="font-size:90px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="-11.537002"
+ y="70.891838"
+ id="tspan4412"></tspan></text>
+ <text
+ x="68.226433"
+ y="1003.8713"
+ transform="scale(0.99743651,1.0025701)"
+ id="text4414"
+ xml:space="preserve"
+ style="font-size:38.63040543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#800000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="68.226433"
+ y="1003.8713"
+ id="tspan4416">mk</tspan></text>
+ </g>
+</svg>
diff --git a/biblio/bibtex/utils/mkbib/images/mkbib.png b/biblio/bibtex/utils/mkbib/images/mkbib.png
new file mode 100644
index 0000000000..d010b7e167
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/images/mkbib.png
Binary files differ
diff --git a/biblio/bibtex/utils/mkbib/images/mkbib.svg b/biblio/bibtex/utils/mkbib/images/mkbib.svg
new file mode 100644
index 0000000000..286641abe3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/images/mkbib.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="130"
+ height="80"
+ id="svg3868">
+ <defs
+ id="defs3870" />
+ <metadata
+ id="metadata3873">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-972.36218)"
+ id="layer1">
+ <rect
+ width="130"
+ height="80"
+ x="0"
+ y="0"
+ transform="translate(0,972.36218)"
+ id="rect3878"
+ style="color:#000000;fill:#ffffff;fill-opacity:0.94736843;fill-rule:nonzero;stroke:#e21400;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ x="0"
+ y="1047.3622"
+ id="text4404"
+ xml:space="preserve"
+ style="font-size:90px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="0"
+ y="1047.3622"
+ id="tspan4406">B<tspan
+ id="tspan4408"
+ style="font-size:60px">IB</tspan></tspan></text>
+ <text
+ x="-11.537002"
+ y="70.891838"
+ transform="translate(0,972.36218)"
+ id="text4410"
+ xml:space="preserve"
+ style="font-size:90px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="-11.537002"
+ y="70.891838"
+ id="tspan4412"></tspan></text>
+ <text
+ x="68.226433"
+ y="1003.8713"
+ transform="scale(0.99743651,1.0025701)"
+ id="text4414"
+ xml:space="preserve"
+ style="font-size:38.63040543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:350%;letter-spacing:0px;word-spacing:0px;fill:#800000;fill-opacity:1;stroke:none;font-family:URW Bookman L;-inkscape-font-specification:URW Bookman L"><tspan
+ x="68.226433"
+ y="1003.8713"
+ id="tspan4416">mk</tspan></text>
+ </g>
+</svg>
diff --git a/biblio/bibtex/utils/mkbib/m4/codeset.m4 b/biblio/bibtex/utils/mkbib/m4/codeset.m4
new file mode 100644
index 0000000000..223955b454
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/codeset.m4
@@ -0,0 +1,21 @@
+# codeset.m4 serial 2 (gettext-0.16)
+dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+ [AC_TRY_LINK([#include <langinfo.h>],
+ [char* cs = nl_langinfo(CODESET); return !cs;],
+ am_cv_langinfo_codeset=yes,
+ am_cv_langinfo_codeset=no)
+ ])
+ if test $am_cv_langinfo_codeset = yes; then
+ AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/gettext.m4 b/biblio/bibtex/utils/mkbib/m4/gettext.m4
new file mode 100644
index 0000000000..c9ae1f7de8
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/gettext.m4
@@ -0,0 +1,381 @@
+# gettext.m4 serial 60 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH(included-gettext,
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE(ENABLE_NLS, 1,
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE(HAVE_GETTEXT, 1,
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE(HAVE_DCGETTEXT, 1,
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
+ AC_SUBST(USE_INCLUDED_LIBINTL)
+ AC_SUBST(CATOBJEXT)
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST(INTLOBJS)
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST(INTLLIBS)
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST(LIBINTL)
+ AC_SUBST(LTLIBINTL)
+ AC_SUBST(POSUB)
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/biblio/bibtex/utils/mkbib/m4/glibc2.m4 b/biblio/bibtex/utils/mkbib/m4/glibc2.m4
new file mode 100644
index 0000000000..e8f5bfe6ed
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/glibc2.m4
@@ -0,0 +1,30 @@
+# glibc2.m4 serial 1
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.0 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gt_GLIBC2],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer,
+ ac_cv_gnu_library_2,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+ Lucky GNU user
+ #endif
+#endif
+ ],
+ ac_cv_gnu_library_2=yes,
+ ac_cv_gnu_library_2=no)
+ ]
+ )
+ AC_SUBST(GLIBC2)
+ GLIBC2="$ac_cv_gnu_library_2"
+ ]
+)
diff --git a/biblio/bibtex/utils/mkbib/m4/glibc21.m4 b/biblio/bibtex/utils/mkbib/m4/glibc21.m4
new file mode 100644
index 0000000000..d95fd98613
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/glibc21.m4
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+ ac_cv_gnu_library_2_1,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#endif
+ ],
+ ac_cv_gnu_library_2_1=yes,
+ ac_cv_gnu_library_2_1=no)
+ ]
+ )
+ AC_SUBST(GLIBC21)
+ GLIBC21="$ac_cv_gnu_library_2_1"
+ ]
+)
diff --git a/biblio/bibtex/utils/mkbib/m4/gtk-doc.m4 b/biblio/bibtex/utils/mkbib/m4/gtk-doc.m4
new file mode 100644
index 0000000000..0ada151935
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/gtk-doc.m4
@@ -0,0 +1,67 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+ AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+
+ dnl check for tools we added during development
+ AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check])
+ AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
+ AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
+
+ dnl for overriding the documentation installation directory
+ AC_ARG_WITH([html-dir],
+ AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+ [with_html_dir='${datadir}/gtk-doc/html'])
+ HTML_DIR="$with_html_dir"
+ AC_SUBST([HTML_DIR])
+
+ dnl enable/disable documentation building
+ AC_ARG_ENABLE([gtk-doc],
+ AS_HELP_STRING([--enable-gtk-doc],
+ [use gtk-doc to build documentation [[default=no]]]),,
+ [enable_gtk_doc=no])
+
+ if test x$enable_gtk_doc = xyes; then
+ ifelse([$1],[],
+ [PKG_CHECK_EXISTS([gtk-doc],,
+ AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+ [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+ AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))])
+ dnl don't check for glib if we build glib
+ if test "x$PACKAGE_NAME" != "xglib"; then
+ dnl don't fail if someone does not have glib
+ PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,)
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to build gtk-doc documentation])
+ AC_MSG_RESULT($enable_gtk_doc)
+
+ dnl enable/disable output formats
+ AC_ARG_ENABLE([gtk-doc-html],
+ AS_HELP_STRING([--enable-gtk-doc-html],
+ [build documentation in html format [[default=yes]]]),,
+ [enable_gtk_doc_html=yes])
+ AC_ARG_ENABLE([gtk-doc-pdf],
+ AS_HELP_STRING([--enable-gtk-doc-pdf],
+ [build documentation in pdf format [[default=no]]]),,
+ [enable_gtk_doc_pdf=no])
+
+ if test -z "$GTKDOC_MKPDF"; then
+ enable_gtk_doc_pdf=no
+ fi
+
+
+ AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+ AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
+ AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
+ AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+ AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/iconv.m4 b/biblio/bibtex/utils/mkbib/m4/iconv.m4
new file mode 100644
index 0000000000..66bc76f48c
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/iconv.m4
@@ -0,0 +1,180 @@
+# iconv.m4 serial AM6 (gettext-0.17)
+dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_func_iconv=yes)
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes)
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
+ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE(HAVE_ICONV, 1,
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST(LIBICONV)
+ AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL(am_cv_proto_iconv, [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([$]{ac_t:-
+ }[$]am_cv_proto_iconv)
+ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/intdiv0.m4 b/biblio/bibtex/utils/mkbib/m4/intdiv0.m4
new file mode 100644
index 0000000000..8c8a67084f
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intdiv0.m4
@@ -0,0 +1,84 @@
+# intdiv0.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+ AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+ gt_cv_int_divbyzero_sigfpe,
+ [
+ gt_cv_int_divbyzero_sigfpe=
+changequote(,)dnl
+ case "$host_os" in
+ macos* | darwin[6-9]* | darwin[1-9][0-9]*)
+ # On MacOS X 10.2 or newer, just assume the same as when cross-
+ # compiling. If we were to perform the real test, 1 Crash Report
+ # dialog window would pop up.
+ case "$host_cpu" in
+ i[34567]86 | x86_64)
+ gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
+ esac
+ ;;
+ esac
+changequote([,])dnl
+ if test -z "$gt_cv_int_divbyzero_sigfpe"; then
+ AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+sigfpe_handler (int sig)
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
+#endif
+
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+ [
+ # Guess based on the CPU.
+changequote(,)dnl
+ case "$host_cpu" in
+ alpha* | i[34567]86 | x86_64 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ esac
+changequote([,])dnl
+ ])
+ fi
+ ])
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+ AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+ [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/intl.m4 b/biblio/bibtex/utils/mkbib/m4/intl.m4
new file mode 100644
index 0000000000..934408bb90
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intl.m4
@@ -0,0 +1,285 @@
+# intl.m4 serial 8 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+AC_PREREQ(2.52)
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([gt_GLIBC2])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([gl_VISIBILITY])dnl
+ AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
+ AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
+ AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+ AC_REQUIRE([gt_TYPE_WINT_T])dnl
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gt_TYPE_INTMAX_T])
+ AC_REQUIRE([gt_PRINTF_POSIX])
+ AC_REQUIRE([gl_GLIBC21])dnl
+ AC_REQUIRE([gl_XSIZE])dnl
+ AC_REQUIRE([gt_INTL_MACOSX])dnl
+
+ AC_CHECK_TYPE([ptrdiff_t], ,
+ [AC_DEFINE([ptrdiff_t], [long],
+ [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+ ])
+ AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
+ AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen])
+
+ dnl Use the _snprintf function only if it is declared (because on NetBSD it
+ dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+ gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+ gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+ dnl Use the *_unlocked functions only if they are declared.
+ dnl (because some of them were defined without being declared in Solaris
+ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+ dnl on Solaris 2.5.1 to run on Solaris 2.6).
+ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+ gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+ AC_SUBST([HAVE_POSIX_PRINTF])
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+ AC_SUBST([HAVE_ASPRINTF])
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+ AC_SUBST([HAVE_SNPRINTF])
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+ AC_SUBST([HAVE_WPRINTF])
+
+ AM_LANGINFO_CODESET
+ gt_LC_MESSAGES
+
+ dnl Compilation on mingw and Cygwin needs special Makefile rules, because
+ dnl 1. when we install a shared library, we must arrange to export
+ dnl auxiliary pointer variables for every exported variable,
+ dnl 2. when we install a shared library and a static library simultaneously,
+ dnl the include file specifies __declspec(dllimport) and therefore we
+ dnl must arrange to define the auxiliary pointer variables for the
+ dnl exported variables _also_ in the static library.
+ if test "$enable_shared" = yes; then
+ case "$host_os" in
+ mingw* | cygwin*) is_woe32dll=yes ;;
+ *) is_woe32dll=no ;;
+ esac
+ else
+ is_woe32dll=no
+ fi
+ WOE32DLL=$is_woe32dll
+ AC_SUBST([WOE32DLL])
+
+ dnl On mingw and Cygwin, we can activate special Makefile rules which add
+ dnl version information to the shared libraries and executables.
+ case "$host_os" in
+ mingw* | cygwin*) is_woe32=yes ;;
+ *) is_woe32=no ;;
+ esac
+ WOE32=$is_woe32
+ AC_SUBST([WOE32])
+ if test $WOE32 = yes; then
+ dnl Check for a program that compiles Windows resource files.
+ AC_CHECK_TOOL([WINDRES], [windres])
+ fi
+
+ dnl Determine whether when creating a library, "-lc" should be passed to
+ dnl libtool or not. On many platforms, it is required for the libtool option
+ dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
+ dnl in the *.la files - makes it impossible to create multithreaded programs,
+ dnl because libtool also reorders the -lc to come before the -pthread, and
+ dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
+ case "$host_os" in
+ hpux*) LTLIBC="" ;;
+ *) LTLIBC="-lc" ;;
+ esac
+ AC_SUBST([LTLIBC])
+
+ dnl Rename some macros and functions used for locking.
+ AH_BOTTOM([
+#define __libc_lock_t gl_lock_t
+#define __libc_lock_define gl_lock_define
+#define __libc_lock_define_initialized gl_lock_define_initialized
+#define __libc_lock_init gl_lock_init
+#define __libc_lock_lock gl_lock_lock
+#define __libc_lock_unlock gl_lock_unlock
+#define __libc_lock_recursive_t gl_recursive_lock_t
+#define __libc_lock_define_recursive gl_recursive_lock_define
+#define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized
+#define __libc_lock_init_recursive gl_recursive_lock_init
+#define __libc_lock_lock_recursive gl_recursive_lock_lock
+#define __libc_lock_unlock_recursive gl_recursive_lock_unlock
+#define glthread_in_use libintl_thread_in_use
+#define glthread_lock_init libintl_lock_init
+#define glthread_lock_lock libintl_lock_lock
+#define glthread_lock_unlock libintl_lock_unlock
+#define glthread_lock_destroy libintl_lock_destroy
+#define glthread_rwlock_init libintl_rwlock_init
+#define glthread_rwlock_rdlock libintl_rwlock_rdlock
+#define glthread_rwlock_wrlock libintl_rwlock_wrlock
+#define glthread_rwlock_unlock libintl_rwlock_unlock
+#define glthread_rwlock_destroy libintl_rwlock_destroy
+#define glthread_recursive_lock_init libintl_recursive_lock_init
+#define glthread_recursive_lock_lock libintl_recursive_lock_lock
+#define glthread_recursive_lock_unlock libintl_recursive_lock_unlock
+#define glthread_recursive_lock_destroy libintl_recursive_lock_destroy
+#define glthread_once libintl_once
+#define glthread_once_call libintl_once_call
+#define glthread_once_singlethreaded libintl_once_singlethreaded
+])
+])
+
+
+dnl Checks for the core files of the intl subdirectory:
+dnl dcigettext.c
+dnl eval-plural.h
+dnl explodename.c
+dnl finddomain.c
+dnl gettextP.h
+dnl gmo.h
+dnl hash-string.h hash-string.c
+dnl l10nflist.c
+dnl libgnuintl.h.in (except the *printf stuff)
+dnl loadinfo.h
+dnl loadmsgcat.c
+dnl localealias.c
+dnl log.c
+dnl plural-exp.h plural-exp.c
+dnl plural.y
+dnl Used by libglocale.
+AC_DEFUN([gt_INTL_SUBDIR_CORE],
+[
+ AC_REQUIRE([AC_C_INLINE])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([gt_INTDIV0])dnl
+ AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+ AC_REQUIRE([gt_INTTYPES_PRI])dnl
+ AC_REQUIRE([gl_LOCK])dnl
+
+ AC_TRY_LINK(
+ [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
+ [],
+ [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1,
+ [Define to 1 if the compiler understands __builtin_expect.])])
+
+ AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
+ AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
+ stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
+ argz_next __fsetlocking])
+
+ dnl Use the *_unlocked functions only if they are declared.
+ dnl (because some of them were defined without being declared in Solaris
+ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+ dnl on Solaris 2.5.1 to run on Solaris 2.6).
+ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+ gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+
+ AM_ICONV
+
+ dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined,
+ dnl and a _NL_LOCALE_NAME macro always.
+ AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name,
+ [AC_TRY_LINK([#include <langinfo.h>
+#include <locale.h>],
+ [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));
+ return !cs;
+ ],
+ gt_cv_nl_locale_name=yes,
+ gt_cv_nl_locale_name=no)
+ ])
+ if test $gt_cv_nl_locale_name = yes; then
+ AC_DEFINE(HAVE_NL_LOCALE_NAME, 1,
+ [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.])
+ fi
+
+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+ dnl because plural.y uses bison specific features. It requires at least
+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+ dnl compile.
+ dnl bison is only needed for the maintainer (who touches plural.y). But in
+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+ dnl the rule in general Makefile. Now, some people carelessly touch the
+ dnl files or have a broken "make" program, hence the plural.c rule will
+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+ dnl present or too old.
+ AC_CHECK_PROGS([INTLBISON], [bison])
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ dnl Found it, now check the version.
+ AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+ [AC_TRY_COMPILE([$2], [
+#ifndef $1
+ char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+ if test $ac_cv_have_decl_$1 = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+ [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/intldir.m4 b/biblio/bibtex/utils/mkbib/m4/intldir.m4
new file mode 100644
index 0000000000..7a28843f64
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intldir.m4
@@ -0,0 +1,19 @@
+# intldir.m4 serial 1 (gettext-0.16)
+dnl Copyright (C) 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+AC_PREREQ(2.52)
+
+dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory.
+AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], [])
diff --git a/biblio/bibtex/utils/mkbib/m4/intlmacosx.m4 b/biblio/bibtex/utils/mkbib/m4/intlmacosx.m4
new file mode 100644
index 0000000000..d3f0d904d2
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intlmacosx.m4
@@ -0,0 +1,51 @@
+# intlmacosx.m4 serial 1 (gettext-0.17)
+dnl Copyright (C) 2004-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ gt_cv_func_CFPreferencesCopyAppValue,
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/intltool.m4 b/biblio/bibtex/utils/mkbib/m4/intltool.m4
new file mode 100644
index 0000000000..33353eda43
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intltool.m4
@@ -0,0 +1,237 @@
+## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*-
+## Copyright (C) 2001 Eazel, Inc.
+## Author: Maciej Stachowiak <mjs@noisehavoc.org>
+## Kenneth Christiansen <kenneth@gnu.org>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+## As a special exception to the GNU General Public License, if you
+## distribute this file as part of a program that contains a
+## configuration script generated by Autoconf, you may include it under
+## the same distribution terms that you use for the rest of that program.
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 42 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL], [
+AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_NLS])dnl
+
+case "$am__api_version" in
+ 1.[01234])
+ AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool])
+ ;;
+ *)
+ ;;
+esac
+
+INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+if test -n "$1"; then
+ AC_MSG_CHECKING([for intltool >= $1])
+ AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+ AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.])
+fi
+
+AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update])
+AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge])
+AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract])
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+ AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.])
+fi
+
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+ AM_DEFAULT_VERBOSITY=1
+fi
+AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
+INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
+INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;'
+AC_SUBST(INTLTOOL_V_MERGE)
+AC_SUBST(INTLTOOL__v_MERGE_)
+AC_SUBST(INTLTOOL__v_MERGE_0)
+
+INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
+intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
+intltool__v_merge_options_0='-q'
+AC_SUBST(INTLTOOL_V_MERGE_OPTIONS)
+AC_SUBST(intltool__v_merge_options_)
+AC_SUBST(intltool__v_merge_options_0)
+
+ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@'
+else
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir'
+fi
+ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+
+_IT_SUBST(INTLTOOL_DESKTOP_RULE)
+_IT_SUBST(INTLTOOL_DIRECTORY_RULE)
+_IT_SUBST(INTLTOOL_KEYS_RULE)
+_IT_SUBST(INTLTOOL_PROP_RULE)
+_IT_SUBST(INTLTOOL_OAF_RULE)
+_IT_SUBST(INTLTOOL_PONG_RULE)
+_IT_SUBST(INTLTOOL_SERVER_RULE)
+_IT_SUBST(INTLTOOL_SHEET_RULE)
+_IT_SUBST(INTLTOOL_SOUNDLIST_RULE)
+_IT_SUBST(INTLTOOL_UI_RULE)
+_IT_SUBST(INTLTOOL_XAM_RULE)
+_IT_SUBST(INTLTOOL_KBD_RULE)
+_IT_SUBST(INTLTOOL_XML_RULE)
+_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+_IT_SUBST(INTLTOOL_CAVES_RULE)
+_IT_SUBST(INTLTOOL_SCHEMAS_RULE)
+_IT_SUBST(INTLTOOL_THEME_RULE)
+_IT_SUBST(INTLTOOL_SERVICE_RULE)
+_IT_SUBST(INTLTOOL_POLICY_RULE)
+
+# Check the gettext tools to make sure they are GNU
+AC_PATH_PROG(XGETTEXT, xgettext)
+AC_PATH_PROG(MSGMERGE, msgmerge)
+AC_PATH_PROG(MSGFMT, msgfmt)
+AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+ AC_MSG_ERROR([perl not found])
+fi
+AC_MSG_CHECKING([for perl >= 5.8.1])
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+ AC_MSG_ERROR([perl 5.8.1 is required for intltool])
+else
+ IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
+ AC_MSG_RESULT([$IT_PERL_VERSION])
+fi
+if test "x$2" != "xno-xml"; then
+ AC_MSG_CHECKING([for XML::Parser])
+ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+ AC_MSG_RESULT([ok])
+ else
+ AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+ fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+AC_SUBST(ALL_LINGUAS)
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr]])],
+ [DATADIRNAME=share],
+ [case $host in
+ *-*-solaris*)
+ dnl On Solaris, if bind_textdomain_codeset is in libc,
+ dnl GNU format message catalog is always supported,
+ dnl since both are added to the libc all together.
+ dnl Hence, we'd like to go with DATADIRNAME=share
+ dnl in this case.
+ AC_CHECK_FUNC(bind_textdomain_codeset,
+ [DATADIRNAME=share], [DATADIRNAME=lib])
+ ;;
+ *)
+ [DATADIRNAME=lib]
+ ;;
+ esac])
+fi
+AC_SUBST(DATADIRNAME)
+
+IT_PO_SUBDIR([po])
+
+])
+
+
+# IT_PO_SUBDIR(DIRNAME)
+# ---------------------
+# All po subdirs have to be declared with this macro; the subdir "po" is
+# declared by IT_PROG_INTLTOOL.
+#
+AC_DEFUN([IT_PO_SUBDIR],
+[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS.
+dnl
+dnl The following CONFIG_COMMANDS should be executed at the very end
+dnl of config.status.
+AC_CONFIG_COMMANDS_PRE([
+ AC_CONFIG_COMMANDS([$1/stamp-it], [
+ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then
+ AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.])
+ fi
+ rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp"
+ >"$1/stamp-it.tmp"
+ [sed '/^#/d
+ s/^[[].*] *//
+ /^[ ]*$/d
+ '"s|^| $ac_top_srcdir/|" \
+ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES"
+ ]
+ [sed '/^POTFILES =/,/[^\\]$/ {
+ /^POTFILES =/!d
+ r $1/POTFILES
+ }
+ ' "$1/Makefile.in" >"$1/Makefile"]
+ rm -f "$1/Makefile.tmp"
+ mv "$1/stamp-it.tmp" "$1/stamp-it"
+ ])
+])dnl
+])
+
+# _IT_SUBST(VARIABLE)
+# -------------------
+# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+#
+AC_DEFUN([_IT_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
+# deprecated macros
+AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL])
+# A hint is needed for aclocal from Automake <= 1.9.4:
+# AC_DEFUN([AC_PROG_INTLTOOL], ...)
+
diff --git a/biblio/bibtex/utils/mkbib/m4/intmax.m4 b/biblio/bibtex/utils/mkbib/m4/intmax.m4
new file mode 100644
index 0000000000..ce7a8a49de
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/intmax.m4
@@ -0,0 +1,33 @@
+# intmax.m4 serial 3 (gettext-0.16)
+dnl Copyright (C) 2002-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+ [AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+], [intmax_t x = -1;
+ return !x;],
+ gt_cv_c_intmax_t=yes,
+ gt_cv_c_intmax_t=no)])
+ if test $gt_cv_c_intmax_t = yes; then
+ AC_DEFINE(HAVE_INTMAX_T, 1,
+ [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/inttypes-pri.m4 b/biblio/bibtex/utils/mkbib/m4/inttypes-pri.m4
new file mode 100644
index 0000000000..7c7f89401a
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/inttypes-pri.m4
@@ -0,0 +1,36 @@
+# inttypes-pri.m4 serial 4 (gettext-0.16)
+dnl Copyright (C) 1997-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.52)
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values. This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+ AC_CHECK_HEADERS([inttypes.h])
+ if test $ac_cv_header_inttypes_h = yes; then
+ AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+ gt_cv_inttypes_pri_broken,
+ [
+ AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+ ])
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
+ AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+ [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+ PRI_MACROS_BROKEN=1
+ else
+ PRI_MACROS_BROKEN=0
+ fi
+ AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/inttypes_h.m4 b/biblio/bibtex/utils/mkbib/m4/inttypes_h.m4
new file mode 100644
index 0000000000..edc8ecb2db
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/inttypes_h.m4
@@ -0,0 +1,26 @@
+# inttypes_h.m4 serial 7
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+ AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [uintmax_t i = (uintmax_t) -1; return !i;],
+ gl_cv_header_inttypes_h=yes,
+ gl_cv_header_inttypes_h=no)])
+ if test $gl_cv_header_inttypes_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+ [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/lcmessage.m4 b/biblio/bibtex/utils/mkbib/m4/lcmessage.m4
new file mode 100644
index 0000000000..19aa77e4f7
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lcmessage.m4
@@ -0,0 +1,30 @@
+# lcmessage.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+ AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)])
+ if test $gt_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
+ [Define if your <locale.h> file defines LC_MESSAGES.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/lib-ld.m4 b/biblio/bibtex/utils/mkbib/m4/lib-ld.m4
new file mode 100644
index 0000000000..96c4e2c339
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/lib-link.m4 b/biblio/bibtex/utils/mkbib/m4/lib-link.m4
new file mode 100644
index 0000000000..e3d26fc42d
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lib-link.m4
@@ -0,0 +1,709 @@
+# lib-link.m4 serial 13 (gettext-0.17)
+dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.54)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIB[]NAME"
+ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE(rpath,
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix],
+[ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
+ --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ LIB[]NAME[]_PREFIX="$basedir"
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/lib-prefix.m4 b/biblio/bibtex/utils/mkbib/m4/lib-prefix.m4
new file mode 100644
index 0000000000..a8684e17e3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lib-prefix.m4
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64. The current
+ dnl practice is that on a system supporting 32-bit and 64-bit instruction
+ dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+ dnl libraries go under $prefix/lib. We determine the compiler's default
+ dnl mode by looking at the compiler's library search path. If at least
+ dnl of its elements ends in /lib64 or points to a directory whose absolute
+ dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+ dnl default, namely "lib".
+ acl_libdirstem=lib
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/libtool.m4 b/biblio/bibtex/utils/mkbib/m4/libtool.m4
new file mode 100644
index 0000000000..56666f0ece
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/libtool.m4
@@ -0,0 +1,7986 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_REPLACE_SHELLFNS
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case "$ECHO" in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[ --with-sysroot[=DIR] Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([${with_sysroot}])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Add ABI-specific directories to the system library path.
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS="$save_LDFLAGS"])
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test "$pre_test_object_deps_done" = no; then
+ case ${prev} in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+ CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+ func_split_long_opt_name=${1%%=*}
+ func_split_long_opt_arg=${1#*=}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
+
+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
+
+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+ func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/biblio/bibtex/utils/mkbib/m4/lock.m4 b/biblio/bibtex/utils/mkbib/m4/lock.m4
new file mode 100644
index 0000000000..9111933535
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lock.m4
@@ -0,0 +1,316 @@
+# lock.m4 serial 7 (gettext-0.17)
+dnl Copyright (C) 2005-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests for a multithreading library to be used.
+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
+dnl USE_PTH_THREADS, USE_WIN32_THREADS
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
+AC_DEFUN([gl_LOCK_EARLY],
+[
+ AC_REQUIRE([gl_LOCK_EARLY_BODY])
+])
+
+dnl The guts of gl_LOCK_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_EARLY_BODY],
+[
+ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+ dnl influences the result of the autoconf tests that test for *_unlocked
+ dnl declarations, on AIX 5 at least. Therefore it must come early.
+ AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+ AC_BEFORE([$0], [gl_ARGP])dnl
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
+ dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+ dnl AC_GNU_SOURCE.
+ m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+ [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+ [AC_REQUIRE([AC_GNU_SOURCE])])
+ dnl Check for multithreading.
+ AC_ARG_ENABLE(threads,
+AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API])
+AC_HELP_STRING([--disable-threads], [build without multithread safety]),
+ [gl_use_threads=$enableval],
+ [case "$host_os" in
+ dnl Disable multithreading by default on OSF/1, because it interferes
+ dnl with fork()/exec(): When msgexec is linked with -lpthread, its child
+ dnl process gets an endless segmentation fault inside execvp().
+ osf*) gl_use_threads=no ;;
+ *) gl_use_threads=yes ;;
+ esac
+ ])
+ if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+ # For using <pthread.h>:
+ case "$host_os" in
+ osf*)
+ # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+ # groks <pthread.h>. cc also understands the flag -pthread, but
+ # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+ # 2. putting a flag into CPPFLAGS that has an effect on the linker
+ # causes the AC_TRY_LINK test below to succeed unexpectedly,
+ # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ ;;
+ esac
+ # Some systems optimize for single-threaded programs by default, and
+ # need special flags to disable these optimizations. For example, the
+ # definition of 'errno' in <errno.h>.
+ case "$host_os" in
+ aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+ solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+ esac
+ fi
+])
+
+dnl The guts of gl_LOCK. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_BODY],
+[
+ AC_REQUIRE([gl_LOCK_EARLY_BODY])
+ gl_threads_api=none
+ LIBTHREAD=
+ LTLIBTHREAD=
+ LIBMULTITHREAD=
+ LTLIBMULTITHREAD=
+ if test "$gl_use_threads" != no; then
+ dnl Check whether the compiler and linker support weak declarations.
+ AC_MSG_CHECKING([whether imported symbols can be declared weak])
+ gl_have_weak=no
+ AC_TRY_LINK([extern void xyzzy ();
+#pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes])
+ AC_MSG_RESULT([$gl_have_weak])
+ if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+ # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+ # it groks <pthread.h>. It's added above, in gl_LOCK_EARLY_BODY.
+ AC_CHECK_HEADER(pthread.h, gl_have_pthread_h=yes, gl_have_pthread_h=no)
+ if test "$gl_have_pthread_h" = yes; then
+ # Other possible tests:
+ # -lpthreads (FSU threads, PCthreads)
+ # -lgthreads
+ gl_have_pthread=
+ # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+ # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+ # the second one only in libpthread, and lock.c needs it.
+ AC_TRY_LINK([#include <pthread.h>],
+ [pthread_mutex_lock((pthread_mutex_t*)0);
+ pthread_mutexattr_init((pthread_mutexattr_t*)0);],
+ [gl_have_pthread=yes])
+ # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+ # since it is defined as a macro on OSF/1.)
+ if test -n "$gl_have_pthread"; then
+ # The program links fine without libpthread. But it may actually
+ # need to link with libpthread in order to create multiple threads.
+ AC_CHECK_LIB(pthread, pthread_kill,
+ [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ case "$host_os" in
+ solaris* | hpux*)
+ AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], 1,
+ [Define if the pthread_in_use() detection is hard.])
+ esac
+ ])
+ else
+ # Some library is needed. Try libpthread and libc_r.
+ AC_CHECK_LIB(pthread, pthread_kill,
+ [gl_have_pthread=yes
+ LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+ LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
+ if test -z "$gl_have_pthread"; then
+ # For FreeBSD 4.
+ AC_CHECK_LIB(c_r, pthread_kill,
+ [gl_have_pthread=yes
+ LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+ LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
+ fi
+ fi
+ if test -n "$gl_have_pthread"; then
+ gl_threads_api=posix
+ AC_DEFINE([USE_POSIX_THREADS], 1,
+ [Define if the POSIX multithreading library can be used.])
+ if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+ if test $gl_have_weak = yes; then
+ AC_DEFINE([USE_POSIX_THREADS_WEAK], 1,
+ [Define if references to the POSIX multithreading library should be made weak.])
+ LIBTHREAD=
+ LTLIBTHREAD=
+ fi
+ fi
+ # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the
+ # pthread_rwlock_* functions.
+ AC_CHECK_TYPE([pthread_rwlock_t],
+ [AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1,
+ [Define if the POSIX multithreading library has read/write locks.])],
+ [],
+ [#include <pthread.h>])
+ # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+ AC_TRY_COMPILE([#include <pthread.h>],
+ [#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif],
+ [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1,
+ [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+ fi
+ fi
+ fi
+ if test -z "$gl_have_pthread"; then
+ if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+ gl_have_solaristhread=
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS -lthread"
+ AC_TRY_LINK([#include <thread.h>
+#include <synch.h>],
+ [thr_self();],
+ [gl_have_solaristhread=yes])
+ LIBS="$gl_save_LIBS"
+ if test -n "$gl_have_solaristhread"; then
+ gl_threads_api=solaris
+ LIBTHREAD=-lthread
+ LTLIBTHREAD=-lthread
+ LIBMULTITHREAD="$LIBTHREAD"
+ LTLIBMULTITHREAD="$LTLIBTHREAD"
+ AC_DEFINE([USE_SOLARIS_THREADS], 1,
+ [Define if the old Solaris multithreading library can be used.])
+ if test $gl_have_weak = yes; then
+ AC_DEFINE([USE_SOLARIS_THREADS_WEAK], 1,
+ [Define if references to the old Solaris multithreading library should be made weak.])
+ LIBTHREAD=
+ LTLIBTHREAD=
+ fi
+ fi
+ fi
+ fi
+ if test "$gl_use_threads" = pth; then
+ gl_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_LINKFLAGS(pth)
+ gl_have_pth=
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS -lpth"
+ AC_TRY_LINK([#include <pth.h>], [pth_self();], gl_have_pth=yes)
+ LIBS="$gl_save_LIBS"
+ if test -n "$gl_have_pth"; then
+ gl_threads_api=pth
+ LIBTHREAD="$LIBPTH"
+ LTLIBTHREAD="$LTLIBPTH"
+ LIBMULTITHREAD="$LIBTHREAD"
+ LTLIBMULTITHREAD="$LTLIBTHREAD"
+ AC_DEFINE([USE_PTH_THREADS], 1,
+ [Define if the GNU Pth multithreading library can be used.])
+ if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+ if test $gl_have_weak = yes; then
+ AC_DEFINE([USE_PTH_THREADS_WEAK], 1,
+ [Define if references to the GNU Pth multithreading library should be made weak.])
+ LIBTHREAD=
+ LTLIBTHREAD=
+ fi
+ fi
+ else
+ CPPFLAGS="$gl_save_CPPFLAGS"
+ fi
+ fi
+ if test -z "$gl_have_pthread"; then
+ if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then
+ if { case "$host_os" in
+ mingw*) true;;
+ *) false;;
+ esac
+ }; then
+ gl_threads_api=win32
+ AC_DEFINE([USE_WIN32_THREADS], 1,
+ [Define if the Win32 multithreading API can be used.])
+ fi
+ fi
+ fi
+ fi
+ AC_MSG_CHECKING([for multithread API to use])
+ AC_MSG_RESULT([$gl_threads_api])
+ AC_SUBST(LIBTHREAD)
+ AC_SUBST(LTLIBTHREAD)
+ AC_SUBST(LIBMULTITHREAD)
+ AC_SUBST(LTLIBMULTITHREAD)
+])
+
+AC_DEFUN([gl_LOCK],
+[
+ AC_REQUIRE([gl_LOCK_EARLY])
+ AC_REQUIRE([gl_LOCK_BODY])
+ gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [
+ AC_REQUIRE([AC_C_INLINE])
+])
+
+dnl Survey of platforms:
+dnl
+dnl Platform Available Compiler Supports test-lock
+dnl flavours option weak result
+dnl --------------- --------- --------- -------- ---------
+dnl Linux 2.4/glibc posix -lpthread Y OK
+dnl
+dnl GNU Hurd/glibc posix
+dnl
+dnl FreeBSD 5.3 posix -lc_r Y
+dnl posix -lkse ? Y
+dnl posix -lpthread ? Y
+dnl posix -lthr Y
+dnl
+dnl FreeBSD 5.2 posix -lc_r Y
+dnl posix -lkse Y
+dnl posix -lthr Y
+dnl
+dnl FreeBSD 4.0,4.10 posix -lc_r Y OK
+dnl
+dnl NetBSD 1.6 --
+dnl
+dnl OpenBSD 3.4 posix -lpthread Y OK
+dnl
+dnl MacOS X 10.[123] posix -lpthread Y OK
+dnl
+dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK
+dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11 posix -lpthread N (cc) OK
+dnl Y (gcc)
+dnl
+dnl IRIX 6.5 posix -lpthread Y 0.5
+dnl
+dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK
+dnl -lpthread (gcc) Y
+dnl
+dnl Cygwin posix -lpthread Y OK
+dnl
+dnl Any of the above pth -lpth 0.0
+dnl
+dnl Mingw win32 N OK
+dnl
+dnl BeOS 5 --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl OK if all three tests terminate OK,
+dnl 0.5 if the first test terminates OK but the second one loops endlessly,
+dnl 0.0 if the first test already loops endlessly.
diff --git a/biblio/bibtex/utils/mkbib/m4/longlong.m4 b/biblio/bibtex/utils/mkbib/m4/longlong.m4
new file mode 100644
index 0000000000..a72e53b3ed
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/longlong.m4
@@ -0,0 +1,109 @@
+# longlong.m4 serial 13
+dnl Copyright (C) 1999-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+ AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+ [AC_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+ dnl If cross compiling, assume the bug isn't important, since
+ dnl nobody cross compiles for this platform as far as we know.
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[@%:@include <limits.h>
+ @%:@ifndef LLONG_MAX
+ @%:@ define HALF \
+ (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+ @%:@ define LLONG_MAX (HALF - 1 + HALF)
+ @%:@endif]],
+ [[long long int n = 1;
+ int i;
+ for (i = 0; ; i++)
+ {
+ long long int m = n << i;
+ if (m >> i != n)
+ return 1;
+ if (LLONG_MAX / 2 < m)
+ break;
+ }
+ return 0;]])],
+ [ac_cv_type_long_long_int=yes],
+ [ac_cv_type_long_long_int=no],
+ [ac_cv_type_long_long_int=yes])],
+ [ac_cv_type_long_long_int=no])])
+ if test $ac_cv_type_long_long_int = yes; then
+ AC_DEFINE([HAVE_LONG_LONG_INT], 1,
+ [Define to 1 if the system has the type `long long int'.])
+ fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+ AC_CACHE_CHECK([for unsigned long long int],
+ [ac_cv_type_unsigned_long_long_int],
+ [AC_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [ac_cv_type_unsigned_long_long_int=yes],
+ [ac_cv_type_unsigned_long_long_int=no])])
+ if test $ac_cv_type_unsigned_long_long_int = yes; then
+ AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
+ [Define to 1 if the system has the type `unsigned long long int'.])
+ fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+ AC_LANG_PROGRAM(
+ [[/* Test preprocessor. */
+ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+ error in preprocessor;
+ #endif
+ #if ! (18446744073709551615ULL <= -1ull)
+ error in preprocessor;
+ #endif
+ /* Test literals. */
+ long long int ll = 9223372036854775807ll;
+ long long int nll = -9223372036854775807LL;
+ unsigned long long int ull = 18446744073709551615ULL;
+ /* Test constant expressions. */
+ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+ ? 1 : -1)];
+ typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+ ? 1 : -1)];
+ int i = 63;]],
+ [[/* Test availability of runtime routines for shift and division. */
+ long long int llmax = 9223372036854775807ll;
+ unsigned long long int ullmax = 18446744073709551615ull;
+ return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+ | (llmax / ll) | (llmax % ll)
+ | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+ | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/ltoptions.m4 b/biblio/bibtex/utils/mkbib/m4/ltoptions.m4
new file mode 100644
index 0000000000..5d9acd8e23
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/biblio/bibtex/utils/mkbib/m4/ltsugar.m4 b/biblio/bibtex/utils/mkbib/m4/ltsugar.m4
new file mode 100644
index 0000000000..9000a057d3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/ltversion.m4 b/biblio/bibtex/utils/mkbib/m4/ltversion.m4
new file mode 100644
index 0000000000..07a8602d48
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/lt~obsolete.m4 b/biblio/bibtex/utils/mkbib/m4/lt~obsolete.m4
new file mode 100644
index 0000000000..c573da90c5
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/biblio/bibtex/utils/mkbib/m4/nls.m4 b/biblio/bibtex/utils/mkbib/m4/nls.m4
new file mode 100644
index 0000000000..7967cc2f9a
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE(nls,
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT($USE_NLS)
+ AC_SUBST(USE_NLS)
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/po.m4 b/biblio/bibtex/utils/mkbib/m4/po.m4
new file mode 100644
index 0000000000..0734762ab1
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 15 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.17])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/printf-posix.m4 b/biblio/bibtex/utils/mkbib/m4/printf-posix.m4
new file mode 100644
index 0000000000..14ba612839
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/printf-posix.m4
@@ -0,0 +1,44 @@
+# printf-posix.m4 serial 3 (gettext-0.17)
+dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+ gt_cv_func_printf_posix,
+ [
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+ dollar expansion (possibly an autoconf bug). */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+ sprintf (buf, format, 33, 55);
+ return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+ [
+ AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+ notposix
+#endif
+ ], gt_cv_func_printf_posix="guessing no",
+ gt_cv_func_printf_posix="guessing yes")
+ ])
+ ])
+ case $gt_cv_func_printf_posix in
+ *yes)
+ AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+ [Define if your printf() function supports format strings with positions.])
+ ;;
+ esac
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/progtest.m4 b/biblio/bibtex/utils/mkbib/m4/progtest.m4
new file mode 100644
index 0000000000..a56365cd37
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/size_max.m4 b/biblio/bibtex/utils/mkbib/m4/size_max.m4
new file mode 100644
index 0000000000..6cb4868927
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/size_max.m4
@@ -0,0 +1,68 @@
+# size_max.m4 serial 6
+dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+ AC_CHECK_HEADERS(stdint.h)
+ dnl First test whether the system already has SIZE_MAX.
+ AC_MSG_CHECKING([for SIZE_MAX])
+ AC_CACHE_VAL([gl_cv_size_max], [
+ gl_cv_size_max=
+ AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], gl_cv_size_max=yes)
+ if test -z "$gl_cv_size_max"; then
+ dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+ dnl than the type 'unsigned long'. Try hard to find a definition that can
+ dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+ AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
+ [#include <stddef.h>
+#include <limits.h>], size_t_bits_minus_1=)
+ AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
+ [#include <stddef.h>], fits_in_uint=)
+ if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+ if test $fits_in_uint = 1; then
+ dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+ dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+ AC_TRY_COMPILE([#include <stddef.h>
+ extern size_t foo;
+ extern unsigned long foo;
+ ], [], fits_in_uint=0)
+ fi
+ dnl We cannot use 'expr' to simplify this expression, because 'expr'
+ dnl works only with 'long' integers in the host environment, while we
+ dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+ if test $fits_in_uint = 1; then
+ gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+ else
+ gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+ fi
+ else
+ dnl Shouldn't happen, but who knows...
+ gl_cv_size_max='((size_t)~(size_t)0)'
+ fi
+ fi
+ ])
+ AC_MSG_RESULT([$gl_cv_size_max])
+ if test "$gl_cv_size_max" != yes; then
+ AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+ [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+ fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/stdint_h.m4 b/biblio/bibtex/utils/mkbib/m4/stdint_h.m4
new file mode 100644
index 0000000000..db9a8ac4c2
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/stdint_h.m4
@@ -0,0 +1,26 @@
+# stdint_h.m4 serial 6
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+ AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <stdint.h>],
+ [uintmax_t i = (uintmax_t) -1; return !i;],
+ gl_cv_header_stdint_h=yes,
+ gl_cv_header_stdint_h=no)])
+ if test $gl_cv_header_stdint_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+ [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/uintmax_t.m4 b/biblio/bibtex/utils/mkbib/m4/uintmax_t.m4
new file mode 100644
index 0000000000..641c4898d3
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/uintmax_t.m4
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 10
+dnl Copyright (C) 1997-2004, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+ test $ac_cv_type_unsigned_long_long_int = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+ [Define to unsigned long or unsigned long long
+ if <stdint.h> and <inttypes.h> don't define.])
+ else
+ AC_DEFINE(HAVE_UINTMAX_T, 1,
+ [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/visibility.m4 b/biblio/bibtex/utils/mkbib/m4/visibility.m4
new file mode 100644
index 0000000000..2ff6330aa4
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/visibility.m4
@@ -0,0 +1,52 @@
+# visibility.m4 serial 1 (gettext-0.15)
+dnl Copyright (C) 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl MacOS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ CFLAG_VISIBILITY=
+ HAVE_VISIBILITY=0
+ if test -n "$GCC"; then
+ AC_MSG_CHECKING([for simple visibility declarations])
+ AC_CACHE_VAL(gl_cv_cc_visibility, [
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ AC_TRY_COMPILE(
+ [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+ extern __attribute__((__visibility__("default"))) int exportedvar;
+ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+ extern __attribute__((__visibility__("default"))) int exportedfunc (void);],
+ [],
+ gl_cv_cc_visibility=yes,
+ gl_cv_cc_visibility=no)
+ CFLAGS="$gl_save_CFLAGS"])
+ AC_MSG_RESULT([$gl_cv_cc_visibility])
+ if test $gl_cv_cc_visibility = yes; then
+ CFLAG_VISIBILITY="-fvisibility=hidden"
+ HAVE_VISIBILITY=1
+ fi
+ fi
+ AC_SUBST([CFLAG_VISIBILITY])
+ AC_SUBST([HAVE_VISIBILITY])
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+ [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/wchar_t.m4 b/biblio/bibtex/utils/mkbib/m4/wchar_t.m4
new file mode 100644
index 0000000000..cde2129a97
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/wchar_t.m4
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+ AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+ [AC_TRY_COMPILE([#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';], ,
+ gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+ if test $gt_cv_c_wchar_t = yes; then
+ AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/wint_t.m4 b/biblio/bibtex/utils/mkbib/m4/wint_t.m4
new file mode 100644
index 0000000000..af5ed936cc
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/wint_t.m4
@@ -0,0 +1,28 @@
+# wint_t.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+ [AC_TRY_COMPILE([
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+ <wchar.h>.
+ BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+ before <wchar.h>. */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+ wint_t foo = (wchar_t)'\0';], ,
+ gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+ if test $gt_cv_c_wint_t = yes; then
+ AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+ fi
+])
diff --git a/biblio/bibtex/utils/mkbib/m4/xsize.m4 b/biblio/bibtex/utils/mkbib/m4/xsize.m4
new file mode 100644
index 0000000000..85bb721e43
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/m4/xsize.m4
@@ -0,0 +1,13 @@
+# xsize.m4 serial 3
+dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+ dnl Prerequisites of lib/xsize.h.
+ AC_REQUIRE([gl_SIZE_MAX])
+ AC_REQUIRE([AC_C_INLINE])
+ AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/biblio/bibtex/utils/mkbib/po/Makefile.in.in b/biblio/bibtex/utils/mkbib/po/Makefile.in.in
new file mode 100644
index 0000000000..06a8cfe927
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/po/Makefile.in.in
@@ -0,0 +1,222 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 2004-2008 Rodney Dawes <dobey.pwns@gmail.com>
+#
+# This file may be copied and used freely without restrictions. It may
+# be used in projects which are not available under a GNU Public License,
+# but which still want to provide support for the GNU gettext functionality.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+# instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+#
+# - Modified by Rodney Dawes <dobey.pwns@gmail.com> for use with intltool
+#
+# We have the following line for use by intltoolize:
+# INTLTOOL_MAKEFILE
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+datarootdir = @datarootdir@
+libdir = @libdir@
+DATADIRNAME = @DATADIRNAME@
+itlocaledir = $(prefix)/$(DATADIRNAME)/locale
+subdir = po
+install_sh = @install_sh@
+# Automake >= 1.8 provides @mkdir_p@.
+# Until it can be supposed, use the safe fallback:
+mkdir_p = $(install_sh) -d
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+ALL_LINGUAS = @ALL_LINGUAS@
+
+PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
+
+USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
+
+USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
+
+POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
+
+DISTFILES = Makefile.in.in POTFILES.in $(POFILES)
+EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS
+
+POTFILES = \
+# This comment gets stripped out
+
+CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
+
+.SUFFIXES:
+.SUFFIXES: .po .pox .gmo .mo .msg .cat
+
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V))
+INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY))
+INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@;
+
+.po.pox:
+ $(MAKE) $(GETTEXT_PACKAGE).pot
+ $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
+
+.po.mo:
+ $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $<
+
+.po.gmo:
+ $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \
+ && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+ sed -f ../intl/po2msg.sed < $< > $*.msg \
+ && rm -f $@ && gencat $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+ $(GENPOT)
+
+install: install-data
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $$dir; \
+ if test -r $$lang.gmo; then \
+ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
+ else \
+ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+ echo "installing $(srcdir)/$$lang.gmo as" \
+ "$$dir/$(GETTEXT_PACKAGE).mo"; \
+ fi; \
+ if test -r $$lang.gmo.m; then \
+ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
+ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
+ else \
+ if test -r $(srcdir)/$$lang.gmo.m ; then \
+ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
+ $$dir/$(GETTEXT_PACKAGE).mo.m; \
+ echo "installing $(srcdir)/$$lang.gmo.m as" \
+ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
+ else \
+ true; \
+ fi; \
+ fi; \
+ done
+
+# Empty stubs to satisfy archaic automake needs
+dvi info ctags tags CTAGS TAGS ID:
+
+# Define this as empty until I found a useful application.
+install-exec installcheck:
+
+uninstall:
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
+ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
+ done
+
+check: all $(GETTEXT_PACKAGE).pot
+ rm -f missing notexist
+ srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
+ if [ -r missing -o -r notexist ]; then \
+ exit 1; \
+ fi
+
+mostlyclean:
+ rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+ rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES stamp-it
+ rm -f *.mo *.msg *.cat *.cat.m *.gmo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f Makefile.in.in
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ extra_dists="$(EXTRA_DISTFILES)"; \
+ for file in $$extra_dists; do \
+ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
+ done; \
+ for file in $$dists; do \
+ test -f $$file || file="$(srcdir)/$$file"; \
+ ln $$file $(distdir) 2> /dev/null \
+ || cp -p $$file $(distdir); \
+ done
+
+update-po: Makefile
+ $(MAKE) $(GETTEXT_PACKAGE).pot
+ tmpdir=`pwd`; \
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ echo "$$lang:"; \
+ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+ if $$result; then \
+ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.gmo failed!"; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi; \
+ done
+
+Makefile POTFILES: stamp-it
+ @if test ! -f $@; then \
+ rm -f stamp-it; \
+ $(MAKE) stamp-it; \
+ fi
+
+stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
+ $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/biblio/bibtex/utils/mkbib/po/POTFILES.in b/biblio/bibtex/utils/mkbib/po/POTFILES.in
new file mode 100644
index 0000000000..978c04f224
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/po/POTFILES.in
@@ -0,0 +1,9 @@
+data/default.desktop.in
+data/mkbib.desktop.in.in
+[type: gettext/glade]data/mkbib-menus.ui
+[type: gettext/glade]data/mkbib-preferences.ui
+[type: gettext/glade]data/mkbib-source.ui
+data/org.mkbib.gschema.xml.in.in
+data/spanish.desktop.in
+data/thai.desktop.in
+
diff --git a/biblio/bibtex/utils/mkbib/src/bib.c b/biblio/bibtex/utils/mkbib/src/bib.c
new file mode 100644
index 0000000000..ce39ff8248
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/bib.c
@@ -0,0 +1,1774 @@
+/* A Bison parser, made by GNU Bison 2.6.1. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.6.1"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* Copy the first part of user declarations. */
+/* Line 336 of yacc.c */
+#line 1 "src/bib.y"
+
+#include <stdio.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <glib/gstdio.h>
+#include <fcntl.h>
+#include "main.h"
+char* concat(char* str1, char* str2);
+
+void lex_brace();
+void lex_normal();
+#define slen 1064
+ int yylex(void);
+/*enum
+{
+ COL_BIB_KEY=0,
+ COL_BIB_TYPE, COL_BIB_AUTHOR, COL_BIB_YEAR,
+ NUM_COLS} ;
+*/
+typedef struct {
+ char *type;
+ char *id;
+ GHashTable *table;
+} BibEntry;
+
+BibEntry b_entry;
+GtkTreeIter siter;
+GtkListStore *store;
+
+void yyerror(char *s)
+{
+ printf("YYERROR : %s\n", s);
+}
+void parse_entry(BibEntry *bib_entry);
+
+
+/* Line 336 of yacc.c */
+#line 106 "src/bib.c"
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "y.tab.h". */
+#ifndef YY_Y_TAB_H
+# define YY_Y_TAB_H
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ ENTRYTYPE = 258,
+ VALUE = 259,
+ KEY = 260,
+ OBRACE = 261,
+ EBRACE = 262,
+ QUOTE = 263,
+ SEMICOLON = 264
+ };
+#endif
+/* Tokens. */
+#define ENTRYTYPE 258
+#define VALUE 259
+#define KEY 260
+#define OBRACE 261
+#define EBRACE 262
+#define QUOTE 263
+#define SEMICOLON 264
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 350 of yacc.c */
+#line 41 "src/bib.y"
+
+ char *sval;
+
+
+/* Line 350 of yacc.c */
+#line 172 "src/bib.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE yylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_Y_TAB_H */
+
+/* Copy the second part of user declarations. */
+
+/* Line 353 of yacc.c */
+#line 200 "src/bib.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 5
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 21
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 14
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 11
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 17
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 30
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 264
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 11, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 13, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 10, 2, 12, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 5, 8, 9, 17, 18, 20, 24,
+ 28, 29, 30, 36, 38, 39, 42, 44
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 15, 0, -1, 16, -1, 15, 16, -1, -1, 3,
+ 10, 5, 11, 17, 18, 12, -1, -1, 19, -1,
+ 19, 11, 18, -1, 5, 13, 20, -1, -1, -1,
+ 10, 21, 23, 22, 12, -1, 4, -1, -1, 24,
+ 23, -1, 4, -1, 10, 23, 12, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint8 yyrline[] =
+{
+ 0, 59, 59, 60, 63, 63, 75, 76, 77, 80,
+ 83, 83, 83, 84, 87, 88, 91, 92
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "ENTRYTYPE", "VALUE", "KEY", "OBRACE",
+ "EBRACE", "QUOTE", "SEMICOLON", "'{'", "','", "'}'", "'='", "$accept",
+ "Input", "Entry", "$@1", "KeyVals", "KeyVal", "Value", "$@2", "$@3",
+ "BraceVs", "BraceV", YY_NULL
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 123, 44, 125, 61
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 14, 15, 15, 17, 16, 18, 18, 18, 19,
+ 21, 22, 20, 20, 23, 23, 24, 24
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 2, 0, 7, 0, 1, 3, 3,
+ 0, 0, 5, 1, 0, 2, 1, 3
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 0, 0, 2, 0, 1, 3, 0, 4, 6,
+ 0, 0, 7, 0, 5, 6, 13, 10, 9, 8,
+ 14, 16, 14, 11, 14, 0, 0, 15, 17, 12
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 2, 3, 9, 11, 12, 18, 20, 26, 23,
+ 24
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -15
+static const yytype_int8 yypact[] =
+{
+ 0, -6, 2, -15, 4, -15, -15, 1, -15, 6,
+ 3, 5, 7, -4, -15, 6, -15, -15, -15, -15,
+ -3, -15, -3, -15, -3, 8, 9, -15, -15, -15
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -15, -15, 11, -15, -1, -15, -15, -15, -15, -14,
+ -15
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+ 16, 21, 5, 1, 4, 1, 17, 22, 25, 7,
+ 27, 10, 8, 6, 19, 0, 13, 14, 15, 0,
+ 28, 29
+};
+
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-15))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
+static const yytype_int8 yycheck[] =
+{
+ 4, 4, 0, 3, 10, 3, 10, 10, 22, 5,
+ 24, 5, 11, 2, 15, -1, 13, 12, 11, -1,
+ 12, 12
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 3, 15, 16, 10, 0, 16, 5, 11, 17,
+ 5, 18, 19, 13, 12, 11, 4, 10, 20, 18,
+ 21, 4, 10, 23, 24, 23, 22, 23, 12, 12
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 4:
+/* Line 1787 of yacc.c */
+#line 63 "src/bib.y"
+ {
+ b_entry.type = (yyvsp[(1) - (4)].sval);
+ b_entry.id = (yyvsp[(3) - (4)].sval);
+ b_entry.table = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);}
+ break;
+
+ case 5:
+/* Line 1787 of yacc.c */
+#line 67 "src/bib.y"
+ {
+ parse_entry(&b_entry);
+ g_hash_table_destroy(b_entry.table);
+ free(b_entry.type); free(b_entry.id);
+ b_entry.table = NULL;
+ b_entry.type = b_entry.id = NULL;}
+ break;
+
+ case 9:
+/* Line 1787 of yacc.c */
+#line 80 "src/bib.y"
+ { g_hash_table_replace(b_entry.table, (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval)); }
+ break;
+
+ case 10:
+/* Line 1787 of yacc.c */
+#line 83 "src/bib.y"
+ { lex_brace(); }
+ break;
+
+ case 11:
+/* Line 1787 of yacc.c */
+#line 83 "src/bib.y"
+ { lex_normal(); }
+ break;
+
+ case 12:
+/* Line 1787 of yacc.c */
+#line 83 "src/bib.y"
+ { (yyval.sval) = (yyvsp[(3) - (5)].sval); }
+ break;
+
+ case 14:
+/* Line 1787 of yacc.c */
+#line 87 "src/bib.y"
+ { (yyval.sval) = ""; }
+ break;
+
+ case 15:
+/* Line 1787 of yacc.c */
+#line 88 "src/bib.y"
+ { (yyval.sval) = concat((yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].sval)); }
+ break;
+
+ case 17:
+/* Line 1787 of yacc.c */
+#line 92 "src/bib.y"
+ { (yyval.sval) = concat(concat("{", (yyvsp[(2) - (3)].sval)), "}"); }
+ break;
+
+
+/* Line 1787 of yacc.c */
+#line 1484 "src/bib.c"
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+/* Line 2048 of yacc.c */
+#line 94 "src/bib.y"
+
+
+
+void parse_entry(BibEntry *bib_entry)
+{
+ char *author = "", *year = "";
+ GHashTableIter iter;
+ gpointer key, val;
+ char **kiter;
+ int i;
+ char *keys[] = {"id", "type", "author", "year", "title", "publisher", "editor",
+ "volume", "number", "pages", "month", "note", "address", "edition", "journal",
+ "series", "book", "chapter", "organization", NULL};
+ char *vals[] = {NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL};
+
+ g_hash_table_iter_init(&iter, bib_entry->table);
+ while (g_hash_table_iter_next(&iter, &key, &val)) {
+ for (kiter = keys, i = 0; *kiter; kiter++, i++)
+ {
+ if (!g_ascii_strcasecmp(*kiter, key)) {
+ vals[i] = g_strndup(val,slen);
+ break;
+ }
+ }
+ }
+
+ gtk_list_store_append (store, &siter);
+ gtk_list_store_set (store, &siter,
+ COL_BIB_AUTHOR, vals[COL_BIB_AUTHOR],
+ COL_BIB_TYPE, bib_entry->type,
+ COL_BIB_KEY, bib_entry->id,
+ COL_BIB_YEAR, vals[COL_BIB_YEAR],
+ COL_BIB_TITLE, vals[COL_BIB_TITLE],
+ COL_BIB_PUBLISHER, vals[COL_BIB_PUBLISHER],
+ COL_BIB_EDITOR, vals[COL_BIB_EDITOR],
+ COL_BIB_VOL, vals[COL_BIB_VOL],
+ COL_BIB_NUMBER, vals[COL_BIB_NUMBER],
+ COL_BIB_PAGE, vals[COL_BIB_PAGE],
+ COL_BIB_MON, vals[COL_BIB_MON],
+ COL_BIB_NOTE, vals[COL_BIB_NOTE],
+ COL_BIB_ADDRESS, vals[COL_BIB_ADDRESS],
+ COL_BIB_EDITION, vals[COL_BIB_EDITION],
+ COL_BIB_JOURNAL, vals[COL_BIB_JOURNAL],
+ COL_BIB_SERIES, vals[COL_BIB_SERIES],
+ COL_BIB_BOOK, vals[COL_BIB_BOOK],
+ COL_BIB_ORG, vals[COL_BIB_ORG],
+ COL_BIB_CHAP, vals[COL_BIB_CHAP],
+ COL_BIB_SCHOOL, vals[COL_BIB_SCHOOL],
+ -1);
+}
+
+char* concat(char* str1, char* str2) {
+ char* ret = malloc(strlen(str1) + strlen(str2) + 1);
+ strcpy(ret, str1);
+ strcat(ret, str2);
+ return ret;
+}
+
diff --git a/biblio/bibtex/utils/mkbib/src/bib.h b/biblio/bibtex/utils/mkbib/src/bib.h
new file mode 100644
index 0000000000..dfe094d4f2
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/bib.h
@@ -0,0 +1,102 @@
+/* A Bison parser, made by GNU Bison 2.6.1. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+#ifndef YY_SRC_BIB_H
+# define YY_SRC_BIB_H
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ ENTRYTYPE = 258,
+ VALUE = 259,
+ KEY = 260,
+ OBRACE = 261,
+ EBRACE = 262,
+ QUOTE = 263,
+ SEMICOLON = 264
+ };
+#endif
+/* Tokens. */
+#define ENTRYTYPE 258
+#define VALUE 259
+#define KEY 260
+#define OBRACE 261
+#define EBRACE 262
+#define QUOTE 263
+#define SEMICOLON 264
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 2049 of yacc.c */
+#line 41 "src/bib.y"
+
+ char *sval;
+
+
+/* Line 2049 of yacc.c */
+#line 80 "src/bib.h"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE yylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_SRC_BIB_H */
diff --git a/biblio/bibtex/utils/mkbib/src/bib.y b/biblio/bibtex/utils/mkbib/src/bib.y
new file mode 100644
index 0000000000..87708f9819
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/bib.y
@@ -0,0 +1,153 @@
+%{
+#include <stdio.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <glib/gstdio.h>
+#include <fcntl.h>
+#include "main.h"
+char* concat(char* str1, char* str2);
+
+void lex_brace();
+void lex_normal();
+#define slen 1064
+ int yylex(void);
+/*enum
+{
+ COL_BIB_KEY=0,
+ COL_BIB_TYPE, COL_BIB_AUTHOR, COL_BIB_YEAR,
+ NUM_COLS} ;
+*/
+typedef struct {
+ char *type;
+ char *id;
+ GHashTable *table;
+} BibEntry;
+
+BibEntry b_entry;
+GtkTreeIter siter;
+GtkListStore *store;
+
+void yyerror(char *s)
+{
+ printf("YYERROR : %s\n", s);
+}
+void parse_entry(BibEntry *bib_entry);
+
+%}
+
+// Symbols.
+%union
+{
+ char *sval;
+};
+
+%token <sval> ENTRYTYPE
+%token <sval> VALUE
+%token <sval> KEY
+%token OBRACE
+%token EBRACE
+%token QUOTE
+%token SEMICOLON
+%type <sval> Value
+%type <sval> BraceV
+%type <sval> BraceVs
+%start Input
+
+%%
+
+Input: Entry
+ | Input Entry ; /* input is zero or more entires */
+
+Entry:
+ ENTRYTYPE '{' KEY ','{
+ b_entry.type = $1;
+ b_entry.id = $3;
+ b_entry.table = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);}
+ KeyVals '}' {
+ parse_entry(&b_entry);
+ g_hash_table_destroy(b_entry.table);
+ free(b_entry.type); free(b_entry.id);
+ b_entry.table = NULL;
+ b_entry.type = b_entry.id = NULL;}
+ ;
+
+KeyVals : /* empty */
+ | KeyVal
+ | KeyVal ',' KeyVals
+ ;
+
+KeyVal : KEY '=' Value { g_hash_table_replace(b_entry.table, $1, $3); }
+ ;
+
+Value : '{' { lex_brace(); } BraceVs { lex_normal(); } '}' { $$ = $3; }
+ | VALUE
+ ;
+
+BraceVs : /* empty */ { $$ = ""; }
+ | BraceV BraceVs { $$ = concat($1, $2); }
+ ;
+
+BraceV : VALUE
+ | '{' BraceVs '}' { $$ = concat(concat("{", $2), "}"); }
+ ;
+%%
+
+
+void parse_entry(BibEntry *bib_entry)
+{
+ char *author = "", *year = "";
+ GHashTableIter iter;
+ gpointer key, val;
+ char **kiter;
+ int i;
+ char *keys[] = {"id", "type", "author", "year", "title", "publisher", "editor",
+ "volume", "number", "pages", "month", "note", "address", "edition", "journal",
+ "series", "book", "chapter", "organization", NULL};
+ char *vals[] = {NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL};
+
+ g_hash_table_iter_init(&iter, bib_entry->table);
+ while (g_hash_table_iter_next(&iter, &key, &val)) {
+ for (kiter = keys, i = 0; *kiter; kiter++, i++)
+ {
+ if (!g_ascii_strcasecmp(*kiter, key)) {
+ vals[i] = g_strndup(val,slen);
+ break;
+ }
+ }
+ }
+
+ gtk_list_store_append (store, &siter);
+ gtk_list_store_set (store, &siter,
+ COL_BIB_AUTHOR, vals[COL_BIB_AUTHOR],
+ COL_BIB_TYPE, bib_entry->type,
+ COL_BIB_KEY, bib_entry->id,
+ COL_BIB_YEAR, vals[COL_BIB_YEAR],
+ COL_BIB_TITLE, vals[COL_BIB_TITLE],
+ COL_BIB_PUBLISHER, vals[COL_BIB_PUBLISHER],
+ COL_BIB_EDITOR, vals[COL_BIB_EDITOR],
+ COL_BIB_VOL, vals[COL_BIB_VOL],
+ COL_BIB_NUMBER, vals[COL_BIB_NUMBER],
+ COL_BIB_PAGE, vals[COL_BIB_PAGE],
+ COL_BIB_MON, vals[COL_BIB_MON],
+ COL_BIB_NOTE, vals[COL_BIB_NOTE],
+ COL_BIB_ADDRESS, vals[COL_BIB_ADDRESS],
+ COL_BIB_EDITION, vals[COL_BIB_EDITION],
+ COL_BIB_JOURNAL, vals[COL_BIB_JOURNAL],
+ COL_BIB_SERIES, vals[COL_BIB_SERIES],
+ COL_BIB_BOOK, vals[COL_BIB_BOOK],
+ COL_BIB_ORG, vals[COL_BIB_ORG],
+ COL_BIB_CHAP, vals[COL_BIB_CHAP],
+ COL_BIB_SCHOOL, vals[COL_BIB_SCHOOL],
+ -1);
+}
+
+char* concat(char* str1, char* str2) {
+ char* ret = malloc(strlen(str1) + strlen(str2) + 1);
+ strcpy(ret, str1);
+ strcat(ret, str2);
+ return ret;
+}
diff --git a/biblio/bibtex/utils/mkbib/src/biblst b/biblio/bibtex/utils/mkbib/src/biblst
new file mode 100644
index 0000000000..49d4575d22
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/biblst
@@ -0,0 +1,361 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+This file is part of mkbib.
+
+mkbib is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+mkbib is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "==select bibstyle==");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abstract");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "acm");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "acm-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agsm");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aaai-named");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "authordate1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "authordate2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "authordate3");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "authordate4");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apacann");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apacannx");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apacite");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apacitex");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apalike");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apalike2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apalike-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apalike-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsalpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aabbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aalpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrev");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrev4-1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrevM");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrmp");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrmp4-1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsrmpM");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "annotate");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "annotation");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bbs");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cbe");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cell");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chicago");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chicagoa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dcu");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "humanbio");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "humannat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "is-abbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "is-alpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "is-plain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "is-unsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jas99");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jmb");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "nar");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "naturemag");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phcpc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainyr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "-----------------------");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrvdin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrv-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrvhtml");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrv-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrvnat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrvnat-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "abbrvurl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "achemso");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "achicago");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "address");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "address-html");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "address-ldif");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "address-vcard");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "adfathesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "adrbirthday");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "adrconv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "adrfax");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aer");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aertt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agecon");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agu");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agu04");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agufull");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "agufull04");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aiaa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aichej");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aipauth4-1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aipnum4-1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ajae");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alphadin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alpha-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alphahtml");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alphahtmldate");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alphahtmldater");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alpha-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "alphaurl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ametsoc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsra");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsrn");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsrs");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsru");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "amsry");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "angew");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "anotit");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aomalpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aomplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apecon");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "apsr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "asaetr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "asa-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ascelike");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "astron");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aunsnot");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "aunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbr3");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbr3-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbr3-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbrv-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bababbrv-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babalpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babalpha-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babalpha-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babamspl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplai3");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplai3-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplai3-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplain-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babplain-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babunsrt-fl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "babunsrt-lf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bgteuabbr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bgteuabbr2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bgteupln");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bgteupln2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bgteupln3");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "biblatex");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "bibtoref");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "biochem");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "birthday");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cascadilla");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cc2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ChemCommun");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ChemEurJ");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chetref");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chicago-annote");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chicago-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "chscite");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cje");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cmpj");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cont-ab");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cont-au");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cont-no");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cont-ti");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "cv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dcbib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dinat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dk-abbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dk-alpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dk-apali");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dk-plain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dk-unsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dlfltxbbibtex");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "dtk");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ecca");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "econometrica");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "econometrica");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "econometrica-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ecta");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "elsarticle-harv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "elsarticle-num");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "elsarticle-num-names");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "email");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "email-html");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "en-mtc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "erae");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "expcites");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "expkeys");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "export");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "fbs");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "figbib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "figbib1");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "finplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "fr-mtc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "frplainnat-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gatech-thesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gatech-thesis-losa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gerabbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "geralpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gerapali");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gerplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gerunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "glsplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "glsshort");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2003");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2003s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008l");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008ls");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008n");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008ns");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost2008s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost705");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost705s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost780");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "gost780s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "hc-de");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "hc-en");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ieeepes");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ieeetr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtran");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranM");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranMN");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranN");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranS");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranSA");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "IEEEtranSN");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ieeetr-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ieeetr-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ier");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ijmart");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ijqc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "imac");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "inlinebib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "InorgChem");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "iopart-num");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "itaxpf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jae");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "JAmChemSoc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "JAmChemSoc_all");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jbact");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jcc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jmr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jneurosci");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jox");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jpc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jpe");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jphysicsB");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jss2");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jtb");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jthcarsu");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jurabib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jurarsp");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jureco");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "jurunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "klunamed");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "klunum");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "kluwer");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ksfh_nat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "letter");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "listbib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ltugbib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "mbplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "mbunsrtdin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "mslapa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "munich");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "named");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "namunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "natdin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "nddiss2e");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "nederlands");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "newapa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "newapave");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "oega");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "opcit");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "papalike");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "pccp");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "perception");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phaip");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phapalik");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phiaea");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phjcp");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phnf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phnflet");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phone");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phpf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phppcf");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phreport");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "phrmp");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plabbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plaindin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plain-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plain-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainhtml");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainhtmldate");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainhtmldater");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plain-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainnat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainnat-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainnat-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainnat-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plainurl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plalpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "plunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "pnas2009");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "psuthesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "refer");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "regstud");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "revcompchem");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "rsc");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "rusnat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sageep");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sapthesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "savetrees");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "seuthesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "siam");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "siam-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "siam-letters");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "spiebib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sweabbrv");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "swealpha");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sweplain");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sweplnat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "sweunsrt");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "tandfx");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "texsis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "thesnumb");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "thubib");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2003");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2003s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008l");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008ls");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008n");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008ns");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ugost2008s");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "UNAMThesis");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrtdin");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrt-fa");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrt-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrthtml");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrtnat");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrtnat-fr");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "unsrturl");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "usmeg-a");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "usmeg-n");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "ussagus");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "vak");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "vancouver");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "worlddev");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "xagsm");
+gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bibcombo), "xplain");
diff --git a/biblio/bibtex/utils/mkbib/src/caution.c b/biblio/bibtex/utils/mkbib/src/caution.c
new file mode 100644
index 0000000000..0f61a23ec9
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/caution.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+GtkWidget *window;
+
+void caution(char *error){
+ GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ error,
+ NULL, NULL);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
diff --git a/biblio/bibtex/utils/mkbib/src/file_util.c b/biblio/bibtex/utils/mkbib/src/file_util.c
new file mode 100644
index 0000000000..858f952a87
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/file_util.c
@@ -0,0 +1,156 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <string.h>
+#include <glib/gstdio.h>
+#include <fcntl.h>
+#include <gtk/gtk.h>
+#include "main.h"
+
+GtkWidget *window,
+ *flabel,
+ *tree,
+ *bibcombo;
+char *filename,
+ *key,
+ *val;
+GtkListStore *store;
+GtkTreeIter siter;
+#define slen 64
+#define CHAR_BUFF 5000
+
+/*
+ *Saving in the same file
+ */
+void save_file(GtkWidget *widget, gpointer data){
+ GError *Err;
+ g_file_set_contents(filename, buffer, -1, &Err);
+ if (Err)
+ { caution("Failed to save in %s",filename);
+ // g_free(str);
+ g_error_free(Err);
+ }
+ g_print("%s",filename);
+ // g_free(buffer);
+ buf_mod=FALSE;
+}
+
+/*
+ *Create and Save in a new/existing file
+ * The Save_As function
+ */
+void save_file_as(GtkWidget *widget, gpointer data)
+{
+ gchar *fname=NULL, *str;
+ gchar *cts;
+ GError *Err=NULL;
+ GtkWidget *dialog;
+ gsize length;
+ dialog=gtk_file_chooser_dialog_new("Save File As", GTK_WINDOW(window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
+
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ g_file_set_contents(filename, buffer, -1, &Err);
+ // g_free(buffer);
+ if (Err)
+ {
+ caution("Failed to save in %s",filename);
+ g_free(str);
+ g_error_free(Err);
+ }
+ }
+ buf_mod=FALSE;
+ gtk_widget_destroy(dialog);
+}
+
+
+void new_file(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *dialog = gtk_file_chooser_dialog_new("Save File", GTK_WINDOW(window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),"Untitled.bib");
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ if(TRUE)
+ {
+ remove(filename);
+ char* markup=g_markup_printf_escaped ("<span style=\"italic\">%s</span>", filename);
+ gtk_label_set_markup(GTK_LABEL(flabel), markup);
+ gtk_widget_destroy(dialog);
+ }
+ FILE *fn=g_fopen(filename,"w");
+ g_fprintf(fn,"#This File is Created by mkBIB\n");
+ fclose(fn);
+ }
+ gtk_widget_destroy(dialog);
+}
+
+void open_file(GtkWidget *widget, gpointer data)
+{
+ GError* error=NULL;
+ GtkWidget *dialog;
+ GtkFileFilter *filter;
+ dialog = gtk_file_chooser_dialog_new("Open File", NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ filter = gtk_file_filter_new();
+ gtk_file_filter_set_name(filter, "All files (*.*)");
+ gtk_file_filter_add_pattern(filter, "*");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+
+ filter = gtk_file_filter_new();
+ gtk_file_filter_set_name(filter, "Bibtex file (*.bib)");
+ gtk_file_filter_add_pattern(filter, "*.bib");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+ gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ gtk_list_store_clear (store);
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ g_file_get_contents(filename, &buffer, &length , &error);
+ g_assert(!error);
+ buf_mod=FALSE;
+
+ char* markup=g_markup_printf_escaped ("<span style=\"italic\">%s</span>", filename);
+ gtk_label_set_markup(GTK_LABEL(flabel), markup);
+ gtk_widget_destroy(dialog);
+
+ output_entry();
+ }
+ else{
+ gtk_widget_destroy(dialog);
+ // g_free(buffer);
+ }
+}
+
+
diff --git a/biblio/bibtex/utils/mkbib/src/help.c b/biblio/bibtex/utils/mkbib/src/help.c
new file mode 100644
index 0000000000..b8c3011462
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/help.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+GtkWidget *window;
+void help_about (GtkMenuItem *helpabout, GtkWindow *window)
+{
+ const gchar *auth[]={ "Rudra Banerjee <bnrj.rudra@yahoo.com>", NULL };
+ gchar *hstr=g_strdup_printf("%s/mkbib.svg", PIXMAP);
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(hstr, NULL);
+
+ GtkWidget *dialog = gtk_about_dialog_new();
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog), "mkbib");
+ gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), auth);
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION);
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),
+ "Copyright 2012 ©Rudra Banerjee"
+ );
+ gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),
+ "This is a simple BibTex manager \n"
+ "which can be used to create and edit standard bibtex file."
+ );
+ gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog),
+ "http://web.warwick.ac.uk/~phslav/packs.html#mkbib"
+ );
+ gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(dialog),
+ " This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. \n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. \n You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., \n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
+ );
+ gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(dialog),TRUE);
+ gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pixbuf);
+ g_object_unref(pixbuf), pixbuf = NULL;
+ gtk_dialog_run(GTK_DIALOG (dialog));
+ gtk_widget_destroy(dialog);
+ }
+void help_content(GtkWidget *widget)
+{
+ GError *error = NULL;
+ gtk_show_uri (gtk_widget_get_screen (widget),
+ "help:mkbib",
+ gtk_get_current_event_time(),
+ &error);
+
+ if(error)
+ {
+ g_printf ( "%s \n", error->message);
+ g_error_free (error);
+ }
+}
+
+
diff --git a/biblio/bibtex/utils/mkbib/src/main.h b/biblio/bibtex/utils/mkbib/src/main.h
new file mode 100644
index 0000000000..8e00693c1c
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/main.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+enum
+{
+ COL_BIB_KEY=0,
+ COL_BIB_TYPE, COL_BIB_AUTHOR, COL_BIB_YEAR, COL_BIB_TITLE,
+ COL_BIB_EDITOR, COL_BIB_PUBLISHER, COL_BIB_VOL, COL_BIB_NUMBER,
+ COL_BIB_PAGE, COL_BIB_MON, COL_BIB_NOTE, COL_BIB_ADDRESS,
+ COL_BIB_EDITION, COL_BIB_JOURNAL, COL_BIB_SERIES, COL_BIB_BOOK,
+ COL_BIB_ORG, COL_BIB_CHAP, COL_BIB_SCHOOL,
+ NUM_COLS} ;
+
+typedef enum
+{
+ ID_KEY, ID_TYPE, ID_AUTHOR, ID_YEAR, ID_TITLE,
+ ID_EDITOR, ID_PUBLISHER, ID_VOL, ID_NUMBER, ID_PAGE,
+ ID_MON, ID_NOTE, ID_ADDRESS, ID_EDITION, ID_JOURNAL,
+ ID_SERIES, ID_BOOK, ID_ORG, ID_CHAP, ID_SCHOOL,
+ NUM_ID
+}sort_ids;
+
+extern gchar *buffer;
+gsize length;
+GtkListStore *store;
+gboolean buf_mod;
+
+typedef struct {
+ GtkWidget *combo, *entry1, *entryAuth, *entryEditor, *entryTitle,
+ *entryPublisher, *entryVol, *entryNumber, *entryPage, *entryMon,
+ *entryNote, *entryKey, *entryYear, *entryAddress, *entryEdition,
+ *entryJournal, *entrySeries, *entryBooktitle, *entryOrg,
+ *entryChap, *entrySchool;
+} Entries;
+
+extern GtkTreeStore *treestore;
+
diff --git a/biblio/bibtex/utils/mkbib/src/mkbib.c b/biblio/bibtex/utils/mkbib/src/mkbib.c
new file mode 100644
index 0000000000..7eeefc037b
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/mkbib.c
@@ -0,0 +1,457 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <glib/gi18n.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gstdio.h>
+#include <fcntl.h>
+#include <gtk/gtk.h>
+#include "main.h"
+#include "config.h"
+
+FILE *tauth,*tyear,*ttitle;
+GtkWidget *window,
+ *menubar,
+ *flabel,
+ *tree,
+ *dialog,
+ *image,
+ *bibcombo,
+ *entrypdf;
+char *filename,*key, *val;
+GtkAccelGroup *menuGroup;
+GtkListStore *store;
+GtkTreeIter siter;
+gchar *buffer = NULL;
+
+void help_about(GtkMenuItem *helpabout, GtkWidget *parentWindow);
+void activate_func(GtkWidget *widget, gpointer data);
+void search_gs(GtkWidget *widget, gpointer data);
+void output_entry (GHashTable *table);
+guint parse_entry (GScanner *scanner,GHashTable *table);
+GtkWidget *create_view_and_model(void);
+void new_file(GtkWidget *widget, gpointer data);
+void open_file(GtkWidget *widget, gpointer data);
+void save_file(GtkWidget *widget, gpointer data);
+void save_file_as(GtkWidget *widget, gpointer data);
+void mk_bib(GtkWidget *widget, gpointer data);
+void caution();
+void help_content(GtkWidget *widget);
+void gen_gs(GtkWidget *widget, gpointer data);
+
+GdkPixbuf *create_pixbuf(const gchar * iconname) {
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+ pixbuf = gdk_pixbuf_new_from_file(iconname, &error);
+ if (!pixbuf) {
+ fprintf(stderr, "%s\n", error->message);
+ g_error_free(error);
+ }
+
+ return pixbuf;
+}
+
+gint sort_by_author(GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer userdata)
+{
+ gchar *first,*second ;
+ gtk_tree_model_get( model , a, COL_BIB_AUTHOR , &first,-1);
+ gtk_tree_model_get( model , b, COL_BIB_AUTHOR , &second, -1);
+
+ gint return_value = g_utf8_collate ( first , second ) ;
+ g_free ( first) ;
+ g_free ( second ) ;
+ return return_value ;
+}
+
+void main_window_quit(GtkWidget *widget, gpointer data){
+ if(!buf_mod){
+ gtk_main_quit();
+ }
+ else{
+ gboolean ret = FALSE;
+ GtkWidget *dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ "Do you want to save the changes before quit?");
+
+ gtk_window_set_title (GTK_WINDOW (dialog), "Save?");
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_NO)
+ {
+ gtk_main_quit();
+ }
+ else {
+ save_file_as(widget,data);
+ gtk_main_quit();
+ }
+ gtk_widget_destroy (dialog);
+ }
+}
+
+int main(int argc,
+ char *argv[]) {
+ GtkWidget *grid,
+ *button,
+ *frame,
+ *notebook,
+ *label,
+ *scrolledwindow,
+ *filemenu,
+ *editmenu,
+ *helpmenu,
+ *file,
+ *new,
+ *open,
+ *save,
+ *save_as,
+ *quit,
+ *edit,
+ *edit_entry,
+ *help,
+ *about,
+ *sep;
+ GtkAccelGroup *accel_group = NULL;
+ gtk_init(&argc, &argv);
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "mkBIB");
+ gtk_container_set_border_width(GTK_CONTAINER(window), 5);
+ gchar *sicon=g_strdup_printf("%s/mkbib.svg",PIXMAP);
+ gtk_window_set_icon(GTK_WINDOW(window),
+ create_pixbuf(sicon));
+ g_free(sicon);
+ g_signal_connect(window, "delete-event",
+ G_CALLBACK(main_window_quit), NULL);
+
+ grid = gtk_grid_new();
+ gtk_container_add(GTK_CONTAINER(window), grid);
+
+ menubar = gtk_menu_bar_new();
+ filemenu = gtk_menu_new();
+ editmenu = gtk_menu_new();
+ helpmenu = gtk_menu_new();
+
+ accel_group = gtk_accel_group_new();
+ gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
+
+ file = gtk_menu_item_new_with_mnemonic("_File");
+ new = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, accel_group);
+ open = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group);
+ save = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, accel_group);
+ save_as = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, accel_group);
+ sep = gtk_separator_menu_item_new();
+ quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
+
+ gtk_widget_add_accelerator (save, "activate", accel_group,
+ GDK_KEY_s, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
+ gtk_widget_add_accelerator (save_as, "activate", accel_group,
+ GDK_KEY_S, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
+
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), new);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), open);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save_as);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), sep);
+ gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);
+
+
+ edit = gtk_menu_item_new_with_mnemonic("_Edit");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menubar), edit);
+ edit_entry = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT, accel_group);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(edit), editmenu);
+ gtk_menu_shell_append(GTK_MENU_SHELL(editmenu), edit_entry);
+
+
+ help = gtk_menu_item_new_with_mnemonic("_Help");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menubar), help);
+ about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel_group);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), helpmenu);
+ gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), about);
+
+ GtkWidget *contents = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, accel_group);
+ gtk_widget_add_accelerator(contents, "activate", accel_group, GDK_KEY_F1, 0, GTK_ACCEL_VISIBLE);
+ gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), contents);
+
+ g_signal_connect(G_OBJECT(new), "activate", G_CALLBACK(new_file), NULL);
+ g_signal_connect(G_OBJECT(open), "activate", G_CALLBACK(open_file), NULL);
+ g_signal_connect(G_OBJECT(save), "activate", G_CALLBACK(save_file), NULL);
+ g_signal_connect(G_OBJECT(save_as), "activate", G_CALLBACK(save_file_as), NULL);
+ g_signal_connect(G_OBJECT(quit), "activate", G_CALLBACK(main_window_quit), NULL);
+ // g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+
+ g_signal_connect(G_OBJECT(edit_entry), "activate", G_CALLBACK(gen_gs), NULL);
+
+ g_signal_connect(G_OBJECT(contents), "activate", G_CALLBACK(help_content), NULL);
+ g_signal_connect(G_OBJECT(about), "activate", G_CALLBACK(help_about), (gpointer) window);
+
+
+ Entries *e = g_slice_new(Entries);
+
+
+ e->combo = gtk_combo_box_text_new();
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "==Entry Type==");
+ gtk_combo_box_set_active(GTK_COMBO_BOX(e->combo), 0);
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Book");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Article");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Booklet");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Conference");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inBook");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inCollection");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inProceedings");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Manual");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "MastersThesis");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Misc");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "PhdThesis");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Proceedings");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Techreport");
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Unpublished");
+
+ e->entry1 = gtk_entry_new();
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entry1), "bibKey");
+
+ scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow),
+ GTK_SHADOW_IN);
+ gtk_widget_set_size_request(scrolledwindow, 1000, 175);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+// tree = create_view_and_model();
+ gtk_container_add(GTK_CONTAINER(scrolledwindow), create_view_and_model());
+
+ notebook = gtk_notebook_new();
+ gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
+
+
+ /*
+ * Tab 1
+ */
+ frame = gtk_frame_new("");
+
+ GtkWidget *page1 = gtk_grid_new();
+ gtk_container_add(GTK_CONTAINER(frame), page1);
+
+ e->entryAuth = gtk_entry_new();
+ GtkWidget *Authlabel = gtk_label_new("Author");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryAuth), "Author");
+
+ e->entryEditor = gtk_entry_new();
+ GtkWidget *Editorlabel = gtk_label_new("Editor");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryEditor), "Editor");
+
+ e->entryTitle = gtk_entry_new();
+ GtkWidget *Titlelabel = gtk_label_new("Title");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryTitle), "Title");
+
+ e->entrySeries = gtk_entry_new();
+ GtkWidget *Serieslabel = gtk_label_new("Series");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entrySeries), "Series");
+
+ e->entryBooktitle = gtk_entry_new();
+ GtkWidget *Booktitlelabel = gtk_label_new("Booktitle");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryBooktitle), "Booktitle");
+
+ e->entryYear = gtk_entry_new();
+ GtkWidget *Yearlabel = gtk_label_new("Year");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryYear), "Year");
+
+ label = gtk_label_new("Authors/Title");
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, label);
+
+ gtk_grid_attach(GTK_GRID(page1), e->entryAuth, 2, 0, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Authlabel, 0, 0, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page1), e->entryTitle, 2, 4, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Titlelabel, 0, 4, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page1), e->entryYear, 2, 8, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Yearlabel, 0, 8, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page1),gtk_separator_new(GTK_ORIENTATION_HORIZONTAL),0,10,4,2);
+ gtk_grid_attach(GTK_GRID(page1), e->entrySeries, 2, 12, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Serieslabel, 0, 12, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page1), e->entryBooktitle, 2, 16, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Booktitlelabel, 0, 16, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page1), e->entryEditor, 2, 20, 1, 1);
+ gtk_grid_attach(GTK_GRID(page1), Editorlabel, 0, 20, 1, 1);
+
+
+ /*
+ * Tab 2
+ */
+ GtkWidget *frame2 = gtk_frame_new("");
+
+ GtkWidget *page2 = gtk_grid_new();
+ gtk_container_add(GTK_CONTAINER(frame2), page2);
+
+ e->entryJournal = gtk_entry_new();
+ GtkWidget *Journallabel = gtk_label_new("Journal");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryJournal), "Journal");
+
+ e->entryPublisher = gtk_entry_new();
+ GtkWidget *Publabel = gtk_label_new("Publishers");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryPublisher), "Publisher");
+
+ e->entryVol = gtk_entry_new();
+ GtkWidget *Vollabel = gtk_label_new("Volume");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryVol), "Volume");
+
+ e->entryNumber = gtk_entry_new();
+ GtkWidget *Isslabel = gtk_label_new("Number");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryNumber), "Number");
+
+ e->entryPage = gtk_entry_new();
+ GtkWidget *Pagelabel = gtk_label_new("Page");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryPage), "Page");
+
+
+ e->entryChap = gtk_entry_new();
+ GtkWidget *Chaplabel = gtk_label_new("Chap");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryChap), "Chapter");
+
+ label = gtk_label_new("Publishers");
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame2, label);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryJournal, 2, 0, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Journallabel, 0, 0, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryPublisher, 2, 4, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Publabel, 0, 4, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryVol, 2, 8, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Vollabel, 0, 8, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryNumber, 2, 12, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Isslabel, 0, 12, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryPage, 2, 16, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Pagelabel, 0, 16, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page2), e->entryChap, 2, 20, 1, 1);
+ gtk_grid_attach(GTK_GRID(page2), Chaplabel, 0, 20, 1, 1);
+
+ /*
+ * Tab 3
+ */
+ GtkWidget *frame3 = gtk_frame_new("");
+
+ GtkWidget *page3 = gtk_grid_new();
+ gtk_container_add(GTK_CONTAINER(frame3), page3);
+
+ e->entryMon = gtk_entry_new();
+ GtkWidget *Monlabel = gtk_label_new("Month");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryMon), "Month");
+
+ e->entryNote = gtk_entry_new();
+ GtkWidget *Notelabel = gtk_label_new("Note");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryNote), "Note");
+
+ e->entryKey = gtk_entry_new();
+ GtkWidget *Keylabel = gtk_label_new("Key");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryKey), "Key");
+
+ e->entryAddress = gtk_entry_new();
+ GtkWidget *Addlabel = gtk_label_new("Address");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryAddress), "Address");
+
+ e->entryEdition = gtk_entry_new();
+ GtkWidget *Editionlabel = gtk_label_new("Edition");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryEdition), "Edition");
+
+ e->entryOrg = gtk_entry_new();
+ GtkWidget *Orglabel = gtk_label_new("Organisation");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryOrg), "Organisation");
+
+ e->entrySchool = gtk_entry_new();
+ GtkWidget *Schoollabel = gtk_label_new("School");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(e->entrySchool), "School");
+
+ label = gtk_label_new("Optional");
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame3, label);
+
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryMon, 2, 0, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Monlabel, 0, 0, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryNote, 2, 4, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Notelabel, 0, 4, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryKey, 2, 8, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Keylabel, 0, 8, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryAddress, 2, 12, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Addlabel, 0, 12, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryEdition, 2, 16, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Editionlabel, 0, 16, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entryOrg, 2, 20, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Orglabel, 0, 20, 1, 1);
+
+ gtk_grid_attach(GTK_GRID(page3), e->entrySchool, 2, 24, 1, 1);
+ gtk_grid_attach(GTK_GRID(page3), Schoollabel, 0, 24, 1, 1);
+
+ /*
+ * Notebook Done
+ */
+ /* bibcombo = gtk_combo_box_text_new();
+#include "biblst"
+
+gtk_combo_box_set_active(GTK_COMBO_BOX(bibcombo), 0);
+g_signal_connect(G_OBJECT(bibcombo), "changed", G_CALLBACK(mk_bib), NULL);
+gtk_grid_attach(GTK_GRID(grid), bibcombo, 31, 6, 2, 1);
+*/
+ button = gtk_button_new_with_label("CREATE");
+ g_signal_connect(button, "clicked", G_CALLBACK(activate_func), e);
+
+ GtkWidget *gen_q = gtk_button_new_with_label("Search Google Scholar");
+ g_signal_connect(gen_q, "clicked", G_CALLBACK(search_gs), e);
+
+ gtk_grid_set_column_spacing(GTK_GRID(grid), 10);
+ flabel = gtk_label_new("No file Selected");
+
+ gtk_grid_attach(GTK_GRID(grid), flabel, 3, 0, 6, 1);
+ gtk_grid_attach(GTK_GRID(grid), e->combo, 0, 1, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), e->entry1, 1, 1, 2, 1);
+ gtk_grid_attach(GTK_GRID(grid), notebook, 0, 3, 3, 1);
+ gtk_grid_attach(GTK_GRID(grid), scrolledwindow, 3, 1, 10, 7);
+ gtk_grid_attach(GTK_GRID(grid), menubar, 0, 0, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), button, 0, 6, 1, 1);
+ gtk_grid_attach(GTK_GRID(grid), gen_q, 1, 6, 2, 1);
+
+ gtk_widget_show_all(window);
+ gtk_main();
+
+ return 0;
+}
diff --git a/biblio/bibtex/utils/mkbib/src/scan.c b/biblio/bibtex/utils/mkbib/src/scan.c
new file mode 100644
index 0000000000..0e52998cd9
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/scan.c
@@ -0,0 +1,1805 @@
+
+#line 3 "src/scan.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 36
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 11
+#define YY_END_OF_BUFFER 12
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[26] =
+ { 0,
+ 0, 0, 1, 1, 12, 11, 7, 7, 11, 11,
+ 8, 5, 11, 3, 1, 2, 0, 4, 9, 5,
+ 0, 3, 1, 6, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 4, 5, 1, 1, 1, 1, 1,
+ 1, 1, 1, 6, 1, 1, 1, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 8, 1, 1,
+ 6, 1, 1, 9, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 1, 1, 1, 1, 8, 1, 10, 10, 10, 10,
+
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 11, 1, 11, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[12] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 3, 3, 1, 3,
+ 4
+ } ;
+
+static yyconst flex_int16_t yy_base[31] =
+ { 0,
+ 0, 0, 25, 24, 34, 37, 37, 37, 29, 0,
+ 37, 25, 21, 0, 0, 37, 26, 25, 37, 21,
+ 17, 0, 0, 11, 37, 11, 15, 19, 14, 23
+ } ;
+
+static yyconst flex_int16_t yy_def[31] =
+ { 0,
+ 25, 1, 26, 26, 25, 25, 25, 25, 27, 28,
+ 25, 25, 25, 29, 30, 25, 27, 27, 25, 25,
+ 25, 29, 30, 25, 0, 25, 25, 25, 25, 25
+ } ;
+
+static yyconst flex_int16_t yy_nxt[49] =
+ { 0,
+ 6, 7, 8, 9, 10, 11, 12, 6, 13, 14,
+ 11, 15, 15, 15, 15, 17, 22, 17, 17, 19,
+ 24, 19, 19, 23, 23, 23, 24, 20, 18, 18,
+ 21, 20, 18, 25, 16, 16, 5, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25
+ } ;
+
+static yyconst flex_int16_t yy_chk[49] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 26, 26, 26, 26, 27, 29, 27, 27, 28,
+ 24, 28, 28, 30, 30, 30, 21, 20, 18, 17,
+ 13, 12, 9, 5, 4, 3, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "src/scan.l"
+#line 2 "src/scan.l"
+#include "bib.h"
+ int line;
+
+#line 472 "src/scan.c"
+
+#define INITIAL 0
+#define braceV 1
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 10 "src/scan.l"
+
+
+#line 658 "src/scan.c"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 26 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 37 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+/* rule 1 can match eol */
+YY_RULE_SETUP
+#line 12 "src/scan.l"
+{ yylval.sval = strdup(yytext); return VALUE; }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 13 "src/scan.l"
+{ return *yytext; }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 15 "src/scan.l"
+{ yylval.sval = strdup(yytext); return KEY; }
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 16 "src/scan.l"
+{ yylval.sval = strndup(yytext+1, yyleng-2); return VALUE; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 17 "src/scan.l"
+{ yylval.sval = strdup(yytext); return VALUE; }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 18 "src/scan.l"
+{ yylval.sval = strdup(yytext+1); return ENTRYTYPE; }
+ YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+#line 19 "src/scan.l"
+; /* ignore whitespace */
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 20 "src/scan.l"
+{ return *yytext; }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 21 "src/scan.l"
+{ fprintf(stderr, "Unrecognized character %c in input\n", *yytext); }
+ YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+#line 22 "src/scan.l"
+{line++;printf("%d",line);}
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 24 "src/scan.l"
+ECHO;
+ YY_BREAK
+#line 799 "src/scan.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(braceV):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 26 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 26 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 25);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 24 "src/scan.l"
+
+
+
+void lex_brace() {
+ BEGIN(braceV);
+}
+void lex_normal() {
+ BEGIN(0);
+}
+
+
+
diff --git a/biblio/bibtex/utils/mkbib/src/scan.l b/biblio/bibtex/utils/mkbib/src/scan.l
new file mode 100644
index 0000000000..7d1f26d93f
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/scan.l
@@ -0,0 +1,33 @@
+%{
+#include "bib.h"
+ int line;
+%}
+
+%option noyywrap
+
+%x braceV
+
+%%
+
+<braceV>[^{}]* { yylval.sval = strdup(yytext); return VALUE; }
+<braceV>[{}] { return *yytext; }
+
+[A-Za-z][A-Za-z0-9_":]* { yylval.sval = strdup(yytext); return KEY; }
+\".*\" { yylval.sval = strndup(yytext+1, yyleng-2); return VALUE; }
+[0-9]+ { yylval.sval = strdup(yytext); return VALUE; }
+@[A-Za-z][A-Za-z]+ { yylval.sval = strdup(yytext+1); return ENTRYTYPE; }
+[ \t\n] ; /* ignore whitespace */
+[{}=,] { return *yytext; }
+#. { fprintf(stderr, "Unrecognized character %c in input\n", *yytext); }
+\n {line++;printf("%d",line);}
+
+%%
+
+void lex_brace() {
+ BEGIN(braceV);
+}
+void lex_normal() {
+ BEGIN(0);
+}
+
+
diff --git a/biblio/bibtex/utils/mkbib/src/search.c b/biblio/bibtex/utils/mkbib/src/search.c
new file mode 100644
index 0000000000..973c9a91dd
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/search.c
@@ -0,0 +1,119 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <gtk/gtk.h>
+#include <string.h>
+#include <libsoup/soup.h>
+#include "main.h"
+#define gs_BUFF 1024
+GtkWidget* gs_txt;
+
+void search_gs(GtkWidget *widget, gpointer data) {
+ const gchar *strAuth, *strTitle, *strYear;
+ gchar *encoded, strurl[1024];
+ Entries *e = (Entries*) data;
+ strAuth = gtk_entry_get_text(GTK_ENTRY(e->entryAuth));
+ strTitle = gtk_entry_get_text(GTK_ENTRY(e->entryTitle));
+ strYear = gtk_entry_get_text(GTK_ENTRY(e->entryYear));
+
+ if ((strlen(strTitle)!=0)&(strlen(strAuth)!=0)){
+ encoded = soup_form_encode ("as_q", strTitle,
+ "as_sauthors", strAuth,
+ "as_ylo", strYear, NULL);
+ }
+ else if((strlen(strTitle)==0)&(strlen(strAuth)!=0)){
+ encoded=soup_form_encode("as_q",strAuth,
+ "as_ylo",strYear,NULL);
+ }
+ else if((strlen(strTitle)!=0)&(strlen(strAuth)==0)){
+ encoded=soup_form_encode("as_q",strTitle,
+ "as_ylo",strYear,NULL);
+ }
+ else if((strlen(strTitle)==0)&(strlen(strAuth)==0)){
+ caution("You haven't given any search criteria!");
+ return;
+ }
+ strcpy(strurl,"http://scholar.google.com/scholar?");
+ strcat(strurl,encoded);
+
+ gtk_show_uri(gdk_screen_get_default(),strurl,GDK_CURRENT_TIME,NULL);
+ gtk_entry_set_text(GTK_ENTRY(e->entryAuth),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryYear),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryTitle),"");
+}
+
+void gen_gs(GtkWidget *widget, gpointer data) {
+ void gs_open(GtkWidget *widget, gpointer data);
+ GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT);
+ gtk_window_set_title(GTK_WINDOW(window), "Enter a bibtex entry");
+ gtk_container_set_border_width(GTK_CONTAINER(window), 5);
+ GtkWidget* gen_grid=gtk_grid_new();
+ gtk_container_add(GTK_CONTAINER(window), gen_grid);
+
+ gs_txt=gtk_text_view_new();
+ gtk_widget_set_size_request(gs_txt, 250, 250);
+
+ GtkWidget* con_gen= gtk_button_new_with_label("Create");
+ g_signal_connect(con_gen, "clicked", G_CALLBACK(gs_open), NULL);
+ // g_signal_connect(con_gen, "clicked", G_CALLBACK(close_widget), NULL);
+
+ GtkWidget *con_can= gtk_button_new_with_label("Cancel");
+ g_signal_connect_swapped(con_can, "clicked", G_CALLBACK(gtk_widget_destroy), window);
+ gtk_grid_attach(GTK_GRID(gen_grid), gs_txt, 0, 1, 10, 10);
+ gtk_grid_attach(GTK_GRID(gen_grid), con_gen, 0, 12, 5, 1);
+ gtk_grid_attach(GTK_GRID(gen_grid), con_can, 5, 12, 5, 1);
+ gtk_widget_show_all(window);
+}
+
+void gs_open(GtkWidget *window, gpointer data) {
+ GScanner *gs_scanner;
+ GHashTable *gs_table;
+ GError* error=NULL;
+ GtkTextIter start, end;
+ GtkListStore *gs_store;
+ GtkTreeIter siter;
+ GtkWidget *gs_tree;
+ gboolean valid;
+ GString *ustring = g_string_new ("");
+ GString *str=g_string_new(NULL);
+
+ GtkTextBuffer *gs_buf=gtk_text_view_get_buffer(GTK_TEXT_VIEW(gs_txt));
+ gtk_text_buffer_get_start_iter (gs_buf, &start);
+ gtk_text_buffer_get_end_iter (gs_buf, &end);
+ gchar *gs_text = gtk_text_buffer_get_text (gs_buf, &start, &end, FALSE);
+
+ if (buffer == NULL){
+// buffer = (char *) malloc(strlen(gs_text) + 1);
+ buffer=g_strdup(gs_text);
+ }
+ else{
+ gchar *t=buffer;
+ buffer=g_strconcat(buffer,gs_text,NULL);
+ g_free(t);
+ }
+ gtk_list_store_clear(store);
+ output_entry ();
+ buf_mod=TRUE;
+ gtk_widget_destroy(gtk_widget_get_toplevel (window));
+}
+
+void close_widget(GtkWidget *window, gpointer data){
+}
diff --git a/biblio/bibtex/utils/mkbib/src/update_file.c b/biblio/bibtex/utils/mkbib/src/update_file.c
new file mode 100644
index 0000000000..925b2f1dd6
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/update_file.c
@@ -0,0 +1,134 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <string.h>
+/* #include <stdio.h>
+ * #include <stdlib.h>
+ * #include <sys/types.h>
+ * #include <sys/stat.h>
+ * #include <gdk/gdk.h>
+ * #include <gdk/gdkkeysyms.h>
+ */
+#include "main.h"
+GtkWidget *flabel;
+char *filename;
+void caution();
+GtkListStore *store;
+GtkTreeIter siter;
+GError* error = NULL;
+
+
+void activate_func(GtkWidget *widget, gpointer data) {
+ Entries *e = (Entries*) data;
+ const gchar *strings[21] = {""};
+ strings[0] = g_strdup(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(e->combo)));
+ strings[1] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entry1)));
+ strings[2] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryAuth)));
+ strings[3] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryEditor)));
+ strings[4] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryTitle)));
+ strings[5] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryPublisher)));
+ strings[6] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryVol)));
+ strings[7] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryNumber)));
+ strings[8] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryPage)));
+ strings[9] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryMon)));
+ strings[10] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryNote)));
+ strings[11] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryKey)));
+ strings[12] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryYear)));
+ strings[13] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryAddress)));
+ strings[14] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryEdition)));
+ strings[15] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryJournal)));
+ strings[16] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entrySeries)));
+ strings[17] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryBooktitle)));
+ strings[18] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryOrg)));
+ strings[19] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entrySchool)));
+ strings[20] = g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entryChap)));
+
+
+ if(strcmp (strings[0],"==Entry Type==")==0){
+ caution("Select Entry Type");
+ }
+ else if(strcmp(strings[1],"")==0){
+ caution("Select Key");
+ }
+ else{
+ gtk_list_store_append(store, &siter);
+ gtk_list_store_set(store, &siter,
+ COL_BIB_KEY, strings[0],
+ COL_BIB_TYPE, strings[1],
+ COL_BIB_AUTHOR, strings[2],
+ COL_BIB_YEAR, strings[12],
+ COL_BIB_TITLE, strings[4],
+ COL_BIB_JOURNAL, strings[5],
+ -1);
+
+ GString *tstring = g_string_new ("");
+ GString *str=g_string_new(buffer);
+ gtk_label_set_text(GTK_LABEL(flabel), filename);
+ g_string_append_printf (tstring, "@%s{%s",strings[0], strings[1]);
+ gchar *keyword[21] = {
+ "Type" , "ID",
+ "Author" , "Editor" , "Title" , "Publisher",
+ "Volume" , "Number" , "Pages" , "Month" ,
+ "Note" , "Key" , "Year" , "Address" ,
+ "Edition" , "Journal", "Series", "Booktitle",
+ "Organization", "Chapter", "School"};
+
+ int i=2;
+ while (i < 21) {
+ if (strlen(strings[i]) != 0) {
+ g_string_append_printf(tstring, ",\n\t%s=\"%s\"",
+ keyword[i], strings[i]);
+ g_free((char*)strings[i]);
+ strings[i]=NULL;
+ g_print("Cleaned:%d\n",i);
+ }
+ i++;
+ }
+
+ g_string_append_printf (tstring,"\n}\n");
+ g_string_append(str,tstring->str);
+ g_string_free(tstring, TRUE);
+ buffer=str->str;
+ buf_mod=TRUE;
+ gtk_entry_set_text(GTK_ENTRY(e->entry1),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryAuth),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryEditor),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryTitle),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryPublisher),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryVol),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryNumber),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryPage),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryMon),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryNote),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryKey),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryYear),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryAddress),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryEdition),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryJournal),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entrySeries),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryBooktitle),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryOrg),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entryChap),"");
+ gtk_entry_set_text(GTK_ENTRY(e->entrySchool),"");
+ }
+}
+
diff --git a/biblio/bibtex/utils/mkbib/src/view.c b/biblio/bibtex/utils/mkbib/src/view.c
new file mode 100644
index 0000000000..0806b507f7
--- /dev/null
+++ b/biblio/bibtex/utils/mkbib/src/view.c
@@ -0,0 +1,262 @@
+/* Copyright (C) 2012 Rudra Banerjee*/
+
+/*
+ This file is part of mkbib.
+
+ mkbib is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ mkbib is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with mkbib. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+#include <string.h>
+#include <glib/gstdio.h>
+#include <fcntl.h>
+#include <gtk/gtk.h>
+#include "main.h"
+GtkWidget *window,
+ *flabel,
+ *tree,
+ *bibcombo;
+char *filename,*key, *val;
+GtkTreeIter siter;
+#define slen 1064
+
+void activate_func(GtkWidget *widget, gpointer data);
+
+char output_entry () {
+ extern FILE* yyin;
+ extern int yyparse (void);
+ yyin=fmemopen(buffer,strlen(buffer),"r");
+ return yyparse();
+}
+
+
+GtkWidget *create_view_and_model(void) {
+ GtkCellRenderer *cell;
+ void
+ cell_edited(GtkCellRendererText *renderer,
+ gchar *path,
+ gchar *new_text,
+ GtkTreeView *treeview);
+ GtkTreeViewColumn *col_key,*col_year,*col_type,*col_auth,*col_title,*col_journal;
+
+ store = gtk_list_store_new (NUM_COLS,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+ tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
+ g_object_unref(G_OBJECT(store));
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
+
+
+ /* #1: KEY COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_KEY));
+ col_key=gtk_tree_view_column_new_with_attributes (
+ "Key", cell,
+ "text", COL_BIB_KEY,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id( col_key, ID_KEY);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_key);
+ gtk_tree_view_column_set_max_width (col_key,100);
+
+
+ /* #2: TYPE COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set(G_OBJECT(cell), "wrap-mode", PANGO_WRAP_WORD,
+ "wrap-width",100,"editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_TYPE));
+
+ col_type=gtk_tree_view_column_new_with_attributes (
+ "Type", cell,
+ "text", COL_BIB_TYPE,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id( col_type, ID_TYPE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_type);
+
+
+
+ /* #3: AUTHOR COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set(G_OBJECT(cell), "wrap-mode", PANGO_WRAP_WORD,
+ "wrap-width",300,"editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_AUTHOR));
+
+ col_auth=gtk_tree_view_column_new_with_attributes (
+ "Author", cell,
+ "text", COL_BIB_AUTHOR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id( col_auth, ID_AUTHOR);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_auth);
+ // gtk_tree_view_column_set_max_width (col_auth,350);
+
+
+ /* #4: YEAR COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_YEAR));
+
+ col_year=gtk_tree_view_column_new_with_attributes (
+ "Year", cell,
+ "text", COL_BIB_YEAR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id( col_year, ID_YEAR);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_year);
+ gtk_tree_view_column_set_max_width (col_year,65);
+
+
+ /* #5: TITLE COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set(G_OBJECT(cell), "wrap-mode", PANGO_WRAP_WORD,
+ "wrap-width",300,"editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_TITLE));
+
+ col_title=gtk_tree_view_column_new_with_attributes (
+ "Title", cell,
+ "text", COL_BIB_TITLE,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id( col_title, ID_TITLE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_title);
+ // gtk_tree_view_column_set_max_width (col_pub,350);
+
+
+ /* #6: Journal COLUMN */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set(G_OBJECT(cell), "wrap-mode", PANGO_WRAP_WORD,
+ "wrap-width",100,"editable", TRUE, NULL);
+ g_signal_connect (cell, "edited",G_CALLBACK(cell_edited), tree);
+ g_object_set_data (G_OBJECT (cell),
+ "column", GINT_TO_POINTER (COL_BIB_JOURNAL));
+
+ col_journal=gtk_tree_view_column_new_with_attributes (
+ "Journal", cell,
+ "text", COL_BIB_JOURNAL,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(col_journal, ID_JOURNAL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree), col_journal);
+
+ return tree;
+}
+
+
+/* Apply the changed text to the cell if it is not an empty string. */
+void cell_edited(GtkCellRendererText *renderer,
+ gchar *path,
+ gchar *new_text,
+ GtkTreeView *treeview)
+{
+ guint column;
+ GtkTreeIter iter;
+ gboolean valid;
+ GtkTreeModel *model;
+ GString *ustring = g_string_new ("");
+ GString *str=g_string_new(NULL);
+
+ // g_free(buffer);
+ gpointer columnptr = g_object_get_data(G_OBJECT(renderer), "column");
+ column = GPOINTER_TO_UINT(columnptr);
+
+ if (g_ascii_strcasecmp (new_text, "") != 0)
+ {
+ model = gtk_tree_view_get_model (treeview);
+ if (gtk_tree_model_get_iter_from_string (model, &iter, path))
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, new_text, -1);
+ }
+ for (valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
+ valid;
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter)) {
+ char *string0, *string1, *string2, *string3, *string4,*string5, *string6,
+ *string7, *string8, *string9,*string10, *string11, *string12, *string13,
+ *string14,*string15, *string16, *string17, *string18, *string19;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+ 0, &string0, 1, &string1, 2, &string2, 3, &string3,
+ 4, &string4, 5, &string5, 6, &string6, 7, &string7,
+ 8, &string8, 9, &string9, 10, &string10, 11, &string11,
+ 12, &string12, 13, &string13, 14, &string14, 15, &string15,
+ 16, &string16, 17, &string17, 18, &string18, 19, &string19,
+ -1);//
+ /* g_print("0:%s\n1:%s\n2:%s\n3:%s\n4:%s\n5:%s\n6:%s\n7:%s\n8:%s\n9:%s\n10:%s\n11:%s\n12:%s\n13:%s\n14:%s\n15:%s\n16:%s\n17:%s\n18:%s\n19:%s",
+ string0, string1, string2, string3, string4, string5, string6,
+ string7, string8, string9,string10, string11, string12, string13,
+ string14,string15, string16, string17, string18, string19);
+ */
+ g_string_append_printf (ustring, "@%s{%s,\n",string1, string0);
+ if( strlen(string2)!=0 ||string2!=NULL)
+ g_string_append_printf (ustring,"\tAuthor=\"%s\",\n", string2);
+ if( strlen(string3)!=0 ||string3!=NULL)
+ g_string_append_printf (ustring,"\tYear=\"%s\",\n", string3);
+ if( strlen(string4)!=0 ||string4!=NULL)
+ g_string_append_printf (ustring, "\tTitle=\"%s\",\n", string4);
+ if( (string5)!=0 || string5 !=NULL)
+ g_string_append_printf (ustring, "\tPublisher=\"%s\",\n", string5);
+ if( (string6)!=0 || string6 !=NULL)
+ g_string_append_printf (ustring, "\tEditor=\"%s\",\n", string6);
+ if( (string7)!=0 && string7 !=NULL)
+ g_string_append_printf (ustring, "\tVolume=\"%s\",\n", string7);
+ if( (string8)!=0 && string8 !=NULL)
+ g_string_append_printf (ustring, "\tNumber=\"%s\",\n", string8);
+ if( (string9)!=0 && string9 !=NULL)
+ g_string_append_printf (ustring, "\tPages=\"%s\",\n", string9);
+ if( (string10)!=0 && string10 !=NULL)
+ g_string_append_printf (ustring, "\tMonth=\"%s\",\n", string10);
+ if( (string11)!=0 && string11 !=NULL)
+ g_string_append_printf (ustring, "\tNote=\"%s\",\n", string11);
+ if( (string12)!=0 && string12 !=NULL)
+ g_string_append_printf (ustring, "\tKey=\"%s\",\n", string12);
+ if( (string13)!=0 && string13 !=NULL)
+ g_string_append_printf (ustring, "\tAddress=\"%s\",\n", string13);
+ if( (string14)!=0 && string14 !=NULL)
+ g_string_append_printf (ustring, "\tJournal=\"%s\",\n", string14);
+ if( (string15)!=0 && string15 !=NULL)
+ g_string_append_printf (ustring, "\tEdition=\"%s\",\n", string15);
+ if( (string16)!=0 && string16 !=NULL)
+ g_string_append_printf (ustring, "\tSeries=\"%s\",\n", string16);
+ if( (string17)!=0 && string17 !=NULL)
+ g_string_append_printf (ustring, "\tBooktitle=\"%s\",\n", string17);
+ if( (string18)!=0 && string18 !=NULL)
+ g_string_append_printf (ustring, "\tOrganization=\"%s\",\n", string18);
+ if( (string19)!=0 && string19 !=NULL)
+ g_string_append_printf (ustring, "\tChapter=\"%s\",\n", string19);
+
+ g_string_append_printf(ustring, "%s\n","}");
+
+ g_free (string0); g_free (string1);
+ g_free (string2); g_free (string3);
+ g_free (string4); g_free (string5);
+ g_free (string6); g_free (string7);
+ g_free (string8); g_free (string9);
+ g_free (string10); g_free (string11);
+ g_free (string12); g_free (string13);
+ g_free (string14); g_free (string15);
+ g_free (string16); g_free (string17);
+ g_free (string18); g_free (string19);
+ }
+ g_string_append(str,ustring->str);
+ buffer=str->str;
+ buf_mod=TRUE;
+}
diff --git a/biblio/bibtex/utils/mrcheckbib/README b/biblio/bibtex/utils/mrcheckbib/README
new file mode 100644
index 0000000000..b7138e619e
--- /dev/null
+++ b/biblio/bibtex/utils/mrcheckbib/README
@@ -0,0 +1,4 @@
+mrcheckbib is a bibtex file verification tool using the AMS MRef database,
+it takes every entry in a bibtex file (.bib) and checks it against the
+database. If it finds a unique MRef entry, then your entry will be replaced
+by the MRef one.
diff --git a/biblio/bibtex/utils/mrcheckbib/mrcheckbib.sh b/biblio/bibtex/utils/mrcheckbib/mrcheckbib.sh
new file mode 100644
index 0000000000..c21367c074
--- /dev/null
+++ b/biblio/bibtex/utils/mrcheckbib/mrcheckbib.sh
@@ -0,0 +1,241 @@
+#/bin/zsh
+
+# mrcheckbib - version DBL_MIN
+# checks a bibtex file (.bib) against the AMS MRef database
+#
+# Copyright (C) 2006 John Cagnol <john@cagnol.net>
+# University Leonard de Vinci, Paris, France
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details. This document can
+# be obtained at http://www.gnu.org/licenses/gpl.txt
+#
+# Usage:
+# mrcheckbib basename
+#
+# Where:
+# basename.bib is the bibtex file to be checked
+#
+# Output:
+# result is placed in file-mrefed.bib and log is placed in
+# file-mrefed.log
+#
+# Example:
+# mrcheckbib references
+#
+# checks file references.bib against MRef and places the result in
+# references-mrefed.bib
+#
+# Purpose of the script:
+#
+# This script takes every entry in a bibtex file (.bib) and checks it
+# against the AMS MRef database (see http://www.ams.org/mref). If it
+# finds a unique MRef entry, then your entry will be replaced by the
+# MRef one. For example, if your bibtex entry is
+#
+# @article{greens,
+# Author="Cagnol, J. and Lebiedzik, C.},
+# Title="On the free boundary conditions for a dynamic shell model
+# based on intrinsic differential geometry
+# Journal="Applicable Analysis", Year=2004}
+#
+# It will be replaced by
+#
+# @article {greens,
+# AUTHOR = {Cagnol, John and Lebiedzik, Catherine},
+# TITLE = {On the free boundary conditions for a dynamic shell
+# model based on intrinsic differential geometry},
+# JOURNAL = {Appl. Anal.},
+# FJOURNAL = {Applicable Analysis. An International Journal},
+# VOLUME = {83},
+# YEAR = {2004},
+# NUMBER = {6},
+# PAGES = {607--633},
+# ISSN = {0003-6811},
+# MRCLASS = {74K25 (35B35 53B50 74H99)},
+# MRNUMBER = {MR2059476 (2006c:74066)},
+# MRREVIEWER = {Liliana Gratie},
+# }
+#
+# The latter is more complete than the former (page numbers, etc.).
+# Please note that mrcheckbib does not try to figure out which entry
+# is more complete. If a unique MRef entry is found, then your entry
+# is gone. In most cases, this is good because the MRef entry is more
+# complete.
+#
+# mrcheckbib is intended to be used with a standard bibfile, with no
+# comment line. It is assumed your shell is zsh and that have a
+# non-interactive network retriever such as wget. If you use curl
+# or any other retriever, you'll need to adapt the options.
+#
+# The script relies on the fact that MRef response is bracketed by
+# <pre> tags. If AMS changes this, then script will stop working.
+#
+# Please note that this script was written in haste, it was not
+# intended to be portable, robust or well-written. Version number is
+# DBL_MIN, which is pretty low! It was released because several people
+# asked me to, but it has not been tested extensively, and may require
+# fine tuning. If you come up with a better version, please let me
+# know.
+
+
+# on-interactive network retriever used
+wget=wget
+# if you change this, you'll need to change the options as well
+
+# File names
+inputfile=$1.bib
+outputfile=$1-mrefed.bib
+outputlog=$1-mrefed.log
+tempfile=$1.$$
+
+# Counters
+refcount=0
+okcount=0
+numcount=0
+
+# Messages
+date=`date +"%d %b %Y"`
+verified="% checked against MRef on $date"
+unverified="% Could not find a unique match on MRef on $date";
+weird="% reference verification failed on $date";
+
+# Output files better not exist
+if test -e $outputfile
+then
+ echo "$0: file $outputfile exists. Aborting"
+ exit;
+fi
+
+if test -e $outputlog
+then
+ echo "$0: file $outputlog exists. Aborting"
+ exit;
+fi
+
+# bib entries are placed one by line, tabulations removed, spaces
+# replaced by @
+cat $inputfile | tr -d \\n | tr -d \\t | tr @ \\n | sed s/\ /@/g > $tempfile
+
+echo "% Generated by mrcheckbib version DBL_MIN on $date" >> $outputfile
+echo "% For more information, please visit http://www.cagnol.com/mrcheckbib" >> $outputfile
+echo " " >> $outputfile
+echo " " >> $outputfile
+
+# Processing of each entry
+for entry in $(<$tempfile)
+do
+ # Entry info
+ refcount=`expr $refcount + 1`
+ reference=`echo $entry | sed s/@/%20/g`
+ bibtype=`echo $reference | cut -d\{ -f1 | sed s/%20//g `
+ bibtag=`echo $reference | cut -d\{ -f2 | cut -d\, -f1 | sed s/%20//g`
+ echo "Checking reference $refcount ($bibtag, $bibtype)"
+ echo "[$refcount, $bibtag, $bibtype]" >> $outputlog
+
+ # fetch the MRef for the entry
+ echo -n "connecting. "
+ URL="http://www.ams.org/mathscinet-mref?&dataType=bibtex&ref="$reference
+ # if you use curl, adapt the options below
+ wget -a $outputlog -O $tempfile.$refcount $URL
+
+ # figure out the start and the end of the entry (delimited by <pre> tags)
+ start=`grep -n "<pre>" $tempfile.$refcount | cut -d\: -f1`
+ end=`grep -n "</pre>" $tempfile.$refcount | cut -d\: -f1`
+ echo "start=$start, end=$end" >> $outputlog
+
+ # if <pre> tags were not found then the MRef failed for this entry
+ if test "$start" == ""
+ then
+ result=1;
+ else
+ if test "$end" == ""
+ then
+ result=2;
+ else
+ result=0;
+ fi
+ fi
+
+ case $result in
+ 1) # No <pre> tag could be found, most likely because no unique match could be found
+ echo "Not a unique match.";
+ echo "Not a unique match." >> $outputlog;
+ numcount=`expr $numcount + 1`;
+ echo $unverified >> $outputfile;
+ echo -n "@">> $outputfile;
+ echo $entry | sed s/@/\ /g >> $outputfile;;
+
+ 2) # A <pre> tag could be found, but no </pre> tag, that's bizzare.
+ echo "Internal error.";
+ echo "Internal error." >> $outputlog;
+ echo $weird >> $outputfile;
+ echo -n "@">> $outputfile;
+ echo $entry | sed s/@/\ /g >> $outputfile;;
+
+ 0) # Tags <pre> and </pre> were found, MRef returned a result!
+ echo "found. "
+ echo "OK." >> $outputlog;
+ okcount=`expr $okcount + 1`;
+
+ # find were to cut
+ length=`expr $end - $start - 1`;
+ endm1=`expr $end - 1`;
+
+ # get the entrytype from MRef
+ newbibtype=`head -$start $tempfile.$refcount | tail -1 | cut -d\@ -f2 | cut -d\{ -f1 | sed s/\ //g`;
+
+ # get the data from MRef
+ head -$endm1 $tempfile.$refcount | tail -$length > $tempfile.$refcount.res;
+ echo $verified >> $outputfile;
+
+ # Warn if entry types disagree
+ if test "$bibtype" != "$newbibtype"
+ then
+ echo "discrepency: your is entry type was $bibtype, MRef is $newbibtype" >> $outputlog;
+ fi
+
+ # Output the result
+ echo "@$newbibtype{$bibtag," >> $outputfile;
+ cat $tempfile.$refcount.res >> $outputfile;
+ echo "}" >> $outputfile;;
+ esac
+
+ echo " " >> $outputfile
+ echo " " >> $outputfile
+
+ # Get rid of temp files
+ rm -f $tempfile.$refcount $tempfile.$refcount.res
+done
+
+# Get rid of temp files
+rm -f $tempfile
+
+# Print summary information
+if test "$refcount" -ge 1
+then
+ echo $refcount references were checked
+else
+ echo "no entry found"
+fi
+
+if test "$okcount" -ge 1
+then
+ echo $okcount references were found
+else
+ echo "none of your references were found"
+fi
+
+if test "$numcount" -ge 1
+then
+ echo $numcount references could not be uniquely matched
+fi
+
+echo "done"
diff --git a/biblio/bibtex/utils/printbib/printbib b/biblio/bibtex/utils/printbib/printbib
new file mode 100644
index 0000000000..e2378281be
--- /dev/null
+++ b/biblio/bibtex/utils/printbib/printbib
@@ -0,0 +1,87 @@
+#! /bin/sh
+# set -x
+usage='usage: printbib[key] [-noprint|-nocheck|-style bibstyle|-title "title"|-output file|-predef "file,file,..."] bibfile...'
+# you may have to change this for your site:
+files=${predef-"/users/bib/predef"}
+title=${title-", sorted by first author"}
+style=${style-skey}
+output=${output-test}
+check=${check-true}
+print=${print-true}
+
+while :
+do
+ case "$1" in
+ -p|-print) print=true; shift;;
+ +p|-noprint) print=false; shift;;
+ -c|-check) check=true; shift;;
+ +c|-nocheck) check=false; shift;;
+ -s|-style) style="$2"; shift 2;;
+ -t|-title) title="$2"; shift 2;;
+ -o|-output) output="$2"; shift 2;;
+ -predef) files="$2"; shift 2;;
+ -*|+*) echo "$usage" >&2; exit 1;;
+ *) break;;
+ esac
+ done
+if [ $# -lt 1 ]
+ then echo $usage >&2
+ exit 1
+ fi
+
+umask 0
+rm -f ${output}.tex ${output}.aux ${output}.bbl ${output}.blg ${output}.log ${output}.dvi ${output}.DVI
+
+echo "Outputting to ${output}.tex" >&2
+
+cat > ${output}.tex << EOD
+
+ % tex file to print bibliography file(s) $@
+ % automatically generated by program $0
+ \\documentstyle[proc]{article}
+ \\begin{document}
+ \\title{Bibliography file $@ $title}
+ \\author{Version of `date '+%a %d-%h-%y %H:%M'`}
+ \\maketitle
+ \\renewcommand\\thebibliography[1]{\\section*{Bibliography\\markboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\\list
+ {[\\arabic{enumi}]}{\\settowidth\\labelwidth{12345678}\\leftmargin\\labelwidth
+ \\advance\\leftmargin\\labelsep
+ \\usecounter{enumi}}
+ \\def\\newblock{\\hskip .11em plus .33em minus -.07em}
+ \\sloppy
+ \\sfcode\`\\.=1000\\relax}
+
+ \\bibliography{$files}
+ \\bibliographystyle{${style}}
+ \\end{document}
+
+EOD
+
+echo '\relax' > ${output}.aux
+while [ $# -gt 0 ]
+do
+ f=`basename $1 .bib`
+ if [ ! -r $f.bib ]
+ then echo $usage >&2
+ exit 1
+ fi
+
+ sed -n -e 's+^[ ]*@\([a-zA-Z]*\)[ ]*[({][ ]*\([-:_a-zA-Z0-9]*\),+\\citation{\2}+p' $f.bib >> ${output}.aux
+
+ files="$files,$f"
+ shift
+
+ done
+
+echo "\\bibdata{$files}" >> ${output}.aux
+echo "\\bibstyle{$style}" >> ${output}.aux
+
+bibtex ${output}
+if egrep -l '(^ : |---)' ${output}.blg
+ then echo "There are errors in the bibliography file(s) (see ${output}.blg)" >&2
+ if $check; then exit 1; fi
+ fi
+latex ${output}
+if $print; then lpr -d ${output}.dvi; fi
+
diff --git a/biblio/bibtex/utils/printbib/printbibkey b/biblio/bibtex/utils/printbib/printbibkey
new file mode 100644
index 0000000000..0c58a039b3
--- /dev/null
+++ b/biblio/bibtex/utils/printbib/printbibkey
@@ -0,0 +1,8 @@
+#! /bin/sh
+style=${style-key}
+title=${title-", by order of appearance"}
+
+export style title
+exec printbib "$@"
+
+
diff --git a/biblio/bibtex/utils/pybib/BibEntry.py b/biblio/bibtex/utils/pybib/BibEntry.py
new file mode 100644
index 0000000000..b040d5b096
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/BibEntry.py
@@ -0,0 +1,662 @@
+# Bibliography entry class
+# - holds all information about one bibliographic item
+# - provides methods for manipulating/setting/representing that information
+#
+# TODO:
+# __repr__ method needs to do a better job depending on the reference type, similar
+# logic is required in bib2html (but it's not their either...)
+#
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import sys;
+import string;
+import re;
+
+#BadValue = "Bad value";
+#BadField = "Bad field";
+#BadRefType = "Bad reference type";
+
+class BibEntry:
+ fieldDict = {};
+ verbose = 0;
+ bibliography = {};
+
+ def __init__(self, key, bib):
+ self.key = key;
+ self.fieldDict = {};
+ self.bibliography = bib;
+ if BibEntry.verbose:
+ print >> sys.stderr, "New entry ", key;
+
+ def __repr__(self):
+ str = '"' + self.getTitle() + '"; ';
+ try:
+ str = str + self.getAuthorsNames();
+ except:
+ try:
+ str = str + "eds. " + self.getEditorsNames();
+ except:
+ pass;
+ month = self.getMonthName();
+ year = self.getYear();
+ book = self.getBooktitle();
+ if book:
+ str += ", " + book;
+ if month:
+ str += ", " + month;
+ if year > 0:
+ str += " " + `year`;
+ else:
+ if year > 0:
+ str += ", " + `year`;
+ str += '.';
+ return str;
+
+ def brief(self, fp=sys.stdout):
+ print >> fp, self;
+
+ def display(self, fp=sys.stdout):
+ print >> fp, "%12s: %s" % ("CiteKey", self.key)
+ for k in self.fieldDict:
+ if k[0] == '_':
+ continue;
+ if k == 'Author':
+ print >> fp, "%12s: %s" % (k, self.getAuthors())
+ else:
+ print >> fp, "%12s: %s" % (k, self.fieldDict[k])
+
+ def __getitem__(self, i):
+ if type(i) is str:
+ return self.fieldDict[i];
+ elif type(i) is int:
+ return self.fieldDict.keys()[i];
+ else:
+ raise;
+
+
+ def check(self):
+ keys = self.fieldDict.keys();
+ missing = [];
+ reftype = self.getRefType();
+ if not (reftype in alltypes):
+ raise AttributeError, "bad reference type [%s]" % self.getKey();
+ for k in required_fields[self.getRefType()]:
+ if not (string.capitalize(k) in keys):
+ missing.append(k);
+ return missing;
+
+ #############################################################3
+ # get methods
+ #############################################################3
+
+ def getKey(self):
+ return self.key;
+
+ def getField(self, field):
+ #print >> sys.stderr, field
+ #print >> sys.stderr, self.fieldDict[field]
+ field = field.capitalize();
+ if field in self.fieldDict:
+ return self.fieldDict[field]
+ else:
+ return None;
+
+ def getRefType(self):
+ return self.reftype;
+
+ def isRefType(self, rt):
+ return self.getRefType().lower() == rt.lower();
+
+ def getTitle(self):
+ if 'Title' in self.fieldDict:
+ title = self.fieldDict['Title'];
+ title = re.sub(r"""[{}]""", "", title);
+ title = title.strip('.,\'"');
+ return title;
+ else:
+ return "";
+
+ def getURL(self):
+ if 'Url' in self.fieldDict:
+ url = self.fieldDict['Url'];
+ return url;
+ else:
+ return "";
+
+ def getAuthorList(self):
+ if 'Author' in self.fieldDict:
+ return self.fieldDict['Author'];
+ else:
+ return [];
+
+ def getAuthors(self):
+ if 'Author' in self.fieldDict:
+ l = self.fieldDict['Author'];
+ if len(l) == 1:
+ return l[0];
+ elif len(l) == 2:
+ return l[0] + " and " + l[1];
+ elif len(l) > 2:
+ return string.join(l[:-1], ", ") + " and " + l[-1];
+ else:
+ return "";
+
+
+ def surname(self, author):
+ # remove LaTeX accents
+ def chg(mo): return mo.group(mo.lastindex);
+ re_accent = re.compile(r'''\\[.'`^"~=uvHcdb]\{(.)\}|\t\{(..)\}''');
+ author = re_accent.sub(chg, author)
+
+ # "surname, first names"
+ m = re.search(r"""^([^,]*),(.*)""", author);
+ if m:
+ #print >> sys.stderr, m.group(1), m.group(2)
+ #return m.group(1) + "," + m.group(2).lstrip()[0];
+ return [m.group(1), m.group(2).lstrip()[0]];
+ #return m.group(1);
+
+ # "first names surname"
+
+ # take the last component after dot or space
+ #m = re.search(r"""([a-zA-Z][a-zA-Z-]*)$""", author);
+ m = re.search(r"""(.*?)([^\. \t]*)$""", author);
+ if m:
+ #print >> sys.stderr, author, ":", m.group(2), "|", m.group(1)
+ return [m.group(2), m.group(1)[0]];
+ #return m.group(2) + "," + m.group(1)[0];
+
+ return "";
+
+ def getAuthorsSurnameList(self):
+ if 'Author' in self.fieldDict:
+ l = self.fieldDict['Author'];
+ return map(self.surname, l);
+
+ def getAuthorsSurname(self):
+ l = self.getAuthorsSurnameList();
+ try:
+ l = map(lambda x: x[0], l);
+ if len(l) == 1:
+ return l[0];
+ elif len(l) == 2:
+ return l[0] + " and " + l[1];
+ elif len(l) > 2:
+ return string.join(l[:-1], ", ") + " and " + l[-1];
+ else:
+ return "";
+ except:
+ return "<NO AUTHOR>";
+
+ # return initial dot sunrname
+ def getAuthorsNames(self):
+ l = self.getAuthorsSurnameList();
+ l = map(lambda x: x[1] + ". " + x[0], l);
+ if len(l) == 1:
+ return l[0];
+ elif len(l) == 2:
+ return l[0] + " and " + l[1];
+ elif len(l) > 2:
+ return string.join(l[:-1], ", ") + " and " + l[-1];
+ else:
+ return "";
+
+ # return initial dot sunrname
+
+ def getEditorsSurnameList(self):
+ if 'Editor' in self.fieldDict:
+ l = self.fieldDict['Editor'];
+ return map(self.surname, l);
+
+ def getEditorsNames(self):
+ l = self.getEditorsSurnameList();
+ if not l:
+ return None;
+ l = map(lambda x: x[1] + ". " + x[0], l);
+ if len(l) == 1:
+ return l[0];
+ elif len(l) == 2:
+ return l[0] + " and " + l[1];
+ elif len(l) > 2:
+ return string.join(l[:-1], ", ") + " and " + l[-1];
+ else:
+ return "";
+
+ def getBooktitle(self):
+ if 'Booktitle' in self.fieldDict:
+ return self.fieldDict['Booktitle'];
+ else:
+ return "";
+
+ def getVolume(self):
+ if 'Volume' in self.fieldDict:
+ return self.fieldDict['Volume'];
+ else:
+ return -1;
+
+ def getNumber(self):
+ if 'Number' in self.fieldDict:
+ return self.fieldDict['Number'];
+ else:
+ return -1;
+
+ def getPage(self):
+ if 'Pages' in self.fieldDict:
+ return self.fieldDict['Pages'];
+ else:
+ return "";
+
+ def afterDate(self, date):
+ '''True if the entry occurs after the specified date'''
+
+ if not date:
+ return True;
+ elif len(date) == 1:
+ # simple case, year only
+ return self.getYear() >= date[0];
+ elif len(date) == 2:
+ # complex case, [month year]
+ if self.getYear() > date[1]:
+ return True;
+ elif (date[1] == self.getYear()) and (self.getMonth() >= date[0]):
+ return True;
+ else:
+ return False;
+ def beforeDate(self, date):
+ '''True if the entry occurs before the specified date'''
+
+ if not date:
+ return True;
+ elif len(date) == 1:
+ # simple case, year only
+ return self.getYear() < date[0];
+ elif len(date) == 2:
+ # complex case, [month year]
+ if self.getYear() < date[1]:
+ return True;
+ elif (date[1] == self.getYear()) and (self.getMonth() < date[0]):
+ return True;
+ else:
+ return False;
+
+ def getYear(self):
+ if '_year' in self.fieldDict:
+ return self.fieldDict['_year'];
+ else:
+ return -1;
+
+ # return month ordinal in range 1 to 12
+ def getMonth(self):
+ if '_month' in self.fieldDict:
+ return self.fieldDict['_month'];
+ else:
+ return -1;
+
+ monthdict = {
+ 'january' : 1,
+ 'february' : 2,
+ 'march' : 3,
+ 'april' : 4,
+ 'may' : 5,
+ 'june' : 6,
+ 'july' : 7,
+ 'august' : 8,
+ 'september' : 9,
+ 'october' : 10,
+ 'november' : 11,
+ 'december' : 12 };
+
+ def getMonthName(self):
+ monthNames = (
+ 'january',
+ 'february',
+ 'march',
+ 'april',
+ 'may',
+ 'june',
+ 'july',
+ 'august',
+ 'september',
+ 'october',
+ 'november',
+ 'december' );
+ m = self.getMonth();
+ if m > 0:
+ return string.capitalize(monthNames[m-1]);
+ else:
+ return "";
+
+
+
+ #############################################################3
+ # set methods
+ #############################################################3
+
+ def setType(self, value):
+ value = string.lower(value);
+ if not (value in alltypes):
+ raise AttributeError, "bad reference type [%s]" % self.getKey();
+ self.reftype = value;
+ self.fieldDict['Type'] = value;
+
+ def setField(self, key, value):
+ key = key.capitalize();
+ if not (key in allfields):
+ raise AttributeError, "bad field <%s> [%s]" % (key, self.getKey());
+ if key == 'Year':
+ self.fieldDict[key] = value;
+
+ # remove all text like "to appear", just leave the digits
+ year = filter(lambda c : c.isdigit(), value);
+ try:
+ self.fieldDict['_year'] = int(year);
+ except:
+ if value.find('appear') > -1:
+ sys.stderr.write("[%s] no year specified, continuing\n" % self.getKey());
+ self.fieldDict['_year'] = 0;
+ else:
+ self.fieldDict['_year'] = -1;
+ raise AttributeError, "[%s] bad year <%s>" % (self.getKey(), value);
+ elif key == 'Month':
+ # the Month entry has the original string from the file if it is of
+ # nonstandard form, else is None.
+ # the hidden entry _month has the ordinal number
+ self.fieldDict[key] = value;
+ #print >> sys.stderr, "Month = <%s>" % value;
+ month = mogrify(value);
+ for monthname in self.monthdict:
+ # handle month abbreviations, eg. nov in november
+ if monthname.find(month) >= 0:
+ self.fieldDict['_month'] = self.monthdict[monthname];
+ #print >> sys.stderr, "_month 1 %d" % self.monthdict[monthname];
+ self.fieldDict[key] = None;
+
+ return;
+ # handle extraneous like november in 'november 12-13'
+ if month.find(monthname) >= 0:
+ self.fieldDict['_month'] = self.monthdict[monthname];
+ #print >> sys.stderr, "_month 2 %d" % self.monthdict[monthname];
+ return;
+ raise AttributeError, "bad month [%s]" % self.getKey();
+ else:
+ self.fieldDict[key] = value;
+ #print >> sys.stderr, "<%s> := <%s>\n" % (key, value)
+
+
+
+ #############################################################3
+ # matching methods
+ #############################################################3
+
+ def search(self, field, str, caseSens=0):
+ field = string.capitalize(field);
+
+ if field.lower() == 'all':
+ for be in self:
+ for k in self.fieldDict:
+ if k[0] == '_':
+ continue;
+ s = self.fieldDict[k];
+ if isinstance(s, list):
+ s = ' '.join(s);
+ if s:
+ if caseSens == 0:
+ m = re.search(str, s, re.IGNORECASE);
+ else:
+ m = re.search(str, s);
+ if m:
+ return True;
+
+ else:
+ # silently ignore search field if not present
+ if not(field in self.fieldDict):
+ return False;
+ s = self.fieldDict[field];
+ if isinstance(s, list):
+ s = ' '.join(s);
+ if s:
+ if caseSens == 0:
+ m = re.search(str, s, re.IGNORECASE);
+ else:
+ m = re.search(str, s);
+ if m:
+ return True;
+
+ return 0;
+
+
+ def matchAuthorList(self, be):
+
+ def split(a):
+ return re.findall(r"""([a-zA-Z][a-zA-Z-]*[.]?)""", a);
+
+ def matchfrag(s, f):
+ sdot = s[-1:] == '.';
+ fdot = f[-1:] == '.';
+
+ if (sdot == 0) and (fdot == 0):
+ return s == f;
+ elif (sdot == 0) and (fdot == 1):
+ matchstr = f + '*';
+ m = re.match(matchstr, s);
+ if m:
+ return m.group(0) == s;
+ else:
+ return 0;
+ elif (sdot == 1) and (fdot == 0):
+ matchstr = s + '*';
+ m = re.match(matchstr, f);
+ if m:
+ return m.group(0) == f;
+ else:
+ return 0;
+ elif (sdot == 1) and (fdot == 1):
+ return s == f;
+
+ def matchAuthor(a1, a2):
+ l1 = split(a1);
+ l2 = split(a2);
+ count = 0;
+
+ for p1 in l1:
+ for p2 in l2:
+ if matchfrag(p1,p2):
+ count += 1;
+ return count;
+
+ # check if each article has the same number of authors
+ l1 = self.getAuthorList();
+ l2 = be.getAuthorList();
+ if len(l1) != len(l2):
+ return 0;
+
+ # now check the authors match, in order
+ for i in range( len(l1) ):
+ if matchAuthor(l1[i], l2[i]) < 2:
+ return 0;
+ return 1;
+
+ def matchTitle(self, be, dthresh):
+ # Levenstein distance between two strings
+ def distance(a,b):
+ c = {}
+ n = len(a); m = len(b)
+
+ for i in range(0,n+1):
+ c[i,0] = i
+ for j in range(0,m+1):
+ c[0,j] = j
+
+ for i in range(1,n+1):
+ for j in range(1,m+1):
+ x = c[i-1,j]+1
+ y = c[i,j-1]+1
+ if a[i-1] == b[j-1]:
+ z = c[i-1,j-1]
+ else:
+ z = c[i-1,j-1]+1
+ c[i,j] = min(x,y,z)
+ return c[n,m]
+
+ d = distance( mogrify(self.getTitle()), mogrify(be.getTitle()) );
+
+ return d <= dthresh;
+
+ def matchType(self, be):
+ return self.getRefType() == be.getRefType();
+
+ def matchYear(self, be):
+ return fmatch(self.getYear(), be.getYear());
+
+ def matchMonth(self, be):
+ return fmatch(self.getMonth(), be.getMonth());
+
+ def matchVolumeNumber(self, be):
+ if not fmatch(self.getVolume(), be.getVolume()):
+ return 0;
+ if not fmatch(self.getNumber(), be.getNumber()):
+ return 0;
+ return 1;
+
+ def matchPage(self, be):
+
+ p1 = self.getPage();
+ p2 = be.getPage();
+ if p1 and p2:
+ # both not null
+ p1 = re.findall("([0-9.]+)", p1);
+ p2 = re.findall("([0-9.]+)", p2);
+ if (len(p1) > 0) and (len(p2) > 0):
+ # optionally compare starting page numbers
+ if p1[0] != p2[0]:
+ return 0;
+ if (len(p1) > 1) and (len(p2) > 1):
+ # optionally compare ending page numbers
+ if p1[1] != p2[1]:
+ return 0;
+ return 1;
+ else:
+ return 1;
+
+
+ # see if two bibentries match
+ def match(self, be, dthresh=2):
+ # we do the cheapest comparisons first...
+ if not self.matchType(be):
+ return 0;
+ if not self.matchYear(be):
+ return 0;
+ if not self.matchMonth(be):
+ return 0;
+ if self.isRefType("Article"):
+ if not self.matchVolumeNumber(be):
+ return 0;
+ if not self.matchPage(be):
+ return 0;
+ if not self.matchAuthorList(be):
+ return 0;
+ if not self.matchTitle(be, dthresh):
+ return 0;
+ return 1;
+
+# we adopt the convention that a numeric value of -1 means not provided,
+# so here we match two quantites where either or both is not provided. Only
+# return false if both numbers are provided, and they are not equal, otherwise
+# give the benefit of the doubt and return true.
+def fmatch(n1, n2):
+ if (n1 > 0) and (n2 > 0):
+ return n1 == n2;
+ else:
+ return 1;
+
+# remove all punctuation marks and white space that people
+# might get wrong
+def mogrify(s):
+ s = string.lower(s);
+ s = re.sub(r"""[#{}:;,&$ -]""", "", s);
+ return s;
+
+
+allfields = ('_Reftype', 'Address', 'Author', 'Booktitle', 'Chapter', 'Edition',
+ 'Editor', 'Howpublished', 'Institution', 'Journal', 'Month',
+ 'Number', 'Organization', 'Pages', 'Publisher', 'School',
+ 'Series', 'Title', 'Type', 'Volume',
+ 'Year', 'Note', 'Code', 'Url', 'Crossref', 'Annote', 'Abstract', 'Date-added', 'Date-modified', 'Read');
+
+# list of all reference types
+alltypes = ('article', 'book', 'booklet', 'inbook', 'incollection',
+ 'inproceedings', 'manual', 'mastersthesis', 'misc', 'phdthesis',
+ 'proceedings', 'techreport', 'unpublished');
+
+# list of additional fields, ignored by the standard BibTeX styles
+ign = ('crossref', 'code', 'url', 'annote', 'abstract');
+
+# lists of required and optional fields for each reference type
+
+required_fields = {
+ 'article' : ['Author', 'Title', 'Journal', 'Year'],
+ 'book' : ['Author', 'Title', 'Publisher', 'Year'],
+ 'booklet' : ['Title'],
+ 'inbook' : ['Author', 'Title', 'Chapter', 'Pages',
+ 'Publisher', 'Year'],
+ 'incollection' : ['Author', 'Title', 'Booktitle', 'Publisher', 'Year'],
+ 'inproceedings' : ['Author', 'Title', 'Booktitle', 'Year'],
+ 'manual' : ['Title'],
+ 'misc' : [],
+ 'mastersthesis' : ['Author', 'Title', 'School', 'Year'],
+ 'phdthesis' : ['Author', 'Title', 'School', 'Year'],
+ 'proceedings' : ['Title', 'Year'],
+ 'techreport' : ['Author', 'Title', 'Institution', 'Year'],
+ 'unpublished' : ['Author', 'Title', 'Note']
+};
+
+opt_fields = {
+ 'article' : ['Volume', 'Number', 'Pages', 'Month', 'Note'],
+ 'book' : ['Editor', 'Volume', 'Number', 'Series', 'Address',
+ 'Edition', 'Month', 'Note'],
+ 'booklet' : ['Author', 'Howpublished', 'Address', 'Month', 'Year',
+ 'Note'],
+ 'inbook' : ['Editor', 'Volume', 'Series', 'Address', 'Edition',
+ 'Month', 'Note'],
+ 'incollection' : ['Editor', 'Volume', 'Number', 'Series', 'Type',
+ 'Chapter' 'Pages', 'Address', 'Edition',
+ 'Month', 'Note'],
+ 'inproceedings' : ['Editor', 'Pages', 'Organization', 'Publisher',
+ 'Address', 'Month', 'Note'],
+ 'manual' : ['Author', 'Organization', 'Address', 'Edition',
+ 'Month', 'Year', 'Note'],
+ 'misc' : ['Title', 'Author', 'Howpublished', 'Month', 'Year',
+ 'Note'],
+ 'mastersthesis' : ['Address', 'Month', 'Note'],
+ 'phdthesis' : ['Address', 'Month', 'Note'],
+ 'proceedings' : ['Editor', 'Publisher', 'Organization', 'Address',
+ 'Month', 'Note'],
+ 'techreport' : ['Type', 'Number', 'Address', 'Month', 'Note'],
+ 'unpublished' : ['Month', 'Year']
+};
diff --git a/biblio/bibtex/utils/pybib/BibTeX.py b/biblio/bibtex/utils/pybib/BibTeX.py
new file mode 100644
index 0000000000..5166f3d937
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/BibTeX.py
@@ -0,0 +1,456 @@
+# Defines two classes:
+#
+# BibTexEntry, subclass of BibEntry, and provides all BibTeX specific methods such as
+# writing an entry to file
+#
+# BibTex, a subclass of Bibliography, and provides all BibTeX specific methods, in
+# particular a parser.
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import string;
+import re;
+import sys;
+import urllib;
+
+class BibTeXEntry(BibEntry.BibEntry):
+
+ # write a BibTex format entry
+ def write(self, file=sys.stdout, stringdict=None):
+ file.write( "@%s{%s,\n" % (self.getRefType(), self.getKey()) );
+ count = 0
+ for rk in self.fieldDict:
+ count += 1;
+ # skip internally used fields
+ if rk[0] == '_':
+ continue;
+ if rk == 'Type':
+ continue;
+
+ # generate the entry
+ value = self.fieldDict[rk];
+ file.write(" %s = " % rk );
+
+ if rk in ['Author', 'Editor']:
+ file.write("{%s}" % " and ".join(value) );
+ elif rk == 'Month':
+ if value:
+ file.write("{%s}" % value );
+ else:
+ value = self.getMonthName();
+ file.write("%s" % value[0:3].lower() );
+ else:
+ # is it an abbrev?
+ if value in self.bibliography.abbrevDict:
+ file.write("%s" % value );
+ else:
+ file.write("{%s}" % value );
+
+ # add comma to all but last fields
+ if count < len(self.fieldDict):
+ file.write(",\n");
+ else:
+ file.write("\n");
+ file.write("}\n\n");
+
+
+ def setField(self, field, value):
+ def strStrip(s):
+ s = string.strip(s, ' ');
+ if (s[0] == '"') and (s[-1] == '"'):
+ return s[1:-1];
+ if (s[0] == '{') and (s[-1] == '}'):
+ return s[1:-1];
+ return s;
+
+
+ # deal specially with author list, convert from bibtex X and Y to
+ # a list for bibentry class
+ if field.lower() in ["author", "editor"]:
+ value = string.split(value, " and ");
+ value = map(strStrip, value);
+ try:
+ # invoke the superclass
+ BibEntry.BibEntry.setField(self, field, value);
+ except AttributeError, err:
+ sys.stderr.write( "%15s: bad value <%s=%s>" % (self.getKey(), field, value));
+
+class BibTeX(Bibliography.Bibliography):
+
+ stringDict = {};
+
+ def parseFile(self, fileName=None, verbose=0, ignore=False):
+ if fileName == None:
+ fp = sys.stdin;
+ else:
+ fp = self.open(fileName);
+
+ # get the file into one huge string
+ nbib = 0;
+ s = fp.read();
+ try:
+ nbib = self.parseString(s, ignore=ignore, verbose=verbose);
+ except AttributeError, err:
+ print >> sys.stderr, "Error %s" % err;
+
+ self.close(fp);
+ return nbib;
+
+ def display(self):
+ for be in self:
+ be.display()
+
+ def write(self, file=sys.stdout, resolve=0):
+ if resolve:
+ dict = self.stringDict;
+ else:
+ dict = None;
+
+ for be in self:
+ be.write(file, dict)
+
+ def writeStrings(self, file=sys.stdout):
+ for abbrev, value in self.abbrevDict.items():
+ file.write("@string{ %s = {%s} }\n" % (abbrev, value) );
+
+ # resolve BibTeX's cross reference capability
+ def resolveCrossRef(self):
+ for be in self:
+ try:
+ xfref = self.getField('crossref');
+ except:
+ return;
+
+ for f in xref:
+ if not (f in be):
+ be.setField(f, xref.getField(f));
+
+ def parseString(self, s, verbose=0, ignore=False):
+
+ # lexical analyzer for bibtex format files
+ class BibLexer:
+
+ inString = ""; # the string to parse
+ lineNum = 1;
+ pos = 0;
+
+ def __init__(self, s):
+ self.inString = s;
+
+ # an iterator for the class, return next character
+ def next(self):
+ if self.pos >= len(self.inString):
+ raise StopIteration;
+ c = self.inString[self.pos];
+ if c == '\n':
+ self.lineNum += 1;
+ self.pos += 1;
+ return c;
+
+ def __iter__(self):
+ return self;
+
+ # peek at the next character
+ def peek(self):
+ return self.inString[self.pos];
+
+ # push a character back onto the input
+ def pushback(self, c):
+ self.pos -= 1;
+ if c == '\n':
+ self.lineNum -= 1;
+
+ # eat whitepsace characters and comments
+ def skipwhite(self):
+
+ for c in self:
+ if c == '%':
+ for c in self:
+ if c == '\n':
+ break;
+ elif (not c.isspace()):
+ self.pushback(c);
+ break;
+
+ # print >> sys.stderr, the input buffer
+ def show(self):
+ print >> sys.stderr, "[%c]%s" % (self.inString[0], self.inString[1:10]);
+
+ # get the next word from the input stream, this can be
+ # [alpha][alnum$_-]
+ # "...."
+ # {....}
+ def nextword(self):
+
+ str = "";
+ c = self.peek();
+
+ if c == '"':
+ # quote delimited string
+ str = self.next();
+ cp = None; # prev char
+ for c in self:
+ str += c;
+ if (c == '"') and (cp != '\\'):
+ break;
+ cp = c;
+ elif c == '{':
+ # brace delimited string
+ count = 0;
+ for c in self:
+ if c == '{':
+ count += 1;
+ if c == '}':
+ count -= 1;
+
+ str += c;
+ if count == 0:
+ break;
+ else:
+ # undelimited string
+ #if (not c.isalpha()):
+ # print >> sys.stderr, "BAD STRING"
+ for c in self:
+ if c.isalnum():
+ str += c;
+ elif c in ".+-_$:'":
+ str += c;
+ else:
+ self.pushback(c);
+ break;
+ return str;
+
+
+ class Token:
+ t_ENTRY = 1;
+ t_DELIM_L = 2;
+ t_DELIM_R = 3;
+ t_STRING = 5;
+ t_EQUAL = 6;
+ t_COMMA = 7;
+
+ val = None;
+ type = None;
+
+ def __repr__(self):
+ if self.type == self.t_ENTRY:
+ str = "@ %s" % self.val;
+ elif self.type == self.t_DELIM_R:
+ str = " }";
+ elif self.type == self.t_STRING:
+ str = "<%s>" % self.val;
+ elif self.type == self.t_EQUAL:
+ str = " EQUAL";
+ elif self.type == self.t_COMMA:
+ str = " COMMA";
+ else:
+ str = "BAD TOKEN (%d) <%s>" % (self.type, self.val);
+ return str;
+
+ def isstring(self):
+ return self.type == self.t_STRING;
+
+ def isabbrev(self):
+ return (self.type == self.t_STRING) and self.val.isalnum();
+
+ def iscomma(self):
+ return self.type == self.t_COMMA;
+
+ def isequal(self):
+ return self.type == self.t_EQUAL;
+
+ def isentry(self):
+ return self.type == self.t_ENTRY;
+
+ def isdelimR(self):
+ return self.type == self.t_DELIM_R;
+
+ def isdelimL(self):
+ return self.type == self.t_DELIM_L;
+
+ #
+ # tokenizer for bibtex format files
+ #
+ class BibTokenizer:
+
+ lex = None;
+
+ def __init__(self, s):
+ self.lex = BibLexer(s);
+
+ # setup an iterator for the next token
+ def __iter__(self):
+ return self;
+
+ # return next token
+ def next(self):
+ #self.lex.show();
+ self.lex.skipwhite();
+ c = self.lex.next();
+
+ t = Token();
+ if c == '@':
+ t.type = t.t_ENTRY;
+ self.lex.skipwhite();
+ t.val = self.lex.nextword();
+ self.lex.skipwhite();
+ c = self.lex.next();
+ if not ((c == '{') or (c == '(')):
+ print >> sys.stderr, "BAD START OF ENTRY"
+
+ elif c == ',':
+ t.type = t.t_COMMA;
+ elif c == '=':
+ t.type = t.t_EQUAL;
+ elif (c == '}') or (c == ')'):
+ t.type = t.t_DELIM_R;
+ else:
+ self.lex.pushback(c);
+ t.type = t.t_STRING;
+ t.val = self.lex.nextword();
+
+ return t;
+
+
+ class BibParser:
+
+ tok = None;
+ bibtex = None;
+
+ def __init__(self, s, bt):
+ self.tok = BibTokenizer(s);
+ self.bibtex = bt;
+
+ # setup an iterator for the next entry
+ def __iter__(self):
+ return self;
+
+ # return next entry
+ def next(self):
+
+ def strstrip(s):
+ if s[0] in '"{':
+ return s[1:-1];
+ else:
+ return s;
+
+ t = self.tok.next();
+ if not t.isentry():
+ raise SyntaxError, self.tok.lex.lineNum;
+ if t.val.lower() == 'string':
+ tn = self.tok.next();
+ if not tn.isstring():
+ raise SyntaxError, self.tok.lex.lineNum;
+ t = self.tok.next();
+ if not t.isequal():
+ raise SyntaxError, self.tok.lex.lineNum;
+ tv = self.tok.next();
+ if not tv.isstring():
+ raise SyntaxError, self.tok.lex.lineNum;
+ # insert string into the string table
+ self.bibtex.insertAbbrev(tn.val, strstrip(tv.val));
+ #print >> sys.stderr, "string", tn.val, tv.val
+ t = self.tok.next();
+ if not t.isdelimR():
+ raise SyntaxError, self.tok.lex.lineNum;
+ elif t.val.lower() == 'comment':
+ depth = 0;
+ while True:
+ tn = self.tok.next();
+ if t.isdelimL():
+ depth += 1;
+ if t.isdelimR():
+ depth -= 1;
+ if depth == 0:
+ break;
+ else:
+ # NOT A STRING or COMMENT ENTRY
+ # assume a normal reference type
+
+ # get the cite key
+ ck = self.tok.next();
+ if not ck.isstring():
+ raise SyntaxError, self.tok.lex.lineNum;
+
+ #print >> sys.stderr, t.val, ck.val
+ be = BibTeXEntry(ck.val, self.bibtex);
+ be.setType(t.val);
+
+ # get the comma
+ ck = self.tok.next();
+ if not ck.iscomma():
+ raise SyntaxError, self.tok.lex.lineNum;
+
+ # get the field value pairs
+ for tf in self.tok:
+ # allow for poor syntax with comma before
+ # end brace
+ if tf.isdelimR():
+ break;
+
+ if not tf.isstring():
+ raise SyntaxError, self.tok.lex.lineNum;
+ t = self.tok.next();
+ if not t.isequal():
+ raise SyntaxError, self.tok.lex.lineNum;
+ ts = self.tok.next();
+ if not ts.isstring():
+ raise SyntaxError, self.tok.lex.lineNum;
+ #print >> sys.stderr, " ", tf.val, " := ", ts.val;
+ be.setField(tf.val, strstrip(ts.val));
+
+ # if it was an abbrev in the file, put it in the
+ # abbrevDict so it gets written as an abbrev
+ if ts.isabbrev():
+ self.bibtex.insertAbbrev(ts.val, None);
+ #print >> sys.stderr, "putting unresolved abbrev %s into dict" % ts.val;
+
+ t = self.tok.next();
+ if t.iscomma():
+ continue;
+ elif t.isdelimR():
+ break;
+ else:
+ raise SyntaxError, self.tok.lex.lineNum;
+
+
+ self.bibtex.insertEntry(be, ignore);
+ return;
+
+ bibparser = BibParser(s, self);
+ bibcount = 0;
+ try:
+ for be in bibparser:
+ bibcount += 1;
+ pass;
+ except SyntaxError, err:
+ print "Syntax error at line " + str(err);
+
+ return bibcount;
diff --git a/biblio/bibtex/utils/pybib/Bibliography.py b/biblio/bibtex/utils/pybib/Bibliography.py
new file mode 100644
index 0000000000..e61b66c09e
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/Bibliography.py
@@ -0,0 +1,167 @@
+# Bibliography class
+# - essentially a container for many BibEntry objects
+# - provides methods for reading/writing the bibliography
+# - provides iterators, sorting etc
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+import string;
+import BibEntry;
+import urllib;
+import urlparse;
+import os;
+import os.path;
+import sys;
+
+NoSuchFile = "No such file";
+
+class Bibliography:
+
+ def __init__(self):
+ self.keyList = [];
+ self.abbrevDict = {}
+
+ def open(self, filename):
+ if filename == '-':
+ self.filename = "stdin";
+ return sys.stdin;
+ urlbits = urlparse.urlparse('~/lib/bib/z.bib');
+ if urlbits[0]:
+ # path is a URL
+ fp = urllib.urlopen(filename);
+ self.filename = filename;
+ else:
+ # path is a local file
+ path = os.environ['BIBPATH'];
+ for p in string.split(path, os.pathsep):
+ f = os.path.join(p, filename);
+ if os.path.isfile(f):
+ break;
+ else:
+ raise NoSuchFile;
+
+ fp = open(f, "r");
+ home = os.path.expanduser('~');
+ f2 = os.path.abspath(f);
+ common = os.path.commonprefix([home, f2]);
+ if common:
+ self.filename = "~" + f2[len(common):]
+ else:
+ self.filename = f;
+
+ return fp;
+
+ def close(self, fp):
+ fp.close();
+
+ # resolve all abbreviations found in the value fields of all entries
+ def resolveAbbrev(self):
+ #print >> sys.stderr, len(self.abbrevDict);
+ for be in self:
+ for f in be:
+ v = be.getField(f);
+ if isinstance(v,str):
+ if v in self.abbrevDict:
+ if self.abbrevDict[v]:
+ be.setField(f, self.abbrevDict[v]);
+
+ def insertEntry(self, be, ignore=False):
+ #print >> sys.stderr, "inserting key ", be.getKey()
+ # should check to see if be is of BibEntry type
+ key = be.getKey();
+ if key in [x.key for x in self.keyList]:
+ if not ignore:
+ print >> sys.stderr, "key %s already in dictionary" % (key)
+ return False;
+ self.keyList.append(be);
+ return True;
+
+ def insertAbbrev(self, abbrev, value):
+ #print >> sys.stderr, "inserting abbrev ", abbrev
+ if abbrev in self.abbrevDict:
+ #print >> sys.stderr, "abbrev %s already in list" % (abbrev)
+ return False;
+ self.abbrevDict[abbrev] = value;
+ #be.brief();
+ return True;
+
+ def __repr__(self):
+ print >> sys.stderr
+
+ def brief(self):
+ for be in self:
+ be.brief();
+
+ def getFilename(self):
+ return self.filename;
+
+ def getAbbrevs(self):
+ return self.abbrevDict;
+
+
+ def display(self):
+ for be in self:
+ be.display();
+ print >> sys.stderr
+
+ def __contains__(self, key):
+ return key in [x.key for x in self.keyList];
+
+ def __getitem__(self, i):
+ if type(i) is str:
+ index = [x.key for x in self.keyList].index(i);
+ return self.keyList[index];
+ elif type(i) is int:
+ return self.keyList[i];
+ else:
+ raise;
+
+ def __len__(self):
+ return len(self.keyList);
+
+
+ def sort(self, sortfunc):
+ # turn the dictionary of entries into a list so we can sort it
+ self.keyList.sort(sortfunc);
+
+
+ # return list of all bibentry's that match the search spec
+ def search(self, key, str, type="all", caseSens=0):
+ if str == '*':
+ return self.keyList;
+
+ result = [];
+ if string.lower(type) == "all":
+ for be in self:
+ if be.search(key, str, caseSens):
+ result.append(be);
+ else:
+ for be in self:
+ if be.isRefType(type) and be.search(key, str, caseSens):
+ result.append(be);
+ return result;
diff --git a/biblio/bibtex/utils/pybib/README b/biblio/bibtex/utils/pybib/README
new file mode 100644
index 0000000000..79bd8ee040
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/README
@@ -0,0 +1,19 @@
+BibEntry.py a general class for a bibliographic entry
+Bibliography.py a general container class for bibliographic entries
+BibTeX.py a BibTeX specific superclass for BibEntry and Bibliography
+
+bib2html convert a bibfile to HTML
+bibcat concatenate bibfiles, parse and regenerate
+bibdvi convert a bibfile to dvi
+bibfilter find specific records by field, date, etc
+bibgoogle find references on Google scholar
+bibkey lookup by citekey
+biblint report missing fields in input files
+biblist list bibliography in non-BibTeX format
+bibmerge merge bibliographies and attempt to remove duplicate entries
+bibsort sort by date
+bibsummary summary of number of entries by type
+bibnames display author names and number of occurences
+
+
+peter corke 2007.
diff --git a/biblio/bibtex/utils/pybib/bib2html b/biblio/bibtex/utils/pybib/bib2html
new file mode 100644
index 0000000000..36c12c1b4e
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bib2html
@@ -0,0 +1,146 @@
+#! /usr/bin/env python
+#
+# Convert bib file to HTML
+#
+# TODO
+# take out tex fragments, backslash, braces etc
+# convert tex accents to HTML accents
+# do string substitution using templates
+# better handling of different reference types
+# probably needs more rigour in the HTML code
+# use CSS
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import time;
+import optparse;
+
+
+str = "";
+
+def append(s):
+ global str;
+
+ str += s;
+
+def append_nl(s):
+ global str;
+
+ str += s + '\n';
+
+class HBibEntry(BibEntry.BibEntry):
+
+ def __init__(self, be):
+ self.fieldDict = be.fieldDict;
+
+ def display(self):
+ append( "<p>" );
+ # put title
+ if self.getURL():
+ append( '<a href="%s"><i>"%s"</i></a>, ' % (self.getURL(), self.getTitle()) );
+ else:
+ append( '<i>"%s"</i>, ' % self.getTitle() );
+
+ # put authors
+ append( self.getAuthors() + '. ' );
+ month = self.getMonthName();
+ year = self.getYear();
+
+ # put more fields
+ for k in ['Journal', 'Volume', 'Number', 'Booktitle',
+ 'Address', 'Institution']:
+
+ if k in self.fieldDict:
+ append( self.fieldDict[k].strip('"') + ', ' );
+ eds = self.getEditorsNames();
+ if eds:
+ append("eds. " + eds + ', ');
+ if month:
+ append( month );
+ if year > 0:
+ append( " " + `year` );
+ else:
+ if year > 0:
+ append( ", " + `year` );
+ append( " (%s)" % be.getKey() );
+ append_nl( "</p>" );
+
+
+
+## parse switches
+p = optparse.OptionParser()
+p.add_option('--highlight', dest='highlight', action='store', type='str',
+ help='highlight the specified word in the output');
+#p.add_option('--resolve', dest='resolve', action='store_true',
+# help='resolve cross reference entries');
+p.set_defaults(highlight=None);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+bib.resolveAbbrev();
+
+## generate HTML
+append_nl( "<html>" );
+append_nl( "<head>" );
+append_nl( " <title>Bibliography %s</title>" % ( args[0] if args else '(stdin)',) );
+append_nl( """ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">""" );
+append_nl( "</head>" );
+append_nl( "<body>" );
+
+for be in bib:
+ hb = HBibEntry(be);
+ hb.display();
+
+if highlight:
+ str = string.replace(str, highlight, """<font color="ff0000">%s</font>""" % highlight);
+
+append_nl( "<hr>" );
+append_nl( "<p>Generated by bib2html at %s. bib2html by Peter Corke</p>" % time.asctime() );
+append_nl( "</body>" );
+append_nl( "</html>" );
+
+print str;
+
diff --git a/biblio/bibtex/utils/pybib/bibcat b/biblio/bibtex/utils/pybib/bibcat
new file mode 100644
index 0000000000..7c261c5c25
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibcat
@@ -0,0 +1,86 @@
+#! /usr/bin/env python
+#
+# Concatenate bib file(s) to stdout. Each file is parsed then the BibTeX
+# records are regenerated.
+#
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+resolve = False;
+
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Concatenate bib file(s) to stdout.
+:: Each file is parsed then the BibTeX records are regenerated'''
+p = optparse.OptionParser(usage)
+p.add_option('--ignore', dest='ignore', action='store_true',
+ help='ignore duplicate items');
+p.add_option('--nostrings', dest='dumpStrings', action='store_false',
+ help='dump string definitions');
+p.add_option('-v', '--verbose', dest='verbose', action='store_true',
+ help='print some extra information');
+p.add_option('--resolve', dest='resolve', action='store_true',
+ help='resolve cross reference entries');
+p.set_defaults(ignore=False, dumpStrings=True, verbose=False, resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ nbib = bib.parseFile(f, ignore=ignore);
+ if verbose:
+ sys.stderr.write( "%d entries read from %s\n" % (len(bib), f) );
+else:
+ nbib = bib.parseFile();
+ if verbose:
+ sys.stderr.write( "%d entries read from stdin\n" % (len(bib),) );
+
+if resolve:
+ bib.resolveAbbrev();
+
+if verbose:
+ sys.stderr.write( "%d abbreviations to write\n" % len(outbib.getAbbrevs()) );
+ sys.stderr.write( "%d entries to write\n" % len(outbib) );
+if dumpStrings:
+ bib.writeStrings();
+bib.write(resolve=resolve);
diff --git a/biblio/bibtex/utils/pybib/bibdvi b/biblio/bibtex/utils/pybib/bibdvi
new file mode 100644
index 0000000000..3d49c58f78
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibdvi
@@ -0,0 +1,110 @@
+#! /usr/bin/env python
+#
+# Convert bib file(s) to dvi
+#
+# TODO
+# handle resolve switch if command line files are given
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import os;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Convert bib file(s) to dvi'''
+p = optparse.OptionParser(usage)
+p.add_option('--xdvi', dest='xdvi', action='store_true',
+ help='launch xdvi when done');
+p.add_option('--bibstyle', dest='bibstyle', action='store', type='str',
+ help='specify a bibliography style file');
+p.set_defaults(xdvi=False, bibstyle='ieeetr', resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+if args:
+ # a list of files is given, temp file is the same root name as the first argument
+ texfile = args[0]
+ texfile = texfile[0:string.rindex(texfile, '.bib')];
+ bibfiles = ','.join( [os.path.splitext(x)[0] for x in args] );
+else:
+ # input from stdin, use stdin as the root filename
+ texfile = 'stdin';
+ fp = open(texfile+'.bib', 'w');
+ bib.write(file=fp,resolve=resolve);
+ fp.close();
+ bibfiles = 'stdin';
+
+print "Saving to", texfile
+
+
+## create the latex source file
+tex = open("%s.tex" % texfile, "w");
+
+tex.write(
+r"""\documentclass{article}
+\begin{document}
+""");
+
+# write the cite keys
+for be in bib:
+ tex.write("\\nocite{%s}\n" % be.getKey());
+
+# add the bibliog commands
+tex.write(
+r"""\bibliographystyle{%s}
+\bibliography{strings,%s}
+\end{document}
+""" % (bibstyle, bibfiles) );
+tex.close();
+
+os.system("pslatex %s" % texfile);
+os.system("bibtex %s" % texfile);
+os.system("pslatex %s" % texfile);
+
+if xdvi and os.getenv('DISPLAY'):
+ os.system("xdvi %s" % texfile);
diff --git a/biblio/bibtex/utils/pybib/bibfilter b/biblio/bibtex/utils/pybib/bibfilter
new file mode 100644
index 0000000000..6f515047e8
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibfilter
@@ -0,0 +1,110 @@
+#! /usr/bin/env python
+#
+# Filter bib records that match search criteria
+#
+# todo:
+# handle tex accent characters, utf-16 etc
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+startDate = None;
+endDate = None;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Filter bib records that match search criteria
+:: Multiple rules can be applied at the same time '''
+p = optparse.OptionParser(usage)
+p.add_option('--since', dest='since', action='store', type='str',
+ help='start date for selection, format YYYY or MM/YYYY');
+p.add_option('--before', dest='before', action='store', type='str',
+ help='end date for selection, format YYYY or MM/YYYY');
+p.add_option('-i', '--case', dest='caseSens', action='store_true',
+ help='make search case sensitive');
+p.add_option('--type', dest='type', action='store', type='str',
+ help='reference type to search (default all)');
+p.add_option('--field', dest='field', nargs=2, action='store', type='str',
+ help='field to search (default all) and the value which matches any substring in the specified field');
+p.add_option('--hasfield', dest='hasfield', action='store', type='str',
+ help='true if specified field is present');
+p.add_option('--brief', dest='showBrief', action='store_true',
+ help='show the matching records in brief format (default is BibTeX)');
+p.add_option('--count', dest='showCount', action='store_true',
+ help='show just the number of matching records');
+p.set_defaults(since=None, before=None, caseSens=False, type='all', hasfield=None, field=['all', '*'], showBrief=False, showCount=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+if since:
+ startDate = map(int, since.split('/'));
+if before:
+ endDate = map(int, before.split('/'));
+
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+#print >> sys.stderr, "looking for <%s> in field <%s>, reftype <%s>" % (field[1], field[0], type)
+
+# search the bibliography for all matches to the field query
+l = bib.search(field[0], field[1], type, caseSens);
+count = 0;
+for be in l:
+ # check if it has the required field
+ if hasfield:
+ if not be.getField(hasfield):
+ continue;
+
+ # check the date range
+ if be.afterDate(startDate) and be.beforeDate(endDate):
+ count += 1;
+ if not showCount:
+ if showBrief:
+ print be;
+ else:
+ be.write();
+
+if showCount:
+ print count;
diff --git a/biblio/bibtex/utils/pybib/bibgoogle b/biblio/bibtex/utils/pybib/bibgoogle
new file mode 100644
index 0000000000..bc829d308c
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibgoogle
@@ -0,0 +1,264 @@
+#!/usr/bin/env python
+#
+# Lookup references on Google Scholar and add a URL which points to a copy of the paper.
+#
+# Nice to complete the bibliography, and if you want to convert the bibliography to HTML
+# (with bib2html).
+#
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import re;
+import urllib
+import urlparse
+import htmllib
+import formatter
+import time;
+import optparse;
+
+# preferred sources of documents
+prefList = ['ieeexplore.ieee.org', 'portal.acm.org', 'doi.ieeecomputersociety.org'];
+
+class Parser(htmllib.HTMLParser):
+ # build a list of tuples (anchor text, URL)
+
+ def __init__(self, verbose=0):
+ self.anchors = [];
+ f = formatter.NullFormatter()
+ htmllib.HTMLParser.__init__(self, f, verbose)
+
+ def anchor_bgn(self, href, name, type):
+ self.save_bgn()
+ self.href = href
+ self.name = name
+ self.type = type
+
+ def anchor_end(self):
+ text = string.strip(self.save_end())
+ if self.href and text:
+ #self.anchors[text] = self.anchors.get(text, []) + [self.anchor]
+ #self.anchors[text] = self.anchor
+ self.anchors.append( (text, self.href) );
+
+# trick Google into thinking I'm using Safari
+browserName = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312";
+
+class AppURLopener(urllib.FancyURLopener):
+ version = browserName;
+
+urllib._urlopener = AppURLopener()
+
+## lookup the BibEntry on Google scholar
+def scholar_lookup(be):
+
+ # Levenstein distance between two strings
+ def distance(a,b):
+ c = {}
+ n = len(a); m = len(b)
+
+ for i in range(0,n+1):
+ c[i,0] = i
+ for j in range(0,m+1):
+ c[0,j] = j
+
+ for i in range(1,n+1):
+ for j in range(1,m+1):
+ x = c[i-1,j]+1
+ y = c[i,j-1]+1
+ if a[i-1] == b[j-1]:
+ z = c[i-1,j-1]
+ else:
+ z = c[i-1,j-1]+1
+ c[i,j] = min(x,y,z)
+ return c[n,m]
+
+ # build the search string from words in the title and authors surnames
+ # - remove short words and accents, punctuation characters
+ title = be.getTitle().split();
+ newtitle = [];
+ for word in title:
+ if len(word) >= 4:
+ newtitle.append(word);
+ title = string.join(newtitle, ' ');
+ title = re.sub(r"""[#{}:;,&$-]""", " ", title);
+
+ search = title.split();
+
+ # add the year
+ year = be.getYear();
+ if year > 0:
+ #search.append(repr(year));
+ pass
+
+ # add author surnames
+ search.extend( [x[0] for x in be.getAuthorsSurnameList()]);
+
+ # remove accents and apostrophes, quotes
+ search2 = [];
+ for w in search:
+ w = re.sub(r"""\.|['"]""", "", w);
+ search2.append(w);
+ search = search2;
+ #print string.join(search,' ');
+
+ s = "http://www.scholar.google.com/scholar?q=%s&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search" % ( string.join(search, '+') );
+
+ # send the query to Scholar
+ file = urllib.urlopen(s);
+ html = file.read()
+ file.close()
+
+ # parse the result
+ p = Parser()
+ p.feed(html)
+ p.close()
+
+
+ candidates = [];
+
+ title = be.getTitle().lower();
+ # for each returned result, look for the best one
+ #print p.anchors
+ for text, url in p.anchors:
+ #print text, "|", url
+
+ # find the distance between our known title and the title of the article
+ d = distance(text.lower(), title);
+ #print d, k
+ if d < 5:
+ # consider this a good enough match
+ i = url.find("http");
+ candidates.append( url[i:] );
+
+ # look for a URL of the form http:....pdf
+ i = url.find("pdf");
+ if i == 0:
+ i = url.find("http");
+ #print " ** PDF ", url[i:]
+ candidates.append( url[i:] );
+
+ # now we have a list of candidate URLs
+
+ #print candidates
+
+ # look for a source in our preference list
+ for url in candidates:
+ org = urlparse.urlsplit(url)[1];
+ if org in prefList:
+ return url;
+
+ # failing that go for one with a PDF in it
+ for url in candidates:
+ if url.find("pdf") > -1:
+ return url;
+
+ # failing that take the first one
+ if candidates:
+ return candidates[0];
+
+ return None;
+
+
+## main
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Lookup each reference on Google Scholar and add the URL to the bibliography.'''
+p = optparse.OptionParser(usage)
+p.add_option('-v', '--verbose', dest='verbose', action='store_true',
+ help='print some extra information');
+p.set_defaults(verbose=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+## lookup each reference on Scholar
+count = 0;
+sourceDict = {};
+
+if verbose:
+ print >> sys.stderr, "Resolving %d references via Google scholar" % len(bib);
+
+for be in bib:
+
+ rt = be.getRefType();
+ if rt in ['article', 'inproceedings']:
+ # if we already have a URL then skip
+ if be.getURL():
+ continue;
+
+ # do the lookup
+ url = scholar_lookup(be);
+ if url:
+ if verbose:
+ print >> sys.stderr, be;
+ print >> sys.stderr, " --> ", url
+ print >> sys.stderr
+ be.setField('Url', url);
+ count = count + 1;
+
+ # build a list of the unique sources of the documents
+ org = urlparse.urlsplit(url)[1];
+ if org in sourceDict:
+ sourceDict[org] += 1;
+ else:
+ sourceDict[org] = 1;
+
+if verbose:
+ # print some stats
+ print >> sys.stderr, "Resolved %d references to URLs (%.1f%%)" % (count, count*100./len(bib));
+
+ # print the unique source list, sorted in decreasing order of frequency
+ print >> sys.stderr, "Document sources"
+ l = sourceDict.items();
+ l.sort( lambda x, y: cmp(y[1], x[1]) );
+
+ for org,n in l:
+ print >> sys.stderr, " %-30s %d" % (org, n);
+
+# output the bibligraphy with the URLs set
+bib.writeStrings();
+bib.write();
diff --git a/biblio/bibtex/utils/pybib/bibkey b/biblio/bibtex/utils/pybib/bibkey
new file mode 100644
index 0000000000..b77029f05c
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibkey
@@ -0,0 +1,112 @@
+#! /usr/bin/env python
+#
+# Display all records with specified citekey(s).
+#
+# Cite key can come from command line switches or from a .aux file. Useful if you
+# want to make a reduced .bib file to match a paper, without all the other junk.
+#
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+import re;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Display all records with specified citekey
+:: citekeys from command line or a .aux file'''
+p = optparse.OptionParser(usage)
+p.add_option('--key', dest='keys', action='append', type='str',
+ help='cite key to display (can have multiple of this switch)');
+p.add_option('--aux', dest='aux', action='store', type='str',
+ help='name of .aux file to parse for keys');
+p.add_option('--strings', dest='dumpStrings', action='store_true',
+ help='dump the string definitions (abbreviations) as well');
+p.add_option('--brief', dest='showBrief', action='store_true',
+ help='show the matching records in brief format (default is BibTeX)');
+p.set_defaults(keys=[], aux=None, dumpStrings=False, showBrief=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+# load extra keys from the specified .aux file
+if aux:
+ f = open(aux, 'r');
+ citation = re.compile(r'''^\\citation\{(\w+)\}''');
+ for line in f:
+ m = citation.match(line);
+ if m:
+ keys.append( m.group(1) );
+keys2 = keys[:];
+
+def action(bib, filename):
+ found = [];
+ for k in keys:
+ try:
+ be = bib[k];
+ found.append(be);
+ keys2.remove(k); # keep track of keys not found
+ except:
+ pass;
+ if found:
+ for be in found:
+ if showBrief:
+ if f:
+ print f;
+ be.brief();
+ else:
+ be.write();
+if args:
+ for f in args:
+ bib = BibTeX.BibTeX();
+ bib.parseFile(f);
+ action(bib, f);
+else:
+ bib = BibTeX.BibTeX();
+ bib.parseFile();
+ action(bib, None);
+
+if dumpStrings and not showBrief:
+ bib.writeStrings();
+
+if keys2:
+ print
+ for k in keys2:
+ print >> sys.stderr, "%s not found" % k
diff --git a/biblio/bibtex/utils/pybib/biblint b/biblio/bibtex/utils/pybib/biblint
new file mode 100644
index 0000000000..5b8668cfff
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/biblint
@@ -0,0 +1,79 @@
+#! /usr/bin/env python
+#
+# Report missing fields and bad values in bibtex records
+
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Report missing fields and bad values in bibtex records'''
+p = optparse.OptionParser(usage)
+#p.add_option('--reverse', dest='reverseSort', action='store_true',
+# help='sort into ascending data order (old at top)');
+#p.add_option('--resolve', dest='resolve', action='store_true',
+# help='resolve cross reference entries');
+#p.set_defaults(reverseSort=False, resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+
+if args:
+ for f in args:
+ bib = BibTeX.BibTeX();
+ bib.parseFile(f);
+ print "%d records read from %s" % (len(bib), bib.getFilename());
+
+ print
+ for be in bib:
+ c = be.check();
+ if c:
+ print "%15s: missing " % (be.getKey()), string.join(c, ', ')
+else:
+ bib = BibTeX.BibTeX();
+ bib.parseFile();
+ print "%d records read from %s" % (len(bib), '(stdin)');
+
+ print
+ for be in bib:
+ c = be.check();
+ if c:
+ print "%15s: missing " % (be.getKey()), string.join(c, ', ')
diff --git a/biblio/bibtex/utils/pybib/biblist b/biblio/bibtex/utils/pybib/biblist
new file mode 100644
index 0000000000..7fdb95a332
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/biblist
@@ -0,0 +1,78 @@
+#! /usr/bin/env python
+#
+# List bibtex file in human readable format
+#
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Display bibtex file in human readable format'''
+p = optparse.OptionParser(usage)
+p.add_option('--brief', dest='showBrief', action='store_true',
+ help='brief listing (one line per entry)');
+p.add_option('--abbrev', dest='resolveAbbrevs', action='store_true',
+ help='resolve abbreviations from defined strings');
+#p.add_option('--resolve', dest='resolve', action='store_true',
+# help='resolve cross reference entries');
+p.set_defaults(showBrief=False, resolveAbbrevs=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+# resolve cross refs and abbreviations
+bib.resolveCrossRef();
+if resolveAbbrevs:
+ bib.resolveAbbrev();
+
+# output the readable text
+for be in bib:
+ if showBrief:
+ be.brief();
+ else:
+ be.display();
+ print
diff --git a/biblio/bibtex/utils/pybib/bibmerge b/biblio/bibtex/utils/pybib/bibmerge
new file mode 100644
index 0000000000..1bd517466b
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibmerge
@@ -0,0 +1,116 @@
+#! /usr/bin/env python
+#
+# Fuzzy merge of bibliographies.
+#
+# A hiearchy of matching tests is implemented:
+#
+# Reference type
+# Year of publication
+# Month of publication (if known)
+# Volume number (if article type)
+# Page numbers (if known)
+# Author surnames
+# Fuzzy match on title exclusing white space and punctuation characters,
+# using Levenstein distance
+#
+# Really useful when you are jointly writing a paper and the authors have partially
+# overlapping bib files with different cite key conventions.
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Fuzzy merge of bibliographies.'''
+p = optparse.OptionParser(usage)
+p.add_option('--dthresh', dest='dthresh', action='store', type='int',
+ help='set the fuzzy match tolerance (Levenstein distance) for title string');
+p.add_option('--showdup', dest='showdup', action='store_true',
+ help='show information about proposed duplicates');
+p.add_option('-v', '--verbose', dest='verbose', action='store_true',
+ help='print some extra information');
+p.set_defaults(dthresh=2, showdup=False, verbose=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+
+unique = BibTeX.BibTeX();
+dupcount = 0;
+
+def action(bib, filename):
+ global dupcount, unique;
+
+ if verbose:
+ print >> sys.stderr, "%d records read from %s" % (len(bib), filename)
+
+ # for each new bib entry
+ for be in bib:
+ # check against all existing
+ for ub in unique:
+ if be.match(ub, dthresh=dthresh):
+ if verbose:
+ print >> sys.stderr, " -[%s] %s" % (be.getKey(), be);
+ dupcount += 1;
+ if showdup:
+ print >> sys.stderr, "============================="
+ ub.write(sys.stderr);
+ print >> sys.stderr, "---------- duplicate from %s" % bib.getFilename();
+ be.write(sys.stderr);
+ break;
+ else:
+ if verbose:
+ print >> sys.stderr, " +[%s] %s" % (be.getKey(), be);
+ unique.insertEntry(be);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib = BibTeX.BibTeX();
+ bib.parseFile(f);
+ action(bib, f);
+else:
+ bib = BibTeX.BibTeX();
+ bib.parseFile();
+ action(bib, '(stdin)');
+
+
+print >> sys.stderr, "New bib has %d records, %d duplicates found" % (len(unique), dupcount);
+
+unique.write();
diff --git a/biblio/bibtex/utils/pybib/bibnames b/biblio/bibtex/utils/pybib/bibnames
new file mode 100644
index 0000000000..d0b07310fa
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibnames
@@ -0,0 +1,89 @@
+#! /usr/bin/env python
+#
+# Display a list of authors and their occurrence in the bibfiles
+#
+# each output line is of the form:
+#
+# Surname,I N
+#
+# where I is their initial and N is the number of occurrences. This can be
+# fed throug sort -n -r +1 to get a list of authors in descending order
+# of occurrence. Figure out who is your favourite co-author!
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import getopt;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Display a list of authors and their occurrence'''
+p = optparse.OptionParser(usage)
+#p.add_option('--reverse', dest='reverseSort', action='store_true',
+# help='sort into ascending data order (old at top)');
+#p.add_option('--resolve', dest='resolve', action='store_true',
+# help='resolve cross reference entries');
+#p.set_defaults(reverseSort=False, resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+# Build a list of unique names: Surname,Initial and update occurrence
+nameList = {};
+for be in bib:
+ surnames = be.getAuthorsSurnameList();
+ if surnames:
+ for s in surnames:
+ s = ','.join(s);
+ if s in nameList:
+ nameList[s] += 1
+ else:
+ nameList[s] = 1;
+
+# display names and occurrence.
+for s,v in nameList.iteritems():
+ print s, v;
diff --git a/biblio/bibtex/utils/pybib/bibsort b/biblio/bibtex/utils/pybib/bibsort
new file mode 100644
index 0000000000..15e959832d
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibsort
@@ -0,0 +1,100 @@
+#! /usr/bin/env python
+#
+# Sort bibliographies in chronological order
+#
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Sort bibliographies in chronological order'''
+p = optparse.OptionParser(usage)
+p.add_option('--reverse', dest='reverseSort', action='store_true',
+ help='sort into ascending data order (old at top)');
+p.add_option('--resolve', dest='resolve', action='store_true',
+ help='resolve cross reference entries');
+p.set_defaults(reverseSort=False, resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+count = {};
+
+sortReturn = -1 if reverseSort else 1;
+
+def sortByDate(a, b):
+ # On input a and b are BibEntry objects
+ ay = a.getYear();
+ by = b.getYear();
+ if ay > by:
+ return -sortReturn;
+ elif ay < by:
+ return sortReturn;
+ else:
+ am = a.getMonth();
+ bm = b.getMonth();
+ if am > bm:
+ return -sortReturn;
+ elif am < bm:
+ return sortReturn;
+ else:
+ return 0;
+
+outbib = BibTeX.BibTeX();
+
+if args:
+ for f in args:
+ bib = BibTeX.BibTeX();
+ n = bib.parseFile(f);
+
+ sys.stderr.write( "%d records read from %s\n" % (n, f) );
+
+else:
+ bib = BibTeX.BibTeX();
+ bib.parseFile();
+
+ sys.stderr.write( "%d records read from stdin\n" % len(bib) );
+
+# sort it
+bib.sort(sortByDate);
+
+# and output the result
+for s in bib:
+ s.write();
diff --git a/biblio/bibtex/utils/pybib/bibsummary b/biblio/bibtex/utils/pybib/bibsummary
new file mode 100644
index 0000000000..b66df9ea7a
--- /dev/null
+++ b/biblio/bibtex/utils/pybib/bibsummary
@@ -0,0 +1,81 @@
+#! /usr/bin/env python
+#
+# Display a summary of the reference types
+
+# Copyright (c) 2007, Peter Corke
+#
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * The name of the copyright holder may not be used to endorse or
+# promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+
+import Bibliography;
+import BibEntry;
+import BibTeX;
+import string;
+import sys;
+import optparse;
+
+## parse switches
+usage = '''usage: %prog [options] [bibfiles]
+
+:: Display a summary of the reference types'''
+p = optparse.OptionParser(usage)
+#p.add_option('--reverse', dest='reverseSort', action='store_true',
+# help='sort into ascending data order (old at top)');
+#p.add_option('--resolve', dest='resolve', action='store_true',
+# help='resolve cross reference entries');
+#p.set_defaults(reverseSort=False, resolve=False);
+(opts, args) = p.parse_args()
+globals().update(opts.__dict__)
+
+if len(args) == 0 and sys.stdin.isatty():
+ p.print_help();
+ sys.exit(0);
+
+## read the input files
+bib = BibTeX.BibTeX();
+if args:
+ for f in args:
+ bib.parseFile(f);
+else:
+ bib.parseFile();
+
+count = {};
+urlCount = 0;
+
+
+for be in bib:
+ t = be.getRefType();
+ if be.getField('Url'):
+ urlCount += 1;
+ if t in count:
+ count[t] += 1;
+ else:
+ count[t] = 1;
+
+for k in count:
+ print " %15s: %4d" % (k, count[k]);
+
+if urlCount > 0:
+ print " %d with URL links" % urlCount;
diff --git a/biblio/bibtex/utils/qbibman/README b/biblio/bibtex/utils/qbibman/README
new file mode 100644
index 0000000000..7017d8c5ba
--- /dev/null
+++ b/biblio/bibtex/utils/qbibman/README
@@ -0,0 +1,43 @@
+This software is an attempt to provide a program that manages BibTex-Databases.
+Although there are a number of such attempts, I decided that I have to try to
+implement features that are not present in other programs. Since the most
+complicated part seemed to be the database-handling, I was happy to find the
+BibTool package by Gerd Neugebauer that did this for me. I merely added a
+graphical user interface.
+
+To install qbibman, you need Gerd Neugebauer BibTool package too from
+CTAN:/tex-archive/biblio/bibtex/utils/bibtool/BibTool-2.44.tar.gz
+
+Features
+
+- Browse lists for names and journals
+- Search using regular expressions
+- Automatic recoding of ISO-Characters to latex style*
+- Reading of Auxfiles*
+- Support for @string
+ to enter a reference to a @string use "@": e.g. you defined a string
+ @STRING{ssj="Some stupid journal"}
+ in your database, then you can refer to it by using "@ssj".
+- Automatic key generation*
+- Selection of multiple items with <Control> Left Mouse Button
+ Clicking without <Control> switches back to single item mode
+- Printing (parts of) the database with customizable latex file
+ In single item mode the whole database is printed otherwise only the
+ selected items
+ If there is a latex file ".qbibman" in your home directory, it will be
+ used for generating screen and printer output. Just put "%CITATION"
+ (no spaces) on a line by its own into the file. It will be replaced by
+ "\nocite{...}" of [selected | all] items and the command
+ "\bibliography{...}". If this file is missing, a simple default is used.
+- Keys of selected items can be put into X clipboard or into Lyx file (via Lyx
+ Server) using context menu (right mouse button click on the list).
+
+*These features are present in BibTool.
+
+The programm seems to be stable and does what I want. So I figured
+that there might be other people who would like to use it.
+
+Ralf Goertz <R.Goertz@psych.uni-frankfurt.de>
+
+2000-09-05
+
diff --git a/biblio/bibtex/utils/r2bib/ChangeLog b/biblio/bibtex/utils/r2bib/ChangeLog
new file mode 100644
index 0000000000..822b1eddb7
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/ChangeLog
@@ -0,0 +1,42 @@
+2015-12-06
+ Added autotools based compilation (Richard J. Mathar)
+
+2010-02-22
+ Mutet some warnings in r2bib.c, using 0 (not NULL) for characters,
+ and swapping functions positions (Richard J. Mathar)
+
+2010-01-21
+ wileyEndNoteFilt adapts to the format where no final comma is in the author
+ or editor files, which apparently is a newer Wiley format. (Richard J. Mathar)
+
+2009-01-20
+ Added wileyEndNoteFilt, ansel2uni, risDateAdj, Makefile (Richard J. Mathar).
+ EndNote2bib translates %R as doi.
+
+2007-06-21
+ Default for output fields in EndNote2bib is curly parenthesis. Backward
+ compatible double quotes available with new option -Q.
+
+2007-06-12
+ Added auxiliary filter C++ program EndNoteTag (Richard J. Mathar)
+
+2006-05-17
+ Corrected toggling between stdin and command line arguments in EndNote2bib.c (Richard J. Mathar)
+ Added emission of a BibTeX comment to EndNote2bib.c (Richard J. Mathar)
+ Changed syntactical order of functions in EndNote2bib.c to reduce use of ANSI templates (Richard J. Mathar)
+ Propose use of -w 132 in fold in EndNote2bib.1 to avoid breaking URLs (Richard J. Mathar)
+
+2005-05-03
+ Corrected interpretation of "micron" and "mu" in dosToTex.c (Richard J. Mathar)
+
+2005-03-13
+ Added switches -1, -u and -h to dosToTex.c (Richard J. Mathar)
+ Added switches -q and -h to EndNote2bib.c (Richard J. Mathar)
+ Added EndNote2bib.1, dosToTex.1 and ChangeLog (Richard J. Mathar)
+ Renamed dos2tex to dosToTex to avoid name clash with existing programs (Richard J. Mathar)
+
+2005-02-23
+ Added README, EndNote2bib.c and dos2tex.c (Richard J. Mathar)
+
+1990-10-03
+ Added r2bib.1 and r2bib.c (Rusty Wright)
diff --git a/biblio/bibtex/utils/r2bib/EndNote2bib.1 b/biblio/bibtex/utils/r2bib/EndNote2bib.1
new file mode 100644
index 0000000000..f8c15bd370
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/EndNote2bib.1
@@ -0,0 +1,101 @@
+.TH "EndNote2bib" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+EndNote2bib \- convert EndNote input files to bibtex \&.bib files
+.PP
+.SH "SYNOPSIS "
+.PP
+.PP
+\fIEndNote2bib\fP [-q] ''file'' \&.\&.\&.
+.PP
+\fIEndNote2bib\fP [-h]
+.PP
+.SH "OPTIONS "
+.PP
+.PP
+-q supress complains on unsupported EndNote tags on stderr
+.PP
+-h print a usage summary and exits
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIEndNote2bib\fP reads the ''files'' and produces a \fIbibtex\fP reference list (a \&.bib file) on the standard output\&. If no files are given, \fIEndNote2bib\fP reads standard input\&.
+.PP
+Since EndNote offers a LaTeX export style, use of this program makes only much sense if one wishes to handle EndNote bibliographies but does not have access to an EndNote installation\&.
+.PP
+Since EndNote files are inherently unstructured (compared to \fIbibtex\fP) \fIEndNote2bib\fP only does a passable job\&. In particular EndNote doesn't require a keyword, while \fIbibtex\fP does\&. The heuristic that \fIEndNote2bib\fP uses for cooking up a keyword, in order of precedence, is:
+.PP
+.IP "\(bu" 2
+Use the Label (%F) if it's only one word\&.
+.IP "\(bu" 2
+Use the Call Number (%L) if it's only one word\&.
+.IP "\(bu" 2
+Use the Keyword entry (%K) if it's only one word\&.
+.IP "\(bu" 2
+Otherwise just use the string 'keyN' where N is the count of this bibliographic entry in the EndNote file(s)\&.
+.PP
+.PP
+There is no check that the BibTeX labels generated that way are all different\&.
+.PP
+To determine the type of reference that the EndNote entry is, \fIEndNote2bib\fP has to do some 'calculated guessing\&.' The heuristic used here (again, in order of precedence) is:
+.PP
+.IP "\(bu" 2
+If it has one of the following Referenc Types (%0), it is interpreted according to the table
+.PP
+Book @book
+.PP
+Manuscript @manual
+.PP
+In Proceedings @inproceedings
+.PP
+Conference Proceedings @proceedings
+.PP
+Report @techreport
+.PP
+Journal Article @article
+.PP
+Book Section @inbook
+.PP
+Edited Book @book
+.PP
+Newspaper Article @article
+.PP
+Thesis @phdthesis
+.PP
+Personal Communication @unpublished
+.PP
+Generic @misc
+.IP "\(bu" 2
+If it has a journal entry (%J) then it's considered to be an @article\&.
+.IP "\(bu" 2
+If it has a Secondary Title entry (%B) then it's considered to be an @inbook\&.
+.IP "\(bu" 2
+If it has a report entry (%R) then it's considered to be a @techreport\&.
+.IP "\(bu" 2
+If it has a issuer entry (%I) then it's considered to be a @book\&.
+.IP "\(bu" 2
+Otherwise it's considered to be a @misc\&.
+.PP
+.PP
+Quite often \fIEndNote2bib\fP will misguess and you will need to edit (by hand) the resulting \&.bib file\&.
+.PP
+Any fields that \fIEndNote2bib\fP doesn't know about it will ignore (and complain about it on stderr unless the -q option has been used)\&.
+.PP
+The main difference between \fIr2bib\fP and \fIEndNote2bib\fP is that \fIEndNote2bib\fP recognizes more tags that have been introduced in the EndNote document system\&. For a description see the source code in the file EndNote2bib\&.c\&.
+.PP
+.SH "EXAMPLES "
+.PP
+.PP
+EndNote2bib -q endnfile1 endnfile2 > bibtfile\&.bib
+.PP
+.SH "SEE ALSO "
+.PP
+.PP
+dos2unix(1) dosToTex(1) fold(1) bibtex(1) r2bib(1)
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Richard J\&. Mathar, based on r2bib\&.c coded by Rusty Wright
diff --git a/biblio/bibtex/utils/r2bib/EndNote2bib.c b/biblio/bibtex/utils/r2bib/EndNote2bib.c
new file mode 100644
index 0000000000..67f8cf74ee
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/EndNote2bib.c
@@ -0,0 +1,600 @@
+/*********************************************************
+ usage:
+
+ EndNote2bib -h
+ EndNote2bib [-Q] [-q] < input.end > output.tex
+ EndNote2bib [-Q] [-q] input1.end [input2.end ...] > output.tex
+
+ This program exports/converts one or more input files in EndNote ASCII format
+ to an output file in BibTeX format. As the usage line shows, it works as a
+ pipe in the UNIX sense, or takes input files as arguments.
+
+ The differences w.r.t this original version r2bib.c are
+ - from the application point of view
+ . The EndNote tag %0 is the prime source of deciding which type of
+ reference this is (Book, article, thesis....)
+ . The EndNote tags %R, %U, %@, %Z, %7, %8, %9 are also converted.
+ . multiple %E fields are concatenated with "and", not just
+ multiple %A fields
+ . switches -h, -q and -Q have been added: -h prints some usage
+ summary, and -q can be used to mute the complains about
+ unknown EndNote tags. If -Q is added, the fields are put into
+ pairs of quotes, whereas the default is placing them into pairs
+ of curly parentheses.
+ - from a programmer's point of view
+ . K&R C-style source code has been modified to ANSI C
+ . some declarations of system functions have been replaced
+ by an include stdlib.h. exit(0,1) have been replaced
+ by exit(SUCCES,FAILURE). main() ends on return 0 , not
+ on exit().
+ . some forward declarations of local functions have been
+ removed by moving these local functions ahead such that
+ the compiler has seen them before they are called.
+ . The use of NULL and '\0' has been corrected to remove
+ some gcc warnings
+ . The structure with the hash that guesses types from tags
+ has been made local to the function it is used in.
+
+ To wrap the output lines under UNIX use:
+ EndNote2bib < input.end | fold -s > output.tex
+
+ See also http://www.endnote.com
+
+ For similar tools and tools that work in the reverse direction
+ (BibTeX to EndNote) see http://support.isiresearchsoft.com/pub/bibtex/
+ and
+
+ The original source that converts the similar refer
+ format to BibTeX has been taken from
+ http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/ .
+
+ Richard J. Mathar, http://www.mpia.de/~mathar
+ Dec 07, 2015
+***********************************************************/
+#include "config.h"
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+void usage(char *argv0)
+{
+ printf("usage: %s [-Q] [-q]; # pipe stdin to stdout\n",argv0) ;
+ printf("\t %s [-Q] [-q] infile1.end [infile2.end ...]; # convert list of input files to stdout\n",argv0) ;
+ printf("\t %s -h ; # help: print these usage lines here\n",argv0) ;
+ printf("Option -q suppresses complains on unknown EndNote tags\n") ;
+ printf("Option -Q uses pairs of quotes to embrace fields\n") ;
+}
+
+/* Return NULL if bp points to an (essentially) empty string.
+ "Essentially" means ignoring white space.
+ Otherwise return the pointer to the first non-space character.
+*/
+char * sanz(char *bp)
+{
+ /* skip to the end of the line */
+ char *cp = &bp[strlen(bp) - 1];
+
+ /*
+ * back up over any spaces chars
+ */
+ while (isspace(*cp) && (cp >= bp))
+ cp--;
+
+ if (cp < bp)
+ return NULL ; /* empty line */
+
+ /* truncate after the last non-space character in the line */
+ *++cp = '\0' ;
+
+ /* search from the start of bp to the actual (non-space) end */
+ while (isspace(*bp) && (bp < cp))
+ bp++;
+
+ if (cp == bp)
+ return NULL ; /* empty line */
+
+ return bp ;
+}
+
+
+/* EndNote standards
+ %A Author
+ %B secondary title (of a book or conference name)
+ %C Place published
+ %D Year
+ %E editor / secondary author
+ %F label
+ %G Language
+ %H Translated Author
+ %I Publisher
+ %J secondary title (journal name)
+ %K Keywords
+ %L call number
+ %M accession number
+ %N number (issue)
+ %P pages
+ %Q Translated Title
+ %R DOI
+ %S tertiary title
+ %T title
+ %U URL
+ %V volume
+ %W database provider
+ %X Abstract
+ %Y tertiary author
+ %Z notes
+ %0 Reference type
+ %1 to %4 custom notes (Wiley stores the DOI here)
+ %6 number of volumes
+ %7 edition
+ %8 date
+ %9 type of work
+ %? subsidiary author
+ %@ ISBN/ISSN
+ %! short title
+ %#, %$ %] custom 5 to custom 7
+ %& section
+ %( original publication
+ %) reprint edition
+ %* reviewed item
+ %+ author address
+ %^ caption
+ %> File attchments
+ %< research notes
+ %[ access date
+ %= Custom 8
+ %~ name of database
+*/
+struct Rb {
+ char rb_kl; /* EndNote key letter */
+ char * rb_kw; /* bibtex string */
+ char rb_emit; /* don't print data if 0 */
+ char * rb_data; /* EndNote data */
+} rb[] = {
+ { '0', "", 0, NULL },
+ { '7', "edition", 1, NULL },
+ { '8', "month", 1, NULL },
+ { '9', "type", 1, NULL },
+ { '@', "isbn", 1, NULL }, /* To do: could also be issn */
+ { 'A', "author", 1, NULL },
+ { 'B', "booktitle", 1, NULL },
+ { 'C', "address", 1, NULL },
+ { 'D', "year", 1, NULL },
+ { 'E', "editor", 1, NULL },
+ { 'F', "", 0, NULL },
+ { 'I', "publisher", 1, NULL },
+ { 'J', "journal", 1, NULL },
+ { 'L', "key", 1, NULL }, /* use as bibtex key; comes earlier in the list to precede K */
+ { 'K', "note", 1, NULL },
+ { 'N', "number", 1, NULL },
+ { 'P', "pages", 1, NULL },
+ { 'Q', "institution", 1, NULL },
+ { 'R', "doi", 1, NULL },
+ { 'S', "series", 1, NULL },
+ { 'T', "title", 1, NULL },
+ { 'U', "url", 1, NULL },
+ { 'V', "volume", 1, NULL },
+ { 'X', "abstract", 1, NULL },
+ { 'Z', "annote", 1, NULL },
+ { 0, 0, 0, 0 }
+};
+
+void guesstype()
+{
+ /*
+ * entries are in order of precedence.
+ * Any entry with a 'J' field must be an article, but anthing with an 'I'
+ * field doesn't have to be a book (if an entry has both 'J' and 'I' it is
+ * considered to be an article).
+ */
+ struct Bmap {
+ char bm_kl;
+ char *bm_entry;
+ } bmap[] = {
+ { 'J', "article" },
+ { 'B', "inbook" },
+ { 'R', "techreport" },
+ { 'I', "book" },
+ { 0, 0 }
+ };
+ struct Bmap *bm = & bmap[0] ;
+ /*
+ * figure out what type of entry this is.
+ */
+ for ( ; bm->bm_kl != 0; bm++)
+ {
+ struct Rb *trb;
+ for (trb = &rb[0]; trb->rb_kl ; trb++)
+ {
+ if ((trb->rb_kl == bm->bm_kl) && trb->rb_data)
+ {
+ printf("@%s{", bm->bm_entry);
+ goto out;
+ }
+ }
+ }
+out:
+ if (bm->bm_kl == 0)
+ printf("@misc{");
+}
+
+
+/*
+ examine %0 and print a @book, @incollection or any other type on stdout,
+ if the tag matches something known.
+ If the %0 is absent or this cannot be done for other reasons, return 1, else 0.
+*/
+int tagzero()
+{
+ /* everything not listed will be re-evaluated in the caller function */
+ static char *ZMatch[][2] = {
+ {"Book", "book"},
+ {"Electronic Book", "book"},
+ {"Manuscript", "manual"},
+ {"Magazine Article", "article"},
+ {"In Proceedings", "inproceedings"},
+ {"Conference Paper", "inproceedings"},
+ {"Conference Proceedings", "proceedings"},
+ {"Report", "techreport"},
+ {"Journal Article", "article"},
+ {"Electronic Article", "article"},
+ {"Book Section", "inbook"},
+ {"Edited Book", "book"},
+ {"Newspaper Article","article"},
+ {"Thesis", "phdthesis"}, /* could be also masterthesis, %9 = Dissertation to be investigated */
+ {"Personal Communication", "unpublished"},
+ {"Unpublished Work", "unpublished"},
+ {"Generic", "misc"}
+ } ;
+ struct Rb *trb;
+
+ /* search through the tags of this entry */
+ for (trb = &rb[0]; trb->rb_kl ; trb++)
+ {
+ /* found tag %0 and there is actually a line in it */
+ if ( trb->rb_kl == '0' && trb->rb_data )
+ {
+ int zm =0 ;
+ /* if the tag matches s.th. in ZMatch[], convert, else return */
+ for( ; zm < sizeof(ZMatch)/sizeof(char *[2]) ; zm++)
+ if ( strncmp(trb->rb_data, ZMatch[zm][0], strlen(ZMatch[zm][0]) ) == 0 )
+ {
+ printf("@%s{", ZMatch[zm][1]);
+ return 0 ;
+ }
+ }
+ }
+ return 1 ; /* unsuccessful */
+}
+
+void dumprb(const int brakquot)
+{
+ struct Rb *trb;
+ static int key;
+ char *bibkey;
+ char *cp;
+ int first=1;
+
+ /* try to consider %0 ...; if this doesn't resolve, look at the availability of other key tags...*/
+ if( tagzero() )
+ guesstype() ;
+
+ /*
+ * in order of precedence, the bibtex key is determined:
+ * 1. use EndNote label (%F).
+ * 2. use EndNote Call Number (%L).
+ * 3. use keyword (%K) if only one word.
+ * 4. otherwise just use the string "keyN" where N
+ * is the count of this bibliographic entry in
+ * the EndNote file.
+ */
+ key++;
+ for (trb = &rb[0]; trb->rb_kl != 0; trb++)
+ {
+ if ((trb->rb_kl == 'F') && trb->rb_data)
+ {
+ for (cp = trb->rb_data; *cp ; cp++)
+ if (isspace(*cp))
+ break;
+
+ /* ran to end of string? */
+ if (*cp == '\0')
+ {
+ printf("%s,\n", trb->rb_data);
+
+ /* if used here then free & zero it */
+ free(trb->rb_data);
+ trb->rb_data = NULL;
+ break;
+ }
+ }
+
+ if ((trb->rb_kl == 'L') && trb->rb_data )
+ {
+ for (cp = trb->rb_data; *cp ; cp++)
+ if (isspace(*cp))
+ break;
+
+ /* ran to end of string? */
+ if (*cp == '\0')
+ {
+ printf("%s,\n", trb->rb_data);
+ break;
+ }
+ }
+
+ if ((trb->rb_kl == 'K') && trb->rb_data)
+ {
+ for (cp = trb->rb_data; *cp ; cp++)
+ if (isspace(*cp))
+ break;
+
+ /* ran to end of string? */
+ if (*cp == '\0')
+ {
+ printf("%s,\n", trb->rb_data);
+
+ /* if used here then free & zero it */
+ free(trb->rb_data);
+ trb->rb_data = NULL;
+ break;
+ }
+ }
+ }
+
+ /* nothing reasonable to use, punt */
+ if (trb->rb_kl == 0)
+ printf("key%d,\n", key);
+
+ first = 1;
+
+ for (trb = &rb[0]; trb->rb_kl != 0; trb++)
+ {
+ if (trb->rb_data == NULL)
+ continue;
+
+ if (trb->rb_emit != 0)
+ {
+ /*
+ * clank,
+ * this is so that things will line up.
+ */
+ if (strlen(trb->rb_kw) < 6)
+ cp = "\t\t";
+ else
+ cp = "\t";
+
+ if (! first)
+ printf(",\n");
+
+ /* if brakquot is nonzero, we use pairs of quotes to delimit the data
+ * fields, else pairs of curly parentheses.
+ */
+ if ( brakquot)
+ printf("\t%s =%s\"%s\"", trb->rb_kw, cp, trb->rb_data);
+ else
+ printf("\t%s =%s{%s}", trb->rb_kw, cp, trb->rb_data);
+ first = 0;
+ }
+
+ free(trb->rb_data);
+ trb->rb_data = NULL;
+ }
+
+ printf("\n}\n\n");
+}
+
+/* swallow multiple author case */
+char * andfix(char *string)
+{
+ char *tmp;
+ char *cp;
+
+ tmp = string;
+
+ for (cp = string; *cp ; cp++)
+ {
+ if (strncmp(cp, " and ", 5) == 0)
+ {
+ /*
+ * +2 for the curly braces around "{and}",
+ * +1 for the null at the end.
+ */
+ if ((tmp = malloc(strlen(string) + 2 + 1)) == NULL) {
+ perror("malloc");
+ exit(EXIT_FAILURE);
+ }
+
+ strncpy(tmp, string, cp - string);
+ tmp[cp - string] = '\0'; /* strncpy doesn't */
+ strcat(tmp, " {and} ");
+ strcat(tmp, cp + 5);
+ }
+ }
+
+ return tmp ;
+}
+
+/* handle one EndNote line
+ 'cp' points to the 3rd character in the line (just after the tag)
+*/
+void stuffrb(struct Rb *lrb, char *cp)
+{
+ /* empty data field */
+ if ((cp = sanz(cp)) == NULL)
+ return;
+
+ if (lrb->rb_kl == 'A' || lrb->rb_kl == 'E')
+ cp = andfix(cp);
+
+ if (lrb->rb_data == NULL)
+ {
+ if ((lrb->rb_data = malloc(strlen(cp) + 1)) == NULL)
+ {
+ perror("malloc");
+ exit(EXIT_FAILURE);
+ }
+ strcpy(lrb->rb_data, cp);
+ }
+ else
+ {
+ char *conj;
+
+ if (lrb->rb_kl == 'A' || lrb->rb_kl == 'E')
+ conj = " and ";
+ else
+ conj = " ";
+
+ if ((lrb->rb_data = realloc(lrb->rb_data, strlen(lrb->rb_data) + strlen(cp) + strlen(conj) + 1)) == NULL)
+ {
+ perror("realloc");
+ exit(EXIT_FAILURE);
+ }
+
+ strcat(lrb->rb_data, conj);
+ strcat(lrb->rb_data, cp);
+ }
+}
+
+/* Handle one file
+*/
+int r2bib(char *file, FILE *fid, int quiet, const int brakquot)
+{
+ struct Rb *lrb = NULL; /* last rb stored into */
+ int line=0 ;
+ char buf[BUFSIZ];
+ int err= 0;
+ const time_t now = time(NULL) ;
+
+ printf("@comment { created %s from %s by %s (Richard J. Mathar) run by %s}\n\n",
+ ctime(&now),file,__FILE__,getenv("USERNAME")) ;
+
+ while ( fgets(buf, sizeof(buf), fid) )
+ {
+ char *cp;
+ line++;
+
+ /* an empty line? If yes, assume start of a new entry */
+ if ((cp = sanz(buf)) == NULL)
+ {
+ if (lrb )
+ {
+ dumprb(brakquot);
+ lrb = NULL;
+ }
+ continue;
+ }
+
+ /*
+ * if the first letter is a % then it's the
+ * a new record, otherwise it's a continuation
+ * of the previous one.
+ */
+ if (cp[0] == '%')
+ {
+ /* search trough the supported list of tags */
+ for (lrb = &rb[0]; lrb->rb_kl != 0; lrb++)
+ if (lrb->rb_kl == cp[1])
+ {
+ stuffrb(lrb, &cp[2]);
+ break;
+ }
+ if (lrb->rb_kl == 0 && !quiet)
+ {
+ fprintf(stderr, "r2b: %s: line %d: unknown key letter %c, ignoring\n", file, line, cp[1]);
+ err = 1;
+ }
+ }
+ else
+ {
+ if (lrb == NULL && !quiet)
+ {
+ fprintf(stderr, "r2b: %s: line %d: bad format, ignoring\n", file, line);
+ err = 1;
+ continue;
+ }
+
+ stuffrb(lrb, &cp[0]);
+ }
+ }
+
+ if (lrb )
+ dumprb(brakquot);
+
+ return err ;
+}
+
+/* loop over the input files in the argument list;
+ If this list is empty, scan the standard input
+*/
+int main(int argc, char *argv[])
+{
+ int err=0;
+ char oc ;
+ int quiet=0 ;
+ int brakquot=0 ;
+ while ( (oc=getopt(argc,argv,"qQh")) != -1 )
+ {
+ switch(oc)
+ {
+ case 'q' :
+ quiet = 1 ;
+ break ;
+ case 'Q' :
+ brakquot = 1 ;
+ break ;
+ case 'h' :
+ usage(argv[0]) ;
+ return 0 ;
+ case '?' :
+ fprintf(stderr,"Invalid command line option %c\n",oc) ;
+ usage(argv[0]) ;
+ break ;
+ }
+ }
+
+ if (optind < argc-1 )
+ {
+ int i ;
+ for (i = optind; i < argc; i++)
+ {
+ FILE *fid = fopen(argv[i], "r") ;
+ if ( fid == NULL)
+ {
+ fprintf(stderr, "fopen: ");
+ perror(argv[i]);
+ continue;
+ }
+ err += r2bib(argv[i], fid, quiet, brakquot);
+ fclose(fid) ;
+ }
+ }
+ else
+ err += r2bib("stdin", stdin, quiet, brakquot);
+
+ if (err)
+ return 1 ;
+
+ return 0 ;
+}
diff --git a/biblio/bibtex/utils/r2bib/EndNoteTag.1 b/biblio/bibtex/utils/r2bib/EndNoteTag.1
new file mode 100644
index 0000000000..25698be628
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/EndNoteTag.1
@@ -0,0 +1,87 @@
+.TH "EndNoteTag" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+EndNoteTag \- change tags in EndNote input files
+.PP
+.SH "SYNOPSIS "
+.PP
+.PP
+EndNoteTag [-R] aA [bB c dD \&.\&.\&.]
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIEndNoteTag\fP reads the standard input and writes on standard output, which means it is a UNIX pipe\&.
+.PP
+\fIEndNoteTag\fP copies the standard input to the standard output and modifies EndNote tags (that is lines which start with a percent sign followed by a single letter or number-subsequently called a tag-and a blank) which are either substituted by other tags or removed\&.
+.PP
+The action on each tagged line is defined by command line arguments which are either 2-letter words (indicating substitution, symbolized by combinations aA, bB or dD in the synopsis) or 1-letter words (indicating removal, symbolized by c in the synopsis)\&. For the case of 2-letter words, the first letter is the original tag and the second letter the tag on output, whereas the 1-letter words only show the tag to be removed\&.
+.PP
+The order of substitution/removal is determined by the order of command line arguments (left to right)\&. The are executed individually for each EndNote entry in that order\&.
+.PP
+If the option -R is used, the standard input is interpreted as having multi-letter tags followed by one blanks and a hyphen\&. In this case all remaining command line options are words where the last letter is the EndNote tag on output that replaces the RIS tag indicated by the first letters, and where all RIS tags not mentioned in any command line option are removed\&.
+.PP
+.SH "COMPILATION "
+.PP
+.PP
+On standard Unices the commands
+.PP
+autoreconf -i
+.PP
+\&./configure [--prefix=\&.\&.\&.\&.]
+.PP
+make install
+.PP
+compile and install the program\&.
+.PP
+.SH "EXAMPLES "
+.PP
+.PP
+EndNoteTag 1R < infile\&.end > outfile\&.end
+.PP
+Replaces the %1 tags by %R tags
+.PP
+EndNoteTag 1R ZA = < infile\&.end > outfile\&.end
+.PP
+Replaces the %1 tags by %R tags, replaces %Z tags by %A tags, and removes %= tags\&. Note that the original %R and %A tags stay, and one may end up with ambiguous double tags for these\&.
+.PP
+EndNoteTag 1t 21 t2 < infile\&.end > outfile\&.end
+.PP
+Swaps %1 and %2 tags (the intermediate %t tags do not survive the actions) and replaces %t tags by %1 tags\&.
+.PP
+EndNoteTag R < infile\&.end > outfile\&.end
+.PP
+Remove %R tags
+.PP
+cat infile\&.end | EndNoteTag KR RA
+.PP
+Replace %K tags or %R tags effectively by %A tags \&.
+.PP
+cat infile\&.end | EndNoteTag KR R > outfile\&.end
+.PP
+Remove %K tags and %R tags\&. For the original %R tags, the first command line argument has no effect, but for the original %K tags, they are changed to %R tags by the first command line argument, and then removed on behalf of the second command line argument\&.
+.PP
+EndNoteTag R KR < infile\&.end
+.PP
+Original %R tags are removed\&. Original %K tags become %R tags\&. Note the difference to the previous example which used a different order of the command line arguments\&.
+.PP
+EndNoteTag -R T2 AUA < infile\&.ris
+.PP
+Original tags of the AU format are changed to %A EndNote tags\&. All other tags are removed\&.
+.PP
+EndNoteTag -R T2 'AU A' 'TITT' < infile\&.ris
+.PP
+Original tags of the AU format are changed to %A EndNote tags, and tags of the TIT format are changed to %T EndNote tags\&. All other tags are removed\&. The command line arguments are put into single quotes to prevent the shell from interpreting the blank in the AU tags as a delimiter between command line arguments\&.
+.PP
+.SH "NOTES "
+.PP
+.PP
+A list of tags in an EndNote file is obtained for UNIX systems with
+.PP
+sed -n '/^%/p' < infile\&.end | cut -b1,2 | sort -u
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Richard J\&. Mathar, http://www.mpia.de/~mathar
diff --git a/biblio/bibtex/utils/r2bib/EndNoteTag.cxx b/biblio/bibtex/utils/r2bib/EndNoteTag.cxx
new file mode 100644
index 0000000000..fd2995cc08
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/EndNoteTag.cxx
@@ -0,0 +1,148 @@
+/**
+* The documentation is kept in the UNIX man page EndNoteTag.1 .
+* @since 2007-06-13
+* @author Richard J. Mathar
+*/
+#include <iostream>
+#include <cstring>
+#include <unistd.h>
+
+using namespace std ;
+
+/**
+* @return 0 if successful, 1 if the syntax is not met.
+* @since 2007-06-12
+* @author Richard J. Mathar
+*/
+int main(int argc, char*argv[])
+{
+
+ /* command line option */
+ int c ;
+
+ /* 0 if EndNote standard input, 1 if RIS */
+ int ristype =0 ;
+
+ /* the length of the tag for RIS type inputs */
+ int rislen = -1 ;
+
+ while ( (c=getopt(argc,argv,"R")) != -1)
+ {
+ switch(c)
+ {
+ case 'R':
+ ristype=1 ;
+ break ;
+ case '?':
+ cerr << argv[0] << ": invalid command line option " << optarg << endl ;
+ return 1 ;
+ }
+ }
+
+ /* States 0 = noop, 1=replace, 2 =remove. Supposed we do not see any more
+ * command line arguments, the default is noop for EndNote and remove for RIS.
+ */
+ int state = ristype ? 2 : 0 ;
+
+ if ( optind >= argc )
+ {
+ cerr << argv[0] << " needs at least one command line argument for useful operation\n" ;
+ return 1 ;
+ }
+
+ /* for EndNote inputs, demand 1 or 2-letter command line arguments
+ */
+ if ( ! ristype)
+ for(int c = optind ; c < argc; c++)
+ {
+ if ( strlen(argv[c]) > 2+ristype )
+ {
+ cerr << argv[0] << " invalid length of argument " << argv[c] << endl ;
+ return 1 ;
+ }
+ }
+
+ /* loop over all lines of the standard input.
+ */
+ while ( !cin.eof() )
+ {
+ string buf ;
+ getline(cin,buf) ;
+
+ /* Check if this starts a new tag. This is done naively: tags are all lines at least two characters long.
+ * EndNote tags must start with a percent sign as the first character. RIS tags are any two characters
+ * followed by one or two blanks (one blank is actually a non-standard faulty format), a dash and at
+ * least one more blank.
+ */
+ if ( buf.size() >= 2 )
+ {
+ /* try to autodetect the length of the RIS Tags */
+ if (ristype && rislen < 0 )
+ {
+ /* search for the exact position of the RIS tag, independent on
+ * how many blanks are between the tag and the dash.
+ */
+ const int firstd = buf.find(" - ") ;
+ if ( firstd != string::npos )
+ rislen = firstd ;
+ }
+
+ if ( buf[0] == '%' && !ristype || ristype && rislen >=0 && buf.compare(rislen,3," - ",3) == 0 )
+ {
+ /* reset state to default.
+ */
+ state= ristype ? 2 : 0 ;
+ for(int c=optind ; c < argc ; c++)
+ {
+ /* query whether this is a tag that is mentioned in the command line arguments.
+ */
+ if ( ristype)
+ {
+ /* for RIS type inputs, command line arguments must be 3-letter words
+ */
+ if ( strlen(argv[c]) != rislen+1 )
+ {
+ cerr << argv[0] << " invalid length of argument " << argv[c] << endl ;
+ return 1 ;
+ }
+
+ /* search for the exact position of the RIS tag, independent on
+ * how many blanks are between the tag and the dash.
+ */
+ const int firstd = buf.find(" - ") ;
+ if ( buf.compare(0,2,argv[c],2) == 0 )
+ {
+ buf.replace(0,1,"%") ;
+ buf.replace(1,1+firstd,&argv[c][2]) ;
+ state = 1 ;
+ }
+ }
+ else
+ {
+ if ( buf[1] == argv[c][0] )
+ {
+ if ( strlen(argv[c]) == 1 )
+ state = 2 ;
+ else
+ {
+ state = 1 ;
+ buf.replace(1,1,&argv[c][1]) ;
+ }
+ }
+ }
+ }
+ }
+ }
+ /* blank lines reset the state */
+ else if ( buf.size() == 0 )
+ {
+ state= ristype ? 2 : 0 ;
+ }
+
+ /* print potentially modified line
+ */
+ if ( state != 2 )
+ cout << buf << endl ;
+ }
+ return 0 ;
+}
diff --git a/biblio/bibtex/utils/r2bib/INSTALL b/biblio/bibtex/utils/r2bib/INSTALL
new file mode 100644
index 0000000000..2bf3d33a45
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/INSTALL
@@ -0,0 +1,30 @@
+Compilation of the executables is based on the GNU autotools:
+
+autoreconf -i
+./configure # optionally with --prefix=....installation directory
+make install
+
+Alternatively the gcc compiler and/or lex compilers can be used,
+in the minimalistic cases without optimization similar to:
+
+ cc -o EndNote2bib EndNote2bib.c
+ cc -o dosToTex dosToTex.c
+ cc -o r2bib r2bib.c
+ c++ -o EndNoteTag EndNoteTag.cxx
+
+In particular, some tuning of the behavior of ansel2uni(1) is only
+supported by running lex(1) and cc(1) separately, using preprocessor
+options for the later.
+
+The man(1) pages installed above may require an update of the database in the MANPATH:
+ echo $MANPATH
+ mandb man
+
+Otherwise they can be looked at in the style of nroff(1) through a pager,
+ nroff -man EndNote2bib.1 | more
+ nroff -man EndNoteTag.1 | more
+ nroff -man risDateAdj.1 | more
+ nroff -man wileyEndNoteFilt.1 | more
+ nroff -man ansel2uni.1 | more
+ nroff -man dosToTex.1 | more
+ nroff -man r2bib.1 | more
diff --git a/biblio/bibtex/utils/r2bib/Makefile.am b/biblio/bibtex/utils/r2bib/Makefile.am
new file mode 100644
index 0000000000..fbac79fed5
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/Makefile.am
@@ -0,0 +1,21 @@
+ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
+
+AM_LFLAGS= -i
+
+bin_PROGRAMS = EndNote2bib EndNoteTag dosToTex wileyEndNoteFilt risDateAdj ansel2uni r2bib
+
+dist_man_MANS = EndNote2bib.1 EndNoteTag.1 ansel2uni.1 dosToTex.1 r2bib.1 wileyEndNoteFilt.1
+
+dosToTex_SOURCES = dosToTex.c
+
+r2bib_SOURCES = r2bib.c
+
+EndNote2bib_SOURCES = EndNote2bib.c
+
+EndNoteTag_SOURCES = EndNoteTag.cxx
+
+wileyEndNoteFilt_SOURCES = wileyEndNoteFilt.ll
+
+risDateAdj_SOURCES = risDateAdj.ll
+
+ansel2uni_SOURCES = ansel2uni.ll
diff --git a/biblio/bibtex/utils/r2bib/Makefile.in b/biblio/bibtex/utils/r2bib/Makefile.in
new file mode 100644
index 0000000000..9d1f91c703
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/Makefile.in
@@ -0,0 +1,937 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = EndNote2bib$(EXEEXT) EndNoteTag$(EXEEXT) \
+ dosToTex$(EXEEXT) wileyEndNoteFilt$(EXEEXT) \
+ risDateAdj$(EXEEXT) ansel2uni$(EXEEXT) r2bib$(EXEEXT)
+subdir = .
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/configure $(am__configure_deps) \
+ $(srcdir)/config.h.in ansel2uni.cc risDateAdj.cc \
+ wileyEndNoteFilt.cc depcomp ylwrap $(dist_man_MANS) ChangeLog \
+ INSTALL README install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_EndNote2bib_OBJECTS = EndNote2bib.$(OBJEXT)
+EndNote2bib_OBJECTS = $(am_EndNote2bib_OBJECTS)
+EndNote2bib_LDADD = $(LDADD)
+am_EndNoteTag_OBJECTS = EndNoteTag.$(OBJEXT)
+EndNoteTag_OBJECTS = $(am_EndNoteTag_OBJECTS)
+EndNoteTag_LDADD = $(LDADD)
+am_ansel2uni_OBJECTS = ansel2uni.$(OBJEXT)
+ansel2uni_OBJECTS = $(am_ansel2uni_OBJECTS)
+ansel2uni_LDADD = $(LDADD)
+am_dosToTex_OBJECTS = dosToTex.$(OBJEXT)
+dosToTex_OBJECTS = $(am_dosToTex_OBJECTS)
+dosToTex_LDADD = $(LDADD)
+am_r2bib_OBJECTS = r2bib.$(OBJEXT)
+r2bib_OBJECTS = $(am_r2bib_OBJECTS)
+r2bib_LDADD = $(LDADD)
+am_risDateAdj_OBJECTS = risDateAdj.$(OBJEXT)
+risDateAdj_OBJECTS = $(am_risDateAdj_OBJECTS)
+risDateAdj_LDADD = $(LDADD)
+am_wileyEndNoteFilt_OBJECTS = wileyEndNoteFilt.$(OBJEXT)
+wileyEndNoteFilt_OBJECTS = $(am_wileyEndNoteFilt_OBJECTS)
+wileyEndNoteFilt_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
+AM_V_LEX = $(am__v_LEX_@AM_V@)
+am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
+am__v_LEX_0 = @echo " LEX " $@;
+am__v_LEX_1 =
+YLWRAP = $(top_srcdir)/ylwrap
+SOURCES = $(EndNote2bib_SOURCES) $(EndNoteTag_SOURCES) \
+ $(ansel2uni_SOURCES) $(dosToTex_SOURCES) $(r2bib_SOURCES) \
+ $(risDateAdj_SOURCES) $(wileyEndNoteFilt_SOURCES)
+DIST_SOURCES = $(EndNote2bib_SOURCES) $(EndNoteTag_SOURCES) \
+ $(ansel2uni_SOURCES) $(dosToTex_SOURCES) $(r2bib_SOURCES) \
+ $(risDateAdj_SOURCES) $(wileyEndNoteFilt_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+ $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+AM_RECURSIVE_TARGETS = cscope
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
+AM_LFLAGS = -i
+dist_man_MANS = EndNote2bib.1 EndNoteTag.1 ansel2uni.1 dosToTex.1 r2bib.1 wileyEndNoteFilt.1
+dosToTex_SOURCES = dosToTex.c
+r2bib_SOURCES = r2bib.c
+EndNote2bib_SOURCES = EndNote2bib.c
+EndNoteTag_SOURCES = EndNoteTag.cxx
+wileyEndNoteFilt_SOURCES = wileyEndNoteFilt.ll
+risDateAdj_SOURCES = risDateAdj.ll
+ansel2uni_SOURCES = ansel2uni.ll
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .cxx .ll .o .obj
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+EndNote2bib$(EXEEXT): $(EndNote2bib_OBJECTS) $(EndNote2bib_DEPENDENCIES) $(EXTRA_EndNote2bib_DEPENDENCIES)
+ @rm -f EndNote2bib$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(EndNote2bib_OBJECTS) $(EndNote2bib_LDADD) $(LIBS)
+
+EndNoteTag$(EXEEXT): $(EndNoteTag_OBJECTS) $(EndNoteTag_DEPENDENCIES) $(EXTRA_EndNoteTag_DEPENDENCIES)
+ @rm -f EndNoteTag$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(EndNoteTag_OBJECTS) $(EndNoteTag_LDADD) $(LIBS)
+
+ansel2uni$(EXEEXT): $(ansel2uni_OBJECTS) $(ansel2uni_DEPENDENCIES) $(EXTRA_ansel2uni_DEPENDENCIES)
+ @rm -f ansel2uni$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(ansel2uni_OBJECTS) $(ansel2uni_LDADD) $(LIBS)
+
+dosToTex$(EXEEXT): $(dosToTex_OBJECTS) $(dosToTex_DEPENDENCIES) $(EXTRA_dosToTex_DEPENDENCIES)
+ @rm -f dosToTex$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dosToTex_OBJECTS) $(dosToTex_LDADD) $(LIBS)
+
+r2bib$(EXEEXT): $(r2bib_OBJECTS) $(r2bib_DEPENDENCIES) $(EXTRA_r2bib_DEPENDENCIES)
+ @rm -f r2bib$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(r2bib_OBJECTS) $(r2bib_LDADD) $(LIBS)
+
+risDateAdj$(EXEEXT): $(risDateAdj_OBJECTS) $(risDateAdj_DEPENDENCIES) $(EXTRA_risDateAdj_DEPENDENCIES)
+ @rm -f risDateAdj$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(risDateAdj_OBJECTS) $(risDateAdj_LDADD) $(LIBS)
+
+wileyEndNoteFilt$(EXEEXT): $(wileyEndNoteFilt_OBJECTS) $(wileyEndNoteFilt_DEPENDENCIES) $(EXTRA_wileyEndNoteFilt_DEPENDENCIES)
+ @rm -f wileyEndNoteFilt$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(wileyEndNoteFilt_OBJECTS) $(wileyEndNoteFilt_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EndNote2bib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EndNoteTag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ansel2uni.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dosToTex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r2bib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/risDateAdj.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wileyEndNoteFilt.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.ll.cc:
+ $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f ansel2uni.cc
+ -rm -f risDateAdj.cc
+ -rm -f wileyEndNoteFilt.cc
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
+ clean-binPROGRAMS clean-cscope clean-generic cscope \
+ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-man \
+ uninstall-man1
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/biblio/bibtex/utils/r2bib/README b/biblio/bibtex/utils/r2bib/README
new file mode 100644
index 0000000000..da3dfb5bd1
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/README
@@ -0,0 +1,70 @@
+SYNOPSES
+
+ EndNote2bib [-h|-q]
+ risDateAdj
+ EndNoteTag
+ wileyEndNoteFilt
+ dosToTex [-1|-u|-h]
+ ansel2uni
+
+i) r2bib and EndNote2bib convert refer and EndNote bibliography lists
+into the BibTeX format, respectively.
+
+ii) An auxiliary filter program dosToTex, also written in C, is included to ease the
+transition from PC/Windows 8-bit character representation (which presumably was
+the standard in the EndNote input files up to EndNote 8) to the backslashed
+escape sequences that are (more or less) the standard in BibTeX.
+
+iii) Another independent filter program, EndNoteTag, written in C++, is made available
+to change the tags in EndNote files or to convert RIS tags to EndNote tags.
+The main use is to re-map tags of an EndNote file on the fly if these do not
+match the tags within EndNote2bib.
+
+There are three auxiliary programs delivered in lex (flex) source format:
+
+iv) The program wileyEndNoteFilt recomposes author and editor tags of
+the input stream (an EndNote file) such that mutiple, comma-separated
+authors in single %E or %A lines are shuffled into multiple lines, each
+containg only a single person.
+
+v) The filter program ansel2uni transforms an input stream encoded according
+to the ANSEL specification to an UTF-8 character set. In a LaTeX environment,
+this is presumably a preprocessor to "recode u8..tex" to end up with a TeX encoding.
+
+vi) The filter program risDateAdj adjusts dates of non-standard
+formats in the Y1, PY and Y2 fields of RIS files. This is a preprocessor
+which patches these files prior to use with ris2xml(1), for example, and
+basically unrelated to EndNote bibilographies.
+
+SEE ALSO
+
+Further reading:
+http://en.wikipedia.org/wiki/EndNote
+http://www.endnote.com
+http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/
+http://www.ctan.org/tex-archive/biblio/bibtex/utils/refer-tools/
+http://interbib.stanford.edu/
+http://sourceforge.net/p/bibutils/home/Bibutils/
+http://lucy.ukc.ac.uk/Makhzan/refer.html
+http://www.w3.org/Tools/Word_proc_filters.html
+
+For the inverse functionality see
+http://www.ctan.org/tex-archive/biblio/bibtex/contrib/misc/refer.bst
+http://www.ee.columbia.edu/dvmm/imanager/convert.txt
+http://liinwww.ira.uka.de/bibliography/Bib.Format.html
+
+HISTORY
+
+The program r2bib (the C source r2bib.c and troff manual r2bib.1) came from
+Rusty Wright, Center for Music Experiment, University of California San Diego,
+see ftp://ftp.cs.tu-berlin.de/pub/TeX/TeX-3.141/contributions/TeXcontrib/rusty/r2bib .
+Both files are included as existing in CTAN with a time stamp of 3 Oct 1990.
+(He started it!). This is left untouched except for #inclus'ion of two more C
+header files (plus removal of explicit declarations of malloc, realloc) to
+avoid gcc rejection of the source.
+A variant is in http://stuff.mit.edu/afs/athena/contrib/potluck/src/refer2tex/ .
+
+AUTHOR
+
+Richard J. Mathar http://www.mpia.de/~mathar
+Dec 06, 2015
diff --git a/biblio/bibtex/utils/r2bib/aclocal.m4 b/biblio/bibtex/utils/r2bib/aclocal.m4
new file mode 100644
index 0000000000..4ad4de2cff
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/aclocal.m4
@@ -0,0 +1,1057 @@
+# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.13'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.13.4], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.13.4])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Copyright (C) 1998-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/biblio/bibtex/utils/r2bib/ansel2uni.1 b/biblio/bibtex/utils/r2bib/ansel2uni.1
new file mode 100644
index 0000000000..5672aca409
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/ansel2uni.1
@@ -0,0 +1,44 @@
+.TH "ansel2uni" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+ansel2uni \- convert an ANSEL 8-bit stream to UTF-8
+.PP
+.SH "SYNOPSIS "
+.PP
+.PP
+ansel2uni
+.PP
+.SH "OPTIONS "
+.PP
+.PP
+none
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIansel2uni\fP reads the standard input and transforms byte sequences conforming to the 8-bit ANSEL (a\&.k\&.a\&. Z39-47-1993 or ISO-IR-231) standard to the UTF-8 Unicode encoding\&. The dedicated interpretation of the input stream can be modified to adhere to MARC or GEDCOM standards at compile time\&.
+.PP
+The UTF-8 output may then be converted with tools like uni2ascii(1) or recode(1) to other schemes and character sets\&.
+.PP
+.SH "EXAMPLES "
+.PP
+.PP
+cat foo*\&.txt | ansel2uni > bar\&.utf8
+.PP
+cat foo*\&.txt | ansel2uni | uni2ascii -q -a Q -a H > bar\&.html
+.PP
+.SH "SEE ALSO "
+.PP
+.PP
+uni2ascii(1) recode(1)
+.PP
+.SH "CAUTION "
+.PP
+.PP
+This is in an alpha state and has been tested only marginally\&.
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Richard J\&. Mathar, http://www.mpia.de/~mathar
diff --git a/biblio/bibtex/utils/r2bib/ansel2uni.cc b/biblio/bibtex/utils/r2bib/ansel2uni.cc
new file mode 100644
index 0000000000..923c96af8c
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/ansel2uni.cc
@@ -0,0 +1,13365 @@
+
+#line 3 "ansel2uni.cc"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 1287
+#define YY_END_OF_BUFFER 1288
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[2590] =
+ { 0,
+ 0, 0, 1288, 1287, 661, 1287, 1287, 1287, 1287, 1287,
+ 1287, 1287, 659, 626, 1, 2, 3, 4, 627, 137,
+ 35, 89, 41, 19, 153, 616, 11, 611, 8, 10,
+ 609, 628, 610, 138, 65, 90, 71, 48, 154, 615,
+ 120, 6, 58, 621, 622, 9, 613, 614, 7, 612,
+ 12, 5, 624, 625, 623, 1287, 1287, 1287, 1287, 1287,
+ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,
+ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,
+ 1287, 1287, 1287, 628, 1287, 0, 254, 255, 0, 121,
+ 207, 208, 209, 210, 256, 0, 122, 660, 34, 629,
+
+ 481, 525, 549, 555, 589, 605, 482, 526, 550, 556,
+ 590, 606, 581, 595, 582, 596, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 630, 13, 21, 25, 259, 30, 36, 453, 601,
+ 42, 50, 54, 260, 60, 66, 454, 602, 579, 593,
+ 580, 594, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 631, 14, 79,
+ 22, 257, 26, 365, 129, 379, 139, 31, 405, 155,
+
+ 163, 37, 455, 40, 192, 43, 80, 51, 258, 55,
+ 366, 130, 380, 140, 61, 406, 156, 164, 67, 456,
+ 70, 193, 267, 265, 577, 591, 268, 266, 578, 592,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 632, 15, 81, 23, 101,
+ 109, 27, 123, 32, 165, 38, 187, 189, 469, 44,
+ 82, 52, 102, 110, 56, 124, 62, 166, 68, 188,
+ 190, 470, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 633, 16, 527,
+ 111, 29, 33, 175, 449, 607, 45, 528, 112, 59,
+ 63, 176, 450, 608, 583, 597, 584, 598, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 634, 73, 198, 91, 349, 113, 147,
+ 177, 308, 74, 199, 92, 350, 114, 148, 178, 309,
+ 241, 242, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 635, 75, 93,
+
+ 103, 115, 149, 179, 76, 94, 104, 116, 150, 180,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 636, 287, 315, 83, 325,
+ 95, 347, 105, 351, 119, 381, 385, 299, 407, 409,
+ 419, 435, 459, 463, 467, 194, 288, 316, 84, 326,
+ 96, 348, 106, 352, 382, 386, 300, 408, 410, 420,
+ 436, 460, 464, 468, 195, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 637, 17, 24, 355, 28, 39, 457, 465, 191, 46,
+ 53, 356, 57, 64, 476, 69, 458, 466, 72, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 638, 211, 85, 87, 99, 243,
+ 285, 213, 245, 135, 145, 215, 161, 169, 173, 217,
+ 196, 212, 86, 88, 100, 244, 286, 214, 253, 246,
+ 136, 146, 216, 162, 170, 174, 218, 197, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 639, 18, 181, 47, 182, 477, 478,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 640, 641, 642, 200, 202,
+ 201, 203, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 643, 151, 183,
+ 152, 184, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 644, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 645, 20, 331, 289, 107, 357, 125,
+ 131, 141, 157, 167, 171, 49, 333, 290, 108, 359,
+ 127, 133, 143, 159, 168, 172, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 646, 77, 97, 117, 247, 185, 78, 98, 118,
+ 248, 186, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 647, 479, 317,
+ 327, 523, 353, 551, 367, 371, 383, 553, 411, 421,
+ 437, 587, 451, 461, 603, 471, 480, 318, 328, 524,
+ 354, 552, 368, 372, 384, 554, 412, 422, 438, 588,
+ 452, 462, 604, 472, 585, 599, 586, 600, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 648, 441, 442, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 649, 313, 314, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 650,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 651, 319, 329, 369, 377,
+ 387, 417, 439, 473, 320, 330, 475, 370, 378, 388,
+ 418, 440, 474, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 652, 332,
+
+ 358, 126, 132, 142, 158, 281, 283, 334, 360, 128,
+ 134, 144, 160, 282, 284, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 653, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 654, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 655, 656, 658, 303, 304, 311, 310, 305,
+
+ 312, 657, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 204, 205,
+ 206, 0, 0, 0, 0, 491, 537, 565, 493, 539,
+ 567, 0, 0, 0, 511, 513, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 269, 271, 273, 275,
+ 277, 279, 270, 272, 274, 276, 278, 280, 0, 0,
+ 487, 533, 561, 489, 535, 563, 0, 0, 335, 397,
+ 337, 399, 0, 507, 509, 0, 0, 229, 231, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 483,
+ 529, 557, 485, 531, 559, 0, 389, 443, 391, 445,
+ 0, 339, 401, 341, 403, 0, 503, 505, 0, 423,
+ 425, 0, 361, 221, 363, 223, 0, 0, 262, 264,
+ 0, 0, 0, 0, 321, 323, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 492, 538, 566,
+ 494, 540, 568, 0, 488, 534, 562, 490, 536, 564,
+ 0, 484, 530, 558, 486, 532, 560, 0, 0, 496,
+ 542, 570, 498, 544, 572, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 500, 546, 574,
+ 502, 548, 576, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 390, 444, 392, 446, 0, 495,
+ 541, 569, 497, 543, 571, 0, 0, 296, 298, 0,
+ 515, 517, 0, 0, 394, 396, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 336, 398, 338, 400, 0, 340,
+ 402, 342, 404, 0, 0, 295, 297, 0, 0, 0,
+ 237, 301, 239, 306, 0, 233, 291, 219, 235, 293,
+ 220, 0, 0, 0, 0, 0, 0, 0, 249, 251,
+
+ 0, 374, 414, 376, 416, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 512, 514, 0, 508, 510, 0,
+ 504, 506, 0, 0, 516, 518, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 344, 346, 0, 0,
+ 520, 522, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 424, 426, 0, 0, 0, 238, 302,
+ 240, 307, 0, 0, 0, 0, 428, 430, 0, 0,
+ 0, 0, 0, 0, 0, 432, 434, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 230, 232, 0,
+ 362, 222, 364, 224, 0, 0, 393, 395, 0, 234,
+
+ 292, 447, 236, 294, 448, 0, 0, 0, 0, 226,
+ 228, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 427, 429, 0, 225, 227, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 261, 263,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 322, 324, 0, 0, 0, 0, 343, 345, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 250, 252, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 499, 545, 573,
+ 501, 547, 575, 0, 0, 373, 413, 375, 415, 0,
+ 519, 521, 0, 431, 433, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 662, 663, 664, 665, 666, 667, 668,
+ 669, 670, 671, 672, 673, 674, 675, 676, 677, 678,
+ 679, 680, 681, 682, 683, 684, 685, 686, 687, 688,
+ 689, 690, 691, 692, 693, 694, 695, 696, 697, 698,
+ 699, 700, 701, 702, 703, 704, 705, 706, 707, 708,
+
+ 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
+ 719, 720, 721, 722, 723, 724, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736, 737, 738,
+ 739, 740, 741, 742, 743, 744, 745, 746, 747, 748,
+ 749, 750, 751, 752, 753, 754, 755, 756, 757, 758,
+ 759, 760, 761, 762, 763, 764, 765, 766, 767, 768,
+ 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
+ 779, 780, 781, 782, 783, 784, 785, 786, 787, 788,
+ 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
+ 799, 800, 801, 802, 803, 804, 805, 806, 807, 808,
+
+ 809, 810, 811, 812, 813, 814, 815, 816, 817, 818,
+ 819, 820, 821, 822, 823, 824, 825, 826, 827, 828,
+ 829, 830, 831, 832, 833, 834, 835, 836, 837, 838,
+ 839, 840, 841, 842, 843, 844, 845, 846, 847, 848,
+ 849, 850, 851, 852, 853, 854, 855, 856, 857, 858,
+ 859, 860, 861, 862, 863, 864, 865, 866, 867, 868,
+ 869, 870, 871, 872, 873, 874, 875, 876, 877, 878,
+ 879, 880, 881, 882, 883, 884, 885, 886, 887, 888,
+ 889, 890, 891, 892, 893, 894, 895, 896, 897, 898,
+ 899, 900, 901, 902, 903, 904, 905, 906, 907, 908,
+
+ 909, 910, 911, 912, 913, 914, 915, 916, 917, 918,
+ 919, 920, 921, 922, 923, 924, 925, 926, 927, 928,
+ 929, 930, 931, 932, 933, 934, 935, 936, 937, 938,
+ 939, 940, 941, 942, 943, 944, 945, 946, 947, 948,
+ 949, 950, 951, 952, 953, 954, 955, 956, 957, 958,
+ 959, 960, 961, 962, 963, 964, 965, 966, 967, 968,
+ 969, 970, 971, 972, 973, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 998,
+ 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+
+ 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+ 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
+ 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+ 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
+ 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+ 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+ 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+ 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
+ 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
+ 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,
+
+ 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118,
+ 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128,
+ 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
+ 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+ 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158,
+ 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168,
+ 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178,
+ 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188,
+ 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198,
+ 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208,
+
+ 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218,
+ 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
+ 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238,
+ 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248,
+ 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258,
+ 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268,
+ 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278,
+ 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 0, 0,
+ 0, 0, 0, 0, 617, 619, 618, 620, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,
+ 3, 3, 3, 3, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 3, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 4, 3, 30, 3, 31, 3, 32, 33, 34, 35,
+
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 3, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 3, 3, 3, 3, 1, 57, 57, 57,
+ 57, 57, 57, 57, 57, 58, 59, 57, 57, 57,
+ 60, 61, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+
+ 103, 103, 103, 103, 103, 103, 104, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136
+ } ;
+
+static yyconst flex_int32_t yy_meta[137] =
+ { 0,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 1, 1, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 3, 1
+ } ;
+
+static yyconst flex_int16_t yy_base[2605] =
+ { 0,
+ 0, 0, 2037, 7773, 7773, 2018, 108, 2021, 124, 125,
+ 84, 1993, 2031, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 2013, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 220, 353, 486, 619, 752,
+ 885, 1018, 1151, 1284, 1417, 1548, 0, 0, 1665, 1782,
+ 1813, 1946, 2079, 2212, 2324, 2455, 2486, 2619, 2752, 2783,
+ 2814, 0, 0, 136, 2845, 2009, 7773, 7773, 113, 7773,
+ 7773, 7773, 7773, 7773, 7773, 1974, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 140, 144, 156, 273,
+ 167, 171, 406, 539, 672, 805, 938, 1071, 1204, 1337,
+ 1470, 1509, 1515, 1529, 1544, 1557, 1566, 1577, 1581, 1592,
+ 1596, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 1645, 1693, 1660, 1715, 1709, 1794, 1764, 1777,
+ 1811, 1798, 1825, 1999, 2132, 2265, 2304, 2310, 2324, 2339,
+ 2352, 2358, 2364, 2373, 2377, 2422, 2436, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 2451, 2457, 2469, 2506, 2484, 2672, 2805, 2473, 2972, 2941,
+ 2989, 2957, 2995, 3004, 3021, 3027, 3042, 3046, 3055, 3059,
+ 3072, 3076, 3093, 3097, 3106, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 3130, 3154, 3178, 3124, 3202, 3148, 3211, 3215,
+ 3226, 3232, 3241, 3250, 3263, 3274, 3280, 3289, 3336, 3302,
+
+ 3311, 3340, 3349, 3353, 3362, 3366, 3375, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 3387, 3391,
+ 3400, 3424, 3438, 3449, 3458, 3462, 3473, 3477, 3489, 3500,
+ 3511, 3522, 3526, 3537, 3548, 3559, 3571, 3575, 3586, 3590,
+ 3599, 3608, 3620, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 3624, 3657, 3673, 3638, 3687, 3691, 3704, 3710,
+ 3721, 3739, 3743, 3755, 3759, 3770, 3774, 3792, 3809, 3822,
+ 3831, 3837, 3843, 3849, 3860, 3864, 3876, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 3897, 3914, 3923, 3891, 3944, 3948, 3961, 3965, 3974, 3978,
+ 3993, 3999, 4012, 4016, 4033, 4027, 4050, 4044, 4061, 4067,
+ 4081, 4092, 4098, 4109, 4115, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 4121, 4130, 4154, 4143, 4160,
+ 4177, 4181, 4193, 4202, 4208, 4214, 4228, 4232, 4241, 4247,
+ 4256, 4262, 4279, 4294, 4309, 4313, 4324, 4328, 4339, 4343,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 4358,
+ 4373, 4388, 4400, 4406, 4425, 4437, 4451, 4455, 4464, 4476,
+ 4482, 4488, 4502, 4506, 4515, 4521, 4527, 4533, 4539, 4553,
+ 4566, 4572, 4578, 4584, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 4590, 4601,
+ 4605, 4617, 4623, 4629, 4635, 4650, 4662, 4656, 4674, 4680,
+ 4689, 4701, 4707, 4713, 4719, 4728, 4734, 4740, 4746, 4752,
+
+ 4758, 4767, 4773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 4779, 4785, 4805, 4791, 4818, 4824, 4830, 4836, 4842, 4853,
+ 4857, 4869, 4875, 4881, 4887, 4902, 4906, 4920, 4926, 4932,
+ 4941, 4953, 4957, 4971, 4980, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 4986, 4992, 5004, 5008, 5019, 5025, 5031, 5037,
+ 5043, 5056, 5070, 5076, 5082, 5088, 5094, 5103, 5107, 5121,
+ 5127, 5133, 5142, 5154, 5158, 5172, 5181, 7773, 7773, 7773,
+ 7773, 7773, 5187, 5193, 5205, 5209, 5220, 5226, 5232, 5238,
+ 5244, 5257, 5271, 5277, 5283, 5289, 5295, 5304, 5308, 5322,
+ 5328, 5334, 5343, 5355, 5359, 5373, 5382, 7773, 5388, 5394,
+
+ 5406, 5410, 5421, 5427, 5433, 5439, 5445, 5458, 5472, 5478,
+ 5484, 5490, 5496, 5505, 5509, 5523, 5529, 5535, 5544, 5556,
+ 5560, 5574, 5583, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 5589, 5595, 5613, 5609,
+ 5622, 5628, 5646, 5640, 5660, 5673, 5677, 5688, 5694, 5700,
+ 5711, 5715, 5726, 5739, 5745, 5760, 5764, 5773, 5777, 5790,
+ 5794, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 5811, 5815, 5824, 5828, 5839, 5848, 5862, 5866,
+ 5877, 5881, 5893, 5897, 5911, 5915, 5926, 5930, 5942, 5946,
+
+ 5960, 5964, 5975, 5979, 5991, 5995, 6009, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 6013, 6024,
+ 6028, 6061, 6042, 6075, 6081, 6090, 6096, 6110, 6123, 6129,
+ 6138, 6144, 6150, 6161, 6176, 6189, 6195, 6201, 6210, 6214,
+ 6223, 6227, 6240, 7773, 7773, 7773, 6249, 6261, 6265, 6274,
+ 6278, 6287, 6291, 6300, 6312, 6316, 6325, 6329, 6338, 6342,
+ 6351, 6363, 6367, 6376, 6380, 6389, 6393, 6402, 6414, 6418,
+
+ 6427, 7773, 7773, 7773, 6431, 6440, 6444, 6453, 6465, 6469,
+ 6478, 6482, 6491, 6495, 6504, 6516, 6520, 6529, 6533, 6542,
+ 6546, 6555, 6567, 6571, 6580, 6584, 6593, 6597, 6606, 7773,
+ 6618, 6622, 6631, 6635, 6644, 6648, 6657, 6669, 6673, 6682,
+ 6686, 6695, 6699, 6708, 6720, 6724, 6733, 6737, 6746, 6750,
+ 6759, 6771, 6775, 6784, 6788, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 6797, 6801, 6810, 6822, 6826, 6835, 6839,
+ 6848, 6852, 6861, 6873, 6877, 6886, 6890, 6899, 6903, 6912,
+ 6924, 6928, 6937, 6941, 6950, 6954, 6963, 6975, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 6979, 6988, 6992, 7001, 7005,
+ 7014, 7026, 7030, 7039, 7043, 7052, 7056, 7065, 7077, 7081,
+ 7090, 7094, 7103, 7107, 7116, 7128, 7132, 7141, 7145, 7154,
+ 7773, 7158, 7167, 7179, 7183, 7192, 7196, 7205, 7209, 7218,
+ 7230, 7234, 7243, 7247, 7256, 7260, 7269, 7281, 7285, 7294,
+ 7298, 7307, 7311, 7320, 7332, 7336, 7773, 7345, 7349, 7358,
+ 7362, 7371, 7383, 7387, 7396, 7400, 7409, 7413, 7422, 7434,
+ 7438, 7447, 7451, 7460, 7464, 7473, 7485, 7489, 7498, 7502,
+ 7511, 7515, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7524, 7536, 7540, 7549, 7553, 7562, 7566, 7575,
+ 7587, 7591, 7600, 7604, 7613, 7617, 7626, 7638, 7642, 7651,
+ 7655, 7664, 7668, 7677, 7689, 7693, 7702, 2020, 7773, 7773,
+ 7773, 1998, 1997, 1996, 1995, 7773, 7773, 7773, 7773, 7773,
+ 7773, 1994, 1993, 1992, 7773, 7773, 1991, 1990, 1989, 1988,
+ 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978,
+ 1977, 1976, 1975, 1974, 1917, 1916, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 1915, 7773, 1914, 7773, 1900, 1899,
+ 7773, 7773, 7773, 7773, 7773, 7773, 1886, 1885, 7773, 7773,
+ 7773, 7773, 1884, 7773, 7773, 1883, 1869, 7773, 7773, 1868,
+
+ 1856, 1855, 1854, 1853, 1852, 1851, 1850, 1849, 1848, 1847,
+ 1846, 1844, 1841, 1839, 1838, 1837, 1836, 1834, 1833, 7773,
+ 7773, 7773, 7773, 7773, 7773, 1830, 7773, 7773, 7773, 7773,
+ 1827, 7773, 7773, 7773, 7773, 1825, 7773, 7773, 1824, 7773,
+ 7773, 1823, 7773, 7773, 1822, 7773, 1820, 1819, 7773, 7773,
+ 1817, 1807, 1806, 1802, 7773, 7773, 1801, 1796, 1793, 1791,
+ 1790, 1789, 1788, 1786, 1780, 1778, 1777, 7773, 7773, 7773,
+ 7773, 7773, 7773, 1775, 7773, 7773, 7773, 7773, 7773, 7773,
+ 1769, 7773, 7773, 7773, 7773, 7773, 7773, 1767, 1752, 7773,
+ 7773, 7773, 7773, 7773, 7773, 1737, 1736, 1734, 1728, 1723,
+
+ 1722, 1720, 1718, 1716, 1715, 1712, 1707, 7773, 7773, 7773,
+ 7773, 7773, 7773, 1706, 1705, 1702, 1701, 1700, 1698, 1697,
+ 1696, 1693, 1692, 1691, 7773, 7773, 7773, 7773, 1688, 7773,
+ 7773, 7773, 7773, 7773, 7773, 1685, 1679, 7773, 7773, 1674,
+ 7773, 7773, 1673, 1671, 7773, 7773, 1669, 1666, 1664, 1661,
+ 1658, 1657, 1656, 1652, 1651, 1650, 1649, 1635, 1622, 1621,
+ 1620, 1618, 1617, 1615, 7773, 7773, 7773, 7773, 1608, 7773,
+ 7773, 7773, 7773, 1605, 1604, 7773, 7773, 1603, 1600, 1593,
+ 7773, 7773, 7773, 7773, 1590, 7773, 7773, 7773, 7773, 7773,
+ 7773, 1589, 1588, 1585, 1582, 1580, 1579, 1578, 7773, 7773,
+
+ 1568, 7773, 7773, 7773, 1565, 1563, 1560, 1558, 1557, 1556,
+ 1553, 1552, 1548, 1545, 7773, 7773, 1543, 7773, 7773, 1541,
+ 7773, 7773, 1538, 1537, 7773, 7773, 1536, 1534, 1528, 1521,
+ 1520, 1504, 1491, 1486, 1484, 1482, 7773, 7773, 1481, 1479,
+ 7773, 7773, 1478, 1477, 1476, 1475, 1474, 1473, 1472, 1471,
+ 1470, 1469, 1468, 7773, 7773, 1467, 1466, 1465, 7773, 7773,
+ 7773, 7773, 1464, 1463, 1462, 1461, 7773, 7773, 1460, 1459,
+ 1458, 1457, 1456, 1455, 1454, 7773, 7773, 1453, 1452, 1451,
+ 1450, 1449, 1448, 1447, 1446, 1445, 1388, 7773, 7773, 1387,
+ 7773, 7773, 1386, 7773, 1385, 1371, 7773, 7773, 1370, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 1358, 1356, 1353, 1351, 7773,
+ 7773, 1350, 1349, 1348, 1346, 1345, 1344, 1343, 1342, 1341,
+ 1340, 1339, 1338, 1337, 1336, 1335, 1334, 1333, 1332, 1331,
+ 1330, 1329, 1328, 1327, 7773, 7773, 1326, 7773, 7773, 1325,
+ 1324, 1323, 1322, 1321, 1320, 1319, 1318, 1317, 1316, 1315,
+ 1314, 1313, 1312, 1255, 1254, 1253, 1252, 1238, 7773, 7773,
+ 1237, 1225, 1223, 1220, 1218, 1217, 1216, 1215, 1213, 1212,
+ 1211, 1210, 1209, 1208, 1207, 1206, 1205, 1204, 1203, 1202,
+ 1201, 1200, 1199, 1198, 1197, 1196, 1195, 1194, 1193, 1192,
+ 1191, 1190, 1189, 1188, 1187, 1186, 1185, 1184, 1183, 1182,
+
+ 1181, 1180, 1179, 1122, 1121, 1120, 1119, 1105, 1104, 1092,
+ 1090, 1087, 1085, 1084, 1083, 1082, 1080, 1079, 1078, 1077,
+ 1076, 1075, 1074, 1073, 1072, 1071, 1070, 1069, 1068, 1067,
+ 1066, 1065, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057,
+ 1056, 1055, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047,
+ 1046, 989, 988, 987, 986, 972, 971, 959, 957, 954,
+ 7773, 7773, 952, 951, 950, 949, 7773, 7773, 947, 946,
+ 945, 944, 943, 942, 941, 940, 939, 937, 936, 935,
+ 934, 933, 932, 931, 930, 929, 928, 927, 926, 925,
+ 924, 923, 7773, 7773, 921, 920, 919, 918, 917, 916,
+
+ 915, 914, 913, 856, 855, 854, 853, 839, 838, 826,
+ 824, 821, 819, 818, 817, 816, 814, 7773, 7773, 7773,
+ 7773, 7773, 7773, 811, 810, 7773, 7773, 7773, 809, 808,
+ 7773, 7773, 807, 7773, 7773, 806, 805, 804, 803, 802,
+ 801, 800, 799, 798, 795, 794, 793, 792, 791, 790,
+ 789, 788, 787, 786, 785, 784, 783, 782, 781, 780,
+ 723, 722, 721, 720, 706, 705, 693, 691, 688, 686,
+ 685, 684, 683, 681, 680, 678, 677, 676, 675, 673,
+ 672, 671, 670, 669, 668, 667, 666, 665, 664, 663,
+ 662, 661, 660, 659, 658, 657, 656, 655, 654, 653,
+
+ 651, 650, 649, 648, 590, 589, 588, 587, 573, 572,
+ 560, 116, 117, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 131, 132, 133, 137, 138, 143, 144,
+ 146, 147, 148, 149, 151, 152, 153, 156, 163, 165,
+ 167, 169, 170, 172, 175, 178, 179, 180, 183, 190,
+ 249, 250, 251, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 263, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 276, 277, 278, 282, 284, 285, 286, 287,
+ 292, 294, 306, 307, 321, 322, 323, 324, 382, 383,
+ 384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
+
+ 394, 395, 396, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 409, 410, 411, 412, 415, 417, 418, 419,
+ 420, 422, 425, 427, 439, 440, 454, 455, 456, 457,
+ 514, 515, 516, 517, 518, 519, 521, 522, 524, 525,
+ 526, 527, 528, 529, 532, 533, 534, 535, 537, 538,
+ 540, 541, 556, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773,
+ 7773, 7773, 7773, 7773, 7773, 7773, 7773, 7773, 542, 549,
+ 562, 569, 557, 658, 7773, 7773, 7773, 7773, 7773, 7751,
+ 579, 580, 7753, 7755, 7757, 7759, 7761, 7763, 7765, 7767,
+
+ 581, 583, 586, 7769
+ } ;
+
+static yyconst flex_int16_t yy_def[2605] =
+ { 0,
+ 2589, 1, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2590, 2591, 2592, 2593, 2594,
+ 2595, 2589, 2589, 2589, 2596, 2597, 2598, 2589, 2589, 2599,
+ 2600, 2601, 2602, 2603, 2604, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 0, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589
+ } ;
+
+static yyconst flex_int16_t yy_nxt[7910] =
+ { 0,
+ 4, 5, 4, 4, 6, 4, 4, 7, 4, 4,
+ 4, 4, 8, 4, 4, 9, 4, 10, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 11, 4, 4, 4, 4, 12,
+ 4, 4, 13, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 4, 4, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 32, 4,
+ 4, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+
+ 53, 54, 32, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 32, 85, 19, 87, 91, 93, 95,
+ 1096, 1129, 1097, 1132, 1098, 2438, 2439, 1133, 2440, 2441,
+ 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 1099, 1134,
+ 2450, 2451, 2452, 88, 92, 94, 2453, 2454, 1130, 1100,
+ 1142, 1101, 2455, 2456, 1143, 2457, 2458, 2459, 2460, 1132,
+ 2461, 2462, 2463, 1133, 1132, 2464, 1132, 1132, 1133, 1132,
+ 1133, 1133, 2465, 1133, 2466, 1134, 2467, 96, 2468, 2469,
+
+ 1134, 2470, 1134, 1134, 2471, 1134, 1142, 2472, 2473, 2474,
+ 1143, 1142, 2475, 1142, 1142, 1143, 1142, 1143, 1143, 2476,
+ 1143, 89, 100, 100, 101, 100, 100, 100, 102, 100,
+ 100, 100, 103, 100, 100, 100, 100, 100, 104, 100,
+ 100, 100, 100, 105, 100, 100, 100, 106, 100, 100,
+ 100, 107, 100, 100, 100, 108, 100, 100, 100, 109,
+ 100, 100, 100, 100, 100, 110, 100, 100, 100, 100,
+ 111, 100, 100, 100, 112, 100, 1135, 1136, 2477, 2478,
+ 2479, 1137, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487,
+ 2488, 1138, 2489, 113, 114, 2490, 2491, 2492, 2493, 2494,
+
+ 2495, 2496, 2497, 2498, 1139, 2499, 2500, 2501, 1140, 115,
+ 116, 2502, 1135, 2503, 2504, 2505, 2506, 1135, 1141, 1135,
+ 1135, 2507, 1135, 2508, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 2509, 2510, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 2511, 2512, 2513, 2514, 141, 142, 142, 143, 142, 142,
+ 142, 144, 142, 142, 142, 145, 142, 142, 142, 142,
+ 146, 147, 142, 142, 142, 142, 148, 142, 149, 142,
+ 150, 142, 142, 142, 151, 142, 142, 142, 152, 142,
+ 142, 142, 153, 142, 142, 142, 142, 154, 155, 142,
+
+ 142, 142, 142, 156, 142, 157, 142, 158, 142, 1144,
+ 1145, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523,
+ 2524, 2525, 2526, 2527, 2528, 2529, 159, 160, 2530, 2531,
+ 2532, 2533, 2534, 2535, 2536, 2537, 2538, 1146, 2539, 2540,
+ 2541, 2542, 161, 162, 2543, 1144, 2544, 2545, 2546, 2547,
+ 1144, 2548, 1144, 1144, 2549, 1144, 2550, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 2551, 2552,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 2553, 2554, 2555, 2556, 187, 188, 188,
+ 189, 188, 190, 188, 191, 188, 192, 188, 193, 188,
+
+ 194, 195, 196, 197, 198, 199, 200, 201, 188, 202,
+ 188, 203, 188, 204, 205, 188, 188, 206, 188, 207,
+ 188, 208, 188, 209, 188, 210, 188, 211, 212, 213,
+ 214, 215, 216, 217, 218, 188, 219, 188, 220, 188,
+ 221, 222, 1147, 2557, 2558, 2559, 2560, 2561, 2562, 223,
+ 2563, 2564, 224, 2565, 2566, 2567, 2568, 2569, 2570, 225,
+ 226, 2571, 2572, 2573, 2574, 227, 2575, 2576, 228, 2577,
+ 2578, 2579, 2580, 2581, 2582, 229, 230, 2583, 1147, 2584,
+ 636, 637, 1093, 1147, 1094, 1147, 1147, 1095, 1147, 2437,
+ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
+
+ 241, 2436, 2435, 242, 243, 244, 245, 246, 247, 248,
+ 249, 250, 251, 252, 253, 254, 2434, 2433, 2432, 2431,
+ 255, 256, 256, 257, 256, 258, 256, 259, 256, 260,
+ 261, 262, 263, 256, 256, 256, 256, 264, 256, 256,
+ 265, 256, 266, 256, 267, 256, 268, 269, 256, 256,
+ 270, 256, 271, 256, 272, 256, 273, 274, 275, 276,
+ 256, 256, 256, 256, 277, 256, 256, 278, 256, 279,
+ 256, 280, 256, 281, 282, 1148, 2585, 2430, 2429, 2428,
+ 2427, 2586, 2426, 2425, 2424, 2423, 2422, 2421, 2420, 2419,
+ 2418, 2417, 2416, 2415, 2414, 2413, 2412, 2411, 2410, 2409,
+
+ 2408, 2407, 2406, 2587, 2405, 2404, 2403, 2402, 2588, 2401,
+ 2400, 1148, 2399, 2398, 2397, 2396, 1148, 2395, 1148, 1148,
+ 2394, 1148, 2393, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 2392, 2391, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 2390,
+ 2389, 2388, 2387, 307, 308, 308, 309, 308, 308, 308,
+ 310, 308, 308, 308, 311, 308, 308, 308, 308, 312,
+ 313, 308, 308, 308, 308, 314, 315, 308, 308, 316,
+ 308, 308, 308, 317, 308, 308, 308, 318, 308, 308,
+ 308, 319, 308, 308, 308, 308, 320, 321, 308, 308,
+
+ 308, 308, 322, 323, 308, 308, 324, 308, 1149, 2386,
+ 2385, 2384, 2383, 2382, 2381, 2380, 2379, 2378, 2377, 2376,
+ 2375, 2374, 2373, 2372, 2371, 325, 326, 2370, 2369, 2368,
+ 2367, 2366, 2365, 2364, 2363, 2362, 2361, 2360, 2359, 2359,
+ 2358, 327, 328, 2357, 1149, 2356, 2355, 2354, 2353, 1149,
+ 2352, 1149, 1149, 2351, 1149, 2350, 329, 330, 331, 332,
+ 333, 334, 335, 336, 337, 338, 339, 2349, 2348, 340,
+ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
+ 351, 352, 2347, 2346, 2345, 2344, 353, 354, 354, 355,
+ 356, 354, 354, 357, 354, 358, 354, 359, 354, 354,
+
+ 354, 354, 354, 360, 354, 354, 354, 354, 361, 354,
+ 354, 354, 362, 354, 354, 354, 363, 364, 354, 354,
+ 365, 354, 366, 354, 367, 354, 354, 354, 354, 354,
+ 368, 354, 354, 354, 354, 369, 354, 354, 354, 370,
+ 354, 1150, 2343, 2342, 2341, 2340, 2339, 2338, 2337, 2336,
+ 2335, 371, 2334, 2333, 2332, 2331, 2330, 2329, 2328, 2327,
+ 2326, 2325, 2324, 2323, 2322, 2321, 2320, 372, 2319, 2318,
+ 2317, 2316, 2315, 2314, 2313, 2312, 2311, 1150, 2310, 2309,
+ 2308, 2307, 1150, 2306, 1150, 1150, 2305, 1150, 2304, 373,
+ 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
+
+ 2303, 2302, 384, 385, 386, 387, 388, 389, 390, 391,
+ 392, 393, 394, 395, 396, 2301, 2300, 2299, 2298, 397,
+ 398, 398, 399, 398, 398, 398, 400, 398, 401, 398,
+ 402, 398, 398, 398, 398, 398, 403, 398, 398, 398,
+ 398, 404, 398, 398, 398, 398, 398, 398, 398, 405,
+ 398, 398, 398, 406, 398, 407, 398, 408, 398, 398,
+ 398, 398, 398, 409, 398, 398, 398, 398, 410, 398,
+ 398, 398, 398, 398, 1151, 2297, 2296, 2295, 2294, 2293,
+ 2292, 2291, 2290, 2289, 2288, 2287, 2286, 2285, 2284, 2283,
+ 2282, 2281, 2280, 2279, 2278, 2277, 2276, 2275, 2274, 2273,
+
+ 2272, 2271, 2270, 2269, 2268, 2267, 2266, 2265, 2264, 2263,
+ 1151, 2262, 2261, 2260, 2259, 1151, 2258, 1151, 1151, 2257,
+ 1151, 2256, 411, 412, 413, 414, 415, 416, 417, 418,
+ 419, 420, 421, 2255, 2254, 422, 423, 424, 425, 426,
+ 427, 428, 429, 430, 431, 432, 433, 434, 2253, 2252,
+ 2251, 2250, 435, 436, 436, 437, 438, 439, 440, 441,
+ 442, 443, 444, 445, 436, 436, 436, 446, 447, 448,
+ 449, 450, 451, 452, 436, 436, 453, 454, 455, 456,
+ 436, 436, 457, 458, 459, 460, 461, 462, 463, 464,
+ 436, 436, 436, 436, 465, 466, 467, 468, 469, 470,
+
+ 471, 436, 436, 472, 473, 474, 475, 1152, 2249, 2248,
+ 2247, 2246, 2245, 2244, 2243, 2242, 2241, 2240, 2239, 2238,
+ 2237, 2236, 2235, 2234, 2233, 2232, 2231, 2230, 2229, 2228,
+ 2227, 2226, 2225, 2224, 2223, 2222, 2221, 2220, 2219, 2218,
+ 2217, 2216, 2215, 1152, 2214, 2213, 2212, 2211, 1152, 2210,
+ 1152, 1152, 2209, 1152, 2208, 476, 477, 478, 479, 480,
+ 481, 482, 483, 484, 485, 486, 2207, 2206, 487, 488,
+ 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
+ 499, 2205, 2204, 2203, 2202, 500, 501, 501, 502, 501,
+ 501, 501, 503, 501, 501, 504, 505, 501, 501, 501,
+
+ 501, 501, 501, 501, 501, 501, 501, 506, 501, 507,
+ 508, 509, 501, 501, 501, 510, 501, 501, 501, 511,
+ 501, 501, 512, 513, 501, 501, 501, 501, 501, 514,
+ 501, 501, 501, 515, 516, 501, 517, 518, 519, 501,
+ 1153, 2201, 2200, 2199, 2198, 2197, 2196, 2195, 2194, 2193,
+ 2192, 2191, 2190, 2189, 2188, 2187, 2186, 2185, 2184, 2183,
+ 2182, 2181, 2180, 2179, 2178, 2177, 2176, 2175, 2174, 2173,
+ 2172, 2171, 2170, 2169, 2168, 2167, 1153, 2166, 2165, 2164,
+ 2163, 1153, 2162, 1153, 1153, 2161, 1153, 2160, 520, 521,
+ 522, 523, 524, 525, 526, 527, 528, 529, 530, 2159,
+
+ 2158, 531, 532, 533, 534, 535, 536, 537, 538, 539,
+ 540, 541, 542, 543, 2157, 2156, 2156, 2155, 544, 545,
+ 545, 546, 545, 547, 548, 549, 545, 550, 551, 552,
+ 545, 553, 554, 545, 555, 556, 545, 557, 558, 559,
+ 560, 545, 545, 545, 545, 561, 545, 545, 562, 545,
+ 563, 564, 565, 545, 566, 567, 568, 569, 570, 571,
+ 545, 572, 573, 545, 574, 575, 576, 577, 545, 545,
+ 545, 545, 578, 1154, 2154, 2153, 2152, 2151, 2150, 2149,
+ 2148, 2147, 2146, 2145, 2144, 2143, 2142, 2141, 2140, 2139,
+ 2138, 2137, 2136, 2135, 2134, 2133, 2132, 2131, 2130, 2129,
+
+ 2128, 2127, 2126, 2125, 2124, 2123, 2122, 2121, 2120, 1154,
+ 2119, 2118, 1155, 2117, 1154, 2116, 1154, 1154, 1156, 1154,
+ 2115, 579, 580, 581, 582, 583, 584, 585, 586, 587,
+ 588, 589, 1157, 2114, 590, 591, 592, 593, 594, 595,
+ 596, 597, 598, 599, 600, 601, 602, 1158, 1155, 2113,
+ 2112, 603, 605, 1155, 1156, 1155, 1155, 2111, 1155, 1156,
+ 1159, 1156, 1156, 2110, 1156, 2109, 2108, 2107, 1157, 1160,
+ 2106, 606, 2105, 1157, 2104, 1157, 1157, 2103, 1157, 607,
+ 1161, 2102, 2101, 1158, 1162, 2100, 2099, 2098, 1158, 2097,
+ 1158, 1158, 2096, 1158, 2095, 1163, 1159, 2095, 608, 1164,
+
+ 609, 1159, 610, 1159, 1159, 1160, 1159, 2094, 2093, 2092,
+ 1160, 2091, 1160, 1160, 2090, 1160, 1161, 2089, 2088, 2087,
+ 1162, 1161, 2086, 1161, 1161, 1162, 1161, 1162, 1162, 2085,
+ 1162, 1163, 2084, 2083, 2082, 1164, 1163, 2081, 1163, 1163,
+ 1164, 1163, 1164, 1164, 2080, 1164, 2079, 2078, 1165, 2077,
+ 2076, 2075, 611, 612, 613, 614, 615, 616, 617, 618,
+ 619, 620, 621, 1179, 2074, 622, 623, 624, 625, 626,
+ 627, 628, 629, 630, 631, 632, 633, 634, 2073, 2072,
+ 2071, 2070, 635, 639, 1165, 2069, 2068, 2067, 640, 1165,
+ 2066, 1165, 1165, 2065, 1165, 2064, 1166, 1167, 2063, 1179,
+
+ 2062, 1168, 2061, 2060, 1179, 1169, 1179, 1179, 2059, 1179,
+ 641, 1170, 1187, 1171, 2058, 642, 1172, 2057, 1180, 1181,
+ 2056, 2055, 2054, 1182, 1173, 2053, 2052, 2051, 1174, 2050,
+ 2049, 2048, 1175, 1183, 2047, 2046, 2045, 1166, 1176, 1166,
+ 1177, 2044, 1166, 1178, 2043, 2042, 1184, 2041, 1187, 2040,
+ 1185, 2039, 2038, 1187, 1180, 1187, 1187, 2037, 1187, 1180,
+ 1186, 1180, 1180, 2036, 1180, 2035, 2034, 1193, 1194, 643,
+ 644, 645, 646, 647, 648, 649, 650, 651, 652, 653,
+ 1196, 2033, 654, 655, 656, 657, 658, 659, 660, 661,
+ 662, 663, 664, 665, 666, 1195, 2032, 1188, 2031, 667,
+
+ 669, 1200, 1189, 1193, 2030, 670, 2029, 2028, 1193, 2027,
+ 1193, 1193, 1190, 1193, 1197, 2026, 1196, 2025, 2024, 2023,
+ 2022, 1196, 2021, 1196, 1196, 2020, 1196, 671, 1201, 1191,
+ 2019, 2018, 672, 1188, 1198, 2017, 2016, 1200, 1188, 1192,
+ 1188, 1188, 1200, 1188, 1200, 1200, 2015, 1200, 2014, 2013,
+ 1197, 2012, 2012, 2011, 2010, 1197, 2009, 1197, 1197, 2008,
+ 1197, 1199, 2007, 2006, 1201, 2005, 2004, 2003, 2002, 1201,
+ 2001, 1201, 1201, 2000, 1201, 1999, 1998, 1997, 1996, 1995,
+ 1994, 1993, 1992, 1991, 1990, 1989, 673, 674, 675, 676,
+ 677, 678, 679, 680, 681, 682, 683, 1988, 1987, 684,
+
+ 685, 686, 687, 688, 689, 690, 691, 692, 693, 694,
+ 695, 696, 1986, 1985, 1984, 1983, 697, 699, 700, 701,
+ 702, 703, 704, 705, 706, 707, 708, 709, 1982, 1981,
+ 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
+ 720, 721, 722, 1980, 1980, 1980, 1979, 723, 724, 724,
+ 724, 724, 725, 726, 727, 724, 728, 729, 724, 724,
+ 730, 731, 724, 732, 724, 724, 733, 734, 735, 724,
+ 724, 724, 724, 724, 724, 724, 724, 724, 724, 736,
+ 737, 738, 724, 739, 740, 724, 724, 741, 742, 724,
+ 743, 724, 724, 744, 745, 746, 724, 724, 724, 724,
+
+ 724, 724, 1202, 1978, 1977, 1976, 1975, 1974, 1973, 1972,
+ 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962,
+ 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1131,
+ 1128, 99, 98, 97, 90, 86, 2589, 2589, 1202, 2589,
+ 2589, 2589, 2589, 1202, 2589, 1202, 1202, 2589, 1202, 2589,
+ 747, 748, 749, 750, 751, 752, 753, 754, 755, 756,
+ 757, 2589, 2589, 758, 759, 760, 761, 762, 763, 764,
+ 765, 766, 767, 768, 769, 770, 2589, 2589, 2589, 2589,
+ 771, 772, 772, 773, 772, 772, 772, 774, 772, 772,
+ 772, 775, 772, 772, 772, 772, 772, 776, 772, 772,
+
+ 772, 772, 777, 772, 772, 772, 772, 772, 772, 772,
+ 778, 772, 772, 772, 779, 772, 772, 772, 780, 772,
+ 772, 772, 772, 772, 781, 772, 772, 772, 772, 782,
+ 772, 772, 772, 772, 772, 1203, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 1203, 2589, 2589, 2589, 2589, 1203, 2589, 1203, 1203,
+ 2589, 1203, 2589, 783, 784, 785, 786, 787, 788, 789,
+ 790, 791, 792, 793, 2589, 2589, 794, 795, 796, 797,
+
+ 798, 799, 800, 801, 802, 803, 804, 805, 806, 2589,
+ 2589, 2589, 2589, 807, 808, 808, 809, 810, 808, 811,
+ 812, 808, 808, 813, 814, 808, 815, 816, 817, 808,
+ 818, 808, 819, 820, 821, 822, 823, 824, 808, 825,
+ 826, 808, 808, 827, 828, 808, 829, 830, 808, 808,
+ 831, 832, 808, 833, 834, 835, 808, 836, 808, 837,
+ 838, 839, 840, 841, 842, 808, 843, 844, 1204, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 845, 846, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 847, 848, 2589, 1204, 2589, 2589, 1205, 2589, 1204,
+ 2589, 1204, 1204, 1206, 1204, 2589, 849, 850, 851, 852,
+ 853, 854, 855, 856, 857, 858, 859, 1207, 2589, 860,
+ 861, 862, 863, 864, 865, 866, 867, 868, 869, 870,
+ 871, 872, 1208, 1205, 2589, 2589, 873, 875, 1205, 1206,
+ 1205, 1205, 2589, 1205, 1206, 1209, 1206, 1206, 2589, 1206,
+ 2589, 1210, 2589, 1207, 2589, 2589, 2589, 1211, 1207, 2589,
+ 1207, 1207, 2589, 1207, 876, 2589, 1212, 2589, 1208, 2589,
+ 1213, 2589, 2589, 1208, 2589, 1208, 1208, 2589, 1208, 2589,
+ 2589, 1209, 2589, 2589, 2589, 2589, 1209, 1210, 1209, 1209,
+
+ 2589, 1209, 1210, 1211, 1210, 1210, 2589, 1210, 1211, 2589,
+ 1211, 1211, 1212, 1211, 2589, 2589, 1213, 1212, 2589, 1212,
+ 1212, 1213, 1212, 1213, 1213, 1214, 1213, 2589, 877, 878,
+ 879, 880, 881, 882, 883, 884, 885, 886, 887, 1215,
+ 2589, 888, 889, 890, 891, 892, 893, 894, 895, 896,
+ 897, 898, 899, 900, 1216, 2589, 2589, 2589, 901, 903,
+ 1217, 1214, 2589, 2589, 2589, 2589, 1214, 2589, 1214, 1214,
+ 2589, 1214, 1218, 2589, 2589, 1215, 1239, 2589, 2589, 2589,
+ 1215, 2589, 1215, 1215, 2589, 1215, 904, 1226, 2589, 2589,
+ 1216, 2589, 2589, 2589, 1240, 1216, 1217, 1216, 1216, 2589,
+
+ 1216, 1217, 1227, 1217, 1217, 2589, 1217, 1228, 1218, 1219,
+ 1220, 2589, 1239, 1218, 1221, 1218, 1218, 1239, 1218, 1239,
+ 1239, 1241, 1239, 1226, 1222, 2589, 2589, 2589, 1226, 1229,
+ 1226, 1226, 2589, 1226, 1230, 2589, 2589, 1223, 2589, 2589,
+ 2589, 1224, 2589, 2589, 2589, 1219, 2589, 2589, 2589, 2589,
+ 1219, 1225, 1219, 1219, 2589, 1219, 2589, 2589, 2589, 905,
+ 906, 907, 908, 909, 910, 911, 912, 913, 914, 915,
+ 2589, 2589, 916, 917, 918, 919, 920, 921, 922, 923,
+ 924, 925, 926, 927, 928, 2589, 2589, 2589, 2589, 929,
+ 931, 932, 933, 934, 935, 936, 937, 938, 939, 940,
+
+ 941, 2589, 2589, 942, 943, 944, 945, 946, 947, 948,
+ 949, 950, 951, 952, 953, 954, 2589, 2589, 2589, 2589,
+ 955, 956, 956, 956, 957, 956, 958, 956, 956, 956,
+ 956, 956, 956, 959, 960, 956, 961, 956, 956, 962,
+ 956, 963, 956, 956, 956, 956, 956, 964, 956, 956,
+ 956, 965, 956, 966, 956, 956, 956, 967, 956, 956,
+ 968, 969, 956, 970, 956, 956, 971, 956, 972, 956,
+ 956, 956, 956, 956, 973, 1231, 2589, 2589, 2589, 2589,
+ 1232, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 1233, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 1234, 2589, 2589,
+ 2589, 1231, 2589, 2589, 2589, 2589, 1231, 1235, 1231, 1231,
+ 2589, 1231, 2589, 974, 975, 976, 977, 978, 979, 980,
+ 981, 982, 983, 984, 2589, 2589, 985, 986, 987, 988,
+ 989, 990, 991, 992, 993, 994, 995, 996, 997, 2589,
+ 2589, 2589, 2589, 998, 999, 999, 999, 999, 999, 1000,
+ 999, 999, 999, 1001, 999, 999, 1002, 1003, 999, 1004,
+ 999, 999, 1005, 1006, 1007, 999, 999, 999, 999, 999,
+ 999, 999, 999, 999, 999, 999, 1008, 999, 999, 999,
+ 1009, 999, 999, 1010, 1011, 999, 1012, 999, 999, 1013,
+
+ 1014, 1015, 999, 999, 999, 999, 999, 999, 1236, 1237,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 1238, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 1236, 2589, 2589, 2589, 2589, 1236,
+ 2589, 1236, 1236, 2589, 1236, 2589, 1016, 1017, 1018, 1019,
+ 1020, 1021, 1022, 1023, 1024, 1025, 1026, 2589, 2589, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
+ 1038, 1039, 2589, 2589, 2589, 2589, 1040, 1042, 1043, 1044,
+ 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 2589, 2589,
+
+ 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062,
+ 1063, 1064, 1065, 2589, 2589, 2589, 2589, 1066, 1068, 1069,
+ 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 2589,
+ 2589, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
+ 1088, 1089, 1090, 1091, 1247, 2589, 2589, 2589, 1092, 1103,
+ 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113,
+ 1251, 2589, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121,
+ 1122, 1123, 1124, 1125, 1126, 1242, 2589, 2589, 2589, 1127,
+ 1247, 2589, 2589, 2589, 1243, 1247, 2589, 1247, 1247, 2589,
+ 1247, 2589, 1248, 1249, 2589, 1244, 1251, 2589, 1252, 2589,
+
+ 2589, 1251, 2589, 1251, 1251, 2589, 1251, 1253, 2589, 2589,
+ 2589, 1245, 2589, 2589, 2589, 2589, 1242, 2589, 1242, 1242,
+ 1250, 1242, 1246, 2589, 1254, 2589, 2589, 1255, 1248, 2589,
+ 1257, 2589, 2589, 1248, 1252, 1248, 1248, 2589, 1248, 1252,
+ 2589, 1252, 1252, 1253, 1252, 1258, 2589, 2589, 1253, 1259,
+ 1253, 1253, 2589, 1253, 1256, 2589, 2589, 2589, 1260, 2589,
+ 1254, 2589, 1261, 2589, 2589, 1254, 1257, 1254, 1254, 2589,
+ 1254, 1257, 2589, 1257, 1257, 1262, 1257, 2589, 2589, 1263,
+ 2589, 1258, 2589, 2589, 2589, 1259, 1258, 2589, 1258, 1258,
+ 1259, 1258, 1259, 1259, 1260, 1259, 1264, 2589, 1261, 1260,
+
+ 1265, 1260, 1260, 1261, 1260, 1261, 1261, 2589, 1261, 1266,
+ 2589, 1262, 2589, 2589, 2589, 1263, 1262, 2589, 1262, 1262,
+ 1263, 1262, 1263, 1263, 2589, 1263, 2589, 1288, 2589, 2589,
+ 2589, 2589, 1264, 1267, 1268, 2589, 1265, 1264, 1269, 1264,
+ 1264, 1265, 1264, 1265, 1265, 1266, 1265, 2589, 1270, 2589,
+ 1266, 1296, 1266, 1266, 2589, 1266, 2589, 1274, 1275, 2589,
+ 2589, 1271, 1276, 1288, 2589, 1272, 2589, 2589, 1288, 1267,
+ 1288, 1288, 1277, 1288, 1267, 1273, 1267, 1267, 2589, 1267,
+ 2589, 1281, 1282, 2589, 2589, 1278, 1283, 1296, 2589, 1279,
+ 2589, 2589, 1296, 1274, 1296, 1296, 1284, 1296, 1274, 1280,
+
+ 1274, 1274, 2589, 1274, 2589, 1289, 1290, 2589, 2589, 1285,
+ 1291, 2589, 2589, 1286, 1297, 2589, 2589, 1281, 1298, 2589,
+ 1292, 2589, 1281, 1287, 1281, 1281, 2589, 1281, 2589, 1299,
+ 2589, 2589, 2589, 1293, 2589, 1300, 2589, 1294, 2589, 2589,
+ 2589, 1289, 2589, 2589, 1301, 2589, 1289, 1295, 1289, 1289,
+ 1297, 1289, 2589, 1302, 1298, 1297, 2589, 1297, 1297, 1298,
+ 1297, 1298, 1298, 2589, 1298, 1299, 1303, 2589, 2589, 2589,
+ 1299, 1300, 1299, 1299, 2589, 1299, 1300, 1304, 1300, 1300,
+ 1301, 1300, 2589, 1305, 2589, 1301, 2589, 1301, 1301, 1302,
+ 1301, 2589, 1306, 2589, 1302, 2589, 1302, 1302, 2589, 1302,
+
+ 2589, 2589, 1303, 2589, 2589, 1314, 2589, 1303, 2589, 1303,
+ 1303, 2589, 1303, 1304, 1315, 2589, 2589, 2589, 1304, 1305,
+ 1304, 1304, 2589, 1304, 1305, 2589, 1305, 1305, 1306, 1305,
+ 2589, 2589, 2589, 1306, 2589, 1306, 1306, 2589, 1306, 1307,
+ 1308, 1314, 2589, 1316, 1309, 2589, 1314, 2589, 1314, 1314,
+ 1315, 1314, 1317, 2589, 1310, 1315, 1318, 1315, 1315, 2589,
+ 1315, 2589, 2589, 2589, 2589, 1319, 2589, 1311, 2589, 1320,
+ 2589, 1312, 2589, 2589, 2589, 1307, 2589, 2589, 1321, 1316,
+ 1307, 1313, 1307, 1307, 1316, 1307, 1316, 1316, 1317, 1316,
+ 1322, 2589, 1318, 1317, 1323, 1317, 1317, 1318, 1317, 1318,
+
+ 1318, 1319, 1318, 1324, 2589, 1320, 1319, 2589, 1319, 1319,
+ 1320, 1319, 1320, 1320, 1321, 1320, 2589, 2589, 1325, 1321,
+ 2589, 1321, 1321, 1326, 1321, 2589, 1322, 1329, 1330, 2589,
+ 1323, 1322, 1331, 1322, 1322, 1323, 1322, 1323, 1323, 1324,
+ 1323, 1336, 1332, 2589, 1324, 1327, 1324, 1324, 2589, 1324,
+ 1328, 2589, 1337, 2589, 2589, 1333, 2589, 2589, 2589, 1334,
+ 2589, 1340, 1341, 1329, 2589, 1343, 2589, 1338, 1329, 1335,
+ 1329, 1329, 2589, 1329, 2589, 2589, 1344, 1336, 2589, 2589,
+ 1347, 2589, 1336, 2589, 1336, 1336, 2589, 1336, 1337, 1342,
+ 2589, 1345, 1348, 1337, 1339, 1337, 1337, 1340, 1337, 2589,
+
+ 2589, 1343, 1340, 1349, 1340, 1340, 1343, 1340, 1343, 1343,
+ 2589, 1343, 1344, 2589, 1350, 2589, 1347, 1344, 1346, 1344,
+ 1344, 1347, 1344, 1347, 1347, 1351, 1347, 2589, 1348, 1352,
+ 2589, 2589, 2589, 1348, 2589, 1348, 1348, 2589, 1348, 1349,
+ 1353, 2589, 2589, 2589, 1349, 2589, 1349, 1349, 2589, 1349,
+ 1350, 1354, 2589, 2589, 2589, 1350, 2589, 1350, 1350, 2589,
+ 1350, 1351, 1355, 2589, 2589, 1352, 1351, 2589, 1351, 1351,
+ 1352, 1351, 1352, 1352, 1356, 1352, 1353, 2589, 1357, 2589,
+ 2589, 1353, 2589, 1353, 1353, 2589, 1353, 1354, 2589, 1358,
+ 2589, 2589, 1354, 1359, 1354, 1354, 2589, 1354, 1355, 2589,
+
+ 2589, 2589, 1360, 1355, 2589, 1355, 1355, 2589, 1355, 2589,
+ 1356, 1361, 2589, 2589, 1357, 1356, 2589, 1356, 1356, 1357,
+ 1356, 1357, 1357, 1362, 1357, 1358, 2589, 1363, 2589, 1359,
+ 1358, 2589, 1358, 1358, 1359, 1358, 1359, 1359, 1360, 1359,
+ 2589, 1374, 2589, 1360, 2589, 1360, 1360, 1361, 1360, 2589,
+ 2589, 2589, 1361, 2589, 1361, 1361, 2589, 1361, 2589, 1362,
+ 1364, 2589, 2589, 1363, 1362, 1365, 1362, 1362, 1363, 1362,
+ 1363, 1363, 2589, 1363, 2589, 1366, 1369, 1374, 2589, 2589,
+ 2589, 1370, 1374, 2589, 1374, 1374, 2589, 1374, 2589, 2589,
+ 1375, 1371, 1367, 2589, 1378, 2589, 1364, 2589, 2589, 2589,
+
+ 2589, 1364, 1368, 1364, 1364, 1376, 1364, 1379, 1372, 2589,
+ 2589, 2589, 1369, 1380, 1381, 2589, 2589, 1369, 1373, 1369,
+ 1369, 2589, 1369, 2589, 1385, 1386, 1375, 2589, 1382, 2589,
+ 1378, 1375, 1377, 1375, 1375, 1378, 1375, 1378, 1378, 1387,
+ 1378, 1383, 1392, 1379, 1388, 2589, 1393, 2589, 1379, 1380,
+ 1379, 1379, 1389, 1379, 1380, 1384, 1380, 1380, 1394, 1380,
+ 1385, 2589, 1395, 2589, 2589, 1385, 1390, 1385, 1385, 2589,
+ 1385, 1391, 2589, 1396, 2589, 2589, 2589, 1397, 1392, 2589,
+ 2589, 2589, 1393, 1392, 2589, 1392, 1392, 1393, 1392, 1393,
+ 1393, 2589, 1393, 2589, 1394, 1398, 2589, 2589, 1395, 1394,
+
+ 2589, 1394, 1394, 1395, 1394, 1395, 1395, 2589, 1395, 1396,
+ 1399, 2589, 1401, 1397, 1396, 2589, 1396, 1396, 1397, 1396,
+ 1397, 1397, 2589, 1397, 1402, 1406, 2589, 2589, 2589, 1403,
+ 2589, 1398, 2589, 2589, 1407, 2589, 1398, 1400, 1398, 1398,
+ 1408, 1398, 2589, 2589, 2589, 2589, 1409, 2589, 1401, 2589,
+ 2589, 1404, 1410, 1401, 2589, 1401, 1405, 2589, 1401, 2589,
+ 2589, 1406, 2589, 1411, 2589, 2589, 1406, 1412, 1406, 1406,
+ 1407, 1406, 2589, 2589, 2589, 1407, 1408, 1407, 1407, 1413,
+ 1407, 1408, 1409, 1408, 1408, 2589, 1408, 1409, 1410, 1409,
+ 1409, 2589, 1409, 1410, 1423, 1410, 1410, 2589, 1410, 1411,
+
+ 1414, 1415, 2589, 1412, 1411, 2589, 1411, 1411, 1412, 1411,
+ 1412, 1412, 2589, 1412, 2589, 1413, 2589, 1417, 1418, 2589,
+ 1413, 2589, 1413, 1413, 2589, 1413, 1420, 1421, 1416, 2589,
+ 1423, 2589, 2589, 2589, 2589, 1423, 1414, 1423, 1423, 2589,
+ 1423, 1414, 2589, 1414, 1414, 1419, 1414, 1424, 1425, 2589,
+ 2589, 1427, 2589, 1417, 1422, 2589, 2589, 2589, 1417, 2589,
+ 1417, 1417, 1420, 1417, 1428, 2589, 2589, 1420, 1429, 1420,
+ 1420, 2589, 1420, 2589, 2589, 1426, 2589, 1430, 2589, 2589,
+ 2589, 1431, 2589, 1424, 2589, 2589, 2589, 1427, 1424, 2589,
+ 1424, 1424, 1427, 1424, 1427, 1427, 1432, 1427, 2589, 2589,
+
+ 1428, 2589, 1433, 2589, 1429, 1428, 2589, 1428, 1428, 1429,
+ 1428, 1429, 1429, 1430, 1429, 1434, 2589, 1431, 1430, 1435,
+ 1430, 1430, 1431, 1430, 1431, 1431, 2589, 1431, 2589, 2589,
+ 1439, 2589, 1432, 2589, 2589, 2589, 1436, 1432, 1433, 1432,
+ 1432, 1437, 1432, 1433, 2589, 1433, 1433, 1443, 1433, 2589,
+ 2589, 1434, 2589, 1440, 1441, 1435, 1434, 2589, 1434, 1434,
+ 1435, 1434, 1435, 1435, 1444, 1435, 1439, 2589, 1438, 2589,
+ 1445, 1439, 1436, 1439, 1439, 2589, 1439, 1436, 2589, 1436,
+ 1436, 1442, 1436, 1443, 1446, 2589, 2589, 2589, 1443, 1440,
+ 1443, 1443, 2589, 1443, 1440, 1447, 1440, 1440, 2589, 1440,
+
+ 1444, 1448, 2589, 2589, 2589, 1444, 1445, 1444, 1444, 2589,
+ 1444, 1445, 1449, 1445, 1445, 2589, 1445, 2589, 1450, 2589,
+ 1446, 2589, 2589, 2589, 1451, 1446, 2589, 1446, 1446, 2589,
+ 1446, 1447, 2589, 1452, 2589, 2589, 1447, 1448, 1447, 1447,
+ 2589, 1447, 1448, 2589, 1448, 1448, 1456, 1448, 1449, 2589,
+ 2589, 2589, 2589, 1449, 1450, 1449, 1449, 1453, 1449, 1450,
+ 1451, 1450, 1450, 1457, 1450, 1451, 2589, 1451, 1451, 1452,
+ 1451, 2589, 2589, 2589, 1452, 1454, 1452, 1452, 2589, 1452,
+ 1458, 1459, 1456, 2589, 1463, 2589, 2589, 1456, 2589, 1456,
+ 1456, 2589, 1456, 1453, 2589, 1460, 1464, 2589, 1453, 1457,
+
+ 1453, 1453, 1455, 1453, 1457, 1465, 1457, 1457, 1461, 1457,
+ 2589, 1466, 2589, 2589, 2589, 2589, 1458, 1469, 2589, 2589,
+ 1463, 1458, 1462, 1458, 1458, 1463, 1458, 1463, 1463, 1467,
+ 1463, 1470, 1464, 2589, 2589, 1471, 2589, 1464, 2589, 1464,
+ 1464, 1465, 1464, 2589, 1472, 2589, 1465, 1466, 1465, 1465,
+ 1473, 1465, 1466, 1469, 1466, 1466, 1468, 1466, 1469, 1474,
+ 1469, 1469, 2589, 1469, 2589, 1475, 2589, 1470, 2589, 2589,
+ 2589, 1471, 1470, 2589, 1470, 1470, 1471, 1470, 1471, 1471,
+ 1472, 1471, 1478, 1476, 2589, 1472, 1473, 1472, 1472, 2589,
+ 1472, 1473, 2589, 1473, 1473, 1474, 1473, 1479, 2589, 2589,
+
+ 1474, 1475, 1474, 1474, 2589, 1474, 1475, 2589, 1475, 1475,
+ 1477, 1475, 1480, 2589, 2589, 2589, 1481, 2589, 1478, 2589,
+ 2589, 2589, 2589, 1478, 2589, 1478, 1478, 1482, 1478, 2589,
+ 2589, 1483, 2589, 1479, 2589, 2589, 2589, 2589, 1479, 2589,
+ 1479, 1479, 1484, 1479, 2589, 2589, 1485, 2589, 1480, 2589,
+ 2589, 2589, 1481, 1480, 2589, 1480, 1480, 1481, 1480, 1481,
+ 1481, 1486, 1481, 1482, 2589, 2589, 2589, 1483, 1482, 2589,
+ 1482, 1482, 1483, 1482, 1483, 1483, 1487, 1483, 1484, 2589,
+ 2589, 2589, 1485, 1484, 2589, 1484, 1484, 1485, 1484, 1485,
+ 1485, 1490, 1485, 2589, 2589, 2589, 1488, 1486, 2589, 2589,
+
+ 1491, 2589, 1486, 1495, 1486, 1486, 2589, 1486, 2589, 1496,
+ 2589, 1492, 1487, 2589, 2589, 2589, 2589, 1487, 2589, 1487,
+ 1487, 2589, 1487, 1489, 1497, 2589, 2589, 1493, 1499, 1500,
+ 2589, 2589, 1490, 2589, 1490, 1490, 2589, 1490, 1494, 1495,
+ 1506, 2589, 2589, 1501, 1495, 1496, 1495, 1495, 1502, 1495,
+ 1496, 1498, 1496, 1496, 1507, 1496, 1503, 2589, 1508, 2589,
+ 2589, 2589, 2589, 2589, 1499, 2589, 2589, 1509, 2589, 1499,
+ 1504, 1499, 1499, 2589, 1499, 1505, 1506, 2589, 2589, 1512,
+ 2589, 1506, 2589, 1506, 1506, 1513, 1506, 1510, 2589, 2589,
+ 1507, 1514, 2589, 2589, 1508, 1507, 2589, 1507, 1507, 1508,
+
+ 1507, 1508, 1508, 1509, 1508, 1515, 2589, 2589, 1509, 1516,
+ 1509, 1509, 2589, 1509, 1511, 1512, 2589, 2589, 1517, 2589,
+ 1512, 1513, 1512, 1512, 1518, 1512, 1513, 1514, 1513, 1513,
+ 1519, 1513, 1514, 2589, 1514, 1514, 1520, 1514, 2589, 2589,
+ 2589, 1515, 1521, 2589, 2589, 1516, 1515, 2589, 1515, 1515,
+ 1516, 1515, 1516, 1516, 1517, 1516, 1522, 2589, 2589, 1517,
+ 1518, 1517, 1517, 2589, 1517, 1518, 1519, 1518, 1518, 1523,
+ 1518, 1519, 1520, 1519, 1519, 1524, 1519, 1520, 1521, 1520,
+ 1520, 1525, 1520, 1521, 2589, 1521, 1521, 1526, 1521, 2589,
+ 2589, 2589, 1522, 1527, 2589, 2589, 2589, 1522, 2589, 1522,
+
+ 1522, 2589, 1522, 2589, 1528, 1523, 2589, 2589, 1529, 2589,
+ 1523, 1524, 1523, 1523, 2589, 1523, 1524, 1525, 1524, 1524,
+ 1530, 1524, 1525, 1526, 1525, 1525, 1531, 1525, 1526, 1527,
+ 1526, 1526, 1532, 1526, 1527, 2589, 1527, 1527, 1533, 1527,
+ 1528, 2589, 2589, 2589, 1529, 1528, 2589, 1528, 1528, 1529,
+ 1528, 1529, 1529, 1534, 1529, 2589, 1530, 2589, 2589, 1540,
+ 2589, 1530, 1531, 1530, 1530, 1537, 1530, 1531, 1532, 1531,
+ 1531, 1535, 1531, 1532, 1533, 1532, 1532, 1541, 1532, 1533,
+ 2589, 1533, 1533, 1542, 1533, 1538, 2589, 2589, 2589, 1534,
+ 2589, 2589, 1543, 2589, 1534, 1540, 1534, 1534, 1536, 1534,
+
+ 1540, 1537, 1540, 1540, 1544, 1540, 1537, 2589, 1537, 1537,
+ 1545, 1537, 1539, 1541, 2589, 2589, 1546, 2589, 1541, 1542,
+ 1541, 1541, 1547, 1541, 1542, 2589, 1542, 1542, 1543, 1542,
+ 2589, 1548, 2589, 1543, 2589, 1543, 1543, 1549, 1543, 2589,
+ 1544, 2589, 2589, 1550, 2589, 1544, 1545, 1544, 1544, 1551,
+ 1544, 1545, 1546, 1545, 1545, 1552, 1545, 1546, 1547, 1546,
+ 1546, 1553, 1546, 1547, 2589, 1547, 1547, 1548, 1547, 2589,
+ 1554, 2589, 1548, 1549, 1548, 1548, 1555, 1548, 1549, 1550,
+ 1549, 1549, 1556, 1549, 1550, 1551, 1550, 1550, 1557, 1550,
+ 1551, 1552, 1551, 1551, 1561, 1551, 1552, 1553, 1552, 1552,
+
+ 2589, 1552, 1553, 2589, 1553, 1553, 1554, 1553, 1558, 1559,
+ 2589, 1554, 1555, 1554, 1554, 2589, 1554, 1555, 1556, 1555,
+ 1555, 1562, 1555, 1556, 1557, 1556, 1556, 1563, 1556, 1557,
+ 1561, 1557, 1557, 1564, 1557, 1561, 1560, 1561, 1561, 1565,
+ 1561, 2589, 2589, 2589, 1558, 1566, 2589, 2589, 2589, 1558,
+ 2589, 1558, 1558, 2589, 1558, 2589, 1567, 1562, 2589, 2589,
+ 1568, 2589, 1562, 1563, 1562, 1562, 2589, 1562, 1563, 1564,
+ 1563, 1563, 1569, 1563, 1564, 1565, 1564, 1564, 1570, 1564,
+ 1565, 1566, 1565, 1565, 1571, 1565, 1566, 2589, 1566, 1566,
+ 1572, 1566, 1567, 2589, 2589, 2589, 1568, 1567, 2589, 1567,
+
+ 1567, 1568, 1567, 1568, 1568, 1573, 1568, 2589, 1569, 1574,
+ 2589, 2589, 2589, 1569, 1570, 1569, 1569, 2589, 1569, 1570,
+ 1571, 1570, 1570, 1575, 1570, 1571, 1572, 1571, 1571, 1576,
+ 1571, 1572, 2589, 1572, 1572, 1577, 1572, 2589, 2589, 2589,
+ 2589, 1573, 2589, 2589, 1578, 1574, 1573, 2589, 1573, 1573,
+ 1574, 1573, 1574, 1574, 2589, 1574, 1579, 2589, 2589, 1575,
+ 1580, 2589, 2589, 2589, 1575, 1576, 1575, 1575, 2589, 1575,
+ 1576, 1577, 1576, 1576, 1581, 1576, 1577, 2589, 1577, 1577,
+ 1578, 1577, 2589, 1582, 2589, 1578, 2589, 1578, 1578, 1583,
+ 1578, 2589, 1579, 2589, 2589, 1584, 1580, 1579, 2589, 1579,
+
+ 1579, 1580, 1579, 1580, 1580, 2589, 1580, 1585, 2589, 2589,
+ 1581, 1586, 2589, 2589, 2589, 1581, 2589, 1581, 1581, 1582,
+ 1581, 2589, 1587, 2589, 1582, 1583, 1582, 1582, 1588, 1582,
+ 1583, 1584, 1583, 1583, 1589, 1583, 1584, 2589, 1584, 1584,
+ 1590, 1584, 2589, 1585, 2589, 2589, 1591, 1586, 1585, 2589,
+ 1585, 1585, 1586, 1585, 1586, 1586, 2589, 1586, 1587, 1592,
+ 2589, 2589, 2589, 1587, 1588, 1587, 1587, 2589, 1587, 1588,
+ 1589, 1588, 1588, 1593, 1588, 1589, 1590, 1589, 1589, 1594,
+ 1589, 1590, 1591, 1590, 1590, 1595, 1590, 1591, 2589, 1591,
+ 1591, 1596, 1591, 2589, 2589, 1592, 2589, 1597, 2589, 2589,
+
+ 1592, 2589, 1592, 1592, 2589, 1592, 1598, 2589, 2589, 1593,
+ 1599, 2589, 2589, 2589, 1593, 1594, 1593, 1593, 2589, 1593,
+ 1594, 1595, 1594, 1594, 1600, 1594, 1595, 1596, 1595, 1595,
+ 1601, 1595, 1596, 1597, 1596, 1596, 1602, 1596, 1597, 2589,
+ 1597, 1597, 1598, 1597, 2589, 1603, 1599, 1598, 2589, 1598,
+ 1598, 1599, 1598, 1599, 1599, 2589, 1599, 1604, 2589, 2589,
+ 1600, 1605, 2589, 2589, 2589, 1600, 1601, 1600, 1600, 2589,
+ 1600, 1601, 1602, 1601, 1601, 1606, 1601, 1602, 2589, 1602,
+ 1602, 1603, 1602, 2589, 1607, 2589, 1603, 2589, 1603, 1603,
+ 1608, 1603, 2589, 1604, 2589, 2589, 1609, 1605, 1604, 2589,
+
+ 1604, 1604, 1605, 1604, 1605, 1605, 2589, 1605, 1610, 2589,
+ 2589, 1606, 1611, 2589, 2589, 2589, 1606, 2589, 1606, 1606,
+ 1607, 1606, 2589, 1612, 2589, 1607, 1608, 1607, 1607, 1613,
+ 1607, 1608, 1609, 1608, 1608, 1614, 1608, 1609, 2589, 1609,
+ 1609, 1615, 1609, 2589, 1610, 2589, 2589, 1616, 1611, 1610,
+ 2589, 1610, 1610, 1611, 1610, 1611, 1611, 2589, 1611, 1612,
+ 1617, 2589, 2589, 2589, 1612, 1613, 1612, 1612, 2589, 1612,
+ 1613, 1614, 1613, 1613, 1618, 1613, 1614, 1615, 1614, 1614,
+ 1619, 1614, 1615, 1616, 1615, 1615, 1620, 1615, 1616, 2589,
+ 1616, 1616, 1621, 1616, 2589, 2589, 1617, 2589, 1622, 2589,
+
+ 2589, 1617, 2589, 1617, 1617, 2589, 1617, 1623, 2589, 2589,
+ 1618, 1624, 2589, 2589, 2589, 1618, 1619, 1618, 1618, 2589,
+ 1618, 1619, 1620, 1619, 1619, 1625, 1619, 1620, 1621, 1620,
+ 1620, 1626, 1620, 1621, 1622, 1621, 1621, 1627, 1621, 1622,
+ 2589, 1622, 1622, 1623, 1622, 2589, 1628, 1624, 1623, 2589,
+ 1623, 1623, 1624, 1623, 1624, 1624, 2589, 1624, 1629, 2589,
+ 2589, 1625, 1630, 2589, 2589, 2589, 1625, 1626, 1625, 1625,
+ 2589, 1625, 1626, 1627, 1626, 1626, 1631, 1626, 1627, 2589,
+ 1627, 1627, 1628, 1627, 2589, 1632, 2589, 1628, 2589, 1628,
+ 1628, 1633, 1628, 2589, 1629, 2589, 2589, 1634, 1630, 1629,
+
+ 2589, 1629, 1629, 1630, 1629, 1630, 1630, 2589, 1630, 1635,
+ 2589, 2589, 1631, 1636, 2589, 2589, 2589, 1631, 2589, 1631,
+ 1631, 1632, 1631, 2589, 1637, 2589, 1632, 1633, 1632, 1632,
+ 1638, 1632, 1633, 1634, 1633, 1633, 1639, 1633, 1634, 2589,
+ 1634, 1634, 1640, 1634, 2589, 1635, 2589, 2589, 1641, 1636,
+ 1635, 2589, 1635, 1635, 1636, 1635, 1636, 1636, 2589, 1636,
+ 1637, 1642, 2589, 2589, 2589, 1637, 1638, 1637, 1637, 2589,
+ 1637, 1638, 1639, 1638, 1638, 1643, 1638, 1639, 1640, 1639,
+ 1639, 1644, 1639, 1640, 1641, 1640, 1640, 1645, 1640, 1641,
+ 2589, 1641, 1641, 1646, 1641, 2589, 2589, 1642, 2589, 1647,
+
+ 2589, 2589, 1642, 2589, 1642, 1642, 2589, 1642, 1648, 2589,
+ 2589, 1643, 1649, 2589, 2589, 2589, 1643, 1644, 1643, 1643,
+ 2589, 1643, 1644, 1645, 1644, 1644, 1650, 1644, 1645, 1646,
+ 1645, 1645, 1651, 1645, 1646, 1647, 1646, 1646, 1652, 1646,
+ 1647, 2589, 1647, 1647, 1648, 1647, 2589, 1653, 1649, 1648,
+ 2589, 1648, 1648, 1649, 1648, 1649, 1649, 2589, 1649, 1654,
+ 2589, 2589, 1650, 1655, 2589, 2589, 2589, 1650, 1651, 1650,
+ 1650, 2589, 1650, 1651, 1652, 1651, 1651, 1656, 1651, 1652,
+ 2589, 1652, 1652, 1653, 1652, 2589, 1657, 2589, 1653, 2589,
+ 1653, 1653, 1658, 1653, 2589, 1654, 2589, 2589, 1659, 1655,
+
+ 1654, 2589, 1654, 1654, 1655, 1654, 1655, 1655, 2589, 1655,
+ 2589, 2589, 1663, 1656, 2589, 2589, 1660, 2589, 1656, 1661,
+ 1656, 1656, 1657, 1656, 2589, 1664, 2589, 1657, 1658, 1657,
+ 1657, 1665, 1657, 1658, 1659, 1658, 1658, 2589, 1658, 1659,
+ 2589, 1659, 1659, 1669, 1659, 2589, 1662, 2589, 1663, 1666,
+ 2589, 2589, 1660, 1663, 1667, 1663, 1663, 1660, 1663, 1660,
+ 1660, 1664, 1660, 1670, 2589, 2589, 1664, 1665, 1664, 1664,
+ 2589, 1664, 1665, 2589, 1665, 1665, 1671, 1665, 2589, 1669,
+ 1672, 1668, 2589, 2589, 1669, 1666, 1669, 1669, 2589, 1669,
+ 1666, 1673, 1666, 1666, 2589, 1666, 2589, 1674, 2589, 1670,
+
+ 2589, 2589, 2589, 1675, 1670, 2589, 1670, 1670, 2589, 1670,
+ 2589, 2589, 1671, 2589, 1676, 2589, 1672, 1671, 1677, 1671,
+ 1671, 1672, 1671, 1672, 1672, 2589, 1672, 1673, 2589, 1678,
+ 2589, 2589, 1673, 1674, 1673, 1673, 2589, 1673, 1674, 1675,
+ 1674, 1674, 1679, 1674, 1675, 2589, 1675, 1675, 1680, 1675,
+ 1676, 2589, 2589, 2589, 1677, 1676, 2589, 1676, 1676, 1677,
+ 1676, 1677, 1677, 1681, 1677, 1678, 2589, 1682, 2589, 2589,
+ 1678, 2589, 1678, 1678, 2589, 1678, 1683, 2589, 1679, 2589,
+ 1684, 2589, 2589, 1679, 1680, 1679, 1679, 2589, 1679, 1680,
+ 2589, 1680, 1680, 1685, 1680, 2589, 2589, 1686, 2589, 1681,
+
+ 2589, 2589, 2589, 1682, 1681, 2589, 1681, 1681, 1682, 1681,
+ 1682, 1682, 1683, 1682, 1687, 2589, 1684, 1683, 1688, 1683,
+ 1683, 1684, 1683, 1684, 1684, 2589, 1684, 1689, 2589, 1685,
+ 2589, 1690, 2589, 1686, 1685, 2589, 1685, 1685, 1686, 1685,
+ 1686, 1686, 1691, 1686, 2589, 2589, 2589, 2589, 2589, 2589,
+ 1687, 1692, 2589, 2589, 1688, 1687, 2589, 1687, 1687, 1688,
+ 1687, 1688, 1688, 1689, 1688, 1695, 1693, 1690, 1689, 1696,
+ 1689, 1689, 1690, 1689, 1690, 1690, 2589, 1690, 1691, 2589,
+ 1697, 2589, 2589, 1691, 1698, 1691, 1691, 1692, 1691, 2589,
+ 2589, 2589, 1692, 1694, 1692, 1692, 1699, 1692, 2589, 2589,
+
+ 1700, 1695, 2589, 2589, 2589, 1696, 1695, 2589, 1695, 1695,
+ 1696, 1695, 1696, 1696, 1701, 1696, 1697, 2589, 1702, 2589,
+ 1698, 1697, 2589, 1697, 1697, 1698, 1697, 1698, 1698, 1703,
+ 1698, 2589, 1699, 1704, 2589, 2589, 1700, 1699, 2589, 1699,
+ 1699, 1700, 1699, 1700, 1700, 1705, 1700, 2589, 2589, 1706,
+ 1701, 2589, 2589, 2589, 1702, 1701, 2589, 1701, 1701, 1702,
+ 1701, 1702, 1702, 1707, 1702, 1703, 2589, 1708, 2589, 1704,
+ 1703, 2589, 1703, 1703, 1704, 1703, 1704, 1704, 1709, 1704,
+ 2589, 1705, 1710, 2589, 2589, 1706, 1705, 2589, 1705, 1705,
+ 1706, 1705, 1706, 1706, 1711, 1706, 2589, 2589, 1712, 1707,
+
+ 2589, 2589, 2589, 1708, 1707, 2589, 1707, 1707, 1708, 1707,
+ 1708, 1708, 1713, 1708, 1709, 2589, 1714, 2589, 1710, 1709,
+ 2589, 1709, 1709, 1710, 1709, 1710, 1710, 1715, 1710, 2589,
+ 1711, 1716, 2589, 2589, 1712, 1711, 2589, 1711, 1711, 1712,
+ 1711, 1712, 1712, 2589, 1712, 1724, 2589, 2589, 1713, 2589,
+ 2589, 2589, 1714, 1713, 2589, 1713, 1713, 1714, 1713, 1714,
+ 1714, 2589, 1714, 1715, 1717, 1718, 2589, 1716, 1715, 1719,
+ 1715, 1715, 1716, 1715, 1716, 1716, 2589, 1716, 1725, 1720,
+ 2589, 1724, 2589, 2589, 1730, 1731, 1724, 2589, 1724, 1724,
+ 1726, 1724, 1721, 1733, 2589, 1727, 1722, 2589, 2589, 1736,
+
+ 1717, 2589, 2589, 2589, 2589, 1717, 1723, 1717, 1717, 2589,
+ 1717, 1734, 1732, 1737, 1725, 2589, 2589, 1728, 2589, 1725,
+ 1730, 1725, 1729, 2589, 1725, 1730, 1738, 1730, 1730, 1733,
+ 1730, 2589, 1739, 2589, 1733, 1736, 1733, 1733, 1735, 1733,
+ 1736, 1740, 1736, 1736, 2589, 1736, 2589, 1741, 2589, 1737,
+ 2589, 2589, 2589, 1742, 1737, 2589, 1737, 1737, 2589, 1737,
+ 2589, 2589, 1738, 2589, 1743, 2589, 2589, 1738, 1739, 1738,
+ 1738, 2589, 1738, 1739, 2589, 1739, 1739, 1740, 1739, 1744,
+ 2589, 2589, 1740, 1741, 1740, 1740, 2589, 1740, 1741, 1742,
+ 1741, 1741, 1745, 1741, 1742, 2589, 1742, 1742, 1746, 1742,
+
+ 1743, 2589, 2589, 2589, 1747, 1743, 2589, 1743, 1743, 2589,
+ 1743, 2589, 2589, 1748, 2589, 1744, 2589, 1749, 2589, 2589,
+ 1744, 2589, 1744, 1744, 2589, 1744, 1750, 2589, 1745, 2589,
+ 1751, 2589, 2589, 1745, 1746, 1745, 1745, 2589, 1745, 1746,
+ 1747, 1746, 1746, 1752, 1746, 1747, 2589, 1747, 1747, 1748,
+ 1747, 2589, 1753, 1749, 1748, 2589, 1748, 1748, 1749, 1748,
+ 1749, 1749, 1750, 1749, 1754, 2589, 1751, 1750, 1755, 1750,
+ 1750, 1751, 1750, 1751, 1751, 2589, 1751, 1756, 2589, 1752,
+ 2589, 1757, 2589, 2589, 1752, 2589, 1752, 1752, 1753, 1752,
+ 1758, 2589, 2589, 1753, 1759, 1753, 1753, 2589, 1753, 2589,
+
+ 1754, 2589, 2589, 1760, 1755, 1754, 2589, 1754, 1754, 1755,
+ 1754, 1755, 1755, 1756, 1755, 1761, 2589, 1757, 1756, 1762,
+ 1756, 1756, 1757, 1756, 1757, 1757, 1758, 1757, 1763, 2589,
+ 1759, 1758, 1764, 1758, 1758, 1759, 1758, 1759, 1759, 1760,
+ 1759, 1765, 2589, 2589, 1760, 1766, 1760, 1760, 2589, 1760,
+ 2589, 1761, 2589, 2589, 1767, 1762, 1761, 2589, 1761, 1761,
+ 1762, 1761, 1762, 1762, 1763, 1762, 1768, 2589, 1764, 1763,
+ 1769, 1763, 1763, 1764, 1763, 1764, 1764, 1765, 1764, 1770,
+ 2589, 1766, 1765, 1771, 1765, 1765, 1766, 1765, 1766, 1766,
+ 1767, 1766, 1772, 2589, 2589, 1767, 1773, 1767, 1767, 2589,
+
+ 1767, 2589, 1768, 2589, 2589, 1774, 1769, 1768, 2589, 1768,
+ 1768, 1769, 1768, 1769, 1769, 1770, 1769, 1775, 2589, 1771,
+ 1770, 1776, 1770, 1770, 1771, 1770, 1771, 1771, 1772, 1771,
+ 1777, 2589, 1773, 1772, 1778, 1772, 1772, 1773, 1772, 1773,
+ 1773, 1774, 1773, 1779, 2589, 2589, 1774, 1780, 1774, 1774,
+ 2589, 1774, 2589, 1775, 2589, 2589, 1781, 1776, 1775, 2589,
+ 1775, 1775, 1776, 1775, 1776, 1776, 1777, 1776, 1782, 2589,
+ 1778, 1777, 1783, 1777, 1777, 1778, 1777, 1778, 1778, 1779,
+ 1778, 1784, 2589, 1780, 1779, 1785, 1779, 1779, 1780, 1779,
+ 1780, 1780, 1781, 1780, 1786, 2589, 2589, 1781, 1787, 1781,
+
+ 1781, 2589, 1781, 2589, 1782, 2589, 2589, 1788, 1783, 1782,
+ 2589, 1782, 1782, 1783, 1782, 1783, 1783, 1784, 1783, 1789,
+ 2589, 1785, 1784, 1790, 1784, 1784, 1785, 1784, 1785, 1785,
+ 1786, 1785, 1791, 2589, 1787, 1786, 1792, 1786, 1786, 1787,
+ 1786, 1787, 1787, 1788, 1787, 1793, 2589, 2589, 1788, 1794,
+ 1788, 1788, 2589, 1788, 2589, 1789, 2589, 2589, 1795, 1790,
+ 1789, 2589, 1789, 1789, 1790, 1789, 1790, 1790, 1791, 1790,
+ 1796, 2589, 1792, 1791, 1797, 1791, 1791, 1792, 1791, 1792,
+ 1792, 1793, 1792, 1798, 2589, 1794, 1793, 1799, 1793, 1793,
+ 1794, 1793, 1794, 1794, 1795, 1794, 1800, 2589, 2589, 1795,
+
+ 1801, 1795, 1795, 2589, 1795, 2589, 1796, 2589, 2589, 1802,
+ 1797, 1796, 2589, 1796, 1796, 1797, 1796, 1797, 1797, 1798,
+ 1797, 1803, 2589, 1799, 1798, 1804, 1798, 1798, 1799, 1798,
+ 1799, 1799, 1800, 1799, 1805, 2589, 1801, 1800, 1806, 1800,
+ 1800, 1801, 1800, 1801, 1801, 1802, 1801, 1807, 2589, 2589,
+ 1802, 1808, 1802, 1802, 2589, 1802, 2589, 1803, 2589, 2589,
+ 1809, 1804, 1803, 2589, 1803, 1803, 1804, 1803, 1804, 1804,
+ 1805, 1804, 1810, 2589, 1806, 1805, 1811, 1805, 1805, 1806,
+ 1805, 1806, 1806, 1807, 1806, 1812, 2589, 1808, 1807, 1813,
+ 1807, 1807, 1808, 1807, 1808, 1808, 1809, 1808, 1814, 2589,
+
+ 2589, 1809, 1815, 1809, 1809, 2589, 1809, 2589, 1810, 2589,
+ 2589, 1816, 1811, 1810, 2589, 1810, 1810, 1811, 1810, 1811,
+ 1811, 1812, 1811, 1817, 2589, 1813, 1812, 1818, 1812, 1812,
+ 1813, 1812, 1813, 1813, 1814, 1813, 1819, 2589, 1815, 1814,
+ 1820, 1814, 1814, 1815, 1814, 1815, 1815, 1816, 1815, 1821,
+ 2589, 2589, 1816, 1822, 1816, 1816, 2589, 1816, 2589, 1817,
+ 2589, 2589, 1823, 1818, 1817, 2589, 1817, 1817, 1818, 1817,
+ 1818, 1818, 1819, 1818, 1824, 2589, 1820, 1819, 1825, 1819,
+ 1819, 1820, 1819, 1820, 1820, 1821, 1820, 1826, 2589, 1822,
+ 1821, 1827, 1821, 1821, 1822, 1821, 1822, 1822, 1823, 1822,
+
+ 1828, 2589, 2589, 1823, 1829, 1823, 1823, 2589, 1823, 2589,
+ 1824, 2589, 2589, 1830, 1825, 1824, 2589, 1824, 1824, 1825,
+ 1824, 1825, 1825, 1826, 1825, 1831, 2589, 1827, 1826, 1832,
+ 1826, 1826, 1827, 1826, 1827, 1827, 1828, 1827, 1833, 2589,
+ 1829, 1828, 1834, 1828, 1828, 1829, 1828, 1829, 1829, 1830,
+ 1829, 1835, 2589, 2589, 1830, 1836, 1830, 1830, 2589, 1830,
+ 2589, 1831, 2589, 2589, 1837, 1832, 1831, 2589, 1831, 1831,
+ 1832, 1831, 1832, 1832, 1833, 1832, 1838, 2589, 1834, 1833,
+ 1839, 1833, 1833, 1834, 1833, 1834, 1834, 1835, 1834, 1840,
+ 2589, 1836, 1835, 1841, 1835, 1835, 1836, 1835, 1836, 1836,
+
+ 1837, 1836, 1842, 2589, 2589, 1837, 1843, 1837, 1837, 2589,
+ 1837, 2589, 1838, 2589, 2589, 1844, 1839, 1838, 2589, 1838,
+ 1838, 1839, 1838, 1839, 1839, 1840, 1839, 1845, 2589, 1841,
+ 1840, 1846, 1840, 1840, 1841, 1840, 1841, 1841, 1842, 1841,
+ 1847, 2589, 1843, 1842, 1848, 1842, 1842, 1843, 1842, 1843,
+ 1843, 1844, 1843, 1849, 2589, 2589, 1844, 1850, 1844, 1844,
+ 2589, 1844, 2589, 1845, 2589, 2589, 1851, 1846, 1845, 2589,
+ 1845, 1845, 1846, 1845, 1846, 1846, 1847, 1846, 1852, 2589,
+ 1848, 1847, 1853, 1847, 1847, 1848, 1847, 1848, 1848, 1849,
+ 1848, 1854, 2589, 1850, 1849, 1855, 1849, 1849, 1850, 1849,
+
+ 1850, 1850, 1851, 1850, 1856, 2589, 2589, 1851, 1857, 1851,
+ 1851, 2589, 1851, 2589, 1852, 2589, 2589, 1858, 1853, 1852,
+ 2589, 1852, 1852, 1853, 1852, 1853, 1853, 1854, 1853, 1859,
+ 2589, 1855, 1854, 1860, 1854, 1854, 1855, 1854, 1855, 1855,
+ 1856, 1855, 1861, 2589, 1857, 1856, 1862, 1856, 1856, 1857,
+ 1856, 1857, 1857, 1858, 1857, 1863, 2589, 2589, 1858, 1864,
+ 1858, 1858, 2589, 1858, 2589, 1859, 2589, 2589, 1865, 1860,
+ 1859, 2589, 1859, 1859, 1860, 1859, 1860, 1860, 1861, 1860,
+ 1866, 2589, 1862, 1861, 1867, 1861, 1861, 1862, 1861, 1862,
+ 1862, 1863, 1862, 1868, 2589, 1864, 1863, 1869, 1863, 1863,
+
+ 1864, 1863, 1864, 1864, 1865, 1864, 1870, 2589, 2589, 1865,
+ 1871, 1865, 1865, 2589, 1865, 2589, 1866, 2589, 2589, 1872,
+ 1867, 1866, 2589, 1866, 1866, 1867, 1866, 1867, 1867, 1868,
+ 1867, 1873, 2589, 1869, 1868, 1874, 1868, 1868, 1869, 1868,
+ 1869, 1869, 1870, 1869, 1875, 2589, 1871, 1870, 1876, 1870,
+ 1870, 1871, 1870, 1871, 1871, 1872, 1871, 1877, 2589, 2589,
+ 1872, 1878, 1872, 1872, 2589, 1872, 2589, 1873, 2589, 2589,
+ 1879, 1874, 1873, 2589, 1873, 1873, 1874, 1873, 1874, 1874,
+ 1875, 1874, 1880, 2589, 1876, 1875, 1881, 1875, 1875, 1876,
+ 1875, 1876, 1876, 1877, 1876, 1882, 2589, 1878, 1877, 1883,
+
+ 1877, 1877, 1878, 1877, 1878, 1878, 1879, 1878, 1884, 2589,
+ 2589, 1879, 1885, 1879, 1879, 2589, 1879, 2589, 1880, 2589,
+ 2589, 1886, 1881, 1880, 2589, 1880, 1880, 1881, 1880, 1881,
+ 1881, 1882, 1881, 1887, 2589, 1883, 1882, 1888, 1882, 1882,
+ 1883, 1882, 1883, 1883, 1884, 1883, 1889, 2589, 1885, 1884,
+ 1890, 1884, 1884, 1885, 1884, 1885, 1885, 1886, 1885, 1891,
+ 2589, 2589, 1886, 1892, 1886, 1886, 2589, 1886, 2589, 1887,
+ 2589, 2589, 1893, 1888, 1887, 2589, 1887, 1887, 1888, 1887,
+ 1888, 1888, 1889, 1888, 1894, 2589, 1890, 1889, 1895, 1889,
+ 1889, 1890, 1889, 1890, 1890, 1891, 1890, 1896, 2589, 1892,
+
+ 1891, 1897, 1891, 1891, 1892, 1891, 1892, 1892, 1893, 1892,
+ 1898, 2589, 2589, 1893, 1899, 1893, 1893, 2589, 1893, 2589,
+ 1894, 2589, 2589, 1900, 1895, 1894, 2589, 1894, 1894, 1895,
+ 1894, 1895, 1895, 1896, 1895, 1901, 2589, 1897, 1896, 1902,
+ 1896, 1896, 1897, 1896, 1897, 1897, 1898, 1897, 1903, 2589,
+ 1899, 1898, 1904, 1898, 1898, 1899, 1898, 1899, 1899, 1900,
+ 1899, 1905, 2589, 2589, 1900, 1906, 1900, 1900, 2589, 1900,
+ 2589, 1901, 2589, 2589, 1907, 1902, 1901, 2589, 1901, 1901,
+ 1902, 1901, 1902, 1902, 1903, 1902, 1908, 2589, 1904, 1903,
+ 1909, 1903, 1903, 1904, 1903, 1904, 1904, 1905, 1904, 1910,
+
+ 2589, 1906, 1905, 1911, 1905, 1905, 1906, 1905, 1906, 1906,
+ 1907, 1906, 1912, 2589, 2589, 1907, 1913, 1907, 1907, 2589,
+ 1907, 2589, 1908, 2589, 2589, 1914, 1909, 1908, 2589, 1908,
+ 1908, 1909, 1908, 1909, 1909, 1910, 1909, 1915, 2589, 1911,
+ 1910, 1916, 1910, 1910, 1911, 1910, 1911, 1911, 1912, 1911,
+ 1917, 2589, 1913, 1912, 1918, 1912, 1912, 1913, 1912, 1913,
+ 1913, 1914, 1913, 1919, 2589, 2589, 1914, 1920, 1914, 1914,
+ 2589, 1914, 2589, 1915, 2589, 2589, 1921, 1916, 1915, 2589,
+ 1915, 1915, 1916, 1915, 1916, 1916, 1917, 1916, 1922, 2589,
+ 1918, 1917, 1923, 1917, 1917, 1918, 1917, 1918, 1918, 1919,
+
+ 1918, 1924, 2589, 1920, 1919, 1925, 1919, 1919, 1920, 1919,
+ 1920, 1920, 1921, 1920, 1926, 2589, 2589, 1921, 1927, 1921,
+ 1921, 2589, 1921, 2589, 1922, 2589, 2589, 1928, 1923, 1922,
+ 2589, 1922, 1922, 1923, 1922, 1923, 1923, 1924, 1923, 1929,
+ 2589, 1925, 1924, 1930, 1924, 1924, 1925, 1924, 1925, 1925,
+ 1926, 1925, 1931, 2589, 1927, 1926, 1932, 1926, 1926, 1927,
+ 1926, 1927, 1927, 1928, 1927, 1933, 2589, 2589, 1928, 1934,
+ 1928, 1928, 2589, 1928, 2589, 1929, 2589, 2589, 1935, 1930,
+ 1929, 2589, 1929, 1929, 1930, 1929, 1930, 1930, 1931, 1930,
+ 1936, 2589, 1932, 1931, 1937, 1931, 1931, 1932, 1931, 1932,
+
+ 1932, 1933, 1932, 1938, 2589, 1934, 1933, 1939, 1933, 1933,
+ 1934, 1933, 1934, 1934, 1935, 1934, 1940, 2589, 2589, 1935,
+ 1941, 1935, 1935, 2589, 1935, 2589, 1936, 2589, 2589, 1942,
+ 1937, 1936, 2589, 1936, 1936, 1937, 1936, 1937, 1937, 1938,
+ 1937, 1943, 2589, 1939, 1938, 1944, 1938, 1938, 1939, 1938,
+ 1939, 1939, 1940, 1939, 1945, 2589, 1941, 1940, 1946, 1940,
+ 1940, 1941, 1940, 1941, 1941, 1942, 1941, 1947, 2589, 2589,
+ 1942, 1948, 1942, 1942, 2589, 1942, 2589, 1943, 2589, 2589,
+ 1949, 1944, 1943, 2589, 1943, 1943, 1944, 1943, 1944, 1944,
+ 1945, 1944, 1950, 2589, 1946, 1945, 1951, 1945, 1945, 1946,
+
+ 1945, 1946, 1946, 1947, 1946, 1952, 2589, 1948, 1947, 2589,
+ 1947, 1947, 1948, 1947, 1948, 1948, 1949, 1948, 2589, 2589,
+ 2589, 1949, 2589, 1949, 1949, 2589, 1949, 2589, 1950, 2589,
+ 2589, 2589, 1951, 1950, 2589, 1950, 1950, 1951, 1950, 1951,
+ 1951, 1952, 1951, 2589, 2589, 2589, 1952, 2589, 1952, 1952,
+ 2589, 1952, 604, 604, 638, 638, 668, 668, 698, 698,
+ 874, 874, 902, 902, 930, 930, 1041, 1041, 1067, 1067,
+ 1102, 1102, 3, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589
+ } ;
+
+static yyconst flex_int16_t yy_chk[7910] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 7, 9, 10, 11,
+ 84, 89, 84, 117, 84, 1812, 1813, 118, 1814, 1815,
+ 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 84, 119,
+ 1824, 1825, 1826, 7, 9, 10, 1827, 1828, 89, 84,
+ 121, 84, 1829, 1830, 122, 1831, 1832, 1833, 1834, 117,
+ 1835, 1836, 1837, 118, 117, 1838, 117, 117, 118, 117,
+ 118, 118, 1839, 118, 1840, 119, 1841, 11, 1842, 1843,
+
+ 119, 1844, 119, 119, 1845, 119, 121, 1846, 1847, 1848,
+ 122, 121, 1849, 121, 121, 122, 121, 122, 122, 1850,
+ 122, 7, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 120, 120, 1851, 1852,
+ 1853, 120, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861,
+ 1862, 120, 1863, 56, 56, 1864, 1865, 1866, 1867, 1868,
+
+ 1869, 1870, 1871, 1872, 120, 1873, 1874, 1875, 120, 56,
+ 56, 1876, 120, 1877, 1878, 1879, 1880, 120, 120, 120,
+ 120, 1881, 120, 1882, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 1883, 1884, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 1885, 1886, 1887, 1888, 56, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 123,
+ 123, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+ 1898, 1899, 1900, 1901, 1902, 1903, 57, 57, 1904, 1905,
+ 1906, 1907, 1908, 1909, 1910, 1911, 1912, 123, 1913, 1914,
+ 1915, 1916, 57, 57, 1917, 123, 1918, 1919, 1920, 1921,
+ 123, 1922, 123, 123, 1923, 123, 1924, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 1925, 1926,
+ 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 1927, 1928, 1929, 1930, 57, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 124, 1931, 1932, 1933, 1934, 1935, 1936, 58,
+ 1937, 1938, 58, 1939, 1940, 1941, 1942, 1943, 1944, 58,
+ 58, 1945, 1946, 1947, 1948, 58, 1949, 1950, 58, 1951,
+ 1952, 1953, 2579, 2580, 2581, 58, 58, 2582, 124, 2583,
+ 2591, 2592, 2601, 124, 2602, 124, 124, 2603, 124, 1811,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+
+ 58, 1810, 1809, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 1808, 1807, 1806, 1805,
+ 58, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 125, 2584, 1804, 1803, 1802,
+ 1801, 2584, 1800, 1799, 1798, 1797, 1796, 1795, 1794, 1793,
+ 1792, 1791, 1790, 1789, 1788, 1787, 1786, 1785, 1784, 1783,
+
+ 1782, 1781, 1780, 2584, 1779, 1778, 1777, 1776, 2584, 1775,
+ 1774, 125, 1773, 1772, 1771, 1770, 125, 1769, 125, 125,
+ 1768, 125, 1767, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 1766, 1765, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59, 59, 1764,
+ 1763, 1762, 1761, 59, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+
+ 60, 60, 60, 60, 60, 60, 60, 60, 126, 1760,
+ 1759, 1758, 1757, 1756, 1755, 1754, 1753, 1752, 1751, 1750,
+ 1749, 1748, 1747, 1746, 1745, 60, 60, 1744, 1743, 1742,
+ 1741, 1740, 1739, 1738, 1737, 1736, 1733, 1730, 1729, 1725,
+ 1724, 60, 60, 1717, 126, 1716, 1715, 1714, 1713, 126,
+ 1712, 126, 126, 1711, 126, 1710, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 1709, 1708, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 1707, 1706, 1705, 1704, 60, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 127, 1703, 1702, 1701, 1700, 1699, 1698, 1697, 1696,
+ 1695, 61, 1692, 1691, 1690, 1689, 1688, 1687, 1686, 1685,
+ 1684, 1683, 1682, 1681, 1680, 1679, 1678, 61, 1677, 1676,
+ 1675, 1674, 1673, 1672, 1671, 1670, 1669, 127, 1666, 1665,
+ 1664, 1663, 127, 1660, 127, 127, 1659, 127, 1658, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+
+ 1657, 1656, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 1655, 1654, 1653, 1652, 61,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 128, 1651, 1650, 1649, 1648, 1647,
+ 1646, 1645, 1644, 1643, 1642, 1641, 1640, 1639, 1638, 1637,
+ 1636, 1635, 1634, 1633, 1632, 1631, 1630, 1629, 1628, 1627,
+
+ 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618, 1617,
+ 128, 1616, 1615, 1614, 1613, 128, 1612, 128, 128, 1611,
+ 128, 1610, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 1609, 1608, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 1607, 1606,
+ 1605, 1604, 62, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+
+ 63, 63, 63, 63, 63, 63, 63, 129, 1603, 1602,
+ 1601, 1600, 1599, 1598, 1597, 1596, 1595, 1594, 1593, 1592,
+ 1591, 1590, 1589, 1588, 1587, 1586, 1585, 1584, 1583, 1582,
+ 1581, 1580, 1579, 1578, 1577, 1576, 1575, 1574, 1573, 1572,
+ 1571, 1570, 1569, 129, 1568, 1567, 1566, 1565, 129, 1564,
+ 129, 129, 1563, 129, 1562, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 1561, 1558, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 1557, 1556, 1555, 1554, 63, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 130, 1553, 1552, 1551, 1550, 1549, 1548, 1547, 1546, 1545,
+ 1544, 1543, 1542, 1541, 1540, 1537, 1534, 1533, 1532, 1531,
+ 1530, 1529, 1528, 1527, 1526, 1525, 1524, 1523, 1522, 1521,
+ 1520, 1519, 1518, 1517, 1516, 1515, 130, 1514, 1513, 1512,
+ 1509, 130, 1508, 130, 130, 1507, 130, 1506, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 1499,
+
+ 1496, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 1495, 1493, 1490, 1487, 64, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 131, 1486, 1485, 1484, 1483, 1482, 1481,
+ 1480, 1479, 1478, 1475, 1474, 1473, 1472, 1471, 1470, 1469,
+ 1466, 1465, 1464, 1463, 1458, 1457, 1456, 1453, 1452, 1451,
+
+ 1450, 1449, 1448, 1447, 1446, 1445, 1444, 1443, 1440, 131,
+ 1439, 1436, 132, 1435, 131, 1434, 131, 131, 133, 131,
+ 1433, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 134, 1432, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 135, 132, 1431,
+ 1430, 65, 66, 132, 133, 132, 132, 1429, 132, 133,
+ 136, 133, 133, 1428, 133, 1427, 1424, 1423, 134, 137,
+ 1420, 66, 1417, 134, 1414, 134, 134, 1413, 134, 66,
+ 138, 1412, 1411, 135, 139, 1410, 1409, 1408, 135, 1407,
+ 135, 135, 1406, 135, 1405, 140, 136, 1401, 66, 141,
+
+ 66, 136, 66, 136, 136, 137, 136, 1398, 1397, 1396,
+ 137, 1395, 137, 137, 1394, 137, 138, 1393, 1392, 1385,
+ 139, 138, 1380, 138, 138, 139, 138, 139, 139, 1379,
+ 139, 140, 1378, 1375, 1374, 141, 140, 1369, 140, 140,
+ 141, 140, 141, 141, 1364, 141, 1363, 1362, 163, 1361,
+ 1360, 1359, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 165, 1358, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 1357, 1356,
+ 1355, 1354, 66, 69, 163, 1353, 1352, 1351, 69, 163,
+ 1350, 163, 163, 1349, 163, 1348, 164, 164, 1347, 165,
+
+ 1344, 164, 1343, 1340, 165, 164, 165, 165, 1337, 165,
+ 69, 164, 167, 164, 1336, 69, 164, 1329, 166, 166,
+ 1324, 1323, 1322, 166, 164, 1321, 1320, 1319, 164, 1318,
+ 1317, 1316, 164, 166, 1315, 1314, 1307, 164, 164, 164,
+ 164, 1306, 164, 164, 1305, 1304, 166, 1303, 167, 1302,
+ 166, 1301, 1300, 167, 166, 167, 167, 1299, 167, 166,
+ 166, 166, 166, 1298, 166, 1297, 1296, 169, 169, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
+ 170, 1289, 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 169, 1288, 168, 1281, 69,
+
+ 70, 172, 168, 169, 1274, 70, 1267, 1266, 169, 1265,
+ 169, 169, 168, 169, 171, 1264, 170, 1263, 1262, 1261,
+ 1260, 170, 1259, 170, 170, 1258, 170, 70, 173, 168,
+ 1257, 1254, 70, 168, 171, 1253, 1252, 172, 168, 168,
+ 168, 168, 172, 168, 172, 172, 1251, 172, 1248, 1247,
+ 171, 1245, 1242, 1239, 1236, 171, 1231, 171, 171, 1226,
+ 171, 171, 1219, 1218, 173, 1217, 1216, 1215, 1214, 173,
+ 1213, 173, 173, 1212, 173, 1211, 1210, 1209, 1208, 1207,
+ 1206, 1205, 1204, 1203, 1202, 1201, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 1200, 1197, 70,
+
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 1196, 1193, 1188, 1187, 70, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71, 1180, 1179,
+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 1177, 1175, 1166, 1165, 71, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+
+ 72, 72, 174, 1164, 1163, 1162, 1161, 1160, 1159, 1158,
+ 1157, 1156, 1155, 1154, 1153, 1152, 1151, 1150, 1149, 1148,
+ 1147, 1144, 1143, 1142, 1135, 1134, 1133, 1132, 1128, 96,
+ 86, 27, 13, 12, 8, 6, 3, 0, 174, 0,
+ 0, 0, 0, 174, 0, 174, 174, 0, 174, 0,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 0, 0, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 0, 0, 0, 0,
+ 72, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 175, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 175, 0, 0, 0, 0, 175, 0, 175, 175,
+ 0, 175, 0, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 0, 0, 73, 73, 73, 73,
+
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 0,
+ 0, 0, 0, 73, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 176, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 74, 74, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 74, 74, 0, 176, 0, 0, 177, 0, 176,
+ 0, 176, 176, 178, 176, 0, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 74, 179, 0, 74,
+ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 180, 177, 0, 0, 74, 75, 177, 178,
+ 177, 177, 0, 177, 178, 181, 178, 178, 0, 178,
+ 0, 182, 0, 179, 0, 0, 0, 183, 179, 0,
+ 179, 179, 0, 179, 75, 0, 184, 0, 180, 0,
+ 185, 0, 0, 180, 0, 180, 180, 0, 180, 0,
+ 0, 181, 0, 0, 0, 0, 181, 182, 181, 181,
+
+ 0, 181, 182, 183, 182, 182, 0, 182, 183, 0,
+ 183, 183, 184, 183, 0, 0, 185, 184, 0, 184,
+ 184, 185, 184, 185, 185, 186, 185, 0, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 187,
+ 0, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 231, 0, 0, 0, 75, 76,
+ 232, 186, 0, 0, 0, 0, 186, 0, 186, 186,
+ 0, 186, 233, 0, 0, 187, 238, 0, 0, 0,
+ 187, 0, 187, 187, 0, 187, 76, 235, 0, 0,
+ 231, 0, 0, 0, 238, 231, 232, 231, 231, 0,
+
+ 231, 232, 235, 232, 232, 0, 232, 235, 233, 234,
+ 234, 0, 238, 233, 234, 233, 233, 238, 233, 238,
+ 238, 238, 238, 235, 234, 0, 0, 0, 235, 235,
+ 235, 235, 0, 235, 235, 0, 0, 234, 0, 0,
+ 0, 234, 0, 0, 0, 234, 0, 0, 0, 0,
+ 234, 234, 234, 234, 0, 234, 0, 0, 0, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 0, 0, 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 0, 0, 0, 0, 76,
+ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+
+ 77, 0, 0, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 0, 0, 0, 0,
+ 77, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 236, 0, 0, 0, 0,
+ 236, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 236, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 236, 0, 0,
+ 0, 236, 0, 0, 0, 0, 236, 236, 236, 236,
+ 0, 236, 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 0, 0, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 78, 0,
+ 0, 0, 0, 78, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+
+ 79, 79, 79, 79, 79, 79, 79, 79, 237, 237,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 237, 0, 0, 0,
+ 0, 0, 0, 0, 237, 0, 0, 0, 0, 237,
+ 0, 237, 237, 0, 237, 0, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 0, 0, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 0, 0, 0, 0, 79, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 0, 0,
+
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 0, 0, 0, 0, 80, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 0,
+ 0, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 240, 0, 0, 0, 81, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 242, 0, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 239, 0, 0, 0, 85,
+ 240, 0, 0, 0, 239, 240, 0, 240, 240, 0,
+ 240, 0, 241, 241, 0, 239, 242, 0, 243, 0,
+
+ 0, 242, 0, 242, 242, 0, 242, 244, 0, 0,
+ 0, 239, 0, 0, 0, 0, 239, 0, 239, 239,
+ 241, 239, 239, 0, 245, 0, 0, 245, 241, 0,
+ 246, 0, 0, 241, 243, 241, 241, 0, 241, 243,
+ 0, 243, 243, 244, 243, 247, 0, 0, 244, 248,
+ 244, 244, 0, 244, 245, 0, 0, 0, 249, 0,
+ 245, 0, 250, 0, 0, 245, 246, 245, 245, 0,
+ 245, 246, 0, 246, 246, 251, 246, 0, 0, 252,
+ 0, 247, 0, 0, 0, 248, 247, 0, 247, 247,
+ 248, 247, 248, 248, 249, 248, 253, 0, 250, 249,
+
+ 254, 249, 249, 250, 249, 250, 250, 0, 250, 255,
+ 0, 251, 0, 0, 0, 252, 251, 0, 251, 251,
+ 252, 251, 252, 252, 0, 252, 0, 286, 0, 0,
+ 0, 0, 253, 283, 283, 0, 254, 253, 283, 253,
+ 253, 254, 253, 254, 254, 255, 254, 0, 283, 0,
+ 255, 288, 255, 255, 0, 255, 0, 284, 284, 0,
+ 0, 283, 284, 286, 0, 283, 0, 0, 286, 283,
+ 286, 286, 284, 286, 283, 283, 283, 283, 0, 283,
+ 0, 285, 285, 0, 0, 284, 285, 288, 0, 284,
+ 0, 0, 288, 284, 288, 288, 285, 288, 284, 284,
+
+ 284, 284, 0, 284, 0, 287, 287, 0, 0, 285,
+ 287, 0, 0, 285, 289, 0, 0, 285, 290, 0,
+ 287, 0, 285, 285, 285, 285, 0, 285, 0, 291,
+ 0, 0, 0, 287, 0, 292, 0, 287, 0, 0,
+ 0, 287, 0, 0, 293, 0, 287, 287, 287, 287,
+ 289, 287, 0, 294, 290, 289, 0, 289, 289, 290,
+ 289, 290, 290, 0, 290, 291, 295, 0, 0, 0,
+ 291, 292, 291, 291, 0, 291, 292, 296, 292, 292,
+ 293, 292, 0, 297, 0, 293, 0, 293, 293, 294,
+ 293, 0, 298, 0, 294, 0, 294, 294, 0, 294,
+
+ 0, 0, 295, 0, 0, 300, 0, 295, 0, 295,
+ 295, 0, 295, 296, 301, 0, 0, 0, 296, 297,
+ 296, 296, 0, 296, 297, 0, 297, 297, 298, 297,
+ 0, 0, 0, 298, 0, 298, 298, 0, 298, 299,
+ 299, 300, 0, 302, 299, 0, 300, 0, 300, 300,
+ 301, 300, 303, 0, 299, 301, 304, 301, 301, 0,
+ 301, 0, 0, 0, 0, 305, 0, 299, 0, 306,
+ 0, 299, 0, 0, 0, 299, 0, 0, 307, 302,
+ 299, 299, 299, 299, 302, 299, 302, 302, 303, 302,
+ 329, 0, 304, 303, 330, 303, 303, 304, 303, 304,
+
+ 304, 305, 304, 331, 0, 306, 305, 0, 305, 305,
+ 306, 305, 306, 306, 307, 306, 0, 0, 331, 307,
+ 0, 307, 307, 331, 307, 0, 329, 332, 332, 0,
+ 330, 329, 332, 329, 329, 330, 329, 330, 330, 331,
+ 330, 333, 332, 0, 331, 331, 331, 331, 0, 331,
+ 331, 0, 334, 0, 0, 332, 0, 0, 0, 332,
+ 0, 335, 335, 332, 0, 336, 0, 334, 332, 332,
+ 332, 332, 0, 332, 0, 0, 337, 333, 0, 0,
+ 338, 0, 333, 0, 333, 333, 0, 333, 334, 335,
+ 0, 337, 339, 334, 334, 334, 334, 335, 334, 0,
+
+ 0, 336, 335, 340, 335, 335, 336, 335, 336, 336,
+ 0, 336, 337, 0, 341, 0, 338, 337, 337, 337,
+ 337, 338, 337, 338, 338, 342, 338, 0, 339, 343,
+ 0, 0, 0, 339, 0, 339, 339, 0, 339, 340,
+ 344, 0, 0, 0, 340, 0, 340, 340, 0, 340,
+ 341, 345, 0, 0, 0, 341, 0, 341, 341, 0,
+ 341, 342, 346, 0, 0, 343, 342, 0, 342, 342,
+ 343, 342, 343, 343, 347, 343, 344, 0, 348, 0,
+ 0, 344, 0, 344, 344, 0, 344, 345, 0, 349,
+ 0, 0, 345, 350, 345, 345, 0, 345, 346, 0,
+
+ 0, 0, 351, 346, 0, 346, 346, 0, 346, 0,
+ 347, 352, 0, 0, 348, 347, 0, 347, 347, 348,
+ 347, 348, 348, 353, 348, 349, 0, 373, 0, 350,
+ 349, 0, 349, 349, 350, 349, 350, 350, 351, 350,
+ 0, 376, 0, 351, 0, 351, 351, 352, 351, 0,
+ 0, 0, 352, 0, 352, 352, 0, 352, 0, 353,
+ 374, 0, 0, 373, 353, 374, 353, 353, 373, 353,
+ 373, 373, 0, 373, 0, 374, 375, 376, 0, 0,
+ 0, 375, 376, 0, 376, 376, 0, 376, 0, 0,
+ 377, 375, 374, 0, 378, 0, 374, 0, 0, 0,
+
+ 0, 374, 374, 374, 374, 377, 374, 379, 375, 0,
+ 0, 0, 375, 380, 380, 0, 0, 375, 375, 375,
+ 375, 0, 375, 0, 381, 381, 377, 0, 380, 0,
+ 378, 377, 377, 377, 377, 378, 377, 378, 378, 381,
+ 378, 380, 382, 379, 381, 0, 383, 0, 379, 380,
+ 379, 379, 381, 379, 380, 380, 380, 380, 384, 380,
+ 381, 0, 385, 0, 0, 381, 381, 381, 381, 0,
+ 381, 381, 0, 386, 0, 0, 0, 387, 382, 0,
+ 0, 0, 383, 382, 0, 382, 382, 383, 382, 383,
+ 383, 0, 383, 0, 384, 388, 0, 0, 385, 384,
+
+ 0, 384, 384, 385, 384, 385, 385, 0, 385, 386,
+ 388, 0, 389, 387, 386, 0, 386, 386, 387, 386,
+ 387, 387, 0, 387, 389, 390, 0, 0, 0, 389,
+ 0, 388, 0, 0, 391, 0, 388, 388, 388, 388,
+ 392, 388, 0, 0, 0, 0, 393, 0, 389, 0,
+ 0, 389, 394, 389, 0, 389, 389, 0, 389, 0,
+ 0, 390, 0, 395, 0, 0, 390, 396, 390, 390,
+ 391, 390, 0, 0, 0, 391, 392, 391, 391, 397,
+ 391, 392, 393, 392, 392, 0, 392, 393, 394, 393,
+ 393, 0, 393, 394, 414, 394, 394, 0, 394, 395,
+
+ 411, 411, 0, 396, 395, 0, 395, 395, 396, 395,
+ 396, 396, 0, 396, 0, 397, 0, 412, 412, 0,
+ 397, 0, 397, 397, 0, 397, 413, 413, 411, 0,
+ 414, 0, 0, 0, 0, 414, 411, 414, 414, 0,
+ 414, 411, 0, 411, 411, 412, 411, 415, 415, 0,
+ 0, 416, 0, 412, 413, 0, 0, 0, 412, 0,
+ 412, 412, 413, 412, 417, 0, 0, 413, 418, 413,
+ 413, 0, 413, 0, 0, 415, 0, 419, 0, 0,
+ 0, 420, 0, 415, 0, 0, 0, 416, 415, 0,
+ 415, 415, 416, 415, 416, 416, 421, 416, 0, 0,
+
+ 417, 0, 422, 0, 418, 417, 0, 417, 417, 418,
+ 417, 418, 418, 419, 418, 423, 0, 420, 419, 424,
+ 419, 419, 420, 419, 420, 420, 0, 420, 0, 0,
+ 426, 0, 421, 0, 0, 0, 425, 421, 422, 421,
+ 421, 425, 421, 422, 0, 422, 422, 428, 422, 0,
+ 0, 423, 0, 427, 427, 424, 423, 0, 423, 423,
+ 424, 423, 424, 424, 429, 424, 426, 0, 425, 0,
+ 430, 426, 425, 426, 426, 0, 426, 425, 0, 425,
+ 425, 427, 425, 428, 431, 0, 0, 0, 428, 427,
+ 428, 428, 0, 428, 427, 432, 427, 427, 0, 427,
+
+ 429, 433, 0, 0, 0, 429, 430, 429, 429, 0,
+ 429, 430, 434, 430, 430, 0, 430, 0, 435, 0,
+ 431, 0, 0, 0, 476, 431, 0, 431, 431, 0,
+ 431, 432, 0, 477, 0, 0, 432, 433, 432, 432,
+ 0, 432, 433, 0, 433, 433, 479, 433, 434, 0,
+ 0, 0, 0, 434, 435, 434, 434, 478, 434, 435,
+ 476, 435, 435, 480, 435, 476, 0, 476, 476, 477,
+ 476, 0, 0, 0, 477, 478, 477, 477, 0, 477,
+ 481, 481, 479, 0, 482, 0, 0, 479, 0, 479,
+ 479, 0, 479, 478, 0, 481, 483, 0, 478, 480,
+
+ 478, 478, 478, 478, 480, 484, 480, 480, 481, 480,
+ 0, 485, 0, 0, 0, 0, 481, 486, 0, 0,
+ 482, 481, 481, 481, 481, 482, 481, 482, 482, 485,
+ 482, 487, 483, 0, 0, 488, 0, 483, 0, 483,
+ 483, 484, 483, 0, 489, 0, 484, 485, 484, 484,
+ 490, 484, 485, 486, 485, 485, 485, 485, 486, 491,
+ 486, 486, 0, 486, 0, 492, 0, 487, 0, 0,
+ 0, 488, 487, 0, 487, 487, 488, 487, 488, 488,
+ 489, 488, 493, 492, 0, 489, 490, 489, 489, 0,
+ 489, 490, 0, 490, 490, 491, 490, 494, 0, 0,
+
+ 491, 492, 491, 491, 0, 491, 492, 0, 492, 492,
+ 492, 492, 495, 0, 0, 0, 496, 0, 493, 0,
+ 0, 0, 0, 493, 0, 493, 493, 497, 493, 0,
+ 0, 498, 0, 494, 0, 0, 0, 0, 494, 0,
+ 494, 494, 499, 494, 0, 0, 500, 0, 495, 0,
+ 0, 0, 496, 495, 0, 495, 495, 496, 495, 496,
+ 496, 520, 496, 497, 0, 0, 0, 498, 497, 0,
+ 497, 497, 498, 497, 498, 498, 521, 498, 499, 0,
+ 0, 0, 500, 499, 0, 499, 499, 500, 499, 500,
+ 500, 522, 500, 0, 0, 0, 521, 520, 0, 0,
+
+ 522, 0, 520, 523, 520, 520, 0, 520, 0, 524,
+ 0, 522, 521, 0, 0, 0, 0, 521, 0, 521,
+ 521, 0, 521, 521, 524, 0, 0, 522, 525, 525,
+ 0, 0, 522, 0, 522, 522, 0, 522, 522, 523,
+ 526, 0, 0, 525, 523, 524, 523, 523, 525, 523,
+ 524, 524, 524, 524, 527, 524, 525, 0, 528, 0,
+ 0, 0, 0, 0, 525, 0, 0, 529, 0, 525,
+ 525, 525, 525, 0, 525, 525, 526, 0, 0, 530,
+ 0, 526, 0, 526, 526, 531, 526, 529, 0, 0,
+ 527, 532, 0, 0, 528, 527, 0, 527, 527, 528,
+
+ 527, 528, 528, 529, 528, 533, 0, 0, 529, 534,
+ 529, 529, 0, 529, 529, 530, 0, 0, 535, 0,
+ 530, 531, 530, 530, 536, 530, 531, 532, 531, 531,
+ 537, 531, 532, 0, 532, 532, 538, 532, 0, 0,
+ 0, 533, 539, 0, 0, 534, 533, 0, 533, 533,
+ 534, 533, 534, 534, 535, 534, 540, 0, 0, 535,
+ 536, 535, 535, 0, 535, 536, 537, 536, 536, 541,
+ 536, 537, 538, 537, 537, 542, 537, 538, 539, 538,
+ 538, 543, 538, 539, 0, 539, 539, 544, 539, 0,
+ 0, 0, 540, 579, 0, 0, 0, 540, 0, 540,
+
+ 540, 0, 540, 0, 580, 541, 0, 0, 581, 0,
+ 541, 542, 541, 541, 0, 541, 542, 543, 542, 542,
+ 582, 542, 543, 544, 543, 543, 583, 543, 544, 579,
+ 544, 544, 584, 544, 579, 0, 579, 579, 585, 579,
+ 580, 0, 0, 0, 581, 580, 0, 580, 580, 581,
+ 580, 581, 581, 586, 581, 0, 582, 0, 0, 588,
+ 0, 582, 583, 582, 582, 587, 582, 583, 584, 583,
+ 583, 586, 583, 584, 585, 584, 584, 589, 584, 585,
+ 0, 585, 585, 590, 585, 587, 0, 0, 0, 586,
+ 0, 0, 591, 0, 586, 588, 586, 586, 586, 586,
+
+ 588, 587, 588, 588, 592, 588, 587, 0, 587, 587,
+ 593, 587, 587, 589, 0, 0, 594, 0, 589, 590,
+ 589, 589, 595, 589, 590, 0, 590, 590, 591, 590,
+ 0, 596, 0, 591, 0, 591, 591, 597, 591, 0,
+ 592, 0, 0, 598, 0, 592, 593, 592, 592, 599,
+ 592, 593, 594, 593, 593, 600, 593, 594, 595, 594,
+ 594, 601, 594, 595, 0, 595, 595, 596, 595, 0,
+ 602, 0, 596, 597, 596, 596, 603, 596, 597, 598,
+ 597, 597, 611, 597, 598, 599, 598, 598, 612, 598,
+ 599, 600, 599, 599, 614, 599, 600, 601, 600, 600,
+
+ 0, 600, 601, 0, 601, 601, 602, 601, 613, 613,
+ 0, 602, 603, 602, 602, 0, 602, 603, 611, 603,
+ 603, 615, 603, 611, 612, 611, 611, 616, 611, 612,
+ 614, 612, 612, 617, 612, 614, 613, 614, 614, 618,
+ 614, 0, 0, 0, 613, 619, 0, 0, 0, 613,
+ 0, 613, 613, 0, 613, 0, 620, 615, 0, 0,
+ 621, 0, 615, 616, 615, 615, 0, 615, 616, 617,
+ 616, 616, 622, 616, 617, 618, 617, 617, 623, 617,
+ 618, 619, 618, 618, 624, 618, 619, 0, 619, 619,
+ 625, 619, 620, 0, 0, 0, 621, 620, 0, 620,
+
+ 620, 621, 620, 621, 621, 626, 621, 0, 622, 627,
+ 0, 0, 0, 622, 623, 622, 622, 0, 622, 623,
+ 624, 623, 623, 628, 623, 624, 625, 624, 624, 629,
+ 624, 625, 0, 625, 625, 630, 625, 0, 0, 0,
+ 0, 626, 0, 0, 631, 627, 626, 0, 626, 626,
+ 627, 626, 627, 627, 0, 627, 632, 0, 0, 628,
+ 633, 0, 0, 0, 628, 629, 628, 628, 0, 628,
+ 629, 630, 629, 629, 634, 629, 630, 0, 630, 630,
+ 631, 630, 0, 635, 0, 631, 0, 631, 631, 643,
+ 631, 0, 632, 0, 0, 644, 633, 632, 0, 632,
+
+ 632, 633, 632, 633, 633, 0, 633, 645, 0, 0,
+ 634, 646, 0, 0, 0, 634, 0, 634, 634, 635,
+ 634, 0, 647, 0, 635, 643, 635, 635, 648, 635,
+ 643, 644, 643, 643, 649, 643, 644, 0, 644, 644,
+ 650, 644, 0, 645, 0, 0, 651, 646, 645, 0,
+ 645, 645, 646, 645, 646, 646, 0, 646, 647, 652,
+ 0, 0, 0, 647, 648, 647, 647, 0, 647, 648,
+ 649, 648, 648, 653, 648, 649, 650, 649, 649, 654,
+ 649, 650, 651, 650, 650, 655, 650, 651, 0, 651,
+ 651, 656, 651, 0, 0, 652, 0, 657, 0, 0,
+
+ 652, 0, 652, 652, 0, 652, 658, 0, 0, 653,
+ 659, 0, 0, 0, 653, 654, 653, 653, 0, 653,
+ 654, 655, 654, 654, 660, 654, 655, 656, 655, 655,
+ 661, 655, 656, 657, 656, 656, 662, 656, 657, 0,
+ 657, 657, 658, 657, 0, 663, 659, 658, 0, 658,
+ 658, 659, 658, 659, 659, 0, 659, 664, 0, 0,
+ 660, 665, 0, 0, 0, 660, 661, 660, 660, 0,
+ 660, 661, 662, 661, 661, 666, 661, 662, 0, 662,
+ 662, 663, 662, 0, 667, 0, 663, 0, 663, 663,
+ 673, 663, 0, 664, 0, 0, 674, 665, 664, 0,
+
+ 664, 664, 665, 664, 665, 665, 0, 665, 675, 0,
+ 0, 666, 676, 0, 0, 0, 666, 0, 666, 666,
+ 667, 666, 0, 677, 0, 667, 673, 667, 667, 678,
+ 667, 673, 674, 673, 673, 679, 673, 674, 0, 674,
+ 674, 680, 674, 0, 675, 0, 0, 681, 676, 675,
+ 0, 675, 675, 676, 675, 676, 676, 0, 676, 677,
+ 682, 0, 0, 0, 677, 678, 677, 677, 0, 677,
+ 678, 679, 678, 678, 683, 678, 679, 680, 679, 679,
+ 684, 679, 680, 681, 680, 680, 685, 680, 681, 0,
+ 681, 681, 686, 681, 0, 0, 682, 0, 687, 0,
+
+ 0, 682, 0, 682, 682, 0, 682, 688, 0, 0,
+ 683, 689, 0, 0, 0, 683, 684, 683, 683, 0,
+ 683, 684, 685, 684, 684, 690, 684, 685, 686, 685,
+ 685, 691, 685, 686, 687, 686, 686, 692, 686, 687,
+ 0, 687, 687, 688, 687, 0, 693, 689, 688, 0,
+ 688, 688, 689, 688, 689, 689, 0, 689, 694, 0,
+ 0, 690, 695, 0, 0, 0, 690, 691, 690, 690,
+ 0, 690, 691, 692, 691, 691, 696, 691, 692, 0,
+ 692, 692, 693, 692, 0, 697, 0, 693, 0, 693,
+ 693, 699, 693, 0, 694, 0, 0, 700, 695, 694,
+
+ 0, 694, 694, 695, 694, 695, 695, 0, 695, 701,
+ 0, 0, 696, 702, 0, 0, 0, 696, 0, 696,
+ 696, 697, 696, 0, 703, 0, 697, 699, 697, 697,
+ 704, 697, 699, 700, 699, 699, 705, 699, 700, 0,
+ 700, 700, 706, 700, 0, 701, 0, 0, 707, 702,
+ 701, 0, 701, 701, 702, 701, 702, 702, 0, 702,
+ 703, 708, 0, 0, 0, 703, 704, 703, 703, 0,
+ 703, 704, 705, 704, 704, 709, 704, 705, 706, 705,
+ 705, 710, 705, 706, 707, 706, 706, 711, 706, 707,
+ 0, 707, 707, 712, 707, 0, 0, 708, 0, 713,
+
+ 0, 0, 708, 0, 708, 708, 0, 708, 714, 0,
+ 0, 709, 715, 0, 0, 0, 709, 710, 709, 709,
+ 0, 709, 710, 711, 710, 710, 716, 710, 711, 712,
+ 711, 711, 717, 711, 712, 713, 712, 712, 718, 712,
+ 713, 0, 713, 713, 714, 713, 0, 719, 715, 714,
+ 0, 714, 714, 715, 714, 715, 715, 0, 715, 720,
+ 0, 0, 716, 721, 0, 0, 0, 716, 717, 716,
+ 716, 0, 716, 717, 718, 717, 717, 722, 717, 718,
+ 0, 718, 718, 719, 718, 0, 723, 0, 719, 0,
+ 719, 719, 747, 719, 0, 720, 0, 0, 748, 721,
+
+ 720, 0, 720, 720, 721, 720, 721, 721, 0, 721,
+ 0, 0, 750, 722, 0, 0, 749, 0, 722, 749,
+ 722, 722, 723, 722, 0, 751, 0, 723, 747, 723,
+ 723, 752, 723, 747, 748, 747, 747, 0, 747, 748,
+ 0, 748, 748, 754, 748, 0, 749, 0, 750, 753,
+ 0, 0, 749, 750, 753, 750, 750, 749, 750, 749,
+ 749, 751, 749, 755, 0, 0, 751, 752, 751, 751,
+ 0, 751, 752, 0, 752, 752, 756, 752, 0, 754,
+ 757, 753, 0, 0, 754, 753, 754, 754, 0, 754,
+ 753, 758, 753, 753, 0, 753, 0, 759, 0, 755,
+
+ 0, 0, 0, 760, 755, 0, 755, 755, 0, 755,
+ 0, 0, 756, 0, 761, 0, 757, 756, 762, 756,
+ 756, 757, 756, 757, 757, 0, 757, 758, 0, 763,
+ 0, 0, 758, 759, 758, 758, 0, 758, 759, 760,
+ 759, 759, 764, 759, 760, 0, 760, 760, 765, 760,
+ 761, 0, 0, 0, 762, 761, 0, 761, 761, 762,
+ 761, 762, 762, 766, 762, 763, 0, 767, 0, 0,
+ 763, 0, 763, 763, 0, 763, 768, 0, 764, 0,
+ 769, 0, 0, 764, 765, 764, 764, 0, 764, 765,
+ 0, 765, 765, 770, 765, 0, 0, 771, 0, 766,
+
+ 0, 0, 0, 767, 766, 0, 766, 766, 767, 766,
+ 767, 767, 768, 767, 783, 0, 769, 768, 784, 768,
+ 768, 769, 768, 769, 769, 0, 769, 785, 0, 770,
+ 0, 786, 0, 771, 770, 0, 770, 770, 771, 770,
+ 771, 771, 787, 771, 0, 0, 0, 0, 0, 0,
+ 783, 788, 0, 0, 784, 783, 0, 783, 783, 784,
+ 783, 784, 784, 785, 784, 789, 788, 786, 785, 790,
+ 785, 785, 786, 785, 786, 786, 0, 786, 787, 0,
+ 791, 0, 0, 787, 792, 787, 787, 788, 787, 0,
+ 0, 0, 788, 788, 788, 788, 793, 788, 0, 0,
+
+ 794, 789, 0, 0, 0, 790, 789, 0, 789, 789,
+ 790, 789, 790, 790, 795, 790, 791, 0, 796, 0,
+ 792, 791, 0, 791, 791, 792, 791, 792, 792, 797,
+ 792, 0, 793, 798, 0, 0, 794, 793, 0, 793,
+ 793, 794, 793, 794, 794, 799, 794, 0, 0, 800,
+ 795, 0, 0, 0, 796, 795, 0, 795, 795, 796,
+ 795, 796, 796, 801, 796, 797, 0, 802, 0, 798,
+ 797, 0, 797, 797, 798, 797, 798, 798, 803, 798,
+ 0, 799, 804, 0, 0, 800, 799, 0, 799, 799,
+ 800, 799, 800, 800, 805, 800, 0, 0, 806, 801,
+
+ 0, 0, 0, 802, 801, 0, 801, 801, 802, 801,
+ 802, 802, 807, 802, 803, 0, 849, 0, 804, 803,
+ 0, 803, 803, 804, 803, 804, 804, 850, 804, 0,
+ 805, 851, 0, 0, 806, 805, 0, 805, 805, 806,
+ 805, 806, 806, 0, 806, 853, 0, 0, 807, 0,
+ 0, 0, 849, 807, 0, 807, 807, 849, 807, 849,
+ 849, 0, 849, 850, 852, 852, 0, 851, 850, 852,
+ 850, 850, 851, 850, 851, 851, 0, 851, 854, 852,
+ 0, 853, 0, 0, 855, 855, 853, 0, 853, 853,
+ 854, 853, 852, 856, 0, 854, 852, 0, 0, 857,
+
+ 852, 0, 0, 0, 0, 852, 852, 852, 852, 0,
+ 852, 856, 855, 858, 854, 0, 0, 854, 0, 854,
+ 855, 854, 854, 0, 854, 855, 859, 855, 855, 856,
+ 855, 0, 860, 0, 856, 857, 856, 856, 856, 856,
+ 857, 861, 857, 857, 0, 857, 0, 862, 0, 858,
+ 0, 0, 0, 863, 858, 0, 858, 858, 0, 858,
+ 0, 0, 859, 0, 864, 0, 0, 859, 860, 859,
+ 859, 0, 859, 860, 0, 860, 860, 861, 860, 865,
+ 0, 0, 861, 862, 861, 861, 0, 861, 862, 863,
+ 862, 862, 866, 862, 863, 0, 863, 863, 867, 863,
+
+ 864, 0, 0, 0, 868, 864, 0, 864, 864, 0,
+ 864, 0, 0, 869, 0, 865, 0, 870, 0, 0,
+ 865, 0, 865, 865, 0, 865, 871, 0, 866, 0,
+ 872, 0, 0, 866, 867, 866, 866, 0, 866, 867,
+ 868, 867, 867, 873, 867, 868, 0, 868, 868, 869,
+ 868, 0, 877, 870, 869, 0, 869, 869, 870, 869,
+ 870, 870, 871, 870, 878, 0, 872, 871, 879, 871,
+ 871, 872, 871, 872, 872, 0, 872, 880, 0, 873,
+ 0, 881, 0, 0, 873, 0, 873, 873, 877, 873,
+ 882, 0, 0, 877, 883, 877, 877, 0, 877, 0,
+
+ 878, 0, 0, 884, 879, 878, 0, 878, 878, 879,
+ 878, 879, 879, 880, 879, 885, 0, 881, 880, 886,
+ 880, 880, 881, 880, 881, 881, 882, 881, 887, 0,
+ 883, 882, 888, 882, 882, 883, 882, 883, 883, 884,
+ 883, 889, 0, 0, 884, 890, 884, 884, 0, 884,
+ 0, 885, 0, 0, 891, 886, 885, 0, 885, 885,
+ 886, 885, 886, 886, 887, 886, 892, 0, 888, 887,
+ 893, 887, 887, 888, 887, 888, 888, 889, 888, 894,
+ 0, 890, 889, 895, 889, 889, 890, 889, 890, 890,
+ 891, 890, 896, 0, 0, 891, 897, 891, 891, 0,
+
+ 891, 0, 892, 0, 0, 898, 893, 892, 0, 892,
+ 892, 893, 892, 893, 893, 894, 893, 899, 0, 895,
+ 894, 900, 894, 894, 895, 894, 895, 895, 896, 895,
+ 901, 0, 897, 896, 905, 896, 896, 897, 896, 897,
+ 897, 898, 897, 906, 0, 0, 898, 907, 898, 898,
+ 0, 898, 0, 899, 0, 0, 908, 900, 899, 0,
+ 899, 899, 900, 899, 900, 900, 901, 900, 909, 0,
+ 905, 901, 910, 901, 901, 905, 901, 905, 905, 906,
+ 905, 911, 0, 907, 906, 912, 906, 906, 907, 906,
+ 907, 907, 908, 907, 913, 0, 0, 908, 914, 908,
+
+ 908, 0, 908, 0, 909, 0, 0, 915, 910, 909,
+ 0, 909, 909, 910, 909, 910, 910, 911, 910, 916,
+ 0, 912, 911, 917, 911, 911, 912, 911, 912, 912,
+ 913, 912, 918, 0, 914, 913, 919, 913, 913, 914,
+ 913, 914, 914, 915, 914, 920, 0, 0, 915, 921,
+ 915, 915, 0, 915, 0, 916, 0, 0, 922, 917,
+ 916, 0, 916, 916, 917, 916, 917, 917, 918, 917,
+ 923, 0, 919, 918, 924, 918, 918, 919, 918, 919,
+ 919, 920, 919, 925, 0, 921, 920, 926, 920, 920,
+ 921, 920, 921, 921, 922, 921, 927, 0, 0, 922,
+
+ 928, 922, 922, 0, 922, 0, 923, 0, 0, 929,
+ 924, 923, 0, 923, 923, 924, 923, 924, 924, 925,
+ 924, 931, 0, 926, 925, 932, 925, 925, 926, 925,
+ 926, 926, 927, 926, 933, 0, 928, 927, 934, 927,
+ 927, 928, 927, 928, 928, 929, 928, 935, 0, 0,
+ 929, 936, 929, 929, 0, 929, 0, 931, 0, 0,
+ 937, 932, 931, 0, 931, 931, 932, 931, 932, 932,
+ 933, 932, 938, 0, 934, 933, 939, 933, 933, 934,
+ 933, 934, 934, 935, 934, 940, 0, 936, 935, 941,
+ 935, 935, 936, 935, 936, 936, 937, 936, 942, 0,
+
+ 0, 937, 943, 937, 937, 0, 937, 0, 938, 0,
+ 0, 944, 939, 938, 0, 938, 938, 939, 938, 939,
+ 939, 940, 939, 945, 0, 941, 940, 946, 940, 940,
+ 941, 940, 941, 941, 942, 941, 947, 0, 943, 942,
+ 948, 942, 942, 943, 942, 943, 943, 944, 943, 949,
+ 0, 0, 944, 950, 944, 944, 0, 944, 0, 945,
+ 0, 0, 951, 946, 945, 0, 945, 945, 946, 945,
+ 946, 946, 947, 946, 952, 0, 948, 947, 953, 947,
+ 947, 948, 947, 948, 948, 949, 948, 954, 0, 950,
+ 949, 955, 949, 949, 950, 949, 950, 950, 951, 950,
+
+ 974, 0, 0, 951, 975, 951, 951, 0, 951, 0,
+ 952, 0, 0, 976, 953, 952, 0, 952, 952, 953,
+ 952, 953, 953, 954, 953, 977, 0, 955, 954, 978,
+ 954, 954, 955, 954, 955, 955, 974, 955, 979, 0,
+ 975, 974, 980, 974, 974, 975, 974, 975, 975, 976,
+ 975, 981, 0, 0, 976, 982, 976, 976, 0, 976,
+ 0, 977, 0, 0, 983, 978, 977, 0, 977, 977,
+ 978, 977, 978, 978, 979, 978, 984, 0, 980, 979,
+ 985, 979, 979, 980, 979, 980, 980, 981, 980, 986,
+ 0, 982, 981, 987, 981, 981, 982, 981, 982, 982,
+
+ 983, 982, 988, 0, 0, 983, 989, 983, 983, 0,
+ 983, 0, 984, 0, 0, 990, 985, 984, 0, 984,
+ 984, 985, 984, 985, 985, 986, 985, 991, 0, 987,
+ 986, 992, 986, 986, 987, 986, 987, 987, 988, 987,
+ 993, 0, 989, 988, 994, 988, 988, 989, 988, 989,
+ 989, 990, 989, 995, 0, 0, 990, 996, 990, 990,
+ 0, 990, 0, 991, 0, 0, 997, 992, 991, 0,
+ 991, 991, 992, 991, 992, 992, 993, 992, 998, 0,
+ 994, 993, 1016, 993, 993, 994, 993, 994, 994, 995,
+ 994, 1017, 0, 996, 995, 1018, 995, 995, 996, 995,
+
+ 996, 996, 997, 996, 1019, 0, 0, 997, 1020, 997,
+ 997, 0, 997, 0, 998, 0, 0, 1021, 1016, 998,
+ 0, 998, 998, 1016, 998, 1016, 1016, 1017, 1016, 1022,
+ 0, 1018, 1017, 1023, 1017, 1017, 1018, 1017, 1018, 1018,
+ 1019, 1018, 1024, 0, 1020, 1019, 1025, 1019, 1019, 1020,
+ 1019, 1020, 1020, 1021, 1020, 1026, 0, 0, 1021, 1027,
+ 1021, 1021, 0, 1021, 0, 1022, 0, 0, 1028, 1023,
+ 1022, 0, 1022, 1022, 1023, 1022, 1023, 1023, 1024, 1023,
+ 1029, 0, 1025, 1024, 1030, 1024, 1024, 1025, 1024, 1025,
+ 1025, 1026, 1025, 1031, 0, 1027, 1026, 1032, 1026, 1026,
+
+ 1027, 1026, 1027, 1027, 1028, 1027, 1033, 0, 0, 1028,
+ 1034, 1028, 1028, 0, 1028, 0, 1029, 0, 0, 1035,
+ 1030, 1029, 0, 1029, 1029, 1030, 1029, 1030, 1030, 1031,
+ 1030, 1036, 0, 1032, 1031, 1037, 1031, 1031, 1032, 1031,
+ 1032, 1032, 1033, 1032, 1038, 0, 1034, 1033, 1039, 1033,
+ 1033, 1034, 1033, 1034, 1034, 1035, 1034, 1040, 0, 0,
+ 1035, 1042, 1035, 1035, 0, 1035, 0, 1036, 0, 0,
+ 1043, 1037, 1036, 0, 1036, 1036, 1037, 1036, 1037, 1037,
+ 1038, 1037, 1044, 0, 1039, 1038, 1045, 1038, 1038, 1039,
+ 1038, 1039, 1039, 1040, 1039, 1046, 0, 1042, 1040, 1047,
+
+ 1040, 1040, 1042, 1040, 1042, 1042, 1043, 1042, 1048, 0,
+ 0, 1043, 1049, 1043, 1043, 0, 1043, 0, 1044, 0,
+ 0, 1050, 1045, 1044, 0, 1044, 1044, 1045, 1044, 1045,
+ 1045, 1046, 1045, 1051, 0, 1047, 1046, 1052, 1046, 1046,
+ 1047, 1046, 1047, 1047, 1048, 1047, 1053, 0, 1049, 1048,
+ 1054, 1048, 1048, 1049, 1048, 1049, 1049, 1050, 1049, 1055,
+ 0, 0, 1050, 1056, 1050, 1050, 0, 1050, 0, 1051,
+ 0, 0, 1057, 1052, 1051, 0, 1051, 1051, 1052, 1051,
+ 1052, 1052, 1053, 1052, 1058, 0, 1054, 1053, 1059, 1053,
+ 1053, 1054, 1053, 1054, 1054, 1055, 1054, 1060, 0, 1056,
+
+ 1055, 1061, 1055, 1055, 1056, 1055, 1056, 1056, 1057, 1056,
+ 1062, 0, 0, 1057, 1063, 1057, 1057, 0, 1057, 0,
+ 1058, 0, 0, 1064, 1059, 1058, 0, 1058, 1058, 1059,
+ 1058, 1059, 1059, 1060, 1059, 1065, 0, 1061, 1060, 1066,
+ 1060, 1060, 1061, 1060, 1061, 1061, 1062, 1061, 1068, 0,
+ 1063, 1062, 1069, 1062, 1062, 1063, 1062, 1063, 1063, 1064,
+ 1063, 1070, 0, 0, 1064, 1071, 1064, 1064, 0, 1064,
+ 0, 1065, 0, 0, 1072, 1066, 1065, 0, 1065, 1065,
+ 1066, 1065, 1066, 1066, 1068, 1066, 1073, 0, 1069, 1068,
+ 1074, 1068, 1068, 1069, 1068, 1069, 1069, 1070, 1069, 1075,
+
+ 0, 1071, 1070, 1076, 1070, 1070, 1071, 1070, 1071, 1071,
+ 1072, 1071, 1077, 0, 0, 1072, 1078, 1072, 1072, 0,
+ 1072, 0, 1073, 0, 0, 1079, 1074, 1073, 0, 1073,
+ 1073, 1074, 1073, 1074, 1074, 1075, 1074, 1080, 0, 1076,
+ 1075, 1081, 1075, 1075, 1076, 1075, 1076, 1076, 1077, 1076,
+ 1082, 0, 1078, 1077, 1083, 1077, 1077, 1078, 1077, 1078,
+ 1078, 1079, 1078, 1084, 0, 0, 1079, 1085, 1079, 1079,
+ 0, 1079, 0, 1080, 0, 0, 1086, 1081, 1080, 0,
+ 1080, 1080, 1081, 1080, 1081, 1081, 1082, 1081, 1087, 0,
+ 1083, 1082, 1088, 1082, 1082, 1083, 1082, 1083, 1083, 1084,
+
+ 1083, 1089, 0, 1085, 1084, 1090, 1084, 1084, 1085, 1084,
+ 1085, 1085, 1086, 1085, 1091, 0, 0, 1086, 1092, 1086,
+ 1086, 0, 1086, 0, 1087, 0, 0, 1103, 1088, 1087,
+ 0, 1087, 1087, 1088, 1087, 1088, 1088, 1089, 1088, 1104,
+ 0, 1090, 1089, 1105, 1089, 1089, 1090, 1089, 1090, 1090,
+ 1091, 1090, 1106, 0, 1092, 1091, 1107, 1091, 1091, 1092,
+ 1091, 1092, 1092, 1103, 1092, 1108, 0, 0, 1103, 1109,
+ 1103, 1103, 0, 1103, 0, 1104, 0, 0, 1110, 1105,
+ 1104, 0, 1104, 1104, 1105, 1104, 1105, 1105, 1106, 1105,
+ 1111, 0, 1107, 1106, 1112, 1106, 1106, 1107, 1106, 1107,
+
+ 1107, 1108, 1107, 1113, 0, 1109, 1108, 1114, 1108, 1108,
+ 1109, 1108, 1109, 1109, 1110, 1109, 1115, 0, 0, 1110,
+ 1116, 1110, 1110, 0, 1110, 0, 1111, 0, 0, 1117,
+ 1112, 1111, 0, 1111, 1111, 1112, 1111, 1112, 1112, 1113,
+ 1112, 1118, 0, 1114, 1113, 1119, 1113, 1113, 1114, 1113,
+ 1114, 1114, 1115, 1114, 1120, 0, 1116, 1115, 1121, 1115,
+ 1115, 1116, 1115, 1116, 1116, 1117, 1116, 1122, 0, 0,
+ 1117, 1123, 1117, 1117, 0, 1117, 0, 1118, 0, 0,
+ 1124, 1119, 1118, 0, 1118, 1118, 1119, 1118, 1119, 1119,
+ 1120, 1119, 1125, 0, 1121, 1120, 1126, 1120, 1120, 1121,
+
+ 1120, 1121, 1121, 1122, 1121, 1127, 0, 1123, 1122, 0,
+ 1122, 1122, 1123, 1122, 1123, 1123, 1124, 1123, 0, 0,
+ 0, 1124, 0, 1124, 1124, 0, 1124, 0, 1125, 0,
+ 0, 0, 1126, 1125, 0, 1125, 1125, 1126, 1125, 1126,
+ 1126, 1127, 1126, 0, 0, 0, 1127, 0, 1127, 1127,
+ 0, 1127, 2590, 2590, 2593, 2593, 2594, 2594, 2595, 2595,
+ 2596, 2596, 2597, 2597, 2598, 2598, 2599, 2599, 2600, 2600,
+ 2604, 2604, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "ansel2uni.ll"
+/* This is a lex(1) file, see http://dinosaur.compilertools.net/
+* or http://en.wikipedia.org/wiki/Lex_programming_tool .
+*
+* Compilation on UNIX systems is done by
+* make ansel2uni
+* On other systems one may need to call lex or flex and cc explicitly:
+* lex -o ansel2uni.c ansel2uni.l
+* cc [-s] [-O] [-D U_TRANSF_OS_LN] [-D GEDCOM_EXT] [-D GEDCOM_LDS_EXT] [-D MARC_EXT] -o wileyEndNoteFilt ansel2uni.c -ll
+*
+* The executable works as a filter (copies stdin to stdout) and converts
+* a text stream encoded in 8-bit ANSEL (Z39-47-1993, ISO-IR-231) to UTF-8 unicode.
+* If the preprocessor symbol U_TRANSF_OS_LN has been defined, the CR-LF
+* combination of Unixes or DOS are modified to the Unicode
+* line separator symbol on output, else they are copied unchanged.
+*
+* If the preprocessor symbol GEDCOM_EXT is defined, some Gedcom-5.5 extensions
+* of the ANSEL standard are implemented. With the current implementation
+* this only means support of the German sharp s. If the slash
+* modifier that strikes through characters or of graphical symbols
+* of open or filled boxes are also needed, GEDCOM_LDS_EXT should be defined.
+*
+* If the preprocessor symbol MARC_EXT is defined, the MARC-8 extensions
+* of the ANSEL standard are implemented, as described in
+* http://lcweb2.loc.gov/diglib/codetables/45.html .
+*
+* Templates of use:
+* cat infile.ans | ansel2uni > infile.uni
+* For use in HTML/XML pages, recoding with the &#x00000; style
+* can be done via http://billposer.org/Software/uni2ascii.html :
+* cat infile.ans | ansel2uni | uni2ascii -q -a Q -a H > infile.xml
+*
+* http://en.wikipedia.org/wiki/GEDCOM
+* http://marcpm.sourceforge.net/MARC/Charset.html
+*
+* @author Richard J. Mathar, 2009-01-13
+* @since 2209-01-18 use yyout instead of stdout. Implemented MARC_EXT. Use graph for alpha char class.
+* @see http://www.uniocode.org/versions/Unicode5.1.0/
+*/
+#line 42 "ansel2uni.ll"
+#include <stdio.h>
+
+/* Unicode ranges U+0000 to UFFFF
+* @param hi the high (first) byte of the code point
+* @param lo the low (2nd byte) of the code point
+* @see D92 in the Unicode Standard, Table 3-6
+* @see http://en.wikipedia.org/wiki/UTF-8
+*/
+void utf3byte(const unsigned char hi, const unsigned char lo)
+{
+ const unsigned long c = 256*hi+lo ;
+ if ( c < 128)
+ fprintf(yyout,"%c",lo) ;
+ else if ( c < 2048 )
+ {
+ /* mask lower 6 bits and prefix 10, second byte */
+ const unsigned char b2 = 128 + ( c & 63 );
+ /* remove lower 6 bits and prefix 110, first byte */
+ const unsigned char b1 = 192 + ( c >> 6 ) ;
+ fprintf(yyout,"%c%c",b1,b2) ;
+ }
+ else
+ {
+ /* mask lower 6 bits and prefix 10, third byte */
+ const unsigned char b3 = 128 + ( c & 63 );
+ /* remove lower 6 bits and prefix 10 */
+ const unsigned char b2 = 128 + ( ( c & 4032 ) >> 6 ) ;
+ /* remove lower 12 bits and prefix 1110 */
+ const unsigned char b1 = 224 + ( (c & 61440 ) >> 12 ) ;
+ fprintf(yyout,"%c%c%c",b1,b2,b3) ;
+ }
+}
+
+/* Unicode ranges U+0080 to U+00FF.
+* @param c the low-byte of the unicode point in the range 0x00 to 0x7f
+* @see http://en.wikipedia.org/wiki/UTF-8
+*/
+void utf2byte(const unsigned char c)
+{
+#if 0
+ /* explicit implementation */
+ const unsigned char b2 = 128 + ( c & 63 );
+ const unsigned char b1 = 192 + ( ( c & 192 ) >> 6 ) ;
+ fprintf(yyout,"%c%c",b1,b2) ;
+#else
+ /* lazy implementation */
+ utf3byte('\0',c) ;
+#endif
+}
+
+#ifdef U_TRANSF_OS_NL
+/* Put the LS, U+2028
+* @param crlf the line feed in unix or dos representation
+* @todo
+*/
+void newl(char *crlf)
+{
+ utf3byte('\x20','\x28') ;
+}
+#else
+/*
+* @param crlf the line feed in unix or dos representation
+*/
+void newl(char *crlf)
+{
+ fprintf(yyout,"%s",crlf) ;
+}
+#endif
+
+/* reserved for control characters */
+/* corners (reserved) */
+/* Gedcom 5.5 extension: German sharp s */
+/* rumors but not standard, see http://homepages.rootsweb.ancestry.com/~pmcbride/gedcom/55gcappd.htm#S2 */
+/* Strict ANSEL: reserved for future standardization, but not GEDCOM */
+/* not sure whether ANSEL allows a double grave to be represented as two accents */
+#line 3174 "ansel2uni.cc"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 171 "ansel2uni.ll"
+
+
+#line 3359 "ansel2uni.cc"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 2590 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 7773 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 173 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf2byte('\x98') ; /* START OF STRING U+0098 */
+#else
+ ECHO ;
+#endif
+ }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 181 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf2byte('\x9c') ; /* STRING TERMINATOR U+009C */
+#else
+ ECHO ;
+#endif
+ }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 189 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf3byte('\x20','\x0d') ; /* ZERO WIDTH JOINER U+200D */
+#else
+ ECHO ;
+#endif
+ }
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 197 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf3byte('\x20','\x0c') ; /* ZERO WIDTH NON-JOINER U+200C */
+#else
+ ECHO ;
+#endif
+ }
+ YY_BREAK
+/* C1 controls and latin supplement */
+/* utf2byte('\xa0') ; /* unassigned xxxxxxxxxxxxxxxxxxxxxxx U+00A0 */
+case 5:
+YY_RULE_SETUP
+#line 208 "ansel2uni.ll"
+utf2byte('\xa1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A1 */
+ YY_BREAK
+/* utf2byte('\xa2') ; /* CENT SIGN U+00A2 */
+case 6:
+YY_RULE_SETUP
+#line 210 "ansel2uni.ll"
+utf2byte('\xa3') ; /* POUND SIGN U+00A3 */
+ YY_BREAK
+/* utf2byte('\xa4') ; /* CURRENCY SIGN U+00A4 */
+/* utf2byte('\xa5') ; /* YEN SIGN U+00A5 */
+/* utf2byte('\xa6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A6 */
+/* utf2byte('\xa7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A7 */
+/* utf2byte('\xa8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A8 */
+case 7:
+YY_RULE_SETUP
+#line 216 "ansel2uni.ll"
+utf2byte('\xa9') ; /* COPYRIGH SIGN U+00A9 */
+ YY_BREAK
+/* utf2byte('\xaa') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00AA */
+/* utf2byte('\xab') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00AB */
+/* utf2byte('\xac') ; /* NOT SIGN U+00AC */
+/* utf2byte('\xad') ; /* SOPFTHYPHEN U+00AD */
+case 8:
+YY_RULE_SETUP
+#line 221 "ansel2uni.ll"
+utf2byte('\xae') ; /* REGISTRED SIGN U+00AE */
+ YY_BREAK
+/* utf2byte('\xaf') ; /* MACRON U+00AF */
+case 9:
+YY_RULE_SETUP
+#line 224 "ansel2uni.ll"
+utf2byte('\xb0') ; /* DEGREE SIGN U+00B0 */
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 225 "ansel2uni.ll"
+utf2byte('\xb1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00B1 */
+ YY_BREAK
+/* utf2byte('\xb2') ; /* SUPER SCRIPT TWO U+00B2 */
+/* utf2byte('\xb3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00B3 */
+/* utf2byte('\xb4') ; /* ACUTE ACCENT U+00B4 */
+/* utf2byte('\xb5') ; /* MICRO SIGN U+00B5 */
+/* utf2byte('\xb6') ; /* PILCROW SIGN U+00B6 */
+case 11:
+YY_RULE_SETUP
+#line 231 "ansel2uni.ll"
+utf2byte('\xb7') ; /* MIDDLE DOT U+00B7 */
+ YY_BREAK
+/* utf2byte('\xb8') ; /* CEDILLA U+00B8 */
+/* utf2byte('\xb9') ; /* SUPERSCRIPT ONE U+00B9 */
+/* utf2byte('\xba') ; /* MASCULINE ORIDNAL INDICATOR U+00BA */
+/* utf2byte('\xbb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BB */
+/* utf2byte('\xbc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BC */
+/* utf2byte('\xbd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BD */
+/* utf2byte('\xbe') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BE */
+case 12:
+YY_RULE_SETUP
+#line 239 "ansel2uni.ll"
+utf2byte('\xbf') ; /* INVERTED QUESTION MARK U+00BF */
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 241 "ansel2uni.ll"
+utf2byte('\xc0') ; /* A WITH ACUTE, LATIN CAPITAL LETTER U+00C0 */
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 242 "ansel2uni.ll"
+utf2byte('\xc1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C1 */
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 243 "ansel2uni.ll"
+utf2byte('\xc2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C2 */
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 244 "ansel2uni.ll"
+utf2byte('\xc3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C3 */
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 245 "ansel2uni.ll"
+utf2byte('\xc4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C4 */
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 246 "ansel2uni.ll"
+utf2byte('\xc5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C5 */
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 247 "ansel2uni.ll"
+utf2byte('\xc6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C6 */
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 248 "ansel2uni.ll"
+utf2byte('\xc7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C7 */
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 249 "ansel2uni.ll"
+utf2byte('\xc8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C8 */
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 250 "ansel2uni.ll"
+utf2byte('\xc9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C9 */
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 251 "ansel2uni.ll"
+utf2byte('\xca') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CA */
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 252 "ansel2uni.ll"
+utf2byte('\xcb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CB */
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 253 "ansel2uni.ll"
+utf2byte('\xcc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CC */
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 254 "ansel2uni.ll"
+utf2byte('\xcd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CD */
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 255 "ansel2uni.ll"
+utf2byte('\xce') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CE */
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 256 "ansel2uni.ll"
+utf2byte('\xcf') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CF */
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 258 "ansel2uni.ll"
+utf2byte('\xd1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D1 */
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 259 "ansel2uni.ll"
+utf2byte('\xd2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D2 */
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 260 "ansel2uni.ll"
+utf2byte('\xd3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D3 */
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 261 "ansel2uni.ll"
+utf2byte('\xd4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D4 */
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 262 "ansel2uni.ll"
+utf2byte('\xd5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D5 */
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 263 "ansel2uni.ll"
+utf2byte('\xd6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D6 */
+ YY_BREAK
+/* utf2byte('\xd7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D7 */
+case 35:
+YY_RULE_SETUP
+#line 265 "ansel2uni.ll"
+utf2byte('\xd8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D8 */
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 266 "ansel2uni.ll"
+utf2byte('\xd9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D9 */
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 267 "ansel2uni.ll"
+utf2byte('\xda') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DA */
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 268 "ansel2uni.ll"
+utf2byte('\xdb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DB */
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 269 "ansel2uni.ll"
+utf2byte('\xdc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DC */
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 270 "ansel2uni.ll"
+utf2byte('\xdd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DD */
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 271 "ansel2uni.ll"
+utf2byte('\xde') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DE */
+ YY_BREAK
+/* utf2byte('\xdf') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DF */
+case 42:
+YY_RULE_SETUP
+#line 274 "ansel2uni.ll"
+utf2byte('\xe0') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E0 */
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 275 "ansel2uni.ll"
+utf2byte('\xe1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E1 */
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 276 "ansel2uni.ll"
+utf2byte('\xe2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E2 */
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 277 "ansel2uni.ll"
+utf2byte('\xe3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E3 */
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 278 "ansel2uni.ll"
+utf2byte('\xe4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E4 */
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 279 "ansel2uni.ll"
+utf2byte('\xe5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E5 */
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 280 "ansel2uni.ll"
+utf2byte('\xe6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E6 */
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 281 "ansel2uni.ll"
+utf2byte('\xe7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E7 */
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 282 "ansel2uni.ll"
+utf2byte('\xe8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E8 */
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 283 "ansel2uni.ll"
+utf2byte('\xe9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E9 */
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 284 "ansel2uni.ll"
+utf2byte('\xea') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EA */
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 285 "ansel2uni.ll"
+utf2byte('\xeb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EB */
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 286 "ansel2uni.ll"
+utf2byte('\xec') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EC */
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 287 "ansel2uni.ll"
+utf2byte('\xed') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00ED */
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 288 "ansel2uni.ll"
+utf2byte('\xee') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EE */
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 289 "ansel2uni.ll"
+utf2byte('\xef') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EF */
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 291 "ansel2uni.ll"
+utf2byte('\xf0') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F0 */
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 292 "ansel2uni.ll"
+utf2byte('\xf1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F1 */
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 293 "ansel2uni.ll"
+utf2byte('\xf2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F2 */
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 294 "ansel2uni.ll"
+utf2byte('\xf3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F3 */
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 295 "ansel2uni.ll"
+utf2byte('\xf4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F4 */
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 296 "ansel2uni.ll"
+utf2byte('\xf5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F5 */
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 297 "ansel2uni.ll"
+utf2byte('\xf6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F6 */
+ YY_BREAK
+/* utf2byte('\xf7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F7 */
+case 65:
+YY_RULE_SETUP
+#line 299 "ansel2uni.ll"
+utf2byte('\xf8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F8 */
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 300 "ansel2uni.ll"
+utf2byte('\xf9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F9 */
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 301 "ansel2uni.ll"
+utf2byte('\xfa') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FA */
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 302 "ansel2uni.ll"
+utf2byte('\xfb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FB */
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 303 "ansel2uni.ll"
+utf2byte('\xfc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FC */
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 304 "ansel2uni.ll"
+utf2byte('\xfd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FD */
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 305 "ansel2uni.ll"
+utf2byte('\xfe') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FE */
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 306 "ansel2uni.ll"
+utf2byte('\xff') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FF */
+ YY_BREAK
+/* Latin-extended A */
+case 73:
+YY_RULE_SETUP
+#line 310 "ansel2uni.ll"
+utf3byte('\x01','\x00') ; /* LATIN CAPITAL LETTER A WITH MACRON U+0100 */
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 311 "ansel2uni.ll"
+utf3byte('\x01','\x01') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0101 */
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 312 "ansel2uni.ll"
+utf3byte('\x01','\x02') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0102 */
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 313 "ansel2uni.ll"
+utf3byte('\x01','\x03') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0103 */
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 314 "ansel2uni.ll"
+utf3byte('\x01','\x04') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0104 */
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 315 "ansel2uni.ll"
+utf3byte('\x01','\x05') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0105 */
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 316 "ansel2uni.ll"
+utf3byte('\x01','\x06') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0106 */
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 317 "ansel2uni.ll"
+utf3byte('\x01','\x07') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0107 */
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 318 "ansel2uni.ll"
+utf3byte('\x01','\x08') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0108 */
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 319 "ansel2uni.ll"
+utf3byte('\x01','\x09') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0109 */
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 320 "ansel2uni.ll"
+utf3byte('\x01','\x0a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010a */
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 321 "ansel2uni.ll"
+utf3byte('\x01','\x0b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010b */
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 322 "ansel2uni.ll"
+utf3byte('\x01','\x0c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010c */
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 323 "ansel2uni.ll"
+utf3byte('\x01','\x0d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010d */
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 324 "ansel2uni.ll"
+utf3byte('\x01','\x0e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010e */
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 325 "ansel2uni.ll"
+utf3byte('\x01','\x0f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010f */
+ YY_BREAK
+/* could this rather be U+00D0, LATIN CAPITAL LETTER ETH ? */
+case 89:
+YY_RULE_SETUP
+#line 328 "ansel2uni.ll"
+utf3byte('\x01','\x10') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0110 */
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 329 "ansel2uni.ll"
+utf3byte('\x01','\x11') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0111 */
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 330 "ansel2uni.ll"
+utf3byte('\x01','\x12') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0112 */
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 331 "ansel2uni.ll"
+utf3byte('\x01','\x13') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0113 */
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 332 "ansel2uni.ll"
+utf3byte('\x01','\x14') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0114 */
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 333 "ansel2uni.ll"
+utf3byte('\x01','\x15') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0115 */
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 334 "ansel2uni.ll"
+utf3byte('\x01','\x16') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0116 */
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 335 "ansel2uni.ll"
+utf3byte('\x01','\x17') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0117 */
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 336 "ansel2uni.ll"
+utf3byte('\x01','\x18') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0118 */
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 337 "ansel2uni.ll"
+utf3byte('\x01','\x19') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0119 */
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 338 "ansel2uni.ll"
+utf3byte('\x01','\x1a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011a */
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 339 "ansel2uni.ll"
+utf3byte('\x01','\x1b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011b */
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 340 "ansel2uni.ll"
+utf3byte('\x01','\x1c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011c */
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 341 "ansel2uni.ll"
+utf3byte('\x01','\x1d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011d */
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 342 "ansel2uni.ll"
+utf3byte('\x01','\x1e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011e */
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 343 "ansel2uni.ll"
+utf3byte('\x01','\x1f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011f */
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 345 "ansel2uni.ll"
+utf3byte('\x01','\x20') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0120 */
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 346 "ansel2uni.ll"
+utf3byte('\x01','\x21') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0121 */
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 347 "ansel2uni.ll"
+utf3byte('\x01','\x22') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0122 */
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 348 "ansel2uni.ll"
+utf3byte('\x01','\x23') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0123 */
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 349 "ansel2uni.ll"
+utf3byte('\x01','\x24') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0124 */
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 350 "ansel2uni.ll"
+utf3byte('\x01','\x25') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0125 */
+ YY_BREAK
+/* utf3byte('\x01','\x26') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0126 */
+/* utf3byte('\x01','\x27') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0127 */
+case 111:
+YY_RULE_SETUP
+#line 353 "ansel2uni.ll"
+utf3byte('\x01','\x28') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0128 */
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 354 "ansel2uni.ll"
+utf3byte('\x01','\x29') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0129 */
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 355 "ansel2uni.ll"
+utf3byte('\x01','\x2a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012a */
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 356 "ansel2uni.ll"
+utf3byte('\x01','\x2b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012b */
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 357 "ansel2uni.ll"
+utf3byte('\x01','\x2c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012c */
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 358 "ansel2uni.ll"
+utf3byte('\x01','\x2d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012d */
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 359 "ansel2uni.ll"
+utf3byte('\x01','\x2e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012e */
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 360 "ansel2uni.ll"
+utf3byte('\x01','\x2f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012f */
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 362 "ansel2uni.ll"
+utf3byte('\x01','\x30') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0130 */
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 363 "ansel2uni.ll"
+utf3byte('\x01','\x31') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0131 */
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 364 "ansel2uni.ll"
+utf3byte('\x01','\x32') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0132 */
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 365 "ansel2uni.ll"
+utf3byte('\x01','\x33') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0133 */
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 366 "ansel2uni.ll"
+utf3byte('\x01','\x34') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0134 */
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 367 "ansel2uni.ll"
+utf3byte('\x01','\x35') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0135 */
+ YY_BREAK
+case 125:
+#line 369 "ansel2uni.ll"
+case 126:
+YY_RULE_SETUP
+#line 369 "ansel2uni.ll"
+utf3byte('\x01','\x36') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0136 */
+ YY_BREAK
+case 127:
+#line 371 "ansel2uni.ll"
+case 128:
+YY_RULE_SETUP
+#line 371 "ansel2uni.ll"
+utf3byte('\x01','\x37') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0137 */
+ YY_BREAK
+/* utf3byte('\x01','\x38') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0138 */
+case 129:
+YY_RULE_SETUP
+#line 373 "ansel2uni.ll"
+utf3byte('\x01','\x39') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0139 */
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 374 "ansel2uni.ll"
+utf3byte('\x01','\x3a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013a */
+ YY_BREAK
+case 131:
+#line 376 "ansel2uni.ll"
+case 132:
+YY_RULE_SETUP
+#line 376 "ansel2uni.ll"
+utf3byte('\x01','\x3b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013b */
+ YY_BREAK
+case 133:
+#line 378 "ansel2uni.ll"
+case 134:
+YY_RULE_SETUP
+#line 378 "ansel2uni.ll"
+utf3byte('\x01','\x3c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013c */
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 379 "ansel2uni.ll"
+utf3byte('\x01','\x3d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013d */
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 380 "ansel2uni.ll"
+utf3byte('\x01','\x3e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013e */
+ YY_BREAK
+/* utf3byte('\x01','\x3f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013f */
+/* utf3byte('\x01','\x40') ; /* LATIN SMALL LETTER L WITH MIDDLE DOT+0140 */
+case 137:
+YY_RULE_SETUP
+#line 384 "ansel2uni.ll"
+utf3byte('\x01','\x41') ; /* LATIN CAPITAL LETTER L WITH STROKE U+0141 */
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 385 "ansel2uni.ll"
+utf3byte('\x01','\x42') ; /* LATIN SMALL LETTER L WITH STROKE U+0142 */
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 386 "ansel2uni.ll"
+utf3byte('\x01','\x43') ; /* LATIN CAPITAL LETTER N WITH ACUTE U+0143 */
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 387 "ansel2uni.ll"
+utf3byte('\x01','\x44') ; /* LATIN SMALL LETTER N WITH ACUTE U+0144 */
+ YY_BREAK
+case 141:
+#line 389 "ansel2uni.ll"
+case 142:
+YY_RULE_SETUP
+#line 389 "ansel2uni.ll"
+utf3byte('\x01','\x45') ; /* LATIN CAPITAL LETTER N WITH CEDILLA U+0145 */
+ YY_BREAK
+case 143:
+#line 391 "ansel2uni.ll"
+case 144:
+YY_RULE_SETUP
+#line 391 "ansel2uni.ll"
+utf3byte('\x01','\x46') ; /* LATIN SMALL LETTER N WITH CEDILLA U+0146 */
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 392 "ansel2uni.ll"
+utf3byte('\x01','\x47') ; /* LATIN CAPITAL LETTER N WITH CARON U+0147 */
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 393 "ansel2uni.ll"
+utf3byte('\x01','\x48') ; /* LATIN SMALL LETTER N WITH CARON U+0148 */
+ YY_BREAK
+/* utf3byte('\x01','\x49') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0149 */
+/* utf3byte('\x01','\x4a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014a */
+/* utf3byte('\x01','\x4b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014b */
+case 147:
+YY_RULE_SETUP
+#line 397 "ansel2uni.ll"
+utf3byte('\x01','\x4c') ; /* LATIN CAPITAL LETTER O WITH MACRON U+014c */
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 398 "ansel2uni.ll"
+utf3byte('\x01','\x4d') ; /* LATIN SMALL LETTER O WITH MACRON U+014d */
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 399 "ansel2uni.ll"
+utf3byte('\x01','\x4e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014e */
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 400 "ansel2uni.ll"
+utf3byte('\x01','\x4f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014f */
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 402 "ansel2uni.ll"
+utf3byte('\x01','\x50') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0150 */
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 403 "ansel2uni.ll"
+utf3byte('\x01','\x51') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0151 */
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 404 "ansel2uni.ll"
+utf3byte('\x01','\x52') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0152 */
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 405 "ansel2uni.ll"
+utf3byte('\x01','\x53') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0153 */
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 406 "ansel2uni.ll"
+utf3byte('\x01','\x54') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0154 */
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 407 "ansel2uni.ll"
+utf3byte('\x01','\x55') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0155 */
+ YY_BREAK
+case 157:
+#line 409 "ansel2uni.ll"
+case 158:
+YY_RULE_SETUP
+#line 409 "ansel2uni.ll"
+utf3byte('\x01','\x56') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0156 */
+ YY_BREAK
+case 159:
+#line 411 "ansel2uni.ll"
+case 160:
+YY_RULE_SETUP
+#line 411 "ansel2uni.ll"
+utf3byte('\x01','\x57') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0157 */
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 412 "ansel2uni.ll"
+utf3byte('\x01','\x58') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0158 */
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 413 "ansel2uni.ll"
+utf3byte('\x01','\x59') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0159 */
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 414 "ansel2uni.ll"
+utf3byte('\x01','\x5a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015a */
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 415 "ansel2uni.ll"
+utf3byte('\x01','\x5b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015b */
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 416 "ansel2uni.ll"
+utf3byte('\x01','\x5c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015c */
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 417 "ansel2uni.ll"
+utf3byte('\x01','\x5d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015d */
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 418 "ansel2uni.ll"
+utf3byte('\x01','\x5e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015e */
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 419 "ansel2uni.ll"
+utf3byte('\x01','\x5f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015f */
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 421 "ansel2uni.ll"
+utf3byte('\x01','\x60') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0160 */
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 422 "ansel2uni.ll"
+utf3byte('\x01','\x61') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0161 */
+ YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 423 "ansel2uni.ll"
+utf3byte('\x01','\x62') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0162 */
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 424 "ansel2uni.ll"
+utf3byte('\x01','\x63') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0163 */
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 425 "ansel2uni.ll"
+utf3byte('\x01','\x64') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0164 */
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 426 "ansel2uni.ll"
+utf3byte('\x01','\x65') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0165 */
+ YY_BREAK
+/* utf3byte('\x01','\x66') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0166 */
+/* utf3byte('\x01','\x67') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0167 */
+case 175:
+YY_RULE_SETUP
+#line 429 "ansel2uni.ll"
+utf3byte('\x01','\x68') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0168 */
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 430 "ansel2uni.ll"
+utf3byte('\x01','\x69') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0169 */
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 431 "ansel2uni.ll"
+utf3byte('\x01','\x6a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016a */
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 432 "ansel2uni.ll"
+utf3byte('\x01','\x6b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016b */
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 433 "ansel2uni.ll"
+utf3byte('\x01','\x6c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016c */
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 434 "ansel2uni.ll"
+utf3byte('\x01','\x6d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016d */
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 435 "ansel2uni.ll"
+utf3byte('\x01','\x6e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016e */
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 436 "ansel2uni.ll"
+utf3byte('\x01','\x6f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016f */
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 438 "ansel2uni.ll"
+utf3byte('\x01','\x70') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0170 */
+ YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 439 "ansel2uni.ll"
+utf3byte('\x01','\x71') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0171 */
+ YY_BREAK
+case 185:
+YY_RULE_SETUP
+#line 440 "ansel2uni.ll"
+utf3byte('\x01','\x72') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0172 */
+ YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 441 "ansel2uni.ll"
+utf3byte('\x01','\x73') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0173 */
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 442 "ansel2uni.ll"
+utf3byte('\x01','\x74') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0174 */
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 443 "ansel2uni.ll"
+utf3byte('\x01','\x75') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0175 */
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 444 "ansel2uni.ll"
+utf3byte('\x01','\x76') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0176 */
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 445 "ansel2uni.ll"
+utf3byte('\x01','\x77') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0177 */
+ YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 446 "ansel2uni.ll"
+utf3byte('\x01','\x78') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0178 */
+ YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 447 "ansel2uni.ll"
+utf3byte('\x01','\x79') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0179 */
+ YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 448 "ansel2uni.ll"
+utf3byte('\x01','\x7a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017a */
+ YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 449 "ansel2uni.ll"
+utf3byte('\x01','\x7b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017b */
+ YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 450 "ansel2uni.ll"
+utf3byte('\x01','\x7c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017c */
+ YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 451 "ansel2uni.ll"
+utf3byte('\x01','\x7d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017d */
+ YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 452 "ansel2uni.ll"
+utf3byte('\x01','\x7e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017e */
+ YY_BREAK
+/* utf3byte('\x01','\x7f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017f */
+/* end of Latin Extended A */
+/* Latin Extended B */
+/* utf3byte('\x01','\x80') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0170 */
+/* utf3byte('\x01','\x81') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0171 */
+case 198:
+YY_RULE_SETUP
+#line 461 "ansel2uni.ll"
+utf3byte('\x01','\x82') ; /* LATIN CAPITAL LETTER B WITH TOPBAR U+0182 */
+ YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 462 "ansel2uni.ll"
+utf3byte('\x01','\x83') ; /* LATIN SMALL LETTER B WITH TOPBAR U+0183 */
+ YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 464 "ansel2uni.ll"
+utf3byte('\x01','\xa0') ; /* LATIN CAPITAL LETTER O WITH HORN U+01A0 */
+ YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 465 "ansel2uni.ll"
+utf3byte('\x01','\xa1') ; /* LATIN SMALL LETTER O WITH HORN U+01A1 */
+ YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 466 "ansel2uni.ll"
+utf3byte('\x01','\xaf') ; /* LATIN CAPITAL LETTER U WITH HORN U+01AF */
+ YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 467 "ansel2uni.ll"
+utf3byte('\x01','\x80') ; /* LATIN SMALL LETTER U WIHT HORN U+0180 */
+ YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 469 "ansel2uni.ll"
+utf3byte('\x01','\xc4') ; /* LATIN CAPITAL LETTER DZ WITH CARON U+01C4 */
+ YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 470 "ansel2uni.ll"
+utf3byte('\x01','\xc5') ; /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON U+01C5 */
+ YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 471 "ansel2uni.ll"
+utf3byte('\x01','\xc6') ; /* LATIN SMALL LETTER DZ WITH CARON U+01C6 */
+ YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 472 "ansel2uni.ll"
+utf3byte('\x01','\xc7') ; /* LATIN CAPITAL LETTER LJ U+01C7 */
+ YY_BREAK
+case 208:
+YY_RULE_SETUP
+#line 473 "ansel2uni.ll"
+utf3byte('\x01','\xc8') ; /* LATIN CAPITAL LETTER L WITH SMALL LTTER J U+01C8 */
+ YY_BREAK
+/* lj utf3byte('\x01','\xc9') ; LATIN CAPITAL LETTER L WITH SMALL LTTER J U+01C9 */
+case 209:
+YY_RULE_SETUP
+#line 475 "ansel2uni.ll"
+utf3byte('\x01','\xca') ; /* LATIN CAPITAL LETTER NJ U+01CA */
+ YY_BREAK
+case 210:
+YY_RULE_SETUP
+#line 476 "ansel2uni.ll"
+utf3byte('\x01','\xcb') ; /* LATIN CAPITAL LETTER N WITH SMALL LTTER J U+01CB */
+ YY_BREAK
+/* nj utf3byte('\x01','\xcc') ; LATIN SMALL LETTER NJ U+01CC */
+case 211:
+YY_RULE_SETUP
+#line 478 "ansel2uni.ll"
+utf3byte('\x01','\xcd') ; /* U+01CD */
+ YY_BREAK
+case 212:
+YY_RULE_SETUP
+#line 479 "ansel2uni.ll"
+utf3byte('\x01','\xce') ; /* U+01CE */
+ YY_BREAK
+case 213:
+YY_RULE_SETUP
+#line 480 "ansel2uni.ll"
+utf3byte('\x01','\xcf') ; /* U+01CF */
+ YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 481 "ansel2uni.ll"
+utf3byte('\x01','\xd0') ; /* U+01D0 */
+ YY_BREAK
+case 215:
+YY_RULE_SETUP
+#line 482 "ansel2uni.ll"
+utf3byte('\x01','\xd1') ; /* U+01D1 */
+ YY_BREAK
+case 216:
+YY_RULE_SETUP
+#line 483 "ansel2uni.ll"
+utf3byte('\x01','\xd2') ; /* U+01D2 */
+ YY_BREAK
+case 217:
+YY_RULE_SETUP
+#line 484 "ansel2uni.ll"
+utf3byte('\x01','\xd3') ; /* U+01D3 */
+ YY_BREAK
+case 218:
+YY_RULE_SETUP
+#line 485 "ansel2uni.ll"
+utf3byte('\x01','\xd4') ; /* U+01D4 */
+ YY_BREAK
+/* see U+1E7A for the opposite order */
+case 219:
+YY_RULE_SETUP
+#line 488 "ansel2uni.ll"
+utf3byte('\x01','\xd5') ; /* U+01D5 */
+ YY_BREAK
+case 220:
+YY_RULE_SETUP
+#line 489 "ansel2uni.ll"
+utf3byte('\x01','\xd6') ; /* U+01D6 */
+ YY_BREAK
+case 221:
+#line 492 "ansel2uni.ll"
+case 222:
+YY_RULE_SETUP
+#line 492 "ansel2uni.ll"
+utf3byte('\x01','\xd7') ; /* U+01D7 */
+ YY_BREAK
+case 223:
+#line 495 "ansel2uni.ll"
+case 224:
+YY_RULE_SETUP
+#line 495 "ansel2uni.ll"
+utf3byte('\x01','\xd8') ; /* U+01D8 */
+ YY_BREAK
+case 225:
+#line 498 "ansel2uni.ll"
+case 226:
+YY_RULE_SETUP
+#line 498 "ansel2uni.ll"
+utf3byte('\x01','\xd9') ; /* U+01D9 */
+ YY_BREAK
+case 227:
+#line 501 "ansel2uni.ll"
+case 228:
+YY_RULE_SETUP
+#line 501 "ansel2uni.ll"
+utf3byte('\x01','\xda') ; /* U+01DA */
+ YY_BREAK
+case 229:
+#line 504 "ansel2uni.ll"
+case 230:
+YY_RULE_SETUP
+#line 504 "ansel2uni.ll"
+utf3byte('\x01','\xdb') ; /* U+01DB */
+ YY_BREAK
+case 231:
+#line 507 "ansel2uni.ll"
+case 232:
+YY_RULE_SETUP
+#line 507 "ansel2uni.ll"
+utf3byte('\x01','\xdc') ; /* U+01DC */
+ YY_BREAK
+case 233:
+#line 510 "ansel2uni.ll"
+case 234:
+YY_RULE_SETUP
+#line 510 "ansel2uni.ll"
+utf3byte('\x01','\xde') ; /* U+01DE */
+ YY_BREAK
+case 235:
+#line 513 "ansel2uni.ll"
+case 236:
+YY_RULE_SETUP
+#line 513 "ansel2uni.ll"
+utf3byte('\x01','\xdf') ; /* U+01DF */
+ YY_BREAK
+case 237:
+#line 516 "ansel2uni.ll"
+case 238:
+YY_RULE_SETUP
+#line 516 "ansel2uni.ll"
+utf3byte('\x01','\xe0') ; /* U+01E0 */
+ YY_BREAK
+case 239:
+#line 519 "ansel2uni.ll"
+case 240:
+YY_RULE_SETUP
+#line 519 "ansel2uni.ll"
+utf3byte('\x01','\xe1') ; /* U+01E1 */
+ YY_BREAK
+case 241:
+YY_RULE_SETUP
+#line 521 "ansel2uni.ll"
+utf3byte('\x01','\xe2') ; /* U+01E2 */
+ YY_BREAK
+case 242:
+YY_RULE_SETUP
+#line 522 "ansel2uni.ll"
+utf3byte('\x01','\xe3') ; /* U+01E3 */
+ YY_BREAK
+case 243:
+YY_RULE_SETUP
+#line 523 "ansel2uni.ll"
+utf3byte('\x01','\xe6') ; /* U+01E6 */
+ YY_BREAK
+case 244:
+YY_RULE_SETUP
+#line 524 "ansel2uni.ll"
+utf3byte('\x01','\xe7') ; /* U+01E7 */
+ YY_BREAK
+case 245:
+YY_RULE_SETUP
+#line 525 "ansel2uni.ll"
+utf3byte('\x01','\xe8') ; /* U+01E8 */
+ YY_BREAK
+case 246:
+YY_RULE_SETUP
+#line 526 "ansel2uni.ll"
+utf3byte('\x01','\xe9') ; /* U+01E9 */
+ YY_BREAK
+case 247:
+YY_RULE_SETUP
+#line 527 "ansel2uni.ll"
+utf3byte('\x01','\xea') ; /* U+01EA */
+ YY_BREAK
+case 248:
+YY_RULE_SETUP
+#line 528 "ansel2uni.ll"
+utf3byte('\x01','\xeb') ; /* U+01EB */
+ YY_BREAK
+case 249:
+#line 531 "ansel2uni.ll"
+case 250:
+YY_RULE_SETUP
+#line 531 "ansel2uni.ll"
+utf3byte('\x01','\xec') ; /* U+01EC */
+ YY_BREAK
+case 251:
+#line 534 "ansel2uni.ll"
+case 252:
+YY_RULE_SETUP
+#line 534 "ansel2uni.ll"
+utf3byte('\x01','\xed') ; /* U+01ED */
+ YY_BREAK
+case 253:
+YY_RULE_SETUP
+#line 536 "ansel2uni.ll"
+utf3byte('\x01','\xf0') ; /* U+01F0 */
+ YY_BREAK
+case 254:
+YY_RULE_SETUP
+#line 538 "ansel2uni.ll"
+utf3byte('\x01','\xf1') ; /* U+01F1 */
+ YY_BREAK
+case 255:
+YY_RULE_SETUP
+#line 539 "ansel2uni.ll"
+utf3byte('\x01','\xf2') ; /* U+01F2 */
+ YY_BREAK
+case 256:
+YY_RULE_SETUP
+#line 540 "ansel2uni.ll"
+utf3byte('\x01','\xf3') ; /* U+01F3 */
+ YY_BREAK
+case 257:
+YY_RULE_SETUP
+#line 542 "ansel2uni.ll"
+utf3byte('\x01','\xf4') ; /* U+01F4 */
+ YY_BREAK
+case 258:
+YY_RULE_SETUP
+#line 543 "ansel2uni.ll"
+utf3byte('\x01','\xf5') ; /* U+01F5 */
+ YY_BREAK
+case 259:
+YY_RULE_SETUP
+#line 544 "ansel2uni.ll"
+utf3byte('\x01','\xf8') ; /* U+01F8 */
+ YY_BREAK
+case 260:
+YY_RULE_SETUP
+#line 545 "ansel2uni.ll"
+utf3byte('\x01','\xf9') ; /* U+01F9 */
+ YY_BREAK
+case 261:
+#line 548 "ansel2uni.ll"
+case 262:
+YY_RULE_SETUP
+#line 548 "ansel2uni.ll"
+utf3byte('\x01','\xfa') ; /* U+01FA */
+ YY_BREAK
+case 263:
+#line 551 "ansel2uni.ll"
+case 264:
+YY_RULE_SETUP
+#line 551 "ansel2uni.ll"
+utf3byte('\x01','\xfb') ; /* U+01FB */
+ YY_BREAK
+case 265:
+YY_RULE_SETUP
+#line 553 "ansel2uni.ll"
+utf3byte('\x01','\xfc') ; /* U+01FC */
+ YY_BREAK
+case 266:
+YY_RULE_SETUP
+#line 554 "ansel2uni.ll"
+utf3byte('\x01','\xfd') ; /* U+01FD */
+ YY_BREAK
+case 267:
+YY_RULE_SETUP
+#line 555 "ansel2uni.ll"
+utf3byte('\x01','\xfe') ; /* U+01FE */
+ YY_BREAK
+case 268:
+YY_RULE_SETUP
+#line 556 "ansel2uni.ll"
+utf3byte('\x01','\xff') ; /* U+01FF */
+ YY_BREAK
+case 269:
+YY_RULE_SETUP
+#line 557 "ansel2uni.ll"
+utf3byte('\x02','\x00') ; /* U+0200 */
+ YY_BREAK
+case 270:
+YY_RULE_SETUP
+#line 558 "ansel2uni.ll"
+utf3byte('\x02','\x01') ; /* U+0201 */
+ YY_BREAK
+case 271:
+YY_RULE_SETUP
+#line 559 "ansel2uni.ll"
+utf3byte('\x02','\x04') ; /* U+0204 */
+ YY_BREAK
+case 272:
+YY_RULE_SETUP
+#line 560 "ansel2uni.ll"
+utf3byte('\x02','\x05') ; /* U+0205 */
+ YY_BREAK
+case 273:
+YY_RULE_SETUP
+#line 561 "ansel2uni.ll"
+utf3byte('\x02','\x08') ; /* U+0208 */
+ YY_BREAK
+case 274:
+YY_RULE_SETUP
+#line 562 "ansel2uni.ll"
+utf3byte('\x02','\x09') ; /* U+0209 */
+ YY_BREAK
+case 275:
+YY_RULE_SETUP
+#line 563 "ansel2uni.ll"
+utf3byte('\x02','\x0c') ; /* U+020C */
+ YY_BREAK
+case 276:
+YY_RULE_SETUP
+#line 564 "ansel2uni.ll"
+utf3byte('\x02','\x0d') ; /* U+020D */
+ YY_BREAK
+case 277:
+YY_RULE_SETUP
+#line 565 "ansel2uni.ll"
+utf3byte('\x02','\x10') ; /* U+0210 */
+ YY_BREAK
+case 278:
+YY_RULE_SETUP
+#line 566 "ansel2uni.ll"
+utf3byte('\x02','\x11') ; /* U+0211 */
+ YY_BREAK
+case 279:
+YY_RULE_SETUP
+#line 567 "ansel2uni.ll"
+utf3byte('\x02','\x14') ; /* U+0214 */
+ YY_BREAK
+case 280:
+YY_RULE_SETUP
+#line 568 "ansel2uni.ll"
+utf3byte('\x02','\x15') ; /* U+0215 */
+ YY_BREAK
+case 281:
+YY_RULE_SETUP
+#line 569 "ansel2uni.ll"
+utf3byte('\x02','\x18') ; /* U+0218 */
+ YY_BREAK
+case 282:
+YY_RULE_SETUP
+#line 570 "ansel2uni.ll"
+utf3byte('\x02','\x19') ; /* U+0219 */
+ YY_BREAK
+case 283:
+YY_RULE_SETUP
+#line 571 "ansel2uni.ll"
+utf3byte('\x02','\x1a') ; /* U+021A */
+ YY_BREAK
+case 284:
+YY_RULE_SETUP
+#line 572 "ansel2uni.ll"
+utf3byte('\x02','\x1b') ; /* U+021B */
+ YY_BREAK
+case 285:
+YY_RULE_SETUP
+#line 573 "ansel2uni.ll"
+utf3byte('\x02','\x1e') ; /* U+021E */
+ YY_BREAK
+case 286:
+YY_RULE_SETUP
+#line 574 "ansel2uni.ll"
+utf3byte('\x02','\x1f') ; /* U+021F */
+ YY_BREAK
+case 287:
+YY_RULE_SETUP
+#line 575 "ansel2uni.ll"
+utf3byte('\x02','\x26') ; /* U+0226 */
+ YY_BREAK
+case 288:
+YY_RULE_SETUP
+#line 576 "ansel2uni.ll"
+utf3byte('\x02','\x27') ; /* U+0227 */
+ YY_BREAK
+case 289:
+YY_RULE_SETUP
+#line 577 "ansel2uni.ll"
+utf3byte('\x02','\x28') ; /* U+0228 */
+ YY_BREAK
+case 290:
+YY_RULE_SETUP
+#line 578 "ansel2uni.ll"
+utf3byte('\x02','\x29') ; /* U+0229 */
+ YY_BREAK
+case 291:
+#line 581 "ansel2uni.ll"
+case 292:
+YY_RULE_SETUP
+#line 581 "ansel2uni.ll"
+utf3byte('\x02','\x2a') ; /* U+022A */
+ YY_BREAK
+case 293:
+#line 584 "ansel2uni.ll"
+case 294:
+YY_RULE_SETUP
+#line 584 "ansel2uni.ll"
+utf3byte('\x02','\x2b') ; /* U+022B */
+ YY_BREAK
+case 295:
+#line 587 "ansel2uni.ll"
+case 296:
+YY_RULE_SETUP
+#line 587 "ansel2uni.ll"
+utf3byte('\x02','\x2c') ; /* U+022C */
+ YY_BREAK
+case 297:
+#line 590 "ansel2uni.ll"
+case 298:
+YY_RULE_SETUP
+#line 590 "ansel2uni.ll"
+utf3byte('\x02','\x2d') ; /* U+022D */
+ YY_BREAK
+case 299:
+YY_RULE_SETUP
+#line 592 "ansel2uni.ll"
+utf3byte('\x02','\x2e') ; /* U+022E */
+ YY_BREAK
+case 300:
+YY_RULE_SETUP
+#line 593 "ansel2uni.ll"
+utf3byte('\x02','\x2f') ; /* U+022F */
+ YY_BREAK
+case 301:
+#line 596 "ansel2uni.ll"
+case 302:
+YY_RULE_SETUP
+#line 596 "ansel2uni.ll"
+utf3byte('\x02','\x30') ; /* U+0230 */
+ YY_BREAK
+case 303:
+YY_RULE_SETUP
+#line 598 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3a') ; /* U+023A */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+case 304:
+YY_RULE_SETUP
+#line 606 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3b') ; /* U+023B */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+case 305:
+YY_RULE_SETUP
+#line 614 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3c') ; /* U+023C */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+case 306:
+#line 623 "ansel2uni.ll"
+case 307:
+YY_RULE_SETUP
+#line 623 "ansel2uni.ll"
+utf3byte('\x02','\x31') ; /* U+0231 */
+ YY_BREAK
+case 308:
+YY_RULE_SETUP
+#line 625 "ansel2uni.ll"
+utf3byte('\x02','\x32') ; /* U+0232 */
+ YY_BREAK
+case 309:
+YY_RULE_SETUP
+#line 626 "ansel2uni.ll"
+utf3byte('\x02','\x33') ; /* U+0233 */
+ YY_BREAK
+case 310:
+YY_RULE_SETUP
+#line 628 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3e') ; /* U+023E */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+case 311:
+YY_RULE_SETUP
+#line 636 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x46') ; /* U+0246 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+case 312:
+YY_RULE_SETUP
+#line 644 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x47') ; /* U+0247 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+/* end of Latin-extended B */
+/* Latin-extended Additional */
+case 313:
+YY_RULE_SETUP
+#line 655 "ansel2uni.ll"
+utf3byte('\x1e','\x00') ; /* U+1E00 */
+ YY_BREAK
+case 314:
+YY_RULE_SETUP
+#line 656 "ansel2uni.ll"
+utf3byte('\x1e','\x01') ; /* U+1E01 */
+ YY_BREAK
+case 315:
+YY_RULE_SETUP
+#line 657 "ansel2uni.ll"
+utf3byte('\x1e','\x02') ; /* U+1E02 */
+ YY_BREAK
+case 316:
+YY_RULE_SETUP
+#line 658 "ansel2uni.ll"
+utf3byte('\x1e','\x03') ; /* U+1E03 */
+ YY_BREAK
+case 317:
+YY_RULE_SETUP
+#line 659 "ansel2uni.ll"
+utf3byte('\x1e','\x04') ; /* U+1E04 */
+ YY_BREAK
+case 318:
+YY_RULE_SETUP
+#line 660 "ansel2uni.ll"
+utf3byte('\x1e','\x05') ; /* U+1E05 */
+ YY_BREAK
+case 319:
+YY_RULE_SETUP
+#line 661 "ansel2uni.ll"
+utf3byte('\x1e','\x06') ; /* U+1E06 */
+ YY_BREAK
+case 320:
+YY_RULE_SETUP
+#line 662 "ansel2uni.ll"
+utf3byte('\x1e','\x07') ; /* U+1E07 */
+ YY_BREAK
+case 321:
+#line 665 "ansel2uni.ll"
+case 322:
+YY_RULE_SETUP
+#line 665 "ansel2uni.ll"
+utf3byte('\x1e','\x08') ; /* U+1E08 */
+ YY_BREAK
+case 323:
+#line 668 "ansel2uni.ll"
+case 324:
+YY_RULE_SETUP
+#line 668 "ansel2uni.ll"
+utf3byte('\x1e','\x09') ; /* U+1E09 */
+ YY_BREAK
+case 325:
+YY_RULE_SETUP
+#line 670 "ansel2uni.ll"
+utf3byte('\x1e','\x0a') ; /* U+1E0A */
+ YY_BREAK
+case 326:
+YY_RULE_SETUP
+#line 671 "ansel2uni.ll"
+utf3byte('\x1e','\x0b') ; /* U+1E0B */
+ YY_BREAK
+case 327:
+YY_RULE_SETUP
+#line 672 "ansel2uni.ll"
+utf3byte('\x1e','\x0c') ; /* U+1E0C */
+ YY_BREAK
+case 328:
+YY_RULE_SETUP
+#line 673 "ansel2uni.ll"
+utf3byte('\x1e','\x0d') ; /* U+1E0D */
+ YY_BREAK
+case 329:
+YY_RULE_SETUP
+#line 674 "ansel2uni.ll"
+utf3byte('\x1e','\x0e') ; /* U+1E0E */
+ YY_BREAK
+case 330:
+YY_RULE_SETUP
+#line 675 "ansel2uni.ll"
+utf3byte('\x1e','\x0f') ; /* U+1E0F */
+ YY_BREAK
+case 331:
+#line 677 "ansel2uni.ll"
+case 332:
+YY_RULE_SETUP
+#line 677 "ansel2uni.ll"
+utf3byte('\x1e','\x10') ; /* U+1E10 */
+ YY_BREAK
+case 333:
+#line 679 "ansel2uni.ll"
+case 334:
+YY_RULE_SETUP
+#line 679 "ansel2uni.ll"
+utf3byte('\x1e','\x11') ; /* U+1E11 */
+ YY_BREAK
+case 335:
+#line 682 "ansel2uni.ll"
+case 336:
+YY_RULE_SETUP
+#line 682 "ansel2uni.ll"
+utf3byte('\x1e','\x14') ; /* U+1E14 */
+ YY_BREAK
+case 337:
+#line 685 "ansel2uni.ll"
+case 338:
+YY_RULE_SETUP
+#line 685 "ansel2uni.ll"
+utf3byte('\x1e','\x15') ; /* U+1E15 */
+ YY_BREAK
+case 339:
+#line 688 "ansel2uni.ll"
+case 340:
+YY_RULE_SETUP
+#line 688 "ansel2uni.ll"
+utf3byte('\x1e','\x16') ; /* U+1E16 */
+ YY_BREAK
+case 341:
+#line 691 "ansel2uni.ll"
+case 342:
+YY_RULE_SETUP
+#line 691 "ansel2uni.ll"
+utf3byte('\x1e','\x17') ; /* U+1E17 */
+ YY_BREAK
+case 343:
+#line 694 "ansel2uni.ll"
+case 344:
+YY_RULE_SETUP
+#line 694 "ansel2uni.ll"
+utf3byte('\x1e','\x1c') ; /* U+1E1C */
+ YY_BREAK
+case 345:
+#line 697 "ansel2uni.ll"
+case 346:
+YY_RULE_SETUP
+#line 697 "ansel2uni.ll"
+utf3byte('\x1e','\x1d') ; /* U+1E1D */
+ YY_BREAK
+case 347:
+YY_RULE_SETUP
+#line 699 "ansel2uni.ll"
+utf3byte('\x1e','\x1e') ; /* U+1E1E */
+ YY_BREAK
+case 348:
+YY_RULE_SETUP
+#line 700 "ansel2uni.ll"
+utf3byte('\x1e','\x1f') ; /* U+1E1F */
+ YY_BREAK
+case 349:
+YY_RULE_SETUP
+#line 701 "ansel2uni.ll"
+utf3byte('\x1e','\x20') ; /* U+1E20 */
+ YY_BREAK
+case 350:
+YY_RULE_SETUP
+#line 702 "ansel2uni.ll"
+utf3byte('\x1e','\x21') ; /* U+1E21 */
+ YY_BREAK
+case 351:
+YY_RULE_SETUP
+#line 703 "ansel2uni.ll"
+utf3byte('\x1e','\x22') ; /* U+1E22 */
+ YY_BREAK
+case 352:
+YY_RULE_SETUP
+#line 704 "ansel2uni.ll"
+utf3byte('\x1e','\x23') ; /* U+1E23 */
+ YY_BREAK
+case 353:
+YY_RULE_SETUP
+#line 705 "ansel2uni.ll"
+utf3byte('\x1e','\x24') ; /* U+1E24 */
+ YY_BREAK
+case 354:
+YY_RULE_SETUP
+#line 706 "ansel2uni.ll"
+utf3byte('\x1e','\x25') ; /* U+1E25 */
+ YY_BREAK
+case 355:
+YY_RULE_SETUP
+#line 707 "ansel2uni.ll"
+utf3byte('\x1e','\x26') ; /* U+1E26 */
+ YY_BREAK
+case 356:
+YY_RULE_SETUP
+#line 708 "ansel2uni.ll"
+utf3byte('\x1e','\x27') ; /* U+1E27 */
+ YY_BREAK
+case 357:
+#line 710 "ansel2uni.ll"
+case 358:
+YY_RULE_SETUP
+#line 710 "ansel2uni.ll"
+utf3byte('\x1e','\x28') ; /* U+1E28 */
+ YY_BREAK
+case 359:
+#line 712 "ansel2uni.ll"
+case 360:
+YY_RULE_SETUP
+#line 712 "ansel2uni.ll"
+utf3byte('\x1e','\x29') ; /* U+1E29 */
+ YY_BREAK
+case 361:
+#line 715 "ansel2uni.ll"
+case 362:
+YY_RULE_SETUP
+#line 715 "ansel2uni.ll"
+utf3byte('\x1e','\x2e') ; /* U+1E2E */
+ YY_BREAK
+case 363:
+#line 718 "ansel2uni.ll"
+case 364:
+YY_RULE_SETUP
+#line 718 "ansel2uni.ll"
+utf3byte('\x1e','\x2f') ; /* U+1E2F */
+ YY_BREAK
+case 365:
+YY_RULE_SETUP
+#line 720 "ansel2uni.ll"
+utf3byte('\x1e','\x30') ; /* U+1E30 */
+ YY_BREAK
+case 366:
+YY_RULE_SETUP
+#line 721 "ansel2uni.ll"
+utf3byte('\x1e','\x31') ; /* U+1E31 */
+ YY_BREAK
+case 367:
+YY_RULE_SETUP
+#line 722 "ansel2uni.ll"
+utf3byte('\x1e','\x32') ; /* U+1E32 */
+ YY_BREAK
+case 368:
+YY_RULE_SETUP
+#line 723 "ansel2uni.ll"
+utf3byte('\x1e','\x33') ; /* U+1E33 */
+ YY_BREAK
+case 369:
+YY_RULE_SETUP
+#line 724 "ansel2uni.ll"
+utf3byte('\x1e','\x34') ; /* U+1E34 */
+ YY_BREAK
+case 370:
+YY_RULE_SETUP
+#line 725 "ansel2uni.ll"
+utf3byte('\x1e','\x35') ; /* U+1E35 */
+ YY_BREAK
+case 371:
+YY_RULE_SETUP
+#line 726 "ansel2uni.ll"
+utf3byte('\x1e','\x36') ; /* U+1E36 */
+ YY_BREAK
+case 372:
+YY_RULE_SETUP
+#line 727 "ansel2uni.ll"
+utf3byte('\x1e','\x37') ; /* U+1E37 */
+ YY_BREAK
+case 373:
+#line 730 "ansel2uni.ll"
+case 374:
+YY_RULE_SETUP
+#line 730 "ansel2uni.ll"
+utf3byte('\x1e','\x38') ; /* U+1E38 */
+ YY_BREAK
+case 375:
+#line 733 "ansel2uni.ll"
+case 376:
+YY_RULE_SETUP
+#line 733 "ansel2uni.ll"
+utf3byte('\x1e','\x39') ; /* U+1E39 */
+ YY_BREAK
+case 377:
+YY_RULE_SETUP
+#line 735 "ansel2uni.ll"
+utf3byte('\x1e','\x3a') ; /* U+1E3A */
+ YY_BREAK
+case 378:
+YY_RULE_SETUP
+#line 736 "ansel2uni.ll"
+utf3byte('\x1e','\x3b') ; /* U+1E3B */
+ YY_BREAK
+case 379:
+YY_RULE_SETUP
+#line 737 "ansel2uni.ll"
+utf3byte('\x1e','\x3e') ; /* U+1E3E */
+ YY_BREAK
+case 380:
+YY_RULE_SETUP
+#line 738 "ansel2uni.ll"
+utf3byte('\x1e','\x3f') ; /* U+1E3F */
+ YY_BREAK
+case 381:
+YY_RULE_SETUP
+#line 739 "ansel2uni.ll"
+utf3byte('\x1e','\x40') ; /* U+1E40 */
+ YY_BREAK
+case 382:
+YY_RULE_SETUP
+#line 740 "ansel2uni.ll"
+utf3byte('\x1e','\x41') ; /* U+1E41 */
+ YY_BREAK
+case 383:
+YY_RULE_SETUP
+#line 741 "ansel2uni.ll"
+utf3byte('\x1e','\x42') ; /* U+1E42 */
+ YY_BREAK
+case 384:
+YY_RULE_SETUP
+#line 742 "ansel2uni.ll"
+utf3byte('\x1e','\x43') ; /* U+1E43 */
+ YY_BREAK
+case 385:
+YY_RULE_SETUP
+#line 743 "ansel2uni.ll"
+utf3byte('\x1e','\x44') ; /* U+1E44 */
+ YY_BREAK
+case 386:
+YY_RULE_SETUP
+#line 744 "ansel2uni.ll"
+utf3byte('\x1e','\x45') ; /* U+1E45 */
+ YY_BREAK
+case 387:
+YY_RULE_SETUP
+#line 745 "ansel2uni.ll"
+utf3byte('\x1e','\x46') ; /* U+1E46 */
+ YY_BREAK
+case 388:
+YY_RULE_SETUP
+#line 746 "ansel2uni.ll"
+utf3byte('\x1e','\x47') ; /* U+1E47 */
+ YY_BREAK
+case 389:
+#line 749 "ansel2uni.ll"
+case 390:
+YY_RULE_SETUP
+#line 749 "ansel2uni.ll"
+utf3byte('\x1e','\x4c') ; /* U+1E4C */
+ YY_BREAK
+case 391:
+#line 752 "ansel2uni.ll"
+case 392:
+YY_RULE_SETUP
+#line 752 "ansel2uni.ll"
+utf3byte('\x1e','\x4d') ; /* U+1E4D */
+ YY_BREAK
+case 393:
+#line 755 "ansel2uni.ll"
+case 394:
+YY_RULE_SETUP
+#line 755 "ansel2uni.ll"
+utf3byte('\x1e','\x4e') ; /* U+1E4E */
+ YY_BREAK
+case 395:
+#line 758 "ansel2uni.ll"
+case 396:
+YY_RULE_SETUP
+#line 758 "ansel2uni.ll"
+utf3byte('\x1e','\x4f') ; /* U+1E4F */
+ YY_BREAK
+case 397:
+#line 761 "ansel2uni.ll"
+case 398:
+YY_RULE_SETUP
+#line 761 "ansel2uni.ll"
+utf3byte('\x1e','\x50') ; /* U+1E50 */
+ YY_BREAK
+case 399:
+#line 764 "ansel2uni.ll"
+case 400:
+YY_RULE_SETUP
+#line 764 "ansel2uni.ll"
+utf3byte('\x1e','\x51') ; /* U+1E51 */
+ YY_BREAK
+case 401:
+#line 767 "ansel2uni.ll"
+case 402:
+YY_RULE_SETUP
+#line 767 "ansel2uni.ll"
+utf3byte('\x1e','\x52') ; /* U+1E52 */
+ YY_BREAK
+case 403:
+#line 770 "ansel2uni.ll"
+case 404:
+YY_RULE_SETUP
+#line 770 "ansel2uni.ll"
+utf3byte('\x1e','\x53') ; /* U+1E53 */
+ YY_BREAK
+case 405:
+YY_RULE_SETUP
+#line 772 "ansel2uni.ll"
+utf3byte('\x1e','\x54') ; /* U+1E54 */
+ YY_BREAK
+case 406:
+YY_RULE_SETUP
+#line 773 "ansel2uni.ll"
+utf3byte('\x1e','\x55') ; /* U+1E55 */
+ YY_BREAK
+case 407:
+YY_RULE_SETUP
+#line 774 "ansel2uni.ll"
+utf3byte('\x1e','\x56') ; /* U+1E56 */
+ YY_BREAK
+case 408:
+YY_RULE_SETUP
+#line 775 "ansel2uni.ll"
+utf3byte('\x1e','\x57') ; /* U+1E57 */
+ YY_BREAK
+case 409:
+YY_RULE_SETUP
+#line 776 "ansel2uni.ll"
+utf3byte('\x1e','\x58') ; /* U+1E58 */
+ YY_BREAK
+case 410:
+YY_RULE_SETUP
+#line 777 "ansel2uni.ll"
+utf3byte('\x1e','\x59') ; /* U+1E59 */
+ YY_BREAK
+case 411:
+YY_RULE_SETUP
+#line 778 "ansel2uni.ll"
+utf3byte('\x1e','\x5a') ; /* U+1E5A */
+ YY_BREAK
+case 412:
+YY_RULE_SETUP
+#line 779 "ansel2uni.ll"
+utf3byte('\x1e','\x5b') ; /* U+1E5B */
+ YY_BREAK
+case 413:
+#line 782 "ansel2uni.ll"
+case 414:
+YY_RULE_SETUP
+#line 782 "ansel2uni.ll"
+utf3byte('\x1e','\x5c') ; /* U+1E5c */
+ YY_BREAK
+case 415:
+#line 785 "ansel2uni.ll"
+case 416:
+YY_RULE_SETUP
+#line 785 "ansel2uni.ll"
+utf3byte('\x1e','\x5d') ; /* U+1E5D */
+ YY_BREAK
+case 417:
+YY_RULE_SETUP
+#line 787 "ansel2uni.ll"
+utf3byte('\x1e','\x5e') ; /* U+1E5E */
+ YY_BREAK
+case 418:
+YY_RULE_SETUP
+#line 788 "ansel2uni.ll"
+utf3byte('\x1e','\x5f') ; /* U+1E5F */
+ YY_BREAK
+case 419:
+YY_RULE_SETUP
+#line 789 "ansel2uni.ll"
+utf3byte('\x1e','\x60') ; /* U+1E60 */
+ YY_BREAK
+case 420:
+YY_RULE_SETUP
+#line 790 "ansel2uni.ll"
+utf3byte('\x1e','\x61') ; /* U+1E61 */
+ YY_BREAK
+case 421:
+YY_RULE_SETUP
+#line 791 "ansel2uni.ll"
+utf3byte('\x1e','\x62') ; /* U+1E62 */
+ YY_BREAK
+case 422:
+YY_RULE_SETUP
+#line 792 "ansel2uni.ll"
+utf3byte('\x1e','\x63') ; /* U+1E63 */
+ YY_BREAK
+case 423:
+#line 795 "ansel2uni.ll"
+case 424:
+YY_RULE_SETUP
+#line 795 "ansel2uni.ll"
+utf3byte('\x1e','\x64') ; /* U+1E64 */
+ YY_BREAK
+case 425:
+#line 798 "ansel2uni.ll"
+case 426:
+YY_RULE_SETUP
+#line 798 "ansel2uni.ll"
+utf3byte('\x1e','\x65') ; /* U+1E65 */
+ YY_BREAK
+case 427:
+#line 801 "ansel2uni.ll"
+case 428:
+YY_RULE_SETUP
+#line 801 "ansel2uni.ll"
+utf3byte('\x1e','\x66') ; /* U+1E66 */
+ YY_BREAK
+case 429:
+#line 804 "ansel2uni.ll"
+case 430:
+YY_RULE_SETUP
+#line 804 "ansel2uni.ll"
+utf3byte('\x1e','\x67') ; /* U+1E67 */
+ YY_BREAK
+case 431:
+#line 807 "ansel2uni.ll"
+case 432:
+YY_RULE_SETUP
+#line 807 "ansel2uni.ll"
+utf3byte('\x1e','\x68') ; /* U+1E68 */
+ YY_BREAK
+case 433:
+#line 810 "ansel2uni.ll"
+case 434:
+YY_RULE_SETUP
+#line 810 "ansel2uni.ll"
+utf3byte('\x1e','\x69') ; /* U+1E69 */
+ YY_BREAK
+case 435:
+YY_RULE_SETUP
+#line 812 "ansel2uni.ll"
+utf3byte('\x1e','\x6a') ; /* U+1E6A */
+ YY_BREAK
+case 436:
+YY_RULE_SETUP
+#line 813 "ansel2uni.ll"
+utf3byte('\x1e','\x6b') ; /* U+1E6B */
+ YY_BREAK
+case 437:
+YY_RULE_SETUP
+#line 814 "ansel2uni.ll"
+utf3byte('\x1e','\x6c') ; /* U+1E6C */
+ YY_BREAK
+case 438:
+YY_RULE_SETUP
+#line 815 "ansel2uni.ll"
+utf3byte('\x1e','\x6d') ; /* U+1E6d */
+ YY_BREAK
+case 439:
+YY_RULE_SETUP
+#line 816 "ansel2uni.ll"
+utf3byte('\x1e','\x6e') ; /* U+1E6d */
+ YY_BREAK
+case 440:
+YY_RULE_SETUP
+#line 817 "ansel2uni.ll"
+utf3byte('\x1e','\x6f') ; /* U+1E6F */
+ YY_BREAK
+case 441:
+YY_RULE_SETUP
+#line 818 "ansel2uni.ll"
+utf3byte('\x1e','\x72') ; /* U+1E72 */
+ YY_BREAK
+case 442:
+YY_RULE_SETUP
+#line 819 "ansel2uni.ll"
+utf3byte('\x1e','\x73') ; /* U+1E73 */
+ YY_BREAK
+case 443:
+#line 822 "ansel2uni.ll"
+case 444:
+YY_RULE_SETUP
+#line 822 "ansel2uni.ll"
+utf3byte('\x1e','\x78') ; /* U+1E78 */
+ YY_BREAK
+case 445:
+#line 825 "ansel2uni.ll"
+case 446:
+YY_RULE_SETUP
+#line 825 "ansel2uni.ll"
+utf3byte('\x1e','\x79') ; /* U+1E79 */
+ YY_BREAK
+/* see U+01D5 for the opposite order */
+case 447:
+YY_RULE_SETUP
+#line 828 "ansel2uni.ll"
+utf3byte('\x1e','\x7a') ; /* U+1E7A */
+ YY_BREAK
+case 448:
+YY_RULE_SETUP
+#line 829 "ansel2uni.ll"
+utf3byte('\x1e','\x7b') ; /* U+1E7B */
+ YY_BREAK
+case 449:
+YY_RULE_SETUP
+#line 831 "ansel2uni.ll"
+utf3byte('\x1e','\x7c') ; /* U+1E7C */
+ YY_BREAK
+case 450:
+YY_RULE_SETUP
+#line 832 "ansel2uni.ll"
+utf3byte('\x1e','\x7d') ; /* U+1E7D */
+ YY_BREAK
+case 451:
+YY_RULE_SETUP
+#line 833 "ansel2uni.ll"
+utf3byte('\x1e','\x7e') ; /* U+1E7E */
+ YY_BREAK
+case 452:
+YY_RULE_SETUP
+#line 834 "ansel2uni.ll"
+utf3byte('\x1e','\x7f') ; /* U+1E7F */
+ YY_BREAK
+case 453:
+YY_RULE_SETUP
+#line 835 "ansel2uni.ll"
+utf3byte('\x1e','\x80') ; /* U+1E80 */
+ YY_BREAK
+case 454:
+YY_RULE_SETUP
+#line 836 "ansel2uni.ll"
+utf3byte('\x1e','\x81') ; /* U+1E81 */
+ YY_BREAK
+case 455:
+YY_RULE_SETUP
+#line 837 "ansel2uni.ll"
+utf3byte('\x1e','\x82') ; /* U+1E82 */
+ YY_BREAK
+case 456:
+YY_RULE_SETUP
+#line 838 "ansel2uni.ll"
+utf3byte('\x1e','\x83') ; /* U+1E83 */
+ YY_BREAK
+case 457:
+YY_RULE_SETUP
+#line 839 "ansel2uni.ll"
+utf3byte('\x1e','\x84') ; /* U+1E84 */
+ YY_BREAK
+case 458:
+YY_RULE_SETUP
+#line 840 "ansel2uni.ll"
+utf3byte('\x1e','\x85') ; /* U+1E85 */
+ YY_BREAK
+case 459:
+YY_RULE_SETUP
+#line 841 "ansel2uni.ll"
+utf3byte('\x1e','\x86') ; /* U+1E86 */
+ YY_BREAK
+case 460:
+YY_RULE_SETUP
+#line 842 "ansel2uni.ll"
+utf3byte('\x1e','\x87') ; /* U+1E87 */
+ YY_BREAK
+case 461:
+YY_RULE_SETUP
+#line 843 "ansel2uni.ll"
+utf3byte('\x1e','\x88') ; /* U+1E88 */
+ YY_BREAK
+case 462:
+YY_RULE_SETUP
+#line 844 "ansel2uni.ll"
+utf3byte('\x1e','\x89') ; /* U+1E89 */
+ YY_BREAK
+case 463:
+YY_RULE_SETUP
+#line 845 "ansel2uni.ll"
+utf3byte('\x1e','\x8a') ; /* U+1E8A */
+ YY_BREAK
+case 464:
+YY_RULE_SETUP
+#line 846 "ansel2uni.ll"
+utf3byte('\x1e','\x8b') ; /* U+1E8B */
+ YY_BREAK
+case 465:
+YY_RULE_SETUP
+#line 847 "ansel2uni.ll"
+utf3byte('\x1e','\x8c') ; /* U+1E8C */
+ YY_BREAK
+case 466:
+YY_RULE_SETUP
+#line 848 "ansel2uni.ll"
+utf3byte('\x1e','\x8d') ; /* U+1E8D */
+ YY_BREAK
+case 467:
+YY_RULE_SETUP
+#line 849 "ansel2uni.ll"
+utf3byte('\x1e','\x8e') ; /* U+1E8E */
+ YY_BREAK
+case 468:
+YY_RULE_SETUP
+#line 850 "ansel2uni.ll"
+utf3byte('\x1e','\x8f') ; /* U+1E8F */
+ YY_BREAK
+case 469:
+YY_RULE_SETUP
+#line 851 "ansel2uni.ll"
+utf3byte('\x1e','\x90') ; /* U+1E90 */
+ YY_BREAK
+case 470:
+YY_RULE_SETUP
+#line 852 "ansel2uni.ll"
+utf3byte('\x1e','\x91') ; /* U+1E91 */
+ YY_BREAK
+case 471:
+YY_RULE_SETUP
+#line 853 "ansel2uni.ll"
+utf3byte('\x1e','\x92') ; /* U+1E92 */
+ YY_BREAK
+case 472:
+YY_RULE_SETUP
+#line 854 "ansel2uni.ll"
+utf3byte('\x1e','\x93') ; /* U+1E93 */
+ YY_BREAK
+case 473:
+YY_RULE_SETUP
+#line 855 "ansel2uni.ll"
+utf3byte('\x1e','\x94') ; /* U+1E94 */
+ YY_BREAK
+case 474:
+YY_RULE_SETUP
+#line 856 "ansel2uni.ll"
+utf3byte('\x1e','\x95') ; /* U+1E95 */
+ YY_BREAK
+case 475:
+YY_RULE_SETUP
+#line 857 "ansel2uni.ll"
+utf3byte('\x1e','\x96') ; /* U+1E96 */
+ YY_BREAK
+case 476:
+YY_RULE_SETUP
+#line 858 "ansel2uni.ll"
+utf3byte('\x1e','\x97') ; /* U+1E97 */
+ YY_BREAK
+case 477:
+YY_RULE_SETUP
+#line 859 "ansel2uni.ll"
+utf3byte('\x1e','\x98') ; /* U+1E98 */
+ YY_BREAK
+case 478:
+YY_RULE_SETUP
+#line 860 "ansel2uni.ll"
+utf3byte('\x1e','\x99') ; /* U+1E99 */
+ YY_BREAK
+case 479:
+YY_RULE_SETUP
+#line 861 "ansel2uni.ll"
+utf3byte('\x1e','\xa0') ; /* U+1EA0 */
+ YY_BREAK
+case 480:
+YY_RULE_SETUP
+#line 862 "ansel2uni.ll"
+utf3byte('\x1e','\xa1') ; /* U+1EA1 */
+ YY_BREAK
+case 481:
+YY_RULE_SETUP
+#line 863 "ansel2uni.ll"
+utf3byte('\x1e','\xa2') ; /* U+1EA2 */
+ YY_BREAK
+case 482:
+YY_RULE_SETUP
+#line 864 "ansel2uni.ll"
+utf3byte('\x1e','\xa3') ; /* U+1EA3 */
+ YY_BREAK
+case 483:
+#line 867 "ansel2uni.ll"
+case 484:
+YY_RULE_SETUP
+#line 867 "ansel2uni.ll"
+utf3byte('\x1e','\xa4') ; /* U+1EA4 */
+ YY_BREAK
+case 485:
+#line 870 "ansel2uni.ll"
+case 486:
+YY_RULE_SETUP
+#line 870 "ansel2uni.ll"
+utf3byte('\x1e','\xa5') ; /* U+1EA5 */
+ YY_BREAK
+case 487:
+#line 873 "ansel2uni.ll"
+case 488:
+YY_RULE_SETUP
+#line 873 "ansel2uni.ll"
+utf3byte('\x1e','\xa6') ; /* U+1EA6 */
+ YY_BREAK
+case 489:
+#line 876 "ansel2uni.ll"
+case 490:
+YY_RULE_SETUP
+#line 876 "ansel2uni.ll"
+utf3byte('\x1e','\xa7') ; /* U+1EA7 */
+ YY_BREAK
+case 491:
+#line 879 "ansel2uni.ll"
+case 492:
+YY_RULE_SETUP
+#line 879 "ansel2uni.ll"
+utf3byte('\x1e','\xa8') ; /* U+1EA8 */
+ YY_BREAK
+case 493:
+#line 882 "ansel2uni.ll"
+case 494:
+YY_RULE_SETUP
+#line 882 "ansel2uni.ll"
+utf3byte('\x1e','\xa9') ; /* U+1EA9 */
+ YY_BREAK
+case 495:
+#line 885 "ansel2uni.ll"
+case 496:
+YY_RULE_SETUP
+#line 885 "ansel2uni.ll"
+utf3byte('\x1e','\xaa') ; /* U+1EAA */
+ YY_BREAK
+case 497:
+#line 888 "ansel2uni.ll"
+case 498:
+YY_RULE_SETUP
+#line 888 "ansel2uni.ll"
+utf3byte('\x1e','\xab') ; /* U+1EAB */
+ YY_BREAK
+case 499:
+#line 891 "ansel2uni.ll"
+case 500:
+YY_RULE_SETUP
+#line 891 "ansel2uni.ll"
+utf3byte('\x1e','\xac') ; /* U+1EAC */
+ YY_BREAK
+case 501:
+#line 894 "ansel2uni.ll"
+case 502:
+YY_RULE_SETUP
+#line 894 "ansel2uni.ll"
+utf3byte('\x1e','\xad') ; /* U+1EAD */
+ YY_BREAK
+case 503:
+#line 897 "ansel2uni.ll"
+case 504:
+YY_RULE_SETUP
+#line 897 "ansel2uni.ll"
+utf3byte('\x1e','\xae') ; /* U+1EAE */
+ YY_BREAK
+case 505:
+#line 900 "ansel2uni.ll"
+case 506:
+YY_RULE_SETUP
+#line 900 "ansel2uni.ll"
+utf3byte('\x1e','\xaf') ; /* U+1EAF */
+ YY_BREAK
+case 507:
+#line 903 "ansel2uni.ll"
+case 508:
+YY_RULE_SETUP
+#line 903 "ansel2uni.ll"
+utf3byte('\x1e','\xb0') ; /* U+1EB0 */
+ YY_BREAK
+case 509:
+#line 906 "ansel2uni.ll"
+case 510:
+YY_RULE_SETUP
+#line 906 "ansel2uni.ll"
+utf3byte('\x1e','\xb1') ; /* U+1EB1 */
+ YY_BREAK
+case 511:
+#line 909 "ansel2uni.ll"
+case 512:
+YY_RULE_SETUP
+#line 909 "ansel2uni.ll"
+utf3byte('\x1e','\xb2') ; /* U+1EB2 */
+ YY_BREAK
+case 513:
+#line 912 "ansel2uni.ll"
+case 514:
+YY_RULE_SETUP
+#line 912 "ansel2uni.ll"
+utf3byte('\x1e','\xb3') ; /* U+1EB3 */
+ YY_BREAK
+case 515:
+#line 915 "ansel2uni.ll"
+case 516:
+YY_RULE_SETUP
+#line 915 "ansel2uni.ll"
+utf3byte('\x1e','\xb4') ; /* U+1EB4 */
+ YY_BREAK
+case 517:
+#line 918 "ansel2uni.ll"
+case 518:
+YY_RULE_SETUP
+#line 918 "ansel2uni.ll"
+utf3byte('\x1e','\xb5') ; /* U+1EB5 */
+ YY_BREAK
+case 519:
+#line 921 "ansel2uni.ll"
+case 520:
+YY_RULE_SETUP
+#line 921 "ansel2uni.ll"
+utf3byte('\x1e','\xb6') ; /* U+1EB6 */
+ YY_BREAK
+case 521:
+#line 924 "ansel2uni.ll"
+case 522:
+YY_RULE_SETUP
+#line 924 "ansel2uni.ll"
+utf3byte('\x1e','\xb7') ; /* U+1EB7 */
+ YY_BREAK
+case 523:
+YY_RULE_SETUP
+#line 926 "ansel2uni.ll"
+utf3byte('\x1e','\xb8') ; /* U+1EB8 */
+ YY_BREAK
+case 524:
+YY_RULE_SETUP
+#line 927 "ansel2uni.ll"
+utf3byte('\x1e','\xb9') ; /* U+1EB9 */
+ YY_BREAK
+case 525:
+YY_RULE_SETUP
+#line 929 "ansel2uni.ll"
+utf3byte('\x1e','\xba') ; /* U+1EBA */
+ YY_BREAK
+case 526:
+YY_RULE_SETUP
+#line 930 "ansel2uni.ll"
+utf3byte('\x1e','\xbb') ; /* U+1EBB */
+ YY_BREAK
+case 527:
+YY_RULE_SETUP
+#line 931 "ansel2uni.ll"
+utf3byte('\x1e','\xbc') ; /* U+1EBC */
+ YY_BREAK
+case 528:
+YY_RULE_SETUP
+#line 932 "ansel2uni.ll"
+utf3byte('\x1e','\xbd') ; /* U+1EBD */
+ YY_BREAK
+case 529:
+#line 935 "ansel2uni.ll"
+case 530:
+YY_RULE_SETUP
+#line 935 "ansel2uni.ll"
+utf3byte('\x1e','\xbe') ; /* U+1EBE */
+ YY_BREAK
+case 531:
+#line 938 "ansel2uni.ll"
+case 532:
+YY_RULE_SETUP
+#line 938 "ansel2uni.ll"
+utf3byte('\x1e','\xbf') ; /* U+1EBF */
+ YY_BREAK
+case 533:
+#line 941 "ansel2uni.ll"
+case 534:
+YY_RULE_SETUP
+#line 941 "ansel2uni.ll"
+utf3byte('\x1e','\xc0') ; /* U+1EC0*/
+ YY_BREAK
+case 535:
+#line 944 "ansel2uni.ll"
+case 536:
+YY_RULE_SETUP
+#line 944 "ansel2uni.ll"
+utf3byte('\x1e','\xc1') ; /* U+1EC1 */
+ YY_BREAK
+case 537:
+#line 947 "ansel2uni.ll"
+case 538:
+YY_RULE_SETUP
+#line 947 "ansel2uni.ll"
+utf3byte('\x1e','\xc2') ; /* U+1EC2 */
+ YY_BREAK
+case 539:
+#line 950 "ansel2uni.ll"
+case 540:
+YY_RULE_SETUP
+#line 950 "ansel2uni.ll"
+utf3byte('\x1e','\xc3') ; /* U+1EC3 */
+ YY_BREAK
+case 541:
+#line 953 "ansel2uni.ll"
+case 542:
+YY_RULE_SETUP
+#line 953 "ansel2uni.ll"
+utf3byte('\x1e','\xc4') ; /* U+1EC4 */
+ YY_BREAK
+case 543:
+#line 956 "ansel2uni.ll"
+case 544:
+YY_RULE_SETUP
+#line 956 "ansel2uni.ll"
+utf3byte('\x1e','\xc5') ; /* U+1EC5 */
+ YY_BREAK
+case 545:
+#line 959 "ansel2uni.ll"
+case 546:
+YY_RULE_SETUP
+#line 959 "ansel2uni.ll"
+utf3byte('\x1e','\xc6') ; /* U+1EC6 */
+ YY_BREAK
+case 547:
+#line 962 "ansel2uni.ll"
+case 548:
+YY_RULE_SETUP
+#line 962 "ansel2uni.ll"
+utf3byte('\x1e','\xc7') ; /* U+1EC7 */
+ YY_BREAK
+case 549:
+YY_RULE_SETUP
+#line 964 "ansel2uni.ll"
+utf3byte('\x1e','\xc8') ; /* U+1EC8 */
+ YY_BREAK
+case 550:
+YY_RULE_SETUP
+#line 965 "ansel2uni.ll"
+utf3byte('\x1e','\xc9') ; /* U+1EC9 */
+ YY_BREAK
+case 551:
+YY_RULE_SETUP
+#line 966 "ansel2uni.ll"
+utf3byte('\x1e','\xca') ; /* U+1ECA */
+ YY_BREAK
+case 552:
+YY_RULE_SETUP
+#line 967 "ansel2uni.ll"
+utf3byte('\x1e','\xcb') ; /* U+1ECB */
+ YY_BREAK
+case 553:
+YY_RULE_SETUP
+#line 968 "ansel2uni.ll"
+utf3byte('\x1e','\xcc') ; /* U+1ECC */
+ YY_BREAK
+case 554:
+YY_RULE_SETUP
+#line 969 "ansel2uni.ll"
+utf3byte('\x1e','\xcd') ; /* U+1ECD */
+ YY_BREAK
+case 555:
+YY_RULE_SETUP
+#line 970 "ansel2uni.ll"
+utf3byte('\x1e','\xce') ; /* U+1ECE */
+ YY_BREAK
+case 556:
+YY_RULE_SETUP
+#line 971 "ansel2uni.ll"
+utf3byte('\x1e','\xcf') ; /* U+1ECF */
+ YY_BREAK
+case 557:
+#line 974 "ansel2uni.ll"
+case 558:
+YY_RULE_SETUP
+#line 974 "ansel2uni.ll"
+utf3byte('\x1e','\xd0') ; /* U+1ED0 */
+ YY_BREAK
+case 559:
+#line 977 "ansel2uni.ll"
+case 560:
+YY_RULE_SETUP
+#line 977 "ansel2uni.ll"
+utf3byte('\x1e','\xd1') ; /* U+1Ed1 */
+ YY_BREAK
+case 561:
+#line 980 "ansel2uni.ll"
+case 562:
+YY_RULE_SETUP
+#line 980 "ansel2uni.ll"
+utf3byte('\x1e','\xd2') ; /* U+1ED2 */
+ YY_BREAK
+case 563:
+#line 983 "ansel2uni.ll"
+case 564:
+YY_RULE_SETUP
+#line 983 "ansel2uni.ll"
+utf3byte('\x1e','\xd3') ; /* U+1ED3 */
+ YY_BREAK
+case 565:
+#line 986 "ansel2uni.ll"
+case 566:
+YY_RULE_SETUP
+#line 986 "ansel2uni.ll"
+utf3byte('\x1e','\xd4') ; /* U+1ED4 */
+ YY_BREAK
+case 567:
+#line 989 "ansel2uni.ll"
+case 568:
+YY_RULE_SETUP
+#line 989 "ansel2uni.ll"
+utf3byte('\x1e','\xd5') ; /* U+1Ed5 */
+ YY_BREAK
+case 569:
+#line 992 "ansel2uni.ll"
+case 570:
+YY_RULE_SETUP
+#line 992 "ansel2uni.ll"
+utf3byte('\x1e','\xd6') ; /* U+1ED6 */
+ YY_BREAK
+case 571:
+#line 995 "ansel2uni.ll"
+case 572:
+YY_RULE_SETUP
+#line 995 "ansel2uni.ll"
+utf3byte('\x1e','\xd7') ; /* U+1ED7 */
+ YY_BREAK
+case 573:
+#line 998 "ansel2uni.ll"
+case 574:
+YY_RULE_SETUP
+#line 998 "ansel2uni.ll"
+utf3byte('\x1e','\xd8') ; /* U+1ED8 */
+ YY_BREAK
+case 575:
+#line 1001 "ansel2uni.ll"
+case 576:
+YY_RULE_SETUP
+#line 1001 "ansel2uni.ll"
+utf3byte('\x1e','\xd9') ; /* U+1ED9 */
+ YY_BREAK
+case 577:
+YY_RULE_SETUP
+#line 1003 "ansel2uni.ll"
+utf3byte('\x1e','\xda') ; /* U+1EDA */
+ YY_BREAK
+case 578:
+YY_RULE_SETUP
+#line 1004 "ansel2uni.ll"
+utf3byte('\x1e','\xdb') ; /* U+1EDB */
+ YY_BREAK
+case 579:
+YY_RULE_SETUP
+#line 1005 "ansel2uni.ll"
+utf3byte('\x1e','\xdc') ; /* U+1EDC */
+ YY_BREAK
+case 580:
+YY_RULE_SETUP
+#line 1006 "ansel2uni.ll"
+utf3byte('\x1e','\xdd') ; /* U+1EDD */
+ YY_BREAK
+case 581:
+YY_RULE_SETUP
+#line 1007 "ansel2uni.ll"
+utf3byte('\x1e','\xde') ; /* U+1EDE */
+ YY_BREAK
+case 582:
+YY_RULE_SETUP
+#line 1008 "ansel2uni.ll"
+utf3byte('\x1e','\xdf') ; /* U+1EDF */
+ YY_BREAK
+case 583:
+YY_RULE_SETUP
+#line 1009 "ansel2uni.ll"
+utf3byte('\x1e','\xe0') ; /* U+1EE0 */
+ YY_BREAK
+case 584:
+YY_RULE_SETUP
+#line 1010 "ansel2uni.ll"
+utf3byte('\x1e','\xe1') ; /* U+1EE1 */
+ YY_BREAK
+case 585:
+YY_RULE_SETUP
+#line 1011 "ansel2uni.ll"
+utf3byte('\x1e','\xe2') ; /* U+1EE2 */
+ YY_BREAK
+case 586:
+YY_RULE_SETUP
+#line 1012 "ansel2uni.ll"
+utf3byte('\x1e','\xe3') ; /* U+1EE3 */
+ YY_BREAK
+case 587:
+YY_RULE_SETUP
+#line 1013 "ansel2uni.ll"
+utf3byte('\x1e','\xe4') ; /* U+1EE4 */
+ YY_BREAK
+case 588:
+YY_RULE_SETUP
+#line 1014 "ansel2uni.ll"
+utf3byte('\x1e','\xe5') ; /* U+1EE5 */
+ YY_BREAK
+case 589:
+YY_RULE_SETUP
+#line 1015 "ansel2uni.ll"
+utf3byte('\x1e','\xe6') ; /* U+1EE6 */
+ YY_BREAK
+case 590:
+YY_RULE_SETUP
+#line 1016 "ansel2uni.ll"
+utf3byte('\x1e','\xe7') ; /* U+1EE7 */
+ YY_BREAK
+case 591:
+YY_RULE_SETUP
+#line 1017 "ansel2uni.ll"
+utf3byte('\x1e','\xe8') ; /* U+1EE8 */
+ YY_BREAK
+case 592:
+YY_RULE_SETUP
+#line 1018 "ansel2uni.ll"
+utf3byte('\x1e','\xe9') ; /* U+1EE9 */
+ YY_BREAK
+case 593:
+YY_RULE_SETUP
+#line 1019 "ansel2uni.ll"
+utf3byte('\x1e','\xea') ; /* U+1EEA */
+ YY_BREAK
+case 594:
+YY_RULE_SETUP
+#line 1020 "ansel2uni.ll"
+utf3byte('\x1e','\xeb') ; /* U+1EEB */
+ YY_BREAK
+case 595:
+YY_RULE_SETUP
+#line 1021 "ansel2uni.ll"
+utf3byte('\x1e','\xec') ; /* U+1EEC */
+ YY_BREAK
+case 596:
+YY_RULE_SETUP
+#line 1022 "ansel2uni.ll"
+utf3byte('\x1e','\xed') ; /* U+1EED */
+ YY_BREAK
+case 597:
+YY_RULE_SETUP
+#line 1023 "ansel2uni.ll"
+utf3byte('\x1e','\xee') ; /* U+1EEE */
+ YY_BREAK
+case 598:
+YY_RULE_SETUP
+#line 1024 "ansel2uni.ll"
+utf3byte('\x1e','\xef') ; /* U+1EEF */
+ YY_BREAK
+case 599:
+YY_RULE_SETUP
+#line 1025 "ansel2uni.ll"
+utf3byte('\x1e','\xf0') ; /* U+1EF0 */
+ YY_BREAK
+case 600:
+YY_RULE_SETUP
+#line 1026 "ansel2uni.ll"
+utf3byte('\x1e','\xf1') ; /* U+1EF1 */
+ YY_BREAK
+case 601:
+YY_RULE_SETUP
+#line 1027 "ansel2uni.ll"
+utf3byte('\x1e','\xf2') ; /* U+1EF2 */
+ YY_BREAK
+case 602:
+YY_RULE_SETUP
+#line 1028 "ansel2uni.ll"
+utf3byte('\x1e','\xf3') ; /* U+1EF3 */
+ YY_BREAK
+case 603:
+YY_RULE_SETUP
+#line 1029 "ansel2uni.ll"
+utf3byte('\x1e','\xf4') ; /* U+1EF4 */
+ YY_BREAK
+case 604:
+YY_RULE_SETUP
+#line 1030 "ansel2uni.ll"
+utf3byte('\x1e','\xf5') ; /* U+1EF5 */
+ YY_BREAK
+case 605:
+YY_RULE_SETUP
+#line 1031 "ansel2uni.ll"
+utf3byte('\x1e','\xf6') ; /* U+1EF6 */
+ YY_BREAK
+case 606:
+YY_RULE_SETUP
+#line 1032 "ansel2uni.ll"
+utf3byte('\x1e','\xf7') ; /* U+1EF7 */
+ YY_BREAK
+case 607:
+YY_RULE_SETUP
+#line 1033 "ansel2uni.ll"
+utf3byte('\x1e','\xf8') ; /* U+1EF8 */
+ YY_BREAK
+case 608:
+YY_RULE_SETUP
+#line 1034 "ansel2uni.ll"
+utf3byte('\x1e','\xf9') ; /* U+1EF9 */
+ YY_BREAK
+/* end of Latin Extended Additional */
+case 609:
+YY_RULE_SETUP
+#line 1038 "ansel2uni.ll"
+utf3byte('\x02','\xbc') ; /* alif */ /* U+1EBC */
+ YY_BREAK
+case 610:
+YY_RULE_SETUP
+#line 1039 "ansel2uni.ll"
+utf3byte('\x02','\xbb') ; /* ayn */ /* U+1EBB */
+ YY_BREAK
+/* MUSIC */
+case 611:
+YY_RULE_SETUP
+#line 1042 "ansel2uni.ll"
+utf3byte('\x26','\x6d') ; /* MUSIC FLAT SIGN U+266D */
+ YY_BREAK
+case 612:
+YY_RULE_SETUP
+#line 1043 "ansel2uni.ll"
+utf3byte('\x26','\x6f') ; /* MUSIC SHARP SIGN U+266F */
+ YY_BREAK
+case 613:
+YY_RULE_SETUP
+#line 1045 "ansel2uni.ll"
+utf3byte('\x21','\x13') ; /* SCRIPT SMALL L U+2113 */
+ YY_BREAK
+case 614:
+YY_RULE_SETUP
+#line 1046 "ansel2uni.ll"
+utf3byte('\x21','\x17') ; /* SOUNC RECORDING COPYRIGHT U+2117 */
+ YY_BREAK
+/* hard, soft signs */
+case 615:
+YY_RULE_SETUP
+#line 1049 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf3byte('\x02','\xba') ; /* MODIFIER LETTER DOUBLE PRIME U+02BA */
+#else
+ utf3byte('\x04','\x4a') ; /* CYRILLIC SMALL LETTER HARD SIGN U+044A */
+#endif
+ }
+ YY_BREAK
+case 616:
+YY_RULE_SETUP
+#line 1057 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf3byte('\x02','\xb9') ; /* U+02B9 */
+#else
+ utf3byte('\x04','\x4c') ; /* CYRILLIC SMALL LETTER SOFT SIGN U+044A */
+#endif
+ }
+ YY_BREAK
+/* Vietnamiese from Latin Extended-B */
+case 617:
+YY_RULE_SETUP
+#line 1066 "ansel2uni.ll"
+utf3byte('\x01','\xa0') ; /* LATIN CAPITAL LETTER o WITH HORN U+01A0 */
+ YY_BREAK
+case 618:
+YY_RULE_SETUP
+#line 1067 "ansel2uni.ll"
+utf3byte('\x01','\xa1') ; /* LATIN SMALL LETTER o WITH HORN U+01A1 */
+ YY_BREAK
+case 619:
+YY_RULE_SETUP
+#line 1068 "ansel2uni.ll"
+utf3byte('\x01','\xaf') ; /* LATIN CAPITAL LETTER u WITH HORN U+01AF */
+ YY_BREAK
+case 620:
+YY_RULE_SETUP
+#line 1069 "ansel2uni.ll"
+utf3byte('\x01','\xb0') ; /* LATIN SMALL LETTER u WITH HORN U+01B0 */
+ YY_BREAK
+case 621:
+YY_RULE_SETUP
+#line 1071 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x25','\xa1') ; /*WHITE SQUARE U+25A1 this is a rumor not in the 5.5 or 5.5.1 standard */
+ ;
+#else
+ ;
+#endif
+ }
+ YY_BREAK
+case 622:
+YY_RULE_SETUP
+#line 1080 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x25','\xa0') ; /* BLACK SQUARE U+25A0 a rumor again not in GEDCOM 5.5 or 5.5.1 */
+ ;
+#else
+ ;
+#endif
+ }
+ YY_BREAK
+case 623:
+YY_RULE_SETUP
+#line 1089 "ansel2uni.ll"
+{
+#if defined GEDCOM_EXT || defined GEDCOM_LDSEXT
+ utf2byte('\xdf') ; /* LATIN SMALL LETTER SHARP S U+00DF */
+ ;
+#else
+ ;
+#endif
+ }
+ YY_BREAK
+case 624:
+YY_RULE_SETUP
+#line 1098 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf2byte('\xdf') ; /* LATIN SMALL LETTER SHARP S U+00DF */
+#else
+ ;
+#endif
+ }
+ YY_BREAK
+case 625:
+YY_RULE_SETUP
+#line 1106 "ansel2uni.ll"
+{
+#ifdef MARC_EXT
+ utf3byte('\x20','\xac') ; /* EURO SIGN U+20AC */
+#else
+ ;
+#endif
+ }
+ YY_BREAK
+/* generic declarations follow. flex(1) specifies that they are
+ * superseded by those above if there are mutliple matchings of the same length */
+/* invalid codes in the standard use : ignore (delete on output) */
+case 626:
+#line 1121 "ansel2uni.ll"
+case 627:
+#line 1122 "ansel2uni.ll"
+case 628:
+YY_RULE_SETUP
+#line 1122 "ansel2uni.ll"
+;
+ YY_BREAK
+/* low rising tone mark */
+case 629:
+YY_RULE_SETUP
+#line 1125 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x09') ; /* COMBINING HOOK ABOVE U+0309 */
+ }
+ YY_BREAK
+/* grave accent */
+case 630:
+YY_RULE_SETUP
+#line 1131 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x00') ; /* COMBINING GRAVE ACCENT U+0300 */
+ }
+ YY_BREAK
+/* acute accent */
+case 631:
+YY_RULE_SETUP
+#line 1137 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x01') ; /* COMBINING ACUTE ACCENT U+0301 */
+ }
+ YY_BREAK
+/* circumflex accent */
+case 632:
+YY_RULE_SETUP
+#line 1143 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x02') ; /* COMBINING CIRCUMFLEX ACCENT U+0302 */
+ }
+ YY_BREAK
+/* tilde */
+case 633:
+YY_RULE_SETUP
+#line 1149 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x03') ; /* COMBINING TILDE U+0303 */
+ }
+ YY_BREAK
+/* Macron */
+case 634:
+YY_RULE_SETUP
+#line 1155 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x04') ; /* COMBINING MACRON U+0304 */
+ }
+ YY_BREAK
+/* Breve */
+case 635:
+YY_RULE_SETUP
+#line 1161 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x06') ; /* COMBINING BREVE U+0306 */
+ }
+ YY_BREAK
+/* dot above */
+case 636:
+YY_RULE_SETUP
+#line 1167 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x07') ; /* COMBINING DOT ABOVE U+0307 */
+ }
+ YY_BREAK
+/* Umlaut, diaresis, double dot above */
+case 637:
+YY_RULE_SETUP
+#line 1173 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x08') ; /* COMBINING DIARESIS U+0308 */
+ }
+ YY_BREAK
+/* Caron, hacek */
+case 638:
+YY_RULE_SETUP
+#line 1179 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0c') ; /* COMBINING CARON U+030C */
+ }
+ YY_BREAK
+/* circle, ring above */
+case 639:
+YY_RULE_SETUP
+#line 1185 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0a') ; /* COMBINING RING ABOVE U+030A */
+ }
+ YY_BREAK
+/* ligature, left half \xeb, ligature right half \xec.
+ * For the purpose of the conversion we assume that \xeb[someletter]\xec[secondletter]
+ * is always in use */
+case 640:
+YY_RULE_SETUP
+#line 1193 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x61') ; /* COMBINING DOUBLE INVERTED BREVE U+0361 */
+ }
+ YY_BREAK
+case 641:
+YY_RULE_SETUP
+#line 1198 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ }
+ YY_BREAK
+/* high comma, off center */
+case 642:
+YY_RULE_SETUP
+#line 1203 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x15') ; /* COMBINING COMMA ABOVE RIGHT U+0315 */
+ }
+ YY_BREAK
+/* Hungarian double acute */
+case 643:
+YY_RULE_SETUP
+#line 1209 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0b') ; /* COMBINING DOUBLE ACUTE ACCENT U+030B */
+ }
+ YY_BREAK
+/* combining candrabindu */
+case 644:
+YY_RULE_SETUP
+#line 1215 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x10') ; /* COMBININGCANDRABINDU U+0310 */
+ }
+ YY_BREAK
+/* cedilla */
+case 645:
+YY_RULE_SETUP
+#line 1221 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x27') ; /* COMBINING CEDILLA U+0327 */
+ }
+ YY_BREAK
+/* right hook */
+case 646:
+YY_RULE_SETUP
+#line 1228 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x28') ; /* COMBINING OGONEK U+0328 */
+ }
+ YY_BREAK
+/* dot below */
+case 647:
+YY_RULE_SETUP
+#line 1234 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x23') ; /* COMBINING DOT BELOW U+0323 */
+ }
+ YY_BREAK
+/* double dot below */
+case 648:
+YY_RULE_SETUP
+#line 1240 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x24') ; /* COMBINING DOUBLE DIARESIS BELOW U+0324 */
+ }
+ YY_BREAK
+/* circle below */
+case 649:
+YY_RULE_SETUP
+#line 1246 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x25') ; /* COMBINING RING BELOW U+0325 */
+ }
+ YY_BREAK
+/* double underscore */
+case 650:
+YY_RULE_SETUP
+#line 1252 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x33') ; /* COMBINING DOUBLE LOW LINE U+0333 */
+ }
+ YY_BREAK
+/* underscore */
+case 651:
+YY_RULE_SETUP
+#line 1258 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x32') ; /* COMBINING LOW LINE U+0332 */
+ }
+ YY_BREAK
+/* left hook */
+case 652:
+YY_RULE_SETUP
+#line 1264 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x26') ; /* COMBINING COMMA BELOW U+0326 */
+ }
+ YY_BREAK
+/* right cedilla */
+case 653:
+YY_RULE_SETUP
+#line 1270 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x1c') ; /* COMBINING LEFT HALF RING BELOW U+031C */
+ }
+ YY_BREAK
+/* half circle below hook */
+case 654:
+YY_RULE_SETUP
+#line 1276 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x2e') ; /* COMBINING BREVE BELOW U+032e */
+ }
+ YY_BREAK
+/* double tilde, left half and right half.
+ * For the purpose of the conversion we assume that \xfa[someletter]\xfb[secondletter]
+ * is always in use, without actually checking */
+case 655:
+YY_RULE_SETUP
+#line 1284 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x60') ; /* COMBINING DOUBLE TILDE U+0360 */
+ }
+ YY_BREAK
+case 656:
+YY_RULE_SETUP
+#line 1289 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ }
+ YY_BREAK
+/* high comma */
+case 657:
+YY_RULE_SETUP
+#line 1294 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x13') ; /* COMBINING COMMA ABOVE U+0313 */
+ }
+ YY_BREAK
+case 658:
+YY_RULE_SETUP
+#line 1299 "ansel2uni.ll"
+{
+#ifdef GEDCOM_LDSEXT
+ /* the corresponding multiple diacretics with the slash are not implemented below...*/
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x38') ; /* COMBINING LONG SOLIDUS OVERLAY U+0337 , perhaps U+0337 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+ YY_BREAK
+/* three forms of newline in MAC, Unixes and DOS */
+case 659:
+YY_RULE_SETUP
+#line 1310 "ansel2uni.ll"
+newl(yytext) ;
+ YY_BREAK
+case 660:
+/* rule 660 can match eol */
+YY_RULE_SETUP
+#line 1312 "ansel2uni.ll"
+newl(yytext) ;
+ YY_BREAK
+case 661:
+/* rule 661 can match eol */
+YY_RULE_SETUP
+#line 1314 "ansel2uni.ll"
+newl(yytext) ;
+ YY_BREAK
+/* Generic double accents. The U+1DC4 to U+1DCC are probably not
+ * meant to be used as double combining accents.
+ */
+case 662:
+YY_RULE_SETUP
+#line 1319 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 663:
+YY_RULE_SETUP
+#line 1324 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 664:
+YY_RULE_SETUP
+#line 1329 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 665:
+YY_RULE_SETUP
+#line 1334 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 666:
+YY_RULE_SETUP
+#line 1339 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 667:
+YY_RULE_SETUP
+#line 1344 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 668:
+YY_RULE_SETUP
+#line 1349 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 669:
+YY_RULE_SETUP
+#line 1354 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 670:
+YY_RULE_SETUP
+#line 1359 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 671:
+YY_RULE_SETUP
+#line 1364 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 672:
+YY_RULE_SETUP
+#line 1369 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 673:
+YY_RULE_SETUP
+#line 1374 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 674:
+YY_RULE_SETUP
+#line 1379 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 675:
+YY_RULE_SETUP
+#line 1384 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 676:
+YY_RULE_SETUP
+#line 1389 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 677:
+YY_RULE_SETUP
+#line 1394 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 678:
+YY_RULE_SETUP
+#line 1399 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 679:
+YY_RULE_SETUP
+#line 1404 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 680:
+YY_RULE_SETUP
+#line 1409 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 681:
+YY_RULE_SETUP
+#line 1414 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 682:
+YY_RULE_SETUP
+#line 1419 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 683:
+YY_RULE_SETUP
+#line 1424 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 684:
+YY_RULE_SETUP
+#line 1429 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 685:
+YY_RULE_SETUP
+#line 1434 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 686:
+YY_RULE_SETUP
+#line 1439 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x09') ;
+ }
+ YY_BREAK
+case 687:
+YY_RULE_SETUP
+#line 1444 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 688:
+YY_RULE_SETUP
+#line 1449 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0f') ;
+ }
+ YY_BREAK
+case 689:
+YY_RULE_SETUP
+#line 1453 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 690:
+YY_RULE_SETUP
+#line 1458 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 691:
+YY_RULE_SETUP
+#line 1463 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 692:
+YY_RULE_SETUP
+#line 1468 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 693:
+YY_RULE_SETUP
+#line 1473 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 694:
+YY_RULE_SETUP
+#line 1478 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 695:
+YY_RULE_SETUP
+#line 1483 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 696:
+YY_RULE_SETUP
+#line 1488 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 697:
+YY_RULE_SETUP
+#line 1493 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 698:
+YY_RULE_SETUP
+#line 1498 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 699:
+YY_RULE_SETUP
+#line 1503 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 700:
+YY_RULE_SETUP
+#line 1508 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 701:
+YY_RULE_SETUP
+#line 1513 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 702:
+YY_RULE_SETUP
+#line 1518 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 703:
+YY_RULE_SETUP
+#line 1523 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 704:
+YY_RULE_SETUP
+#line 1528 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 705:
+YY_RULE_SETUP
+#line 1533 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 706:
+YY_RULE_SETUP
+#line 1538 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 707:
+YY_RULE_SETUP
+#line 1543 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 708:
+YY_RULE_SETUP
+#line 1548 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 709:
+YY_RULE_SETUP
+#line 1553 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 710:
+YY_RULE_SETUP
+#line 1558 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 711:
+YY_RULE_SETUP
+#line 1563 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x00') ;
+ }
+ YY_BREAK
+case 712:
+YY_RULE_SETUP
+#line 1568 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 713:
+YY_RULE_SETUP
+#line 1573 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 714:
+YY_RULE_SETUP
+#line 1578 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 715:
+YY_RULE_SETUP
+#line 1583 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 716:
+YY_RULE_SETUP
+#line 1588 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 717:
+YY_RULE_SETUP
+#line 1593 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 718:
+YY_RULE_SETUP
+#line 1598 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 719:
+YY_RULE_SETUP
+#line 1603 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 720:
+YY_RULE_SETUP
+#line 1608 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 721:
+YY_RULE_SETUP
+#line 1613 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 722:
+YY_RULE_SETUP
+#line 1618 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 723:
+YY_RULE_SETUP
+#line 1623 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 724:
+YY_RULE_SETUP
+#line 1628 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 725:
+YY_RULE_SETUP
+#line 1633 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 726:
+YY_RULE_SETUP
+#line 1638 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 727:
+YY_RULE_SETUP
+#line 1643 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 728:
+YY_RULE_SETUP
+#line 1648 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 729:
+YY_RULE_SETUP
+#line 1653 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 730:
+YY_RULE_SETUP
+#line 1658 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 731:
+YY_RULE_SETUP
+#line 1663 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 732:
+YY_RULE_SETUP
+#line 1668 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 733:
+YY_RULE_SETUP
+#line 1673 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 734:
+YY_RULE_SETUP
+#line 1678 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 735:
+YY_RULE_SETUP
+#line 1683 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 736:
+YY_RULE_SETUP
+#line 1688 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x01') ;
+ }
+ YY_BREAK
+case 737:
+YY_RULE_SETUP
+#line 1693 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 738:
+YY_RULE_SETUP
+#line 1698 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 739:
+YY_RULE_SETUP
+#line 1703 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 740:
+YY_RULE_SETUP
+#line 1708 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 741:
+YY_RULE_SETUP
+#line 1713 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 742:
+YY_RULE_SETUP
+#line 1718 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 743:
+YY_RULE_SETUP
+#line 1723 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 744:
+YY_RULE_SETUP
+#line 1728 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 745:
+YY_RULE_SETUP
+#line 1733 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 746:
+YY_RULE_SETUP
+#line 1738 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 747:
+YY_RULE_SETUP
+#line 1743 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 748:
+YY_RULE_SETUP
+#line 1748 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 749:
+YY_RULE_SETUP
+#line 1753 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 750:
+YY_RULE_SETUP
+#line 1758 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 751:
+YY_RULE_SETUP
+#line 1763 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 752:
+YY_RULE_SETUP
+#line 1768 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 753:
+YY_RULE_SETUP
+#line 1773 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 754:
+YY_RULE_SETUP
+#line 1778 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 755:
+YY_RULE_SETUP
+#line 1783 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 756:
+YY_RULE_SETUP
+#line 1788 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 757:
+YY_RULE_SETUP
+#line 1793 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 758:
+YY_RULE_SETUP
+#line 1798 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 759:
+YY_RULE_SETUP
+#line 1803 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 760:
+YY_RULE_SETUP
+#line 1808 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 761:
+YY_RULE_SETUP
+#line 1813 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x02') ;
+ }
+ YY_BREAK
+case 762:
+YY_RULE_SETUP
+#line 1818 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 763:
+YY_RULE_SETUP
+#line 1823 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 764:
+YY_RULE_SETUP
+#line 1828 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 765:
+YY_RULE_SETUP
+#line 1833 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 766:
+YY_RULE_SETUP
+#line 1838 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 767:
+YY_RULE_SETUP
+#line 1843 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 768:
+YY_RULE_SETUP
+#line 1848 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 769:
+YY_RULE_SETUP
+#line 1853 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 770:
+YY_RULE_SETUP
+#line 1858 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 771:
+YY_RULE_SETUP
+#line 1863 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 772:
+YY_RULE_SETUP
+#line 1868 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 773:
+YY_RULE_SETUP
+#line 1873 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 774:
+YY_RULE_SETUP
+#line 1878 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 775:
+YY_RULE_SETUP
+#line 1883 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 776:
+YY_RULE_SETUP
+#line 1888 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 777:
+YY_RULE_SETUP
+#line 1893 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 778:
+YY_RULE_SETUP
+#line 1898 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 779:
+YY_RULE_SETUP
+#line 1903 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 780:
+YY_RULE_SETUP
+#line 1908 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 781:
+YY_RULE_SETUP
+#line 1913 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 782:
+YY_RULE_SETUP
+#line 1918 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 783:
+YY_RULE_SETUP
+#line 1923 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 784:
+YY_RULE_SETUP
+#line 1928 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 785:
+YY_RULE_SETUP
+#line 1933 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 786:
+YY_RULE_SETUP
+#line 1938 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x03') ;
+ }
+ YY_BREAK
+case 787:
+YY_RULE_SETUP
+#line 1943 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 788:
+YY_RULE_SETUP
+#line 1948 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 789:
+YY_RULE_SETUP
+#line 1953 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 790:
+YY_RULE_SETUP
+#line 1958 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 791:
+YY_RULE_SETUP
+#line 1963 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 792:
+YY_RULE_SETUP
+#line 1968 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 793:
+YY_RULE_SETUP
+#line 1973 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 794:
+YY_RULE_SETUP
+#line 1978 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 795:
+YY_RULE_SETUP
+#line 1983 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 796:
+YY_RULE_SETUP
+#line 1988 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 797:
+YY_RULE_SETUP
+#line 1993 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 798:
+YY_RULE_SETUP
+#line 1998 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 799:
+YY_RULE_SETUP
+#line 2003 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 800:
+YY_RULE_SETUP
+#line 2008 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 801:
+YY_RULE_SETUP
+#line 2013 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 802:
+YY_RULE_SETUP
+#line 2018 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 803:
+YY_RULE_SETUP
+#line 2023 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 804:
+YY_RULE_SETUP
+#line 2028 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 805:
+YY_RULE_SETUP
+#line 2033 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 806:
+YY_RULE_SETUP
+#line 2038 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 807:
+YY_RULE_SETUP
+#line 2043 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 808:
+YY_RULE_SETUP
+#line 2048 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 809:
+YY_RULE_SETUP
+#line 2053 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 810:
+YY_RULE_SETUP
+#line 2058 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 811:
+YY_RULE_SETUP
+#line 2063 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x04') ;
+ }
+ YY_BREAK
+case 812:
+YY_RULE_SETUP
+#line 2068 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 813:
+YY_RULE_SETUP
+#line 2073 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 814:
+YY_RULE_SETUP
+#line 2078 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 815:
+YY_RULE_SETUP
+#line 2083 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 816:
+YY_RULE_SETUP
+#line 2088 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 817:
+YY_RULE_SETUP
+#line 2093 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 818:
+YY_RULE_SETUP
+#line 2098 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 819:
+YY_RULE_SETUP
+#line 2103 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 820:
+YY_RULE_SETUP
+#line 2108 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 821:
+YY_RULE_SETUP
+#line 2113 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 822:
+YY_RULE_SETUP
+#line 2118 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 823:
+YY_RULE_SETUP
+#line 2123 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 824:
+YY_RULE_SETUP
+#line 2128 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 825:
+YY_RULE_SETUP
+#line 2133 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 826:
+YY_RULE_SETUP
+#line 2138 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 827:
+YY_RULE_SETUP
+#line 2143 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 828:
+YY_RULE_SETUP
+#line 2148 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 829:
+YY_RULE_SETUP
+#line 2153 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 830:
+YY_RULE_SETUP
+#line 2158 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 831:
+YY_RULE_SETUP
+#line 2163 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 832:
+YY_RULE_SETUP
+#line 2168 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 833:
+YY_RULE_SETUP
+#line 2173 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 834:
+YY_RULE_SETUP
+#line 2178 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 835:
+YY_RULE_SETUP
+#line 2183 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 836:
+YY_RULE_SETUP
+#line 2188 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x06') ;
+ }
+ YY_BREAK
+case 837:
+YY_RULE_SETUP
+#line 2193 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 838:
+YY_RULE_SETUP
+#line 2198 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 839:
+YY_RULE_SETUP
+#line 2203 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 840:
+YY_RULE_SETUP
+#line 2208 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 841:
+YY_RULE_SETUP
+#line 2213 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 842:
+YY_RULE_SETUP
+#line 2218 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 843:
+YY_RULE_SETUP
+#line 2223 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 844:
+YY_RULE_SETUP
+#line 2228 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 845:
+YY_RULE_SETUP
+#line 2233 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 846:
+YY_RULE_SETUP
+#line 2238 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 847:
+YY_RULE_SETUP
+#line 2243 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 848:
+YY_RULE_SETUP
+#line 2248 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 849:
+YY_RULE_SETUP
+#line 2253 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 850:
+YY_RULE_SETUP
+#line 2258 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 851:
+YY_RULE_SETUP
+#line 2263 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 852:
+YY_RULE_SETUP
+#line 2268 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 853:
+YY_RULE_SETUP
+#line 2273 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 854:
+YY_RULE_SETUP
+#line 2278 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 855:
+YY_RULE_SETUP
+#line 2283 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 856:
+YY_RULE_SETUP
+#line 2288 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 857:
+YY_RULE_SETUP
+#line 2293 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 858:
+YY_RULE_SETUP
+#line 2298 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 859:
+YY_RULE_SETUP
+#line 2303 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 860:
+YY_RULE_SETUP
+#line 2308 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 861:
+YY_RULE_SETUP
+#line 2313 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x07') ;
+ }
+ YY_BREAK
+case 862:
+YY_RULE_SETUP
+#line 2318 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 863:
+YY_RULE_SETUP
+#line 2323 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 864:
+YY_RULE_SETUP
+#line 2328 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 865:
+YY_RULE_SETUP
+#line 2333 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 866:
+YY_RULE_SETUP
+#line 2338 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 867:
+YY_RULE_SETUP
+#line 2343 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 868:
+YY_RULE_SETUP
+#line 2348 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 869:
+YY_RULE_SETUP
+#line 2353 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 870:
+YY_RULE_SETUP
+#line 2358 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 871:
+YY_RULE_SETUP
+#line 2363 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 872:
+YY_RULE_SETUP
+#line 2368 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 873:
+YY_RULE_SETUP
+#line 2373 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 874:
+YY_RULE_SETUP
+#line 2378 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 875:
+YY_RULE_SETUP
+#line 2383 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 876:
+YY_RULE_SETUP
+#line 2388 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 877:
+YY_RULE_SETUP
+#line 2393 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 878:
+YY_RULE_SETUP
+#line 2398 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 879:
+YY_RULE_SETUP
+#line 2403 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 880:
+YY_RULE_SETUP
+#line 2408 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 881:
+YY_RULE_SETUP
+#line 2413 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 882:
+YY_RULE_SETUP
+#line 2418 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 883:
+YY_RULE_SETUP
+#line 2423 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 884:
+YY_RULE_SETUP
+#line 2428 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 885:
+YY_RULE_SETUP
+#line 2433 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 886:
+YY_RULE_SETUP
+#line 2438 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x08') ;
+ }
+ YY_BREAK
+case 887:
+YY_RULE_SETUP
+#line 2443 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 888:
+YY_RULE_SETUP
+#line 2448 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 889:
+YY_RULE_SETUP
+#line 2453 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 890:
+YY_RULE_SETUP
+#line 2458 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 891:
+YY_RULE_SETUP
+#line 2463 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 892:
+YY_RULE_SETUP
+#line 2468 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 893:
+YY_RULE_SETUP
+#line 2473 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 894:
+YY_RULE_SETUP
+#line 2478 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 895:
+YY_RULE_SETUP
+#line 2483 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 896:
+YY_RULE_SETUP
+#line 2488 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 897:
+YY_RULE_SETUP
+#line 2493 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 898:
+YY_RULE_SETUP
+#line 2498 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 899:
+YY_RULE_SETUP
+#line 2503 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 900:
+YY_RULE_SETUP
+#line 2508 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 901:
+YY_RULE_SETUP
+#line 2513 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 902:
+YY_RULE_SETUP
+#line 2518 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 903:
+YY_RULE_SETUP
+#line 2523 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 904:
+YY_RULE_SETUP
+#line 2528 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 905:
+YY_RULE_SETUP
+#line 2533 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 906:
+YY_RULE_SETUP
+#line 2538 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 907:
+YY_RULE_SETUP
+#line 2543 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 908:
+YY_RULE_SETUP
+#line 2548 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 909:
+YY_RULE_SETUP
+#line 2553 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 910:
+YY_RULE_SETUP
+#line 2558 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 911:
+YY_RULE_SETUP
+#line 2563 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0c') ;
+ }
+ YY_BREAK
+case 912:
+YY_RULE_SETUP
+#line 2568 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 913:
+YY_RULE_SETUP
+#line 2573 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 914:
+YY_RULE_SETUP
+#line 2578 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 915:
+YY_RULE_SETUP
+#line 2583 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 916:
+YY_RULE_SETUP
+#line 2588 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 917:
+YY_RULE_SETUP
+#line 2593 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 918:
+YY_RULE_SETUP
+#line 2598 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 919:
+YY_RULE_SETUP
+#line 2603 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 920:
+YY_RULE_SETUP
+#line 2608 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 921:
+YY_RULE_SETUP
+#line 2613 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 922:
+YY_RULE_SETUP
+#line 2618 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 923:
+YY_RULE_SETUP
+#line 2623 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 924:
+YY_RULE_SETUP
+#line 2628 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 925:
+YY_RULE_SETUP
+#line 2633 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 926:
+YY_RULE_SETUP
+#line 2638 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 927:
+YY_RULE_SETUP
+#line 2643 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 928:
+YY_RULE_SETUP
+#line 2648 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 929:
+YY_RULE_SETUP
+#line 2653 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 930:
+YY_RULE_SETUP
+#line 2658 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 931:
+YY_RULE_SETUP
+#line 2663 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 932:
+YY_RULE_SETUP
+#line 2668 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 933:
+YY_RULE_SETUP
+#line 2673 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 934:
+YY_RULE_SETUP
+#line 2678 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 935:
+YY_RULE_SETUP
+#line 2683 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 936:
+YY_RULE_SETUP
+#line 2688 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0a') ;
+ }
+ YY_BREAK
+case 937:
+YY_RULE_SETUP
+#line 2693 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 938:
+YY_RULE_SETUP
+#line 2698 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 939:
+YY_RULE_SETUP
+#line 2703 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 940:
+YY_RULE_SETUP
+#line 2708 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 941:
+YY_RULE_SETUP
+#line 2713 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 942:
+YY_RULE_SETUP
+#line 2718 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 943:
+YY_RULE_SETUP
+#line 2723 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 944:
+YY_RULE_SETUP
+#line 2728 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 945:
+YY_RULE_SETUP
+#line 2733 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 946:
+YY_RULE_SETUP
+#line 2738 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 947:
+YY_RULE_SETUP
+#line 2743 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 948:
+YY_RULE_SETUP
+#line 2748 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 949:
+YY_RULE_SETUP
+#line 2753 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 950:
+YY_RULE_SETUP
+#line 2758 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 951:
+YY_RULE_SETUP
+#line 2763 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 952:
+YY_RULE_SETUP
+#line 2768 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 953:
+YY_RULE_SETUP
+#line 2773 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 954:
+YY_RULE_SETUP
+#line 2778 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 955:
+YY_RULE_SETUP
+#line 2783 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 956:
+YY_RULE_SETUP
+#line 2788 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 957:
+YY_RULE_SETUP
+#line 2793 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 958:
+YY_RULE_SETUP
+#line 2798 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 959:
+YY_RULE_SETUP
+#line 2803 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 960:
+YY_RULE_SETUP
+#line 2808 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 961:
+YY_RULE_SETUP
+#line 2813 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x15') ;
+ }
+ YY_BREAK
+case 962:
+YY_RULE_SETUP
+#line 2818 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 963:
+YY_RULE_SETUP
+#line 2823 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 964:
+YY_RULE_SETUP
+#line 2828 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 965:
+YY_RULE_SETUP
+#line 2833 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 966:
+YY_RULE_SETUP
+#line 2838 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 967:
+YY_RULE_SETUP
+#line 2843 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 968:
+YY_RULE_SETUP
+#line 2848 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 969:
+YY_RULE_SETUP
+#line 2853 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 970:
+YY_RULE_SETUP
+#line 2858 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 971:
+YY_RULE_SETUP
+#line 2863 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 972:
+YY_RULE_SETUP
+#line 2868 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 973:
+YY_RULE_SETUP
+#line 2873 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 974:
+YY_RULE_SETUP
+#line 2878 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 975:
+YY_RULE_SETUP
+#line 2883 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 976:
+YY_RULE_SETUP
+#line 2888 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 977:
+YY_RULE_SETUP
+#line 2893 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 978:
+YY_RULE_SETUP
+#line 2898 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 979:
+YY_RULE_SETUP
+#line 2903 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 980:
+YY_RULE_SETUP
+#line 2908 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 981:
+YY_RULE_SETUP
+#line 2913 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 982:
+YY_RULE_SETUP
+#line 2918 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 983:
+YY_RULE_SETUP
+#line 2923 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 984:
+YY_RULE_SETUP
+#line 2928 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 985:
+YY_RULE_SETUP
+#line 2933 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 986:
+YY_RULE_SETUP
+#line 2938 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0b') ;
+ }
+ YY_BREAK
+case 987:
+YY_RULE_SETUP
+#line 2943 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 988:
+YY_RULE_SETUP
+#line 2948 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 989:
+YY_RULE_SETUP
+#line 2953 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 990:
+YY_RULE_SETUP
+#line 2958 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 991:
+YY_RULE_SETUP
+#line 2963 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 992:
+YY_RULE_SETUP
+#line 2968 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 993:
+YY_RULE_SETUP
+#line 2973 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 994:
+YY_RULE_SETUP
+#line 2978 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 995:
+YY_RULE_SETUP
+#line 2983 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 996:
+YY_RULE_SETUP
+#line 2988 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 997:
+YY_RULE_SETUP
+#line 2993 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 998:
+YY_RULE_SETUP
+#line 2998 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 999:
+YY_RULE_SETUP
+#line 3003 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1000:
+YY_RULE_SETUP
+#line 3008 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1001:
+YY_RULE_SETUP
+#line 3013 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1002:
+YY_RULE_SETUP
+#line 3018 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1003:
+YY_RULE_SETUP
+#line 3023 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1004:
+YY_RULE_SETUP
+#line 3028 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1005:
+YY_RULE_SETUP
+#line 3033 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1006:
+YY_RULE_SETUP
+#line 3038 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1007:
+YY_RULE_SETUP
+#line 3043 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1008:
+YY_RULE_SETUP
+#line 3048 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1009:
+YY_RULE_SETUP
+#line 3053 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1010:
+YY_RULE_SETUP
+#line 3058 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1011:
+YY_RULE_SETUP
+#line 3063 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x10') ;
+ }
+ YY_BREAK
+case 1012:
+YY_RULE_SETUP
+#line 3068 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1013:
+YY_RULE_SETUP
+#line 3073 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1014:
+YY_RULE_SETUP
+#line 3078 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1015:
+YY_RULE_SETUP
+#line 3083 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1016:
+YY_RULE_SETUP
+#line 3088 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1017:
+YY_RULE_SETUP
+#line 3093 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1018:
+YY_RULE_SETUP
+#line 3098 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1019:
+YY_RULE_SETUP
+#line 3103 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1020:
+YY_RULE_SETUP
+#line 3108 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1021:
+YY_RULE_SETUP
+#line 3113 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1022:
+YY_RULE_SETUP
+#line 3118 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1023:
+YY_RULE_SETUP
+#line 3123 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1024:
+YY_RULE_SETUP
+#line 3128 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1025:
+YY_RULE_SETUP
+#line 3133 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1026:
+YY_RULE_SETUP
+#line 3138 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1027:
+YY_RULE_SETUP
+#line 3143 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1028:
+YY_RULE_SETUP
+#line 3148 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1029:
+YY_RULE_SETUP
+#line 3153 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1030:
+YY_RULE_SETUP
+#line 3158 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1031:
+YY_RULE_SETUP
+#line 3163 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1032:
+YY_RULE_SETUP
+#line 3168 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1033:
+YY_RULE_SETUP
+#line 3173 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1034:
+YY_RULE_SETUP
+#line 3178 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1035:
+YY_RULE_SETUP
+#line 3183 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1036:
+YY_RULE_SETUP
+#line 3188 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x27') ;
+ }
+ YY_BREAK
+case 1037:
+YY_RULE_SETUP
+#line 3193 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1038:
+YY_RULE_SETUP
+#line 3198 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1039:
+YY_RULE_SETUP
+#line 3203 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1040:
+YY_RULE_SETUP
+#line 3208 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1041:
+YY_RULE_SETUP
+#line 3213 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1042:
+YY_RULE_SETUP
+#line 3218 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1043:
+YY_RULE_SETUP
+#line 3223 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1044:
+YY_RULE_SETUP
+#line 3228 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1045:
+YY_RULE_SETUP
+#line 3233 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1046:
+YY_RULE_SETUP
+#line 3238 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1047:
+YY_RULE_SETUP
+#line 3243 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1048:
+YY_RULE_SETUP
+#line 3248 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1049:
+YY_RULE_SETUP
+#line 3253 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1050:
+YY_RULE_SETUP
+#line 3258 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1051:
+YY_RULE_SETUP
+#line 3263 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1052:
+YY_RULE_SETUP
+#line 3268 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1053:
+YY_RULE_SETUP
+#line 3273 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1054:
+YY_RULE_SETUP
+#line 3278 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1055:
+YY_RULE_SETUP
+#line 3283 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1056:
+YY_RULE_SETUP
+#line 3288 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1057:
+YY_RULE_SETUP
+#line 3293 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1058:
+YY_RULE_SETUP
+#line 3298 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1059:
+YY_RULE_SETUP
+#line 3303 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1060:
+YY_RULE_SETUP
+#line 3308 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1061:
+YY_RULE_SETUP
+#line 3313 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x28') ;
+ }
+ YY_BREAK
+case 1062:
+YY_RULE_SETUP
+#line 3318 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1063:
+YY_RULE_SETUP
+#line 3323 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1064:
+YY_RULE_SETUP
+#line 3328 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1065:
+YY_RULE_SETUP
+#line 3333 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1066:
+YY_RULE_SETUP
+#line 3338 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1067:
+YY_RULE_SETUP
+#line 3343 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1068:
+YY_RULE_SETUP
+#line 3348 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1069:
+YY_RULE_SETUP
+#line 3353 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1070:
+YY_RULE_SETUP
+#line 3358 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1071:
+YY_RULE_SETUP
+#line 3363 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1072:
+YY_RULE_SETUP
+#line 3368 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1073:
+YY_RULE_SETUP
+#line 3373 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1074:
+YY_RULE_SETUP
+#line 3378 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1075:
+YY_RULE_SETUP
+#line 3383 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1076:
+YY_RULE_SETUP
+#line 3388 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1077:
+YY_RULE_SETUP
+#line 3393 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1078:
+YY_RULE_SETUP
+#line 3398 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1079:
+YY_RULE_SETUP
+#line 3403 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1080:
+YY_RULE_SETUP
+#line 3408 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1081:
+YY_RULE_SETUP
+#line 3413 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1082:
+YY_RULE_SETUP
+#line 3418 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1083:
+YY_RULE_SETUP
+#line 3423 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1084:
+YY_RULE_SETUP
+#line 3428 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1085:
+YY_RULE_SETUP
+#line 3433 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1086:
+YY_RULE_SETUP
+#line 3438 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x23') ;
+ }
+ YY_BREAK
+case 1087:
+YY_RULE_SETUP
+#line 3443 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1088:
+YY_RULE_SETUP
+#line 3448 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1089:
+YY_RULE_SETUP
+#line 3453 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1090:
+YY_RULE_SETUP
+#line 3458 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1091:
+YY_RULE_SETUP
+#line 3463 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1092:
+YY_RULE_SETUP
+#line 3468 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1093:
+YY_RULE_SETUP
+#line 3473 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1094:
+YY_RULE_SETUP
+#line 3478 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1095:
+YY_RULE_SETUP
+#line 3483 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1096:
+YY_RULE_SETUP
+#line 3488 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1097:
+YY_RULE_SETUP
+#line 3493 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1098:
+YY_RULE_SETUP
+#line 3498 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1099:
+YY_RULE_SETUP
+#line 3503 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1100:
+YY_RULE_SETUP
+#line 3508 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1101:
+YY_RULE_SETUP
+#line 3513 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1102:
+YY_RULE_SETUP
+#line 3518 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1103:
+YY_RULE_SETUP
+#line 3523 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1104:
+YY_RULE_SETUP
+#line 3528 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1105:
+YY_RULE_SETUP
+#line 3533 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1106:
+YY_RULE_SETUP
+#line 3538 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1107:
+YY_RULE_SETUP
+#line 3543 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1108:
+YY_RULE_SETUP
+#line 3548 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1109:
+YY_RULE_SETUP
+#line 3553 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1110:
+YY_RULE_SETUP
+#line 3558 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1111:
+YY_RULE_SETUP
+#line 3563 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x24') ;
+ }
+ YY_BREAK
+case 1112:
+YY_RULE_SETUP
+#line 3568 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1113:
+YY_RULE_SETUP
+#line 3573 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1114:
+YY_RULE_SETUP
+#line 3578 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1115:
+YY_RULE_SETUP
+#line 3583 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1116:
+YY_RULE_SETUP
+#line 3588 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1117:
+YY_RULE_SETUP
+#line 3593 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1118:
+YY_RULE_SETUP
+#line 3598 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1119:
+YY_RULE_SETUP
+#line 3603 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1120:
+YY_RULE_SETUP
+#line 3608 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1121:
+YY_RULE_SETUP
+#line 3613 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1122:
+YY_RULE_SETUP
+#line 3618 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1123:
+YY_RULE_SETUP
+#line 3623 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1124:
+YY_RULE_SETUP
+#line 3628 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1125:
+YY_RULE_SETUP
+#line 3633 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1126:
+YY_RULE_SETUP
+#line 3638 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1127:
+YY_RULE_SETUP
+#line 3643 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1128:
+YY_RULE_SETUP
+#line 3648 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1129:
+YY_RULE_SETUP
+#line 3653 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1130:
+YY_RULE_SETUP
+#line 3658 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1131:
+YY_RULE_SETUP
+#line 3663 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1132:
+YY_RULE_SETUP
+#line 3668 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1133:
+YY_RULE_SETUP
+#line 3673 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1134:
+YY_RULE_SETUP
+#line 3678 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1135:
+YY_RULE_SETUP
+#line 3683 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1136:
+YY_RULE_SETUP
+#line 3688 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x25') ;
+ }
+ YY_BREAK
+case 1137:
+YY_RULE_SETUP
+#line 3693 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1138:
+YY_RULE_SETUP
+#line 3698 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1139:
+YY_RULE_SETUP
+#line 3703 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1140:
+YY_RULE_SETUP
+#line 3708 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1141:
+YY_RULE_SETUP
+#line 3713 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1142:
+YY_RULE_SETUP
+#line 3718 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1143:
+YY_RULE_SETUP
+#line 3723 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1144:
+YY_RULE_SETUP
+#line 3728 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1145:
+YY_RULE_SETUP
+#line 3733 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1146:
+YY_RULE_SETUP
+#line 3738 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1147:
+YY_RULE_SETUP
+#line 3743 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1148:
+YY_RULE_SETUP
+#line 3748 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1149:
+YY_RULE_SETUP
+#line 3753 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1150:
+YY_RULE_SETUP
+#line 3758 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1151:
+YY_RULE_SETUP
+#line 3763 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1152:
+YY_RULE_SETUP
+#line 3768 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1153:
+YY_RULE_SETUP
+#line 3773 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1154:
+YY_RULE_SETUP
+#line 3778 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1155:
+YY_RULE_SETUP
+#line 3783 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1156:
+YY_RULE_SETUP
+#line 3788 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1157:
+YY_RULE_SETUP
+#line 3793 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1158:
+YY_RULE_SETUP
+#line 3798 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1159:
+YY_RULE_SETUP
+#line 3803 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1160:
+YY_RULE_SETUP
+#line 3808 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1161:
+YY_RULE_SETUP
+#line 3813 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x33') ;
+ }
+ YY_BREAK
+case 1162:
+YY_RULE_SETUP
+#line 3818 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1163:
+YY_RULE_SETUP
+#line 3823 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1164:
+YY_RULE_SETUP
+#line 3828 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1165:
+YY_RULE_SETUP
+#line 3833 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1166:
+YY_RULE_SETUP
+#line 3838 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1167:
+YY_RULE_SETUP
+#line 3843 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1168:
+YY_RULE_SETUP
+#line 3848 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1169:
+YY_RULE_SETUP
+#line 3853 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1170:
+YY_RULE_SETUP
+#line 3858 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1171:
+YY_RULE_SETUP
+#line 3863 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1172:
+YY_RULE_SETUP
+#line 3868 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1173:
+YY_RULE_SETUP
+#line 3873 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1174:
+YY_RULE_SETUP
+#line 3878 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1175:
+YY_RULE_SETUP
+#line 3883 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1176:
+YY_RULE_SETUP
+#line 3888 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1177:
+YY_RULE_SETUP
+#line 3893 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1178:
+YY_RULE_SETUP
+#line 3898 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1179:
+YY_RULE_SETUP
+#line 3903 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1180:
+YY_RULE_SETUP
+#line 3908 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1181:
+YY_RULE_SETUP
+#line 3913 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1182:
+YY_RULE_SETUP
+#line 3918 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1183:
+YY_RULE_SETUP
+#line 3923 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1184:
+YY_RULE_SETUP
+#line 3928 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1185:
+YY_RULE_SETUP
+#line 3933 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1186:
+YY_RULE_SETUP
+#line 3938 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x32') ;
+ }
+ YY_BREAK
+case 1187:
+YY_RULE_SETUP
+#line 3943 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1188:
+YY_RULE_SETUP
+#line 3948 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1189:
+YY_RULE_SETUP
+#line 3953 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1190:
+YY_RULE_SETUP
+#line 3958 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1191:
+YY_RULE_SETUP
+#line 3963 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1192:
+YY_RULE_SETUP
+#line 3968 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1193:
+YY_RULE_SETUP
+#line 3973 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1194:
+YY_RULE_SETUP
+#line 3978 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1195:
+YY_RULE_SETUP
+#line 3983 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1196:
+YY_RULE_SETUP
+#line 3988 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1197:
+YY_RULE_SETUP
+#line 3993 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1198:
+YY_RULE_SETUP
+#line 3998 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1199:
+YY_RULE_SETUP
+#line 4003 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1200:
+YY_RULE_SETUP
+#line 4008 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1201:
+YY_RULE_SETUP
+#line 4013 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1202:
+YY_RULE_SETUP
+#line 4018 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1203:
+YY_RULE_SETUP
+#line 4023 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1204:
+YY_RULE_SETUP
+#line 4028 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1205:
+YY_RULE_SETUP
+#line 4033 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1206:
+YY_RULE_SETUP
+#line 4038 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1207:
+YY_RULE_SETUP
+#line 4043 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1208:
+YY_RULE_SETUP
+#line 4048 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1209:
+YY_RULE_SETUP
+#line 4053 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1210:
+YY_RULE_SETUP
+#line 4058 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1211:
+YY_RULE_SETUP
+#line 4063 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x26') ;
+ }
+ YY_BREAK
+case 1212:
+YY_RULE_SETUP
+#line 4068 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1213:
+YY_RULE_SETUP
+#line 4073 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1214:
+YY_RULE_SETUP
+#line 4078 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1215:
+YY_RULE_SETUP
+#line 4083 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1216:
+YY_RULE_SETUP
+#line 4088 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1217:
+YY_RULE_SETUP
+#line 4093 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1218:
+YY_RULE_SETUP
+#line 4098 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1219:
+YY_RULE_SETUP
+#line 4103 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1220:
+YY_RULE_SETUP
+#line 4108 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1221:
+YY_RULE_SETUP
+#line 4113 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1222:
+YY_RULE_SETUP
+#line 4118 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1223:
+YY_RULE_SETUP
+#line 4123 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1224:
+YY_RULE_SETUP
+#line 4128 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1225:
+YY_RULE_SETUP
+#line 4133 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1226:
+YY_RULE_SETUP
+#line 4138 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1227:
+YY_RULE_SETUP
+#line 4143 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1228:
+YY_RULE_SETUP
+#line 4148 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1229:
+YY_RULE_SETUP
+#line 4153 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1230:
+YY_RULE_SETUP
+#line 4158 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1231:
+YY_RULE_SETUP
+#line 4163 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1232:
+YY_RULE_SETUP
+#line 4168 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1233:
+YY_RULE_SETUP
+#line 4173 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1234:
+YY_RULE_SETUP
+#line 4178 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1235:
+YY_RULE_SETUP
+#line 4183 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1236:
+YY_RULE_SETUP
+#line 4188 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x1c') ;
+ }
+ YY_BREAK
+case 1237:
+YY_RULE_SETUP
+#line 4193 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1238:
+YY_RULE_SETUP
+#line 4198 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1239:
+YY_RULE_SETUP
+#line 4203 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1240:
+YY_RULE_SETUP
+#line 4208 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1241:
+YY_RULE_SETUP
+#line 4213 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1242:
+YY_RULE_SETUP
+#line 4218 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1243:
+YY_RULE_SETUP
+#line 4223 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1244:
+YY_RULE_SETUP
+#line 4228 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1245:
+YY_RULE_SETUP
+#line 4233 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1246:
+YY_RULE_SETUP
+#line 4238 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1247:
+YY_RULE_SETUP
+#line 4243 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1248:
+YY_RULE_SETUP
+#line 4248 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1249:
+YY_RULE_SETUP
+#line 4253 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1250:
+YY_RULE_SETUP
+#line 4258 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1251:
+YY_RULE_SETUP
+#line 4263 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1252:
+YY_RULE_SETUP
+#line 4268 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1253:
+YY_RULE_SETUP
+#line 4273 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1254:
+YY_RULE_SETUP
+#line 4278 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1255:
+YY_RULE_SETUP
+#line 4283 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1256:
+YY_RULE_SETUP
+#line 4288 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1257:
+YY_RULE_SETUP
+#line 4293 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1258:
+YY_RULE_SETUP
+#line 4298 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1259:
+YY_RULE_SETUP
+#line 4303 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1260:
+YY_RULE_SETUP
+#line 4308 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1261:
+YY_RULE_SETUP
+#line 4313 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x2e') ;
+ }
+ YY_BREAK
+case 1262:
+YY_RULE_SETUP
+#line 4318 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1263:
+YY_RULE_SETUP
+#line 4323 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1264:
+YY_RULE_SETUP
+#line 4328 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1265:
+YY_RULE_SETUP
+#line 4333 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1266:
+YY_RULE_SETUP
+#line 4338 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1267:
+YY_RULE_SETUP
+#line 4343 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1268:
+YY_RULE_SETUP
+#line 4348 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1269:
+YY_RULE_SETUP
+#line 4353 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1270:
+YY_RULE_SETUP
+#line 4358 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1271:
+YY_RULE_SETUP
+#line 4363 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1272:
+YY_RULE_SETUP
+#line 4368 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1273:
+YY_RULE_SETUP
+#line 4373 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1274:
+YY_RULE_SETUP
+#line 4378 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1275:
+YY_RULE_SETUP
+#line 4383 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1276:
+YY_RULE_SETUP
+#line 4388 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1277:
+YY_RULE_SETUP
+#line 4393 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1278:
+YY_RULE_SETUP
+#line 4398 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1279:
+YY_RULE_SETUP
+#line 4403 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1280:
+YY_RULE_SETUP
+#line 4408 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1281:
+YY_RULE_SETUP
+#line 4413 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1282:
+YY_RULE_SETUP
+#line 4418 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1283:
+YY_RULE_SETUP
+#line 4423 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1284:
+YY_RULE_SETUP
+#line 4428 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1285:
+YY_RULE_SETUP
+#line 4433 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1286:
+YY_RULE_SETUP
+#line 4438 "ansel2uni.ll"
+{
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x13') ;
+ }
+ YY_BREAK
+case 1287:
+YY_RULE_SETUP
+#line 4444 "ansel2uni.ll"
+ECHO;
+ YY_BREAK
+#line 12357 "ansel2uni.cc"
+case YY_STATE_EOF(INITIAL):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 2590 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 2590 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 2589);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 4444 "ansel2uni.ll"
+
+
+
+int main(int argc, char *argv[])
+{
+ ++argv, --argc; /* Skip over program name. */
+ if (argc > 0)
+ yyin = fopen(argv[0], "r");
+ else
+ yyin = stdin;
+ yylex();
+ return 0 ;
+}
+
+
diff --git a/biblio/bibtex/utils/r2bib/ansel2uni.ll b/biblio/bibtex/utils/r2bib/ansel2uni.ll
new file mode 100644
index 0000000000..aadea84cd0
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/ansel2uni.ll
@@ -0,0 +1,4456 @@
+ /* This is a lex(1) file, see http://dinosaur.compilertools.net/
+ * or http://en.wikipedia.org/wiki/Lex_programming_tool .
+ *
+ * Compilation on UNIX systems is done by
+ * make ansel2uni
+ * On other systems one may need to call lex or flex and cc explicitly:
+ * lex -o ansel2uni.c ansel2uni.l
+ * cc [-s] [-O] [-D U_TRANSF_OS_LN] [-D GEDCOM_EXT] [-D GEDCOM_LDS_EXT] [-D MARC_EXT] -o wileyEndNoteFilt ansel2uni.c -ll
+ *
+ * The executable works as a filter (copies stdin to stdout) and converts
+ * a text stream encoded in 8-bit ANSEL (Z39-47-1993, ISO-IR-231) to UTF-8 unicode.
+ * If the preprocessor symbol U_TRANSF_OS_LN has been defined, the CR-LF
+ * combination of Unixes or DOS are modified to the Unicode
+ * line separator symbol on output, else they are copied unchanged.
+ *
+ * If the preprocessor symbol GEDCOM_EXT is defined, some Gedcom-5.5 extensions
+ * of the ANSEL standard are implemented. With the current implementation
+ * this only means support of the German sharp s. If the slash
+ * modifier that strikes through characters or of graphical symbols
+ * of open or filled boxes are also needed, GEDCOM_LDS_EXT should be defined.
+ *
+ * If the preprocessor symbol MARC_EXT is defined, the MARC-8 extensions
+ * of the ANSEL standard are implemented, as described in
+ * http://lcweb2.loc.gov/diglib/codetables/45.html .
+ *
+ * Templates of use:
+ * cat infile.ans | ansel2uni > infile.uni
+ * For use in HTML/XML pages, recoding with the &#x00000; style
+ * can be done via http://billposer.org/Software/uni2ascii.html :
+ * cat infile.ans | ansel2uni | uni2ascii -q -a Q -a H > infile.xml
+ *
+ * http://en.wikipedia.org/wiki/GEDCOM
+ * http://marcpm.sourceforge.net/MARC/Charset.html
+ *
+ * @author Richard J. Mathar, 2009-01-13
+ * @since 2209-01-18 use yyout instead of stdout. Implemented MARC_EXT. Use graph for alpha char class.
+ * @see http://www.uniocode.org/versions/Unicode5.1.0/
+ */
+
+%option noyywrap
+%{
+#include <stdio.h>
+
+/* Unicode ranges U+0000 to UFFFF
+* @param hi the high (first) byte of the code point
+* @param lo the low (2nd byte) of the code point
+* @see D92 in the Unicode Standard, Table 3-6
+* @see http://en.wikipedia.org/wiki/UTF-8
+*/
+void utf3byte(const unsigned char hi, const unsigned char lo)
+{
+ const unsigned long c = 256*hi+lo ;
+ if ( c < 128)
+ fprintf(yyout,"%c",lo) ;
+ else if ( c < 2048 )
+ {
+ /* mask lower 6 bits and prefix 10, second byte */
+ const unsigned char b2 = 128 + ( c & 63 );
+ /* remove lower 6 bits and prefix 110, first byte */
+ const unsigned char b1 = 192 + ( c >> 6 ) ;
+ fprintf(yyout,"%c%c",b1,b2) ;
+ }
+ else
+ {
+ /* mask lower 6 bits and prefix 10, third byte */
+ const unsigned char b3 = 128 + ( c & 63 );
+ /* remove lower 6 bits and prefix 10 */
+ const unsigned char b2 = 128 + ( ( c & 4032 ) >> 6 ) ;
+ /* remove lower 12 bits and prefix 1110 */
+ const unsigned char b1 = 224 + ( (c & 61440 ) >> 12 ) ;
+ fprintf(yyout,"%c%c%c",b1,b2,b3) ;
+ }
+}
+
+/* Unicode ranges U+0080 to U+00FF.
+* @param c the low-byte of the unicode point in the range 0x00 to 0x7f
+* @see http://en.wikipedia.org/wiki/UTF-8
+*/
+void utf2byte(const unsigned char c)
+{
+#if 0
+ /* explicit implementation */
+ const unsigned char b2 = 128 + ( c & 63 );
+ const unsigned char b1 = 192 + ( ( c & 192 ) >> 6 ) ;
+ fprintf(yyout,"%c%c",b1,b2) ;
+#else
+ /* lazy implementation */
+ utf3byte('\0',c) ;
+#endif
+}
+
+#ifdef U_TRANSF_OS_NL
+/* Put the LS, U+2028
+* @param crlf the line feed in unix or dos representation
+* @todo
+*/
+void newl(char *crlf)
+{
+ utf3byte('\x20','\x28') ;
+}
+#else
+/*
+* @param crlf the line feed in unix or dos representation
+*/
+void newl(char *crlf)
+{
+ fprintf(yyout,"%s",crlf) ;
+}
+#endif
+
+%}
+
+ANSEL_VIETO \xac
+ANSEL_VIETU \xad
+ANSEL_VIETo \xbc
+ANSEL_VIETu \xbd
+
+ANSEL_LOWRISINGTONE \xe0
+ANSEL_GRAVEACCENT \xe1
+ANSEL_ACUTEACCENT \xe2
+ANSEL_CIRCUMFLEXACC \xe3
+ANSEL_TILDE \xe4
+ANSEL_MACRON \xe5
+ANSEL_BREVE \xe6
+ANSEL_DOTABOVE \xe7
+ANSEL_DIARESIS \xe8
+ANSEL_CARON \xe9
+ANSEL_CIRCLEABOVE \xea
+ANSEL_LIGATURELEFT \xeb
+ANSEL_LIGATURERIGHT \xec
+ANSEL_HIGHCOMMAOFFC \xed
+ANSEL_DOUBLEACUTEACC \xee
+ANSEL_CANDRABINDU \xef
+ANSEL_CEDILLA \xf0
+ANSEL_RIGHTHOOK \xf1
+ANSEL_DOTBELOW \xf2
+ANSEL_DOUBLEDOTBELOW \xf3
+ANSEL_CIRCLEBELOW \xf4
+ANSEL_DOUBLEUNDERSC \xf5
+ANSEL_UNDERSCORE \xf6
+ANSEL_LEFTHOOK \xf7
+ANSEL_RIGHTCEDILLA \xf8
+ANSEL_HALFCIRCLBELOW \xf9
+ANSEL_DOUBLETILDLEFT \xfa
+ANSEL_DOUBLETILDRIGH \xfb
+ANSEL_HIGHCOMMACENT \xfe
+
+ /* reserved for control characters */
+ANSEL_RES_C1 [\x80-\x9f]
+
+ /* corners (reserved) */
+ANSEL_CORN \xa0|\xff
+
+ /* Gedcom 5.5 extension: German sharp s */
+GEDCOM55_SZ \xcf
+
+ /* rumors but not standard, see http://homepages.rootsweb.ancestry.com/~pmcbride/gedcom/55gcappd.htm#S2 */
+GEDCOM55_EMPTYBOX \xbe
+GEDCOM55_BLACKBOX \xbf
+GEDCOM55_EMIDDLE \xcd
+GEDCOM55_OMIDDLE \xce
+GEDCOM55_SLASH \xfc
+
+ /* Strict ANSEL: reserved for future standardization, but not GEDCOM */
+ANSEL_RES_FUT \xaf|\xbb|\xbe|\xbf|[\xc7-\xdf]|\xfc|\xfd
+
+ /* not sure whether ANSEL allows a double grave to be represented as two accents */
+ANSEL_DGRAVE {ANSEL_GRAVEACCENT}{ANSEL_GRAVEACCENT}
+ANSEL_DTILDE {ANSEL_TILDE}{ANSEL_TILDE}
+
+%%
+
+\x88 {
+#ifdef MARC_EXT
+ utf2byte('\x98') ; /* START OF STRING U+0098 */
+#else
+ ECHO ;
+#endif
+ }
+
+\x89 {
+#ifdef MARC_EXT
+ utf2byte('\x9c') ; /* STRING TERMINATOR U+009C */
+#else
+ ECHO ;
+#endif
+ }
+
+\x8d {
+#ifdef MARC_EXT
+ utf3byte('\x20','\x0d') ; /* ZERO WIDTH JOINER U+200D */
+#else
+ ECHO ;
+#endif
+ }
+
+\x8e {
+#ifdef MARC_EXT
+ utf3byte('\x20','\x0c') ; /* ZERO WIDTH NON-JOINER U+200C */
+#else
+ ECHO ;
+#endif
+ }
+
+ /* C1 controls and latin supplement */
+
+ /* utf2byte('\xa0') ; /* unassigned xxxxxxxxxxxxxxxxxxxxxxx U+00A0 */
+\xc6 utf2byte('\xa1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A1 */
+ /* utf2byte('\xa2') ; /* CENT SIGN U+00A2 */
+\xb9 utf2byte('\xa3') ; /* POUND SIGN U+00A3 */
+ /* utf2byte('\xa4') ; /* CURRENCY SIGN U+00A4 */
+ /* utf2byte('\xa5') ; /* YEN SIGN U+00A5 */
+ /* utf2byte('\xa6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A6 */
+ /* utf2byte('\xa7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A7 */
+ /* utf2byte('\xa8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00A8 */
+\xc3 utf2byte('\xa9') ; /* COPYRIGH SIGN U+00A9 */
+ /* utf2byte('\xaa') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00AA */
+ /* utf2byte('\xab') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00AB */
+ /* utf2byte('\xac') ; /* NOT SIGN U+00AC */
+ /* utf2byte('\xad') ; /* SOPFTHYPHEN U+00AD */
+\xaa utf2byte('\xae') ; /* REGISTRED SIGN U+00AE */
+ /* utf2byte('\xaf') ; /* MACRON U+00AF */
+
+\xc0 utf2byte('\xb0') ; /* DEGREE SIGN U+00B0 */
+\xab utf2byte('\xb1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00B1 */
+ /* utf2byte('\xb2') ; /* SUPER SCRIPT TWO U+00B2 */
+ /* utf2byte('\xb3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00B3 */
+ /* utf2byte('\xb4') ; /* ACUTE ACCENT U+00B4 */
+ /* utf2byte('\xb5') ; /* MICRO SIGN U+00B5 */
+ /* utf2byte('\xb6') ; /* PILCROW SIGN U+00B6 */
+\xa8 utf2byte('\xb7') ; /* MIDDLE DOT U+00B7 */
+ /* utf2byte('\xb8') ; /* CEDILLA U+00B8 */
+ /* utf2byte('\xb9') ; /* SUPERSCRIPT ONE U+00B9 */
+ /* utf2byte('\xba') ; /* MASCULINE ORIDNAL INDICATOR U+00BA */
+ /* utf2byte('\xbb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BB */
+ /* utf2byte('\xbc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BC */
+ /* utf2byte('\xbd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BD */
+ /* utf2byte('\xbe') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00BE */
+\xc5 utf2byte('\xbf') ; /* INVERTED QUESTION MARK U+00BF */
+
+{ANSEL_GRAVEACCENT}A utf2byte('\xc0') ; /* A WITH ACUTE, LATIN CAPITAL LETTER U+00C0 */
+{ANSEL_ACUTEACCENT}A utf2byte('\xc1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C1 */
+{ANSEL_CIRCUMFLEXACC}A utf2byte('\xc2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C2 */
+{ANSEL_TILDE}A utf2byte('\xc3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C3 */
+{ANSEL_DIARESIS}A utf2byte('\xc4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C4 */
+{ANSEL_CIRCLEABOVE}A utf2byte('\xc5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C5 */
+\xa5 utf2byte('\xc6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C6 */
+{ANSEL_CEDILLA}C utf2byte('\xc7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C7 */
+{ANSEL_GRAVEACCENT}E utf2byte('\xc8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C8 */
+{ANSEL_ACUTEACCENT}E utf2byte('\xc9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00C9 */
+{ANSEL_CIRCUMFLEXACC}E utf2byte('\xca') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CA */
+{ANSEL_DIARESIS}E utf2byte('\xcb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CB */
+{ANSEL_GRAVEACCENT}I utf2byte('\xcc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CC */
+{ANSEL_ACUTEACCENT}I utf2byte('\xcd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CD */
+{ANSEL_CIRCUMFLEXACC}I utf2byte('\xce') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CE */
+{ANSEL_DIARESIS}I utf2byte('\xcf') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00CF */
+
+{ANSEL_TILDE}N utf2byte('\xd1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D1 */
+{ANSEL_GRAVEACCENT}O utf2byte('\xd2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D2 */
+{ANSEL_ACUTEACCENT}O utf2byte('\xd3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D3 */
+{ANSEL_CIRCUMFLEXACC}O utf2byte('\xd4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D4 */
+{ANSEL_TILDE}O utf2byte('\xd5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D5 */
+\xa8O utf2byte('\xd6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D6 */
+ /* utf2byte('\xd7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D7 */
+\xa2 utf2byte('\xd8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D8 */
+{ANSEL_GRAVEACCENT}U utf2byte('\xd9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00D9 */
+{ANSEL_ACUTEACCENT}U utf2byte('\xda') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DA */
+{ANSEL_CIRCUMFLEXACC}U utf2byte('\xdb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DB */
+{ANSEL_DIARESIS}U utf2byte('\xdc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DC */
+{ANSEL_ACUTEACCENT}Y utf2byte('\xdd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DD */
+\xa4 utf2byte('\xde') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DE */
+ /* utf2byte('\xdf') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00DF */
+
+{ANSEL_GRAVEACCENT}a utf2byte('\xe0') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E0 */
+{ANSEL_ACUTEACCENT}a utf2byte('\xe1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E1 */
+{ANSEL_CIRCUMFLEXACC}a utf2byte('\xe2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E2 */
+{ANSEL_TILDE}a utf2byte('\xe3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E3 */
+{ANSEL_DIARESIS}a utf2byte('\xe4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E4 */
+{ANSEL_CIRCLEABOVE}a utf2byte('\xe5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E5 */
+\xb5 utf2byte('\xe6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E6 */
+{ANSEL_CEDILLA}c utf2byte('\xe7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E7 */
+{ANSEL_GRAVEACCENT}e utf2byte('\xe8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E8 */
+{ANSEL_ACUTEACCENT}e utf2byte('\xe9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00E9 */
+{ANSEL_CIRCUMFLEXACC}e utf2byte('\xea') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EA */
+{ANSEL_DIARESIS}e utf2byte('\xeb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EB */
+{ANSEL_GRAVEACCENT}i utf2byte('\xec') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EC */
+{ANSEL_ACUTEACCENT}i utf2byte('\xed') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00ED */
+{ANSEL_CIRCUMFLEXACC}i utf2byte('\xee') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EE */
+{ANSEL_DIARESIS}i utf2byte('\xef') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00EF */
+
+\xba utf2byte('\xf0') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F0 */
+{ANSEL_TILDE}n utf2byte('\xf1') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F1 */
+{ANSEL_GRAVEACCENT}o utf2byte('\xf2') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F2 */
+{ANSEL_ACUTEACCENT}o utf2byte('\xf3') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F3 */
+{ANSEL_CIRCUMFLEXACC}o utf2byte('\xf4') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F4 */
+{ANSEL_TILDE}o utf2byte('\xf5') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F5 */
+{ANSEL_DIARESIS}o utf2byte('\xf6') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F6 */
+ /* utf2byte('\xf7') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F7 */
+\xb2 utf2byte('\xf8') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F8 */
+{ANSEL_GRAVEACCENT}u utf2byte('\xf9') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00F9 */
+{ANSEL_ACUTEACCENT}u utf2byte('\xfa') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FA */
+{ANSEL_CIRCUMFLEXACC}u utf2byte('\xfb') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FB */
+{ANSEL_DIARESIS}u utf2byte('\xfc') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FC */
+{ANSEL_ACUTEACCENT}y utf2byte('\xfd') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FD */
+\xb4 utf2byte('\xfe') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FE */
+{ANSEL_DIARESIS}y utf2byte('\xff') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+00FF */
+
+ /* Latin-extended A */
+
+{ANSEL_MACRON}A utf3byte('\x01','\x00') ; /* LATIN CAPITAL LETTER A WITH MACRON U+0100 */
+{ANSEL_MACRON}a utf3byte('\x01','\x01') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0101 */
+{ANSEL_BREVE}A utf3byte('\x01','\x02') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0102 */
+{ANSEL_BREVE}a utf3byte('\x01','\x03') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0103 */
+{ANSEL_RIGHTHOOK}A utf3byte('\x01','\x04') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0104 */
+{ANSEL_RIGHTHOOK}a utf3byte('\x01','\x05') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0105 */
+{ANSEL_ACUTEACCENT}C utf3byte('\x01','\x06') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0106 */
+{ANSEL_ACUTEACCENT}c utf3byte('\x01','\x07') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0107 */
+{ANSEL_CIRCUMFLEXACC}C utf3byte('\x01','\x08') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0108 */
+{ANSEL_CIRCUMFLEXACC}c utf3byte('\x01','\x09') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0109 */
+{ANSEL_DOTABOVE}C utf3byte('\x01','\x0a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010a */
+{ANSEL_DOTABOVE}c utf3byte('\x01','\x0b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010b */
+{ANSEL_CARON}C utf3byte('\x01','\x0c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010c */
+{ANSEL_CARON}c utf3byte('\x01','\x0d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010d */
+{ANSEL_CARON}D utf3byte('\x01','\x0e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010e */
+{ANSEL_CARON}d utf3byte('\x01','\x0f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+010f */
+
+ /* could this rather be U+00D0, LATIN CAPITAL LETTER ETH ? */
+\xa3 utf3byte('\x01','\x10') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0110 */
+\xb3 utf3byte('\x01','\x11') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0111 */
+{ANSEL_MACRON}E utf3byte('\x01','\x12') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0112 */
+{ANSEL_MACRON}e utf3byte('\x01','\x13') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0113 */
+{ANSEL_BREVE}E utf3byte('\x01','\x14') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0114 */
+{ANSEL_BREVE}e utf3byte('\x01','\x15') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0115 */
+{ANSEL_DOTABOVE}E utf3byte('\x01','\x16') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0116 */
+{ANSEL_DOTABOVE}e utf3byte('\x01','\x17') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0117 */
+{ANSEL_RIGHTHOOK}E utf3byte('\x01','\x18') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0118 */
+{ANSEL_RIGHTHOOK}e utf3byte('\x01','\x19') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0119 */
+{ANSEL_CARON}E utf3byte('\x01','\x1a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011a */
+{ANSEL_CARON}e utf3byte('\x01','\x1b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011b */
+{ANSEL_CIRCUMFLEXACC}G utf3byte('\x01','\x1c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011c */
+{ANSEL_CIRCUMFLEXACC}g utf3byte('\x01','\x1d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011d */
+{ANSEL_BREVE}G utf3byte('\x01','\x1e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011e */
+{ANSEL_BREVE}g utf3byte('\x01','\x1f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+011f */
+
+{ANSEL_DOTABOVE}G utf3byte('\x01','\x20') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0120 */
+{ANSEL_DOTABOVE}g utf3byte('\x01','\x21') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0121 */
+{ANSEL_CEDILLA}G utf3byte('\x01','\x22') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0122 */
+{ANSEL_CEDILLA}g utf3byte('\x01','\x23') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0123 */
+{ANSEL_CIRCUMFLEXACC}H utf3byte('\x01','\x24') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0124 */
+{ANSEL_CIRCUMFLEXACC}h utf3byte('\x01','\x25') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0125 */
+ /* utf3byte('\x01','\x26') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0126 */
+ /* utf3byte('\x01','\x27') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0127 */
+{ANSEL_TILDE}I utf3byte('\x01','\x28') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0128 */
+{ANSEL_TILDE}i utf3byte('\x01','\x29') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0129 */
+{ANSEL_MACRON}I utf3byte('\x01','\x2a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012a */
+{ANSEL_MACRON}i utf3byte('\x01','\x2b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012b */
+{ANSEL_BREVE}I utf3byte('\x01','\x2c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012c */
+{ANSEL_BREVE}i utf3byte('\x01','\x2d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012d */
+{ANSEL_RIGHTHOOK}I utf3byte('\x01','\x2e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012e */
+{ANSEL_RIGHTHOOK}i utf3byte('\x01','\x2f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+012f */
+
+{ANSEL_DOTABOVE}I utf3byte('\x01','\x30') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0130 */
+\xb8 utf3byte('\x01','\x31') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0131 */
+IJ utf3byte('\x01','\x32') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0132 */
+ij utf3byte('\x01','\x33') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0133 */
+{ANSEL_CIRCUMFLEXACC}J utf3byte('\x01','\x34') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0134 */
+{ANSEL_CIRCUMFLEXACC}j utf3byte('\x01','\x35') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0135 */
+{ANSEL_CEDILLA}K |
+{ANSEL_LEFTHOOK}K utf3byte('\x01','\x36') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0136 */
+{ANSEL_CEDILLA}k |
+{ANSEL_LEFTHOOK}k utf3byte('\x01','\x37') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0137 */
+ /* utf3byte('\x01','\x38') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0138 */
+{ANSEL_ACUTEACCENT}L utf3byte('\x01','\x39') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0139 */
+{ANSEL_ACUTEACCENT}l utf3byte('\x01','\x3a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013a */
+{ANSEL_CEDILLA}L |
+{ANSEL_LEFTHOOK}L utf3byte('\x01','\x3b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013b */
+{ANSEL_CEDILLA}l |
+{ANSEL_LEFTHOOK}l utf3byte('\x01','\x3c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013c */
+{ANSEL_CARON}L utf3byte('\x01','\x3d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013d */
+{ANSEL_CARON}l utf3byte('\x01','\x3e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013e */
+ /* utf3byte('\x01','\x3f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+013f */
+
+ /* utf3byte('\x01','\x40') ; /* LATIN SMALL LETTER L WITH MIDDLE DOT+0140 */
+\xa1 utf3byte('\x01','\x41') ; /* LATIN CAPITAL LETTER L WITH STROKE U+0141 */
+\xb1 utf3byte('\x01','\x42') ; /* LATIN SMALL LETTER L WITH STROKE U+0142 */
+{ANSEL_ACUTEACCENT}N utf3byte('\x01','\x43') ; /* LATIN CAPITAL LETTER N WITH ACUTE U+0143 */
+{ANSEL_ACUTEACCENT}n utf3byte('\x01','\x44') ; /* LATIN SMALL LETTER N WITH ACUTE U+0144 */
+{ANSEL_CEDILLA}N |
+{ANSEL_LEFTHOOK}N utf3byte('\x01','\x45') ; /* LATIN CAPITAL LETTER N WITH CEDILLA U+0145 */
+{ANSEL_CEDILLA}n |
+{ANSEL_LEFTHOOK}n utf3byte('\x01','\x46') ; /* LATIN SMALL LETTER N WITH CEDILLA U+0146 */
+{ANSEL_CARON}N utf3byte('\x01','\x47') ; /* LATIN CAPITAL LETTER N WITH CARON U+0147 */
+{ANSEL_CARON}n utf3byte('\x01','\x48') ; /* LATIN SMALL LETTER N WITH CARON U+0148 */
+ /* utf3byte('\x01','\x49') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0149 */
+ /* utf3byte('\x01','\x4a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014a */
+ /* utf3byte('\x01','\x4b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014b */
+{ANSEL_MACRON}O utf3byte('\x01','\x4c') ; /* LATIN CAPITAL LETTER O WITH MACRON U+014c */
+{ANSEL_MACRON}o utf3byte('\x01','\x4d') ; /* LATIN SMALL LETTER O WITH MACRON U+014d */
+{ANSEL_BREVE}O utf3byte('\x01','\x4e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014e */
+{ANSEL_BREVE}o utf3byte('\x01','\x4f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+014f */
+
+{ANSEL_DOUBLEACUTEACC}O utf3byte('\x01','\x50') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0150 */
+{ANSEL_DOUBLEACUTEACC}o utf3byte('\x01','\x51') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0151 */
+\xa6 utf3byte('\x01','\x52') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0152 */
+\xb6 utf3byte('\x01','\x53') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0153 */
+{ANSEL_ACUTEACCENT}R utf3byte('\x01','\x54') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0154 */
+{ANSEL_ACUTEACCENT}r utf3byte('\x01','\x55') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0155 */
+{ANSEL_CEDILLA}R |
+{ANSEL_LEFTHOOK}R utf3byte('\x01','\x56') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0156 */
+{ANSEL_CEDILLA}r |
+{ANSEL_LEFTHOOK}r utf3byte('\x01','\x57') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0157 */
+{ANSEL_CARON}R utf3byte('\x01','\x58') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0158 */
+{ANSEL_CARON}r utf3byte('\x01','\x59') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0159 */
+{ANSEL_ACUTEACCENT}S utf3byte('\x01','\x5a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015a */
+{ANSEL_ACUTEACCENT}s utf3byte('\x01','\x5b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015b */
+{ANSEL_CIRCUMFLEXACC}S utf3byte('\x01','\x5c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015c */
+{ANSEL_CIRCUMFLEXACC}s utf3byte('\x01','\x5d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015d */
+{ANSEL_CEDILLA}S utf3byte('\x01','\x5e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015e */
+{ANSEL_CEDILLA}s utf3byte('\x01','\x5f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+015f */
+
+{ANSEL_CARON}S utf3byte('\x01','\x60') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0160 */
+{ANSEL_CARON}s utf3byte('\x01','\x61') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0161 */
+{ANSEL_CEDILLA}T utf3byte('\x01','\x62') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0162 */
+{ANSEL_CEDILLA}t utf3byte('\x01','\x63') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0163 */
+{ANSEL_CARON}T utf3byte('\x01','\x64') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0164 */
+{ANSEL_CARON}t utf3byte('\x01','\x65') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0165 */
+ /* utf3byte('\x01','\x66') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0166 */
+ /* utf3byte('\x01','\x67') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0167 */
+{ANSEL_TILDE}U utf3byte('\x01','\x68') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0168 */
+{ANSEL_TILDE}u utf3byte('\x01','\x69') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0169 */
+{ANSEL_MACRON}U utf3byte('\x01','\x6a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016a */
+{ANSEL_MACRON}u utf3byte('\x01','\x6b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016b */
+{ANSEL_BREVE}U utf3byte('\x01','\x6c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016c */
+{ANSEL_BREVE}u utf3byte('\x01','\x6d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016d */
+{ANSEL_CIRCLEABOVE}U utf3byte('\x01','\x6e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016e */
+{ANSEL_CIRCLEABOVE}u utf3byte('\x01','\x6f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+016f */
+
+{ANSEL_DOUBLEACUTEACC}U utf3byte('\x01','\x70') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0170 */
+{ANSEL_DOUBLEACUTEACC}u utf3byte('\x01','\x71') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0171 */
+{ANSEL_RIGHTHOOK}U utf3byte('\x01','\x72') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0172 */
+{ANSEL_RIGHTHOOK}u utf3byte('\x01','\x73') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0173 */
+{ANSEL_CIRCUMFLEXACC}W utf3byte('\x01','\x74') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0174 */
+{ANSEL_CIRCUMFLEXACC}w utf3byte('\x01','\x75') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0175 */
+{ANSEL_CIRCUMFLEXACC}Y utf3byte('\x01','\x76') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0176 */
+{ANSEL_CIRCUMFLEXACC}y utf3byte('\x01','\x77') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0177 */
+{ANSEL_DIARESIS}Y utf3byte('\x01','\x78') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0178 */
+{ANSEL_ACUTEACCENT}Z utf3byte('\x01','\x79') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0179 */
+{ANSEL_ACUTEACCENT}z utf3byte('\x01','\x7a') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017a */
+{ANSEL_DOTABOVE}Z utf3byte('\x01','\x7b') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017b */
+{ANSEL_DOTABOVE}z utf3byte('\x01','\x7c') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017c */
+{ANSEL_CARON}Z utf3byte('\x01','\x7d') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017d */
+{ANSEL_CARON}z utf3byte('\x01','\x7e') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017e */
+ /* utf3byte('\x01','\x7f') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+017f */
+
+ /* end of Latin Extended A */
+
+ /* Latin Extended B */
+
+ /* utf3byte('\x01','\x80') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0170 */
+ /* utf3byte('\x01','\x81') ; /* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx U+0171 */
+{ANSEL_MACRON}B utf3byte('\x01','\x82') ; /* LATIN CAPITAL LETTER B WITH TOPBAR U+0182 */
+{ANSEL_MACRON}b utf3byte('\x01','\x83') ; /* LATIN SMALL LETTER B WITH TOPBAR U+0183 */
+
+{ANSEL_HIGHCOMMAOFFC}O utf3byte('\x01','\xa0') ; /* LATIN CAPITAL LETTER O WITH HORN U+01A0 */
+{ANSEL_HIGHCOMMAOFFC}o utf3byte('\x01','\xa1') ; /* LATIN SMALL LETTER O WITH HORN U+01A1 */
+{ANSEL_HIGHCOMMAOFFC}U utf3byte('\x01','\xaf') ; /* LATIN CAPITAL LETTER U WITH HORN U+01AF */
+{ANSEL_HIGHCOMMAOFFC}u utf3byte('\x01','\x80') ; /* LATIN SMALL LETTER U WIHT HORN U+0180 */
+
+D{ANSEL_CARON}Z utf3byte('\x01','\xc4') ; /* LATIN CAPITAL LETTER DZ WITH CARON U+01C4 */
+D{ANSEL_CARON}z utf3byte('\x01','\xc5') ; /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON U+01C5 */
+d{ANSEL_CARON}z utf3byte('\x01','\xc6') ; /* LATIN SMALL LETTER DZ WITH CARON U+01C6 */
+LJ utf3byte('\x01','\xc7') ; /* LATIN CAPITAL LETTER LJ U+01C7 */
+Lj utf3byte('\x01','\xc8') ; /* LATIN CAPITAL LETTER L WITH SMALL LTTER J U+01C8 */
+ /* lj utf3byte('\x01','\xc9') ; LATIN CAPITAL LETTER L WITH SMALL LTTER J U+01C9 */
+NJ utf3byte('\x01','\xca') ; /* LATIN CAPITAL LETTER NJ U+01CA */
+Nj utf3byte('\x01','\xcb') ; /* LATIN CAPITAL LETTER N WITH SMALL LTTER J U+01CB */
+ /* nj utf3byte('\x01','\xcc') ; LATIN SMALL LETTER NJ U+01CC */
+{ANSEL_CARON}A utf3byte('\x01','\xcd') ; /* U+01CD */
+{ANSEL_CARON}a utf3byte('\x01','\xce') ; /* U+01CE */
+{ANSEL_CARON}I utf3byte('\x01','\xcf') ; /* U+01CF */
+{ANSEL_CARON}i utf3byte('\x01','\xd0') ; /* U+01D0 */
+{ANSEL_CARON}O utf3byte('\x01','\xd1') ; /* U+01D1 */
+{ANSEL_CARON}o utf3byte('\x01','\xd2') ; /* U+01D2 */
+{ANSEL_CARON}U utf3byte('\x01','\xd3') ; /* U+01D3 */
+{ANSEL_CARON}u utf3byte('\x01','\xd4') ; /* U+01D4 */
+
+ /* see U+1E7A for the opposite order */
+{ANSEL_MACRON}{ANSEL_DIARESIS}U utf3byte('\x01','\xd5') ; /* U+01D5 */
+{ANSEL_MACRON}{ANSEL_DIARESIS}u utf3byte('\x01','\xd6') ; /* U+01D6 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DIARESIS}U |
+{ANSEL_DIARESIS}{ANSEL_ACUTEACCENT}U utf3byte('\x01','\xd7') ; /* U+01D7 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DIARESIS}u |
+{ANSEL_DIARESIS}{ANSEL_ACUTEACCENT}u utf3byte('\x01','\xd8') ; /* U+01D8 */
+
+{ANSEL_CARON}{ANSEL_DIARESIS}U |
+{ANSEL_DIARESIS}{ANSEL_CARON}U utf3byte('\x01','\xd9') ; /* U+01D9 */
+
+{ANSEL_CARON}{ANSEL_DIARESIS}u |
+{ANSEL_DIARESIS}{ANSEL_CARON}u utf3byte('\x01','\xda') ; /* U+01DA */
+
+{ANSEL_GRAVEACCENT}{ANSEL_DIARESIS}U |
+{ANSEL_DIARESIS}{ANSEL_GRAVEACCENT}U utf3byte('\x01','\xdb') ; /* U+01DB */
+
+{ANSEL_GRAVEACCENT}{ANSEL_DIARESIS}u |
+{ANSEL_DIARESIS}{ANSEL_GRAVEACCENT}u utf3byte('\x01','\xdc') ; /* U+01DC */
+
+{ANSEL_MACRON}{ANSEL_DIARESIS}A |
+{ANSEL_DIARESIS}{ANSEL_MACRON}A utf3byte('\x01','\xde') ; /* U+01DE */
+
+{ANSEL_MACRON}{ANSEL_DIARESIS}a |
+{ANSEL_DIARESIS}{ANSEL_MACRON}a utf3byte('\x01','\xdf') ; /* U+01DF */
+
+{ANSEL_MACRON}{ANSEL_DOTABOVE}A |
+{ANSEL_DOTABOVE}{ANSEL_MACRON}A utf3byte('\x01','\xe0') ; /* U+01E0 */
+
+{ANSEL_MACRON}{ANSEL_DOTABOVE}a |
+{ANSEL_DOTABOVE}{ANSEL_MACRON}a utf3byte('\x01','\xe1') ; /* U+01E1 */
+
+{ANSEL_MACRON}\xa5 utf3byte('\x01','\xe2') ; /* U+01E2 */
+{ANSEL_MACRON}\xb5 utf3byte('\x01','\xe3') ; /* U+01E3 */
+{ANSEL_CARON}G utf3byte('\x01','\xe6') ; /* U+01E6 */
+{ANSEL_CARON}g utf3byte('\x01','\xe7') ; /* U+01E7 */
+{ANSEL_CARON}K utf3byte('\x01','\xe8') ; /* U+01E8 */
+{ANSEL_CARON}k utf3byte('\x01','\xe9') ; /* U+01E9 */
+{ANSEL_RIGHTHOOK}O utf3byte('\x01','\xea') ; /* U+01EA */
+{ANSEL_RIGHTHOOK}o utf3byte('\x01','\xeb') ; /* U+01EB */
+
+{ANSEL_MACRON}{ANSEL_RIGHTHOOK}O |
+{ANSEL_RIGHTHOOK}{ANSEL_MACRON}O utf3byte('\x01','\xec') ; /* U+01EC */
+
+{ANSEL_MACRON}{ANSEL_RIGHTHOOK}o |
+{ANSEL_RIGHTHOOK}{ANSEL_MACRON}o utf3byte('\x01','\xed') ; /* U+01ED */
+
+{ANSEL_CARON}j utf3byte('\x01','\xf0') ; /* U+01F0 */
+
+DZ utf3byte('\x01','\xf1') ; /* U+01F1 */
+Dz utf3byte('\x01','\xf2') ; /* U+01F2 */
+dz utf3byte('\x01','\xf3') ; /* U+01F3 */
+
+{ANSEL_ACUTEACCENT}G utf3byte('\x01','\xf4') ; /* U+01F4 */
+{ANSEL_ACUTEACCENT}g utf3byte('\x01','\xf5') ; /* U+01F5 */
+{ANSEL_GRAVEACCENT}N utf3byte('\x01','\xf8') ; /* U+01F8 */
+{ANSEL_GRAVEACCENT}n utf3byte('\x01','\xf9') ; /* U+01F9 */
+
+{ANSEL_CIRCLEABOVE}{ANSEL_ACUTEACCENT}A |
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCLEABOVE}A utf3byte('\x01','\xfa') ; /* U+01FA */
+
+{ANSEL_CIRCLEABOVE}{ANSEL_ACUTEACCENT}a |
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCLEABOVE}a utf3byte('\x01','\xfb') ; /* U+01FB */
+
+{ANSEL_ACUTEACCENT}\xa5 utf3byte('\x01','\xfc') ; /* U+01FC */
+{ANSEL_ACUTEACCENT}\xb5 utf3byte('\x01','\xfd') ; /* U+01FD */
+{ANSEL_ACUTEACCENT}\xa2 utf3byte('\x01','\xfe') ; /* U+01FE */
+{ANSEL_ACUTEACCENT}\xb2 utf3byte('\x01','\xff') ; /* U+01FF */
+{ANSEL_DGRAVE}A utf3byte('\x02','\x00') ; /* U+0200 */
+{ANSEL_DGRAVE}a utf3byte('\x02','\x01') ; /* U+0201 */
+{ANSEL_DGRAVE}E utf3byte('\x02','\x04') ; /* U+0204 */
+{ANSEL_DGRAVE}e utf3byte('\x02','\x05') ; /* U+0205 */
+{ANSEL_DGRAVE}I utf3byte('\x02','\x08') ; /* U+0208 */
+{ANSEL_DGRAVE}i utf3byte('\x02','\x09') ; /* U+0209 */
+{ANSEL_DGRAVE}O utf3byte('\x02','\x0c') ; /* U+020C */
+{ANSEL_DGRAVE}o utf3byte('\x02','\x0d') ; /* U+020D */
+{ANSEL_DGRAVE}R utf3byte('\x02','\x10') ; /* U+0210 */
+{ANSEL_DGRAVE}r utf3byte('\x02','\x11') ; /* U+0211 */
+{ANSEL_DGRAVE}U utf3byte('\x02','\x14') ; /* U+0214 */
+{ANSEL_DGRAVE}u utf3byte('\x02','\x15') ; /* U+0215 */
+{ANSEL_LEFTHOOK}S utf3byte('\x02','\x18') ; /* U+0218 */
+{ANSEL_LEFTHOOK}s utf3byte('\x02','\x19') ; /* U+0219 */
+{ANSEL_LEFTHOOK}T utf3byte('\x02','\x1a') ; /* U+021A */
+{ANSEL_LEFTHOOK}t utf3byte('\x02','\x1b') ; /* U+021B */
+{ANSEL_CARON}H utf3byte('\x02','\x1e') ; /* U+021E */
+{ANSEL_CARON}h utf3byte('\x02','\x1f') ; /* U+021F */
+{ANSEL_DOTABOVE}A utf3byte('\x02','\x26') ; /* U+0226 */
+{ANSEL_DOTABOVE}a utf3byte('\x02','\x27') ; /* U+0227 */
+{ANSEL_CEDILLA}E utf3byte('\x02','\x28') ; /* U+0228 */
+{ANSEL_CEDILLA}e utf3byte('\x02','\x29') ; /* U+0229 */
+
+{ANSEL_MACRON}{ANSEL_DIARESIS}O |
+{ANSEL_DIARESIS}{ANSEL_MACRON}O utf3byte('\x02','\x2a') ; /* U+022A */
+
+{ANSEL_MACRON}{ANSEL_DIARESIS}o |
+{ANSEL_DIARESIS}{ANSEL_MACRON}o utf3byte('\x02','\x2b') ; /* U+022B */
+
+{ANSEL_MACRON}{ANSEL_TILDE}O |
+{ANSEL_TILDE}{ANSEL_MACRON}O utf3byte('\x02','\x2c') ; /* U+022C */
+
+{ANSEL_MACRON}{ANSEL_TILDE}o |
+{ANSEL_TILDE}{ANSEL_MACRON}o utf3byte('\x02','\x2d') ; /* U+022D */
+
+{ANSEL_DOTABOVE}O utf3byte('\x02','\x2e') ; /* U+022E */
+{ANSEL_DOTABOVE}o utf3byte('\x02','\x2f') ; /* U+022F */
+
+{ANSEL_MACRON}{ANSEL_DOTABOVE}O |
+{ANSEL_DOTABOVE}{ANSEL_MACRON}O utf3byte('\x02','\x30') ; /* U+0230 */
+
+{GEDCOM55_SLASH}A {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3a') ; /* U+023A */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+{GEDCOM55_SLASH}C {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3b') ; /* U+023B */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+{GEDCOM55_SLASH}c {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3c') ; /* U+023C */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+{ANSEL_MACRON}{ANSEL_DOTABOVE}o |
+{ANSEL_DOTABOVE}{ANSEL_MACRON}o utf3byte('\x02','\x31') ; /* U+0231 */
+
+{ANSEL_MACRON}Y utf3byte('\x02','\x32') ; /* U+0232 */
+{ANSEL_MACRON}y utf3byte('\x02','\x33') ; /* U+0233 */
+
+{GEDCOM55_SLASH}T {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x3e') ; /* U+023E */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+{GEDCOM55_SLASH}E {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x46') ; /* U+0246 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+{GEDCOM55_SLASH}e {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x02','\x47') ; /* U+0247 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+ /* end of Latin-extended B */
+
+ /* Latin-extended Additional */
+{ANSEL_CIRCLEBELOW}A utf3byte('\x1e','\x00') ; /* U+1E00 */
+{ANSEL_CIRCLEBELOW}a utf3byte('\x1e','\x01') ; /* U+1E01 */
+{ANSEL_DOTABOVE}B utf3byte('\x1e','\x02') ; /* U+1E02 */
+{ANSEL_DOTABOVE}b utf3byte('\x1e','\x03') ; /* U+1E03 */
+{ANSEL_DOTBELOW}B utf3byte('\x1e','\x04') ; /* U+1E04 */
+{ANSEL_DOTBELOW}b utf3byte('\x1e','\x05') ; /* U+1E05 */
+{ANSEL_UNDERSCORE}B utf3byte('\x1e','\x06') ; /* U+1E06 */
+{ANSEL_UNDERSCORE}b utf3byte('\x1e','\x07') ; /* U+1E07 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CEDILLA}C |
+{ANSEL_CEDILLA}{ANSEL_ACUTEACCENT}C utf3byte('\x1e','\x08') ; /* U+1E08 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CEDILLA}c |
+{ANSEL_CEDILLA}{ANSEL_ACUTEACCENT}c utf3byte('\x1e','\x09') ; /* U+1E09 */
+
+{ANSEL_DOTABOVE}D utf3byte('\x1e','\x0a') ; /* U+1E0A */
+{ANSEL_DOTABOVE}d utf3byte('\x1e','\x0b') ; /* U+1E0B */
+{ANSEL_DOTBELOW}D utf3byte('\x1e','\x0c') ; /* U+1E0C */
+{ANSEL_DOTBELOW}d utf3byte('\x1e','\x0d') ; /* U+1E0D */
+{ANSEL_UNDERSCORE}D utf3byte('\x1e','\x0e') ; /* U+1E0E */
+{ANSEL_UNDERSCORE}d utf3byte('\x1e','\x0f') ; /* U+1E0F */
+{ANSEL_CEDILLA}D |
+{ANSEL_LEFTHOOK}D utf3byte('\x1e','\x10') ; /* U+1E10 */
+{ANSEL_CEDILLA}d |
+{ANSEL_LEFTHOOK}d utf3byte('\x1e','\x11') ; /* U+1E11 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_MACRON}E |
+{ANSEL_MACRON}{ANSEL_GRAVEACCENT}E utf3byte('\x1e','\x14') ; /* U+1E14 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_MACRON}e |
+{ANSEL_MACRON}{ANSEL_GRAVEACCENT}e utf3byte('\x1e','\x15') ; /* U+1E15 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_MACRON}E |
+{ANSEL_MACRON}{ANSEL_ACUTEACCENT}E utf3byte('\x1e','\x16') ; /* U+1E16 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_MACRON}e |
+{ANSEL_MACRON}{ANSEL_ACUTEACCENT}e utf3byte('\x1e','\x17') ; /* U+1E17 */
+
+{ANSEL_CEDILLA}{ANSEL_BREVE}E |
+{ANSEL_BREVE}{ANSEL_CEDILLA}E utf3byte('\x1e','\x1c') ; /* U+1E1C */
+
+{ANSEL_CEDILLA}{ANSEL_BREVE}e |
+{ANSEL_BREVE}{ANSEL_CEDILLA}e utf3byte('\x1e','\x1d') ; /* U+1E1D */
+
+{ANSEL_DOTABOVE}F utf3byte('\x1e','\x1e') ; /* U+1E1E */
+{ANSEL_DOTABOVE}f utf3byte('\x1e','\x1f') ; /* U+1E1F */
+{ANSEL_MACRON}G utf3byte('\x1e','\x20') ; /* U+1E20 */
+{ANSEL_MACRON}g utf3byte('\x1e','\x21') ; /* U+1E21 */
+{ANSEL_DOTABOVE}H utf3byte('\x1e','\x22') ; /* U+1E22 */
+{ANSEL_DOTABOVE}h utf3byte('\x1e','\x23') ; /* U+1E23 */
+{ANSEL_DOTBELOW}H utf3byte('\x1e','\x24') ; /* U+1E24 */
+{ANSEL_DOTBELOW}h utf3byte('\x1e','\x25') ; /* U+1E25 */
+{ANSEL_DIARESIS}H utf3byte('\x1e','\x26') ; /* U+1E26 */
+{ANSEL_DIARESIS}h utf3byte('\x1e','\x27') ; /* U+1E27 */
+{ANSEL_CEDILLA}H |
+{ANSEL_LEFTHOOK}H utf3byte('\x1e','\x28') ; /* U+1E28 */
+{ANSEL_CEDILLA}h |
+{ANSEL_LEFTHOOK}h utf3byte('\x1e','\x29') ; /* U+1E29 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DIARESIS}I |
+{ANSEL_DIARESIS}{ANSEL_ACUTEACCENT}I utf3byte('\x1e','\x2e') ; /* U+1E2E */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DIARESIS}i |
+{ANSEL_DIARESIS}{ANSEL_ACUTEACCENT}i utf3byte('\x1e','\x2f') ; /* U+1E2F */
+
+{ANSEL_ACUTEACCENT}K utf3byte('\x1e','\x30') ; /* U+1E30 */
+{ANSEL_ACUTEACCENT}k utf3byte('\x1e','\x31') ; /* U+1E31 */
+{ANSEL_DOTBELOW}K utf3byte('\x1e','\x32') ; /* U+1E32 */
+{ANSEL_DOTBELOW}k utf3byte('\x1e','\x33') ; /* U+1E33 */
+{ANSEL_UNDERSCORE}K utf3byte('\x1e','\x34') ; /* U+1E34 */
+{ANSEL_UNDERSCORE}k utf3byte('\x1e','\x35') ; /* U+1E35 */
+{ANSEL_DOTBELOW}L utf3byte('\x1e','\x36') ; /* U+1E36 */
+{ANSEL_DOTBELOW}l utf3byte('\x1e','\x37') ; /* U+1E37 */
+
+{ANSEL_DOTBELOW}{ANSEL_MACRON}L |
+{ANSEL_MACRON}{ANSEL_DOTBELOW}L utf3byte('\x1e','\x38') ; /* U+1E38 */
+
+{ANSEL_DOTBELOW}{ANSEL_MACRON}l |
+{ANSEL_MACRON}{ANSEL_DOTBELOW}l utf3byte('\x1e','\x39') ; /* U+1E39 */
+
+{ANSEL_UNDERSCORE}L utf3byte('\x1e','\x3a') ; /* U+1E3A */
+{ANSEL_UNDERSCORE}l utf3byte('\x1e','\x3b') ; /* U+1E3B */
+{ANSEL_ACUTEACCENT}M utf3byte('\x1e','\x3e') ; /* U+1E3E */
+{ANSEL_ACUTEACCENT}m utf3byte('\x1e','\x3f') ; /* U+1E3F */
+{ANSEL_DOTABOVE}M utf3byte('\x1e','\x40') ; /* U+1E40 */
+{ANSEL_DOTABOVE}m utf3byte('\x1e','\x41') ; /* U+1E41 */
+{ANSEL_DOTBELOW}M utf3byte('\x1e','\x42') ; /* U+1E42 */
+{ANSEL_DOTBELOW}m utf3byte('\x1e','\x43') ; /* U+1E43 */
+{ANSEL_DOTABOVE}N utf3byte('\x1e','\x44') ; /* U+1E44 */
+{ANSEL_DOTABOVE}n utf3byte('\x1e','\x45') ; /* U+1E45 */
+{ANSEL_UNDERSCORE}N utf3byte('\x1e','\x46') ; /* U+1E46 */
+{ANSEL_UNDERSCORE}n utf3byte('\x1e','\x47') ; /* U+1E47 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_TILDE}O |
+{ANSEL_TILDE}{ANSEL_ACUTEACCENT}O utf3byte('\x1e','\x4c') ; /* U+1E4C */
+
+{ANSEL_ACUTEACCENT}{ANSEL_TILDE}o |
+{ANSEL_TILDE}{ANSEL_ACUTEACCENT}o utf3byte('\x1e','\x4d') ; /* U+1E4D */
+
+{ANSEL_DIARESIS}{ANSEL_TILDE}O |
+{ANSEL_TILDE}{ANSEL_DIARESIS}O utf3byte('\x1e','\x4e') ; /* U+1E4E */
+
+{ANSEL_DIARESIS}{ANSEL_TILDE}o |
+{ANSEL_TILDE}{ANSEL_DIARESIS}o utf3byte('\x1e','\x4f') ; /* U+1E4F */
+
+{ANSEL_GRAVEACCENT}{ANSEL_MACRON}O |
+{ANSEL_MACRON}{ANSEL_GRAVEACCENT}O utf3byte('\x1e','\x50') ; /* U+1E50 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_MACRON}o |
+{ANSEL_MACRON}{ANSEL_GRAVEACCENT}o utf3byte('\x1e','\x51') ; /* U+1E51 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_MACRON}O |
+{ANSEL_MACRON}{ANSEL_ACUTEACCENT}O utf3byte('\x1e','\x52') ; /* U+1E52 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_MACRON}o |
+{ANSEL_MACRON}{ANSEL_ACUTEACCENT}o utf3byte('\x1e','\x53') ; /* U+1E53 */
+
+{ANSEL_ACUTEACCENT}P utf3byte('\x1e','\x54') ; /* U+1E54 */
+{ANSEL_ACUTEACCENT}p utf3byte('\x1e','\x55') ; /* U+1E55 */
+{ANSEL_DOTABOVE}P utf3byte('\x1e','\x56') ; /* U+1E56 */
+{ANSEL_DOTABOVE}p utf3byte('\x1e','\x57') ; /* U+1E57 */
+{ANSEL_DOTABOVE}R utf3byte('\x1e','\x58') ; /* U+1E58 */
+{ANSEL_DOTABOVE}r utf3byte('\x1e','\x59') ; /* U+1E59 */
+{ANSEL_DOTBELOW}R utf3byte('\x1e','\x5a') ; /* U+1E5A */
+{ANSEL_DOTBELOW}r utf3byte('\x1e','\x5b') ; /* U+1E5B */
+
+{ANSEL_DOTBELOW}{ANSEL_MACRON}R |
+{ANSEL_MACRON}{ANSEL_DOTBELOW}R utf3byte('\x1e','\x5c') ; /* U+1E5c */
+
+{ANSEL_DOTBELOW}{ANSEL_MACRON}r |
+{ANSEL_MACRON}{ANSEL_DOTBELOW}r utf3byte('\x1e','\x5d') ; /* U+1E5D */
+
+{ANSEL_UNDERSCORE}R utf3byte('\x1e','\x5e') ; /* U+1E5E */
+{ANSEL_UNDERSCORE}r utf3byte('\x1e','\x5f') ; /* U+1E5F */
+{ANSEL_DOTABOVE}S utf3byte('\x1e','\x60') ; /* U+1E60 */
+{ANSEL_DOTABOVE}s utf3byte('\x1e','\x61') ; /* U+1E61 */
+{ANSEL_DOTBELOW}S utf3byte('\x1e','\x62') ; /* U+1E62 */
+{ANSEL_DOTBELOW}s utf3byte('\x1e','\x63') ; /* U+1E63 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DOTABOVE}S |
+{ANSEL_DOTABOVE}{ANSEL_ACUTEACCENT}S utf3byte('\x1e','\x64') ; /* U+1E64 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_DOTABOVE}s |
+{ANSEL_DOTABOVE}{ANSEL_ACUTEACCENT}s utf3byte('\x1e','\x65') ; /* U+1E65 */
+
+{ANSEL_CARON}{ANSEL_DOTABOVE}S |
+{ANSEL_DOTABOVE}{ANSEL_CARON}S utf3byte('\x1e','\x66') ; /* U+1E66 */
+
+{ANSEL_CARON}{ANSEL_DOTABOVE}s |
+{ANSEL_DOTABOVE}{ANSEL_CARON}s utf3byte('\x1e','\x67') ; /* U+1E67 */
+
+{ANSEL_DOTBELOW}{ANSEL_DOTABOVE}S |
+{ANSEL_DOTABOVE}{ANSEL_DOTBELOW}S utf3byte('\x1e','\x68') ; /* U+1E68 */
+
+{ANSEL_DOTBELOW}{ANSEL_DOTABOVE}s |
+{ANSEL_DOTABOVE}{ANSEL_DOTBELOW}s utf3byte('\x1e','\x69') ; /* U+1E69 */
+
+{ANSEL_DOTABOVE}T utf3byte('\x1e','\x6a') ; /* U+1E6A */
+{ANSEL_DOTABOVE}t utf3byte('\x1e','\x6b') ; /* U+1E6B */
+{ANSEL_DOTBELOW}T utf3byte('\x1e','\x6c') ; /* U+1E6C */
+{ANSEL_DOTBELOW}t utf3byte('\x1e','\x6d') ; /* U+1E6d */
+{ANSEL_UNDERSCORE}T utf3byte('\x1e','\x6e') ; /* U+1E6d */
+{ANSEL_UNDERSCORE}t utf3byte('\x1e','\x6f') ; /* U+1E6F */
+{ANSEL_DOUBLEDOTBELOW}U utf3byte('\x1e','\x72') ; /* U+1E72 */
+{ANSEL_DOUBLEDOTBELOW}u utf3byte('\x1e','\x73') ; /* U+1E73 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_TILDE}U |
+{ANSEL_TILDE}{ANSEL_ACUTEACCENT}U utf3byte('\x1e','\x78') ; /* U+1E78 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_TILDE}u |
+{ANSEL_TILDE}{ANSEL_ACUTEACCENT}u utf3byte('\x1e','\x79') ; /* U+1E79 */
+
+ /* see U+01D5 for the opposite order */
+{ANSEL_DIARESIS}{ANSEL_MACRON}U utf3byte('\x1e','\x7a') ; /* U+1E7A */
+{ANSEL_DIARESIS}{ANSEL_MACRON}u utf3byte('\x1e','\x7b') ; /* U+1E7B */
+
+{ANSEL_TILDE}V utf3byte('\x1e','\x7c') ; /* U+1E7C */
+{ANSEL_TILDE}v utf3byte('\x1e','\x7d') ; /* U+1E7D */
+{ANSEL_DOTBELOW}V utf3byte('\x1e','\x7e') ; /* U+1E7E */
+{ANSEL_DOTBELOW}v utf3byte('\x1e','\x7f') ; /* U+1E7F */
+{ANSEL_GRAVEACCENT}W utf3byte('\x1e','\x80') ; /* U+1E80 */
+{ANSEL_GRAVEACCENT}w utf3byte('\x1e','\x81') ; /* U+1E81 */
+{ANSEL_ACUTEACCENT}W utf3byte('\x1e','\x82') ; /* U+1E82 */
+{ANSEL_ACUTEACCENT}w utf3byte('\x1e','\x83') ; /* U+1E83 */
+{ANSEL_DIARESIS}W utf3byte('\x1e','\x84') ; /* U+1E84 */
+{ANSEL_DIARESIS}w utf3byte('\x1e','\x85') ; /* U+1E85 */
+{ANSEL_DOTABOVE}W utf3byte('\x1e','\x86') ; /* U+1E86 */
+{ANSEL_DOTABOVE}w utf3byte('\x1e','\x87') ; /* U+1E87 */
+{ANSEL_DOTBELOW}W utf3byte('\x1e','\x88') ; /* U+1E88 */
+{ANSEL_DOTBELOW}w utf3byte('\x1e','\x89') ; /* U+1E89 */
+{ANSEL_DOTABOVE}X utf3byte('\x1e','\x8a') ; /* U+1E8A */
+{ANSEL_DOTABOVE}x utf3byte('\x1e','\x8b') ; /* U+1E8B */
+{ANSEL_DIARESIS}X utf3byte('\x1e','\x8c') ; /* U+1E8C */
+{ANSEL_DIARESIS}x utf3byte('\x1e','\x8d') ; /* U+1E8D */
+{ANSEL_DOTABOVE}Y utf3byte('\x1e','\x8e') ; /* U+1E8E */
+{ANSEL_DOTABOVE}y utf3byte('\x1e','\x8f') ; /* U+1E8F */
+{ANSEL_CIRCUMFLEXACC}Z utf3byte('\x1e','\x90') ; /* U+1E90 */
+{ANSEL_CIRCUMFLEXACC}z utf3byte('\x1e','\x91') ; /* U+1E91 */
+{ANSEL_DOTBELOW}Z utf3byte('\x1e','\x92') ; /* U+1E92 */
+{ANSEL_DOTBELOW}z utf3byte('\x1e','\x93') ; /* U+1E93 */
+{ANSEL_UNDERSCORE}Z utf3byte('\x1e','\x94') ; /* U+1E94 */
+{ANSEL_UNDERSCORE}z utf3byte('\x1e','\x95') ; /* U+1E95 */
+{ANSEL_UNDERSCORE}h utf3byte('\x1e','\x96') ; /* U+1E96 */
+{ANSEL_DIARESIS}t utf3byte('\x1e','\x97') ; /* U+1E97 */
+{ANSEL_CIRCLEABOVE}w utf3byte('\x1e','\x98') ; /* U+1E98 */
+{ANSEL_CIRCLEABOVE}y utf3byte('\x1e','\x99') ; /* U+1E99 */
+{ANSEL_DOTBELOW}A utf3byte('\x1e','\xa0') ; /* U+1EA0 */
+{ANSEL_DOTBELOW}a utf3byte('\x1e','\xa1') ; /* U+1EA1 */
+{ANSEL_LOWRISINGTONE}A utf3byte('\x1e','\xa2') ; /* U+1EA2 */
+{ANSEL_LOWRISINGTONE}a utf3byte('\x1e','\xa3') ; /* U+1EA3 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}A |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}A utf3byte('\x1e','\xa4') ; /* U+1EA4 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}a |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}a utf3byte('\x1e','\xa5') ; /* U+1EA5 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}A |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}A utf3byte('\x1e','\xa6') ; /* U+1EA6 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}a |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}a utf3byte('\x1e','\xa7') ; /* U+1EA7 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}A |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}A utf3byte('\x1e','\xa8') ; /* U+1EA8 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}a |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}a utf3byte('\x1e','\xa9') ; /* U+1EA9 */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}A |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}A utf3byte('\x1e','\xaa') ; /* U+1EAA */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}a |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}a utf3byte('\x1e','\xab') ; /* U+1EAB */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}A |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}A utf3byte('\x1e','\xac') ; /* U+1EAC */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}a |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}a utf3byte('\x1e','\xad') ; /* U+1EAD */
+
+{ANSEL_ACUTEACCENT}{ANSEL_BREVE}A |
+{ANSEL_BREVE}{ANSEL_ACUTEACCENT}A utf3byte('\x1e','\xae') ; /* U+1EAE */
+
+{ANSEL_ACUTEACCENT}{ANSEL_BREVE}a |
+{ANSEL_BREVE}{ANSEL_ACUTEACCENT}a utf3byte('\x1e','\xaf') ; /* U+1EAF */
+
+{ANSEL_GRAVEACCENT}{ANSEL_BREVE}A |
+{ANSEL_BREVE}{ANSEL_GRAVEACCENT}A utf3byte('\x1e','\xb0') ; /* U+1EB0 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_BREVE}a |
+{ANSEL_BREVE}{ANSEL_GRAVEACCENT}a utf3byte('\x1e','\xb1') ; /* U+1EB1 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_BREVE}A |
+{ANSEL_BREVE}{ANSEL_LOWRISINGTONE}A utf3byte('\x1e','\xb2') ; /* U+1EB2 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_BREVE}a |
+{ANSEL_BREVE}{ANSEL_LOWRISINGTONE}a utf3byte('\x1e','\xb3') ; /* U+1EB3 */
+
+{ANSEL_TILDE}{ANSEL_BREVE}A |
+{ANSEL_BREVE}{ANSEL_TILDE}A utf3byte('\x1e','\xb4') ; /* U+1EB4 */
+
+{ANSEL_TILDE}{ANSEL_BREVE}a |
+{ANSEL_BREVE}{ANSEL_TILDE}a utf3byte('\x1e','\xb5') ; /* U+1EB5 */
+
+{ANSEL_DOTBELOW}{ANSEL_BREVE}A |
+{ANSEL_BREVE}{ANSEL_DOTBELOW}A utf3byte('\x1e','\xb6') ; /* U+1EB6 */
+
+{ANSEL_DOTBELOW}{ANSEL_BREVE}a |
+{ANSEL_BREVE}{ANSEL_DOTBELOW}a utf3byte('\x1e','\xb7') ; /* U+1EB7 */
+
+{ANSEL_DOTBELOW}E utf3byte('\x1e','\xb8') ; /* U+1EB8 */
+{ANSEL_DOTBELOW}e utf3byte('\x1e','\xb9') ; /* U+1EB9 */
+
+{ANSEL_LOWRISINGTONE}E utf3byte('\x1e','\xba') ; /* U+1EBA */
+{ANSEL_LOWRISINGTONE}e utf3byte('\x1e','\xbb') ; /* U+1EBB */
+{ANSEL_TILDE}E utf3byte('\x1e','\xbc') ; /* U+1EBC */
+{ANSEL_TILDE}e utf3byte('\x1e','\xbd') ; /* U+1EBD */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}E |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}E utf3byte('\x1e','\xbe') ; /* U+1EBE */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}e |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}e utf3byte('\x1e','\xbf') ; /* U+1EBF */
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}E |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}E utf3byte('\x1e','\xc0') ; /* U+1EC0*/
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}e |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}e utf3byte('\x1e','\xc1') ; /* U+1EC1 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}E |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}E utf3byte('\x1e','\xc2') ; /* U+1EC2 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}e |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}e utf3byte('\x1e','\xc3') ; /* U+1EC3 */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}E |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}E utf3byte('\x1e','\xc4') ; /* U+1EC4 */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}e |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}e utf3byte('\x1e','\xc5') ; /* U+1EC5 */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}E |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}E utf3byte('\x1e','\xc6') ; /* U+1EC6 */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}e |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}e utf3byte('\x1e','\xc7') ; /* U+1EC7 */
+
+{ANSEL_LOWRISINGTONE}I utf3byte('\x1e','\xc8') ; /* U+1EC8 */
+{ANSEL_LOWRISINGTONE}i utf3byte('\x1e','\xc9') ; /* U+1EC9 */
+{ANSEL_DOTBELOW}I utf3byte('\x1e','\xca') ; /* U+1ECA */
+{ANSEL_DOTBELOW}i utf3byte('\x1e','\xcb') ; /* U+1ECB */
+{ANSEL_DOTBELOW}O utf3byte('\x1e','\xcc') ; /* U+1ECC */
+{ANSEL_DOTBELOW}o utf3byte('\x1e','\xcd') ; /* U+1ECD */
+{ANSEL_LOWRISINGTONE}O utf3byte('\x1e','\xce') ; /* U+1ECE */
+{ANSEL_LOWRISINGTONE}o utf3byte('\x1e','\xcf') ; /* U+1ECF */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}O |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}O utf3byte('\x1e','\xd0') ; /* U+1ED0 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}o |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}o utf3byte('\x1e','\xd1') ; /* U+1Ed1 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}O |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}O utf3byte('\x1e','\xd2') ; /* U+1ED2 */
+
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}o |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}o utf3byte('\x1e','\xd3') ; /* U+1ED3 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}O |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}O utf3byte('\x1e','\xd4') ; /* U+1ED4 */
+
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}o |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}o utf3byte('\x1e','\xd5') ; /* U+1Ed5 */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}O |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}O utf3byte('\x1e','\xd6') ; /* U+1ED6 */
+
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}o |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}o utf3byte('\x1e','\xd7') ; /* U+1ED7 */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}O |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}O utf3byte('\x1e','\xd8') ; /* U+1ED8 */
+
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}o |
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}o utf3byte('\x1e','\xd9') ; /* U+1ED9 */
+
+{ANSEL_ACUTEACCENT}{ANSEL_VIETO} utf3byte('\x1e','\xda') ; /* U+1EDA */
+{ANSEL_ACUTEACCENT}{ANSEL_VIETo} utf3byte('\x1e','\xdb') ; /* U+1EDB */
+{ANSEL_GRAVEACCENT}{ANSEL_VIETO} utf3byte('\x1e','\xdc') ; /* U+1EDC */
+{ANSEL_GRAVEACCENT}{ANSEL_VIETo} utf3byte('\x1e','\xdd') ; /* U+1EDD */
+{ANSEL_LOWRISINGTONE}{ANSEL_VIETO} utf3byte('\x1e','\xde') ; /* U+1EDE */
+{ANSEL_LOWRISINGTONE}{ANSEL_VIETo} utf3byte('\x1e','\xdf') ; /* U+1EDF */
+{ANSEL_TILDE}{ANSEL_VIETO} utf3byte('\x1e','\xe0') ; /* U+1EE0 */
+{ANSEL_TILDE}{ANSEL_VIETo} utf3byte('\x1e','\xe1') ; /* U+1EE1 */
+{ANSEL_DOTBELOW}{ANSEL_VIETO} utf3byte('\x1e','\xe2') ; /* U+1EE2 */
+{ANSEL_DOTBELOW}{ANSEL_VIETo} utf3byte('\x1e','\xe3') ; /* U+1EE3 */
+{ANSEL_DOTBELOW}U utf3byte('\x1e','\xe4') ; /* U+1EE4 */
+{ANSEL_DOTBELOW}u utf3byte('\x1e','\xe5') ; /* U+1EE5 */
+{ANSEL_LOWRISINGTONE}U utf3byte('\x1e','\xe6') ; /* U+1EE6 */
+{ANSEL_LOWRISINGTONE}u utf3byte('\x1e','\xe7') ; /* U+1EE7 */
+{ANSEL_ACUTEACCENT}{ANSEL_VIETU} utf3byte('\x1e','\xe8') ; /* U+1EE8 */
+{ANSEL_ACUTEACCENT}{ANSEL_VIETu} utf3byte('\x1e','\xe9') ; /* U+1EE9 */
+{ANSEL_GRAVEACCENT}{ANSEL_VIETU} utf3byte('\x1e','\xea') ; /* U+1EEA */
+{ANSEL_GRAVEACCENT}{ANSEL_VIETu} utf3byte('\x1e','\xeb') ; /* U+1EEB */
+{ANSEL_LOWRISINGTONE}{ANSEL_VIETU} utf3byte('\x1e','\xec') ; /* U+1EEC */
+{ANSEL_LOWRISINGTONE}{ANSEL_VIETu} utf3byte('\x1e','\xed') ; /* U+1EED */
+{ANSEL_TILDE}{ANSEL_VIETU} utf3byte('\x1e','\xee') ; /* U+1EEE */
+{ANSEL_TILDE}{ANSEL_VIETu} utf3byte('\x1e','\xef') ; /* U+1EEF */
+{ANSEL_DOTBELOW}{ANSEL_VIETU} utf3byte('\x1e','\xf0') ; /* U+1EF0 */
+{ANSEL_DOTBELOW}{ANSEL_VIETu} utf3byte('\x1e','\xf1') ; /* U+1EF1 */
+{ANSEL_GRAVEACCENT}Y utf3byte('\x1e','\xf2') ; /* U+1EF2 */
+{ANSEL_GRAVEACCENT}y utf3byte('\x1e','\xf3') ; /* U+1EF3 */
+{ANSEL_DOTBELOW}Y utf3byte('\x1e','\xf4') ; /* U+1EF4 */
+{ANSEL_DOTBELOW}y utf3byte('\x1e','\xf5') ; /* U+1EF5 */
+{ANSEL_LOWRISINGTONE}Y utf3byte('\x1e','\xf6') ; /* U+1EF6 */
+{ANSEL_LOWRISINGTONE}y utf3byte('\x1e','\xf7') ; /* U+1EF7 */
+{ANSEL_TILDE}Y utf3byte('\x1e','\xf8') ; /* U+1EF8 */
+{ANSEL_TILDE}y utf3byte('\x1e','\xf9') ; /* U+1EF9 */
+
+ /* end of Latin Extended Additional */
+
+\xae utf3byte('\x02','\xbc') ; /* alif */ /* U+1EBC */
+\xb0 utf3byte('\x02','\xbb') ; /* ayn */ /* U+1EBB */
+
+ /* MUSIC */
+\xa9 utf3byte('\x26','\x6d') ; /* MUSIC FLAT SIGN U+266D */
+\xc4 utf3byte('\x26','\x6f') ; /* MUSIC SHARP SIGN U+266F */
+
+\xc1 utf3byte('\x21','\x13') ; /* SCRIPT SMALL L U+2113 */
+\xc2 utf3byte('\x21','\x17') ; /* SOUNC RECORDING COPYRIGHT U+2117 */
+
+ /* hard, soft signs */
+\xb7 {
+#ifdef MARC_EXT
+ utf3byte('\x02','\xba') ; /* MODIFIER LETTER DOUBLE PRIME U+02BA */
+#else
+ utf3byte('\x04','\x4a') ; /* CYRILLIC SMALL LETTER HARD SIGN U+044A */
+#endif
+ }
+
+\xa7 {
+#ifdef MARC_EXT
+ utf3byte('\x02','\xb9') ; /* U+02B9 */
+#else
+ utf3byte('\x04','\x4c') ; /* CYRILLIC SMALL LETTER SOFT SIGN U+044A */
+#endif
+ }
+
+ /* Vietnamiese from Latin Extended-B */
+ANSEL_VIETO utf3byte('\x01','\xa0') ; /* LATIN CAPITAL LETTER o WITH HORN U+01A0 */
+ANSEL_VIETo utf3byte('\x01','\xa1') ; /* LATIN SMALL LETTER o WITH HORN U+01A1 */
+ANSEL_VIETU utf3byte('\x01','\xaf') ; /* LATIN CAPITAL LETTER u WITH HORN U+01AF */
+ANSEL_VIETu utf3byte('\x01','\xb0') ; /* LATIN SMALL LETTER u WITH HORN U+01B0 */
+
+{GEDCOM55_EMPTYBOX} {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x25','\xa1') ; /*WHITE SQUARE U+25A1 this is a rumor not in the 5.5 or 5.5.1 standard */
+ ;
+#else
+ ;
+#endif
+ }
+
+{GEDCOM55_BLACKBOX} {
+#ifdef GEDCOM_LDSEXT
+ utf3byte('\x25','\xa0') ; /* BLACK SQUARE U+25A0 a rumor again not in GEDCOM 5.5 or 5.5.1 */
+ ;
+#else
+ ;
+#endif
+ }
+
+{GEDCOM55_SZ} {
+#if defined GEDCOM_EXT || defined GEDCOM_LDSEXT
+ utf2byte('\xdf') ; /* LATIN SMALL LETTER SHARP S U+00DF */
+ ;
+#else
+ ;
+#endif
+ }
+
+\xc7 {
+#ifdef MARC_EXT
+ utf2byte('\xdf') ; /* LATIN SMALL LETTER SHARP S U+00DF */
+#else
+ ;
+#endif
+ }
+
+\xc8 {
+#ifdef MARC_EXT
+ utf3byte('\x20','\xac') ; /* EURO SIGN U+20AC */
+#else
+ ;
+#endif
+ }
+
+
+
+ /* generic declarations follow. flex(1) specifies that they are
+ * superseded by those above if there are mutliple matchings of the same length */
+
+ /* invalid codes in the standard use : ignore (delete on output) */
+{ANSEL_RES_C1} |
+{ANSEL_CORN} |
+{ANSEL_RES_FUT} ;
+
+ /* low rising tone mark */
+{ANSEL_LOWRISINGTONE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x09') ; /* COMBINING HOOK ABOVE U+0309 */
+ }
+
+ /* grave accent */
+{ANSEL_GRAVEACCENT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x00') ; /* COMBINING GRAVE ACCENT U+0300 */
+ }
+
+ /* acute accent */
+{ANSEL_ACUTEACCENT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x01') ; /* COMBINING ACUTE ACCENT U+0301 */
+ }
+
+ /* circumflex accent */
+{ANSEL_CIRCUMFLEXACC}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x02') ; /* COMBINING CIRCUMFLEX ACCENT U+0302 */
+ }
+
+ /* tilde */
+{ANSEL_TILDE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x03') ; /* COMBINING TILDE U+0303 */
+ }
+
+ /* Macron */
+{ANSEL_MACRON}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x04') ; /* COMBINING MACRON U+0304 */
+ }
+
+ /* Breve */
+{ANSEL_BREVE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x06') ; /* COMBINING BREVE U+0306 */
+ }
+
+ /* dot above */
+{ANSEL_DOTABOVE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x07') ; /* COMBINING DOT ABOVE U+0307 */
+ }
+
+ /* Umlaut, diaresis, double dot above */
+{ANSEL_DIARESIS}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x08') ; /* COMBINING DIARESIS U+0308 */
+ }
+
+ /* Caron, hacek */
+{ANSEL_CARON}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0c') ; /* COMBINING CARON U+030C */
+ }
+
+ /* circle, ring above */
+{ANSEL_CIRCLEABOVE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0a') ; /* COMBINING RING ABOVE U+030A */
+ }
+
+ /* ligature, left half \xeb, ligature right half \xec.
+ * For the purpose of the conversion we assume that \xeb[someletter]\xec[secondletter]
+ * is always in use */
+{ANSEL_LIGATURELEFT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x61') ; /* COMBINING DOUBLE INVERTED BREVE U+0361 */
+ }
+
+{ANSEL_LIGATURERIGHT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ }
+
+ /* high comma, off center */
+{ANSEL_HIGHCOMMAOFFC}([[:graph:]]) {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x15') ; /* COMBINING COMMA ABOVE RIGHT U+0315 */
+ }
+
+ /* Hungarian double acute */
+{ANSEL_DOUBLEACUTEACC}([[:graph:]]) {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x0b') ; /* COMBINING DOUBLE ACUTE ACCENT U+030B */
+ }
+
+ /* combining candrabindu */
+{ANSEL_CANDRABINDU}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x10') ; /* COMBININGCANDRABINDU U+0310 */
+ }
+
+ /* cedilla */
+{ANSEL_CEDILLA}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x27') ; /* COMBINING CEDILLA U+0327 */
+ }
+
+
+ /* right hook */
+{ANSEL_RIGHTHOOK}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x28') ; /* COMBINING OGONEK U+0328 */
+ }
+
+ /* dot below */
+{ANSEL_DOTBELOW}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x23') ; /* COMBINING DOT BELOW U+0323 */
+ }
+
+ /* double dot below */
+{ANSEL_DOUBLEDOTBELOW}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x24') ; /* COMBINING DOUBLE DIARESIS BELOW U+0324 */
+ }
+
+ /* circle below */
+{ANSEL_CIRCLEBELOW}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x25') ; /* COMBINING RING BELOW U+0325 */
+ }
+
+ /* double underscore */
+{ANSEL_DOUBLEUNDERSC}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x33') ; /* COMBINING DOUBLE LOW LINE U+0333 */
+ }
+
+ /* underscore */
+{ANSEL_UNDERSCORE}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x32') ; /* COMBINING LOW LINE U+0332 */
+ }
+
+ /* left hook */
+{ANSEL_LEFTHOOK}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x26') ; /* COMBINING COMMA BELOW U+0326 */
+ }
+
+ /* right cedilla */
+{ANSEL_RIGHTCEDILLA}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x1c') ; /* COMBINING LEFT HALF RING BELOW U+031C */
+ }
+
+ /* half circle below hook */
+{ANSEL_HALFCIRCLBELOW}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x2e') ; /* COMBINING BREVE BELOW U+032e */
+ }
+
+ /* double tilde, left half and right half.
+ * For the purpose of the conversion we assume that \xfa[someletter]\xfb[secondletter]
+ * is always in use, without actually checking */
+{ANSEL_DOUBLETILDLEFT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x60') ; /* COMBINING DOUBLE TILDE U+0360 */
+ }
+
+{ANSEL_DOUBLETILDRIGH}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ }
+
+ /* high comma */
+{ANSEL_HIGHCOMMACENT}[[:graph:]] {
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x13') ; /* COMBINING COMMA ABOVE U+0313 */
+ }
+
+{GEDCOM55_SLASH}[[:graph:]] {
+#ifdef GEDCOM_LDSEXT
+ /* the corresponding multiple diacretics with the slash are not implemented below...*/
+ fprintf(yyout,"%c",yytext[1]) ;
+ utf3byte('\x03','\x38') ; /* COMBINING LONG SOLIDUS OVERLAY U+0337 , perhaps U+0337 */
+#else
+ fprintf(yyout,"%c",yytext[1]) ;
+#endif
+ }
+
+ /* three forms of newline in MAC, Unixes and DOS */
+\l newl(yytext) ;
+
+\l\n newl(yytext) ;
+
+\n newl(yytext) ;
+
+ /* Generic double accents. The U+1DC4 to U+1DCC are probably not
+ * meant to be used as double combining accents.
+ */
+{ANSEL_LOWRISINGTONE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_LOWRISINGTONE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x09') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0f') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_GRAVEACCENT}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x00') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_ACUTEACCENT}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x01') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_CIRCUMFLEXACC}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x02') ;
+ }
+{ANSEL_TILDE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_TILDE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x03') ;
+ }
+{ANSEL_MACRON}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_MACRON}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x04') ;
+ }
+{ANSEL_BREVE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_BREVE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x06') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DOTABOVE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x07') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_DIARESIS}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x08') ;
+ }
+{ANSEL_CARON}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CARON}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0c') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_CIRCLEABOVE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0a') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_HIGHCOMMAOFFC}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x15') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_DOUBLEACUTEACC}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x0b') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CANDRABINDU}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x10') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_CEDILLA}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x27') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_RIGHTHOOK}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x28') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOTBELOW}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x23') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_DOUBLEDOTBELOW}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x24') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_CIRCLEBELOW}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x25') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_DOUBLEUNDERSC}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x33') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_UNDERSCORE}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x32') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_LEFTHOOK}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x26') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_RIGHTCEDILLA}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x1c') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HALFCIRCLBELOW}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x2e') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_LOWRISINGTONE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x09') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_GRAVEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x00') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_ACUTEACCENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x01') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CIRCUMFLEXACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x02') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_TILDE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x03') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_MACRON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x04') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_BREVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x06') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DOTABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x07') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DIARESIS}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x08') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CARON}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0c') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CIRCLEABOVE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0a') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_HIGHCOMMAOFFC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x15') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DOUBLEACUTEACC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x0b') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CANDRABINDU}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x10') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x27') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_RIGHTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x28') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x23') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DOUBLEDOTBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x24') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_CIRCLEBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x25') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_DOUBLEUNDERSC}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x33') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_UNDERSCORE}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x32') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_LEFTHOOK}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x26') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_RIGHTCEDILLA}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x1c') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_HALFCIRCLBELOW}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x2e') ;
+ utf3byte('\x03','\x13') ;
+ }
+{ANSEL_HIGHCOMMACENT}{ANSEL_HIGHCOMMACENT}[[:print::]] {
+ fprintf(yyout,"%c",yytext[2]);
+ utf3byte('\x03','\x13') ;
+ utf3byte('\x03','\x13') ;
+ }
+
+%%
+
+int main(int argc, char *argv[])
+{
+ ++argv, --argc; /* Skip over program name. */
+ if (argc > 0)
+ yyin = fopen(argv[0], "r");
+ else
+ yyin = stdin;
+ yylex();
+ return 0 ;
+}
+
diff --git a/biblio/bibtex/utils/r2bib/config.h.in b/biblio/bibtex/utils/r2bib/config.h.in
new file mode 100644
index 0000000000..af916ab14d
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/config.h.in
@@ -0,0 +1,62 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#undef YYTEXT_POINTER
diff --git a/biblio/bibtex/utils/r2bib/configure b/biblio/bibtex/utils/r2bib/configure
new file mode 100755
index 0000000000..67399df68b
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/configure
@@ -0,0 +1,6095 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for r2bib 2015.12.07.
+#
+# Report bugs to <mathar@mpia.de>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and mathar@mpia.de
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='r2bib'
+PACKAGE_TARNAME='r2bib'
+PACKAGE_VERSION='2015.12.07'
+PACKAGE_STRING='r2bib 2015.12.07'
+PACKAGE_BUGREPORT='mathar@mpia.de'
+PACKAGE_URL='http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/'
+
+ac_unique_file="r2bib.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+EGREP
+GREP
+CPP
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+ac_ct_CC
+CFLAGS
+CC
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures r2bib 2015.12.07 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/r2bib]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of r2bib 2015.12.07:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+
+Some influential environment variables:
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CC C compiler command
+ CFLAGS C compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <mathar@mpia.de>.
+r2bib home page: <http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+r2bib configure 2015.12.07
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ----------------------------- ##
+## Report this to mathar@mpia.de ##
+## ----------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by r2bib $as_me 2015.12.07, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+am__api_version='1.13'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='r2bib'
+ VERSION='2015.12.07'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+# AC_PROG_CPP
+
+
+for ac_prog in flex lex
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LEX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+ cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */
+ yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+ return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$LEX conftest.l") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_save_LIBS=$LIBS
+ ac_cv_lib_lex='none needed'
+ for ac_lib in '' -lfl -ll; do
+ LIBS="$ac_lib $ac_save_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ test "$ac_cv_lib_lex" != 'none needed' && break
+ done
+ LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+
+$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stdlib.h ctype.h stdio.h unistd.h time.h string.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_config_files="$ac_config_files Makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by r2bib $as_me 2015.12.07, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <mathar@mpia.de>.
+r2bib home page: <http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+r2bib config.status 2015.12.07
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/biblio/bibtex/utils/r2bib/configure.ac b/biblio/bibtex/utils/r2bib/configure.ac
new file mode 100644
index 0000000000..84e5a8cb89
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/configure.ac
@@ -0,0 +1,24 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# $Header:$
+
+AC_PREREQ([2.68])
+AC_INIT([r2bib], [2015.12.07], [mathar@mpia.de],[r2bib],[http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/])
+AC_CONFIG_SRCDIR([r2bib.c])
+AM_INIT_AUTOMAKE([no-define foreign subdir-objects])
+AC_CONFIG_HEADERS([config.h])
+
+AC_PROG_CXX
+
+AC_PROG_CC
+# AC_PROG_CPP
+AC_PROG_INSTALL
+AM_PROG_LEX
+
+AC_CHECK_HEADERS([stdlib.h ctype.h stdio.h unistd.h time.h string.h])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
+
diff --git a/biblio/bibtex/utils/r2bib/depcomp b/biblio/bibtex/utils/r2bib/depcomp
new file mode 100755
index 0000000000..4ebd5b3a2f
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/r2bib/dosToTex.1 b/biblio/bibtex/utils/r2bib/dosToTex.1
new file mode 100644
index 0000000000..3863557f8a
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/dosToTex.1
@@ -0,0 +1,54 @@
+.TH "dosToTex" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+dosToTex \- convert an 8bit input stream to TeX coding
+.PP
+.SH "\&.SH SYNOPSIS "
+.PP
+.PP
+dosToTex [-1 | -u]
+.PP
+dosToTex [-h]
+.PP
+.SH "OPTIONS "
+.PP
+.PP
+-1 interpret input as cp1252 (Windows) encoding
+.PP
+-u interpret input as US ASCII encoding
+.PP
+-h print a usage summary and exit
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIdosToTex\fP reads the standard input and converts some 8bit bytes to the TeX (LaTeX) equivalent sequences on standard output\&. If neither the option -1 nor the option -u is used, the encoding in the input sequence is supposed to follow the ANSI standard as described in the EndNote 8 reference manuals\&.
+.PP
+.SH "CAUTION "
+.PP
+.PP
+\fIdosToTex\fP should not be used in conjunction with EndNote X2 or later, since the encoding standard has become Unicode, which is not supported by \fIdosToTex\fP\&. With respect to EndNote, the program is now superfluous\&.
+.PP
+.SH "EXAMPLES "
+.PP
+.PP
+dosToTex -h
+.PP
+dosToTex < dosinfile\&.asc > outfile\&.tex
+.PP
+dosToTex -1 < windowsf\&.txt > outfile\&.tex
+.PP
+dos2unix < windowsf\&.txt | dosToTex -1 > outfile\&.tex
+.PP
+cat windowsf1\&.txt windosf2\&.txt windosf3\&.txt | dosToTex > outfile\&.tex
+.PP
+.SH "SEE ALSO "
+.PP
+.PP
+dos2unix(1) dos2tex(1) recode(1)
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Richard J\&. Mathar, http://www.mpia.de/~mathar
diff --git a/biblio/bibtex/utils/r2bib/dosToTex.c b/biblio/bibtex/utils/r2bib/dosToTex.c
new file mode 100644
index 0000000000..ff20068709
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/dosToTex.c
@@ -0,0 +1,463 @@
+/******************************************
+dosToTex - converts 8bit encodings to (La)TeX
+ multibyte escape sequences.
+
+usage:
+
+dosToTex [ -1 | -u ] < inputfile.dos > outputfile.tex
+dosToTex -h
+
+Switches:
+-1 : assume that the input file has been encoded in the cp1252
+ (Windows) character set
+-u : assume that the input file has been encoded in the "US ASCII"
+ (EndNote terminology) character set
+-h : print a help line
+neither -1 nor -u: assume that the input file has been encoded in
+ the ANSI (EndNote terminology) character set
+
+Note that it does NOT convert line feeds etc as does dos2unix; therefore
+piping in addition through dos2unix may be useful:
+
+dosToTex [ -1 | -u ] < inputfile.dos | dos2unix > outputfile.tex
+dosToTex [ -1 | -u ] < inputfile.dos | sed 's/\r//' > outputfile.tex
+
+As a more versatile alternative, one might combine the converter 'recode' with
+the use of
+ \usepackage{latin1}[inputenc]
+in the LaTeX source: http://recode.progiciels-bpi.ca/
+ http://directory.fsf.org/recode.html
+
+See also
+ http://www.cs.uu.nl/wais/html/na-dir/internationalization/font-faq.html
+ http://wwwvms.mppmu.mpg.de/FAQ/iso-charset.faq
+ http://budling.nytud.hu/~szigetva/etcetera/Hungarian/converters/dos2tex
+ http://www.ctan.org/tex-archive/support/xtexshell/tfc.cc
+ http://billposer.org/Software/uni2ascii.html
+
+Richard J. Mathar, http://www.mpia.de/~mathar
+Dec 07, 2015
+*****************************************/
+#include "config.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+void usage(char *argv0)
+{
+ printf("usage: %s ; # decode EndNote\n",argv0) ;
+ printf("\t %s -1 ; # decode the CP1252 Windows character set\n",argv0) ;
+ printf("\t %s -u ; # decode US ASCII\n",argv0) ;
+ printf("\t %s -h ; # help: print these usage lines here\n",argv0) ;
+ printf("Reads from the standard input, writes to the standard output.\n") ;
+}
+
+int main(int argc, char *argv[])
+{
+ int c ;
+ char oc ;
+ int useendnote = 1 , /* according to page 108 of the EndNote 7 Manual, default */
+ useUs = 0 , /* US ASCII according to the table on p 109 of the EndNote 7 manual */
+ usecpc1252 = 0 ; /* according to http://czyborra.com/charsets/cp1252.gif */
+ while ( (oc=getopt(argc,argv,"1hu")) != -1 )
+ {
+ switch(oc)
+ {
+ case '1' :
+ usecpc1252 = 1 ;
+ useendnote = 0 ;
+ break ;
+ case 'u' :
+ useUs = 1 ;
+ useendnote = 0 ;
+ break ;
+ case 'h' :
+ usage(argv[0]) ;
+ return 0 ;
+ case '?' :
+ fprintf(stderr,"Invalid command line option %c\n",oc) ;
+ usage(argv[0]) ;
+ break ;
+ }
+ }
+
+ /* start at 0x80, end at 0xff, according to http://czyborra.com/charsets/cp1252.gif */
+ char *cpc1252[] = {
+ NULL,
+ NULL,
+ ",",
+ "$f$",
+ "``",
+ "$\\ldots$",
+ "\\dag ",
+ "\\ddag ",
+ "\\symbol{94}",
+ NULL,
+ "\\v{S}",
+ "<",
+ "{\\OE}",
+ NULL,
+ "\\v{Z}",
+ NULL,
+ NULL,
+ "'",
+ "'",
+ "``",
+ "''",
+ NULL,
+ "-",
+ "--",
+ "\\symbol{126}",
+ NULL,
+ "\\v{s}",
+ ">",
+ "{\\oe}",
+ NULL,
+ "\\v{z}",
+ "{\\\"Y}",
+ NULL,
+ "!'",
+ NULL,
+ "\\pounds ",
+ NULL,
+ NULL,
+ "$\\mid$",
+ "\\S ",
+ "\\symbol{127}",
+ "\\copyright ",
+ NULL,
+ "$\\ll$",
+ "$\\neg$",
+ NULL,
+ NULL,
+ "\\symbol{22}",
+ "$^0$",
+ "$\\pm$",
+ "$^2$",
+ "$^3$",
+ "'",
+ "$\\mu$",
+ "\\P ",
+ "$\\cdot$",
+ NULL,
+ "$^1$",
+ NULL,
+ "$\\gg$",
+ "1/4",
+ "1/2",
+ "3/4",
+ "?'",
+ "\\`A" ,
+ "\\'A" ,
+ "\\^A" ,
+ "\\~A" ,
+ "{\\\"A}" ,
+ "{\\AA}" ,
+ "{\\AE}" ,
+ "\\c{C}" ,
+ "\\`E" ,
+ "\\'E" ,
+ "\\^E" ,
+ "{\\\"E}" ,
+ "\\`I" ,
+ "\\'I" ,
+ "\\^I" ,
+ "{\\\"I}" ,
+ NULL,
+ "\\~N" ,
+ "\\`O" ,
+ "\\'O" ,
+ "\\^O" ,
+ "\\~O" ,
+ "{\\\"O}" ,
+ "$\\times$" ,
+ "{\\O}" ,
+ "\\`U" ,
+ "\\'U" ,
+ "\\^U" ,
+ "{\\\"U}" ,
+ "\\'Y" ,
+ NULL,
+ "\\ss " ,
+ "\\`a" ,
+ "\\'a" ,
+ "\\^a" ,
+ "\\~a" ,
+ "{\\\"a}" ,
+ "{\\aa}" ,
+ "{\\ae}" ,
+ "\\c{c}" ,
+ "\\`e" ,
+ "\\'e" ,
+ "\\^e" ,
+ "{\\\"e}" ,
+ "\\`{\\i}" ,
+ "\\'{\\i}" ,
+ "\\^{\\i}" ,
+ "{\\\"{\\i}}" ,
+ NULL,
+ "\\~n" ,
+ "\\`o" ,
+ "\\'o" ,
+ "\\^o" ,
+ "\\~o" ,
+ "\\\"o" ,
+ "$\\div$" ,
+ "{\\o}" ,
+ "\\`u" ,
+ "\\'u" ,
+ "\\^u" ,
+ "{\\\"u}" ,
+ "\\'y" ,
+ NULL,
+ "{\\\"y}"
+ } ;
+ /* starts at 129, ends at 255, according to page 108 of the EndNote 7 Manual */
+ char *endn[] = {
+ "\\_",
+ NULL,
+ NULL,
+ NULL,
+ "$\\ldots$",
+ "\\dag ",
+ "\\ddag ",
+ "\\symbol{94}",
+ NULL,
+ NULL,
+ NULL,
+ "{\\OE}",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "``",
+ "''",
+ NULL,
+ NULL,
+ "--",
+ "\\symbol{126}",
+ NULL,
+ NULL,
+ NULL,
+ "{\\oe}",
+ NULL,
+ NULL,
+ "{\\\"Y}",
+ NULL,
+ "!`",
+ NULL,
+ "\\pounds ",
+ NULL,
+ NULL,
+ "$\\mid$",
+ "\\S ",
+ "\\symbol{127}",
+ "\\copyright ",
+ NULL,
+ "$\\ll$",
+ "$\\neg$",
+ NULL,
+ NULL,
+ "\\symbol{22}",
+ "\\symbol{23}",
+ "$\\pm$",
+ "$^2$",
+ NULL,
+ "'",
+ "$\\mu$",
+ "\\P ",
+ "$\\cdot$",
+ NULL,
+ "$^1$",
+ "$^0$",
+ "$\\gg$",
+ "1/4","1/2","3/4",
+ "?`",
+ "\\`A",
+ "\\'A",
+ "\\^A",
+ "\\~A",
+ "{\\\"A}",
+ "{\\AA}",
+ "{\\AE}",
+ "\\c{C}",
+ "\\`E",
+ "\\'E",
+ "\\^E",
+ "{\\\"E}",
+ "\\`I",
+ "\\'I",
+ "\\^I",
+ "{\\\"I}",
+ NULL,
+ "\\~N",
+ "\\`O",
+ "\\'O",
+ "\\^O",
+ "\\~O",
+ "{\\\"O}",
+ "$\\times$",
+ "{\\O}",
+ "\\`U",
+ "\\'U",
+ "\\^U",
+ "{\\\"U}",
+ "\\'Y",
+ NULL,
+ "\\ss ",
+ "\\`a",
+ "\\'a",
+ "\\^a",
+ "\\~a",
+ "{\\\"a}",
+ "{\\aa}",
+ "{\\ae}",
+ "\\c{c}",
+ "\\`e",
+ "\\'e",
+ "\\^e",
+ "{\\\"e}",
+ "\\`{\\i}",
+ "\\'{\\i}",
+ "\\^{\\i}",
+ "{\\\"{\\i}}",
+ NULL,
+ "\\~n",
+ "\\`o",
+ "\\'o",
+ "\\^o",
+ "\\~o",
+ "{\\\"o}",
+ "$\\div$",
+ "{\\o}",
+ "\\`u",
+ "\\'u",
+ "\\^u",
+ "{\\\"u}",
+ "\\'y",
+ NULL,
+ "{\\\"y}"
+ } ;
+ /* starts at 128, ends at 165 */
+ char *usasc[] = {
+ "\\c{C}",
+ "{\\\"u}",
+ "\\'e",
+ "\\^a",
+ "{\\\"a}",
+ "\\`a",
+ "{\\aa}",
+ "\\c{c}",
+ "\\^e",
+ "{\\\"e}",
+ "\\`e",
+ "{\\\"{\\i}}",
+ "\\^{\\i}",
+ "\\`{\\i}",
+ "{\\\"A}",
+ "{\\AA}",
+ "\\'E",
+ "{\\ae}",
+ "{\\AE}",
+ "\\^o",
+ "{\\\"o}",
+ "\\`o",
+ "\\^u",
+ "\\`u",
+ "{\\\"y}",
+ "{\\\"O}",
+ "{\\\"U}",
+ NULL,
+ "\\pounds ",NULL,
+ "P",
+ "$f$",
+ "\\'a",
+ "\\'{\\i}",
+ "\\'o",
+ "\\'u",
+ "\\~n",
+ "\\~N",NULL,NULL,
+ "?'",
+ "\\_",
+ "$\\neg$",
+ "1/2",
+ "1/4",
+ "!'",
+ "$\\ll$",
+ "$\\gg$"
+ /*
+ case 225 :
+ "\\ss ",
+ case 246 :
+ "$\\div$",
+ */
+ } ;
+
+ if ( usecpc1252)
+ {
+ while( (c=getchar()) != EOF)
+ {
+ if( c >= 0x80 && c <= 0xff) /* in the table ? */
+ if ( cpc1252[c-0x80] )
+ printf("%s",cpc1252[c-0x80]) ;
+ else
+ putchar(c) ;
+ else
+ putchar(c) ;
+ }
+ }
+ else if ( useendnote)
+ {
+ while( (c=getchar()) != EOF)
+ {
+ if( c >= 128 && c <= 255) /* in the table ? */
+ {
+ if ( endn[c-128] )
+ printf("%s",endn[c-128]) ;
+ else
+ putchar(c) ;
+ }
+ else
+ putchar(c) ;
+ }
+ }
+ else if ( useUs)
+ {
+ while( (c=getchar()) != EOF)
+ {
+ if( c >= 128 && c <= 175) /* in the table ? */
+ if ( usasc[c-128] )
+ printf("%s",usasc[c-128]) ;
+ else
+ putchar(c) ;
+ else if ( c == 179)
+ printf("$^3$") ;
+ else if ( c == 225)
+ printf("\\ss ") ;
+ else if ( c == 227)
+ printf("\\P ") ;
+ else if ( c == 230)
+ printf("$\\mu$") ;
+ else if ( c == 241)
+ printf("$\\pm$") ;
+ else if ( c == 246)
+ printf("$\\div$") ;
+ else if ( c == 253)
+ printf("$^2$") ;
+ else
+ putchar(c) ;
+ }
+ }
+ return 0 ;
+}
diff --git a/biblio/bibtex/utils/r2bib/install-sh b/biblio/bibtex/utils/r2bib/install-sh
new file mode 100755
index 0000000000..377bb8687f
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/r2bib/missing b/biblio/bibtex/utils/r2bib/missing
new file mode 100755
index 0000000000..cdea514931
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2012-06-26.16; # UTC
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'automa4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/r2bib/r2bib.1 b/biblio/bibtex/utils/r2bib/r2bib.1
new file mode 100644
index 0000000000..233d6f516a
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/r2bib.1
@@ -0,0 +1,49 @@
+.TH "r2bib" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+r2bib \-
+.IP "\(bu" 2
+convert refer input to BibTex \&.bib files
+.PP
+.PP
+.SH "SYNOPSIS "
+.PP
+.PP
+\fIr2bib\fP \fIfile\fP \&.\&.\&.
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIr2bib\fP reads the \fIfiles\fP and produces a \fIbibtex\fP reference list (a \&.bib file) on the standard output\&. If no files are given, r2bib reads standard input\&.
+.PP
+Since \fIrefer\fP files are inherently unstructured (compared to \fIbibtex\fP ) \fIr2bib\fP only does a passable job\&. In particular \fIrefer\fP doesn't require a keyword, while \fIbibtex\fP does\&. The heuristic that \fIr2bib\fP uses for cooking up a keyword, in order of precedence, is:
+.PP
+.IP "\(bu" 2
+Use the keyword entry (%K) if it's only one word\&.
+.IP "\(bu" 2
+Use the label entry (%L) if it's only one word\&.
+.IP "\(bu" 2
+Otherwise just use the string 'keyN' where N is the count of this bibliographic entry in the refer file(s)\&.
+.PP
+.PP
+To determine the type of reference that the \fIrefer\fP entry is, \fIr2bib\fP has to do some 'calculated guessing'\&. The heuristic used here (again, in order of precedence) is:
+.PP
+.IP "\(bu" 2
+If it has a journal entry (%J) then it's considered to be an @article\&.
+.IP "\(bu" 2
+If it has a report entry (%R) then it's considered to be a @techreport\&.
+.IP "\(bu" 2
+If it has a issuer entry (%I) then it's considered to be a @book\&.
+.IP "\(bu" 2
+Otherwise it's considered to be a @misc\&.
+.PP
+.PP
+Quite often \fIr2bib\fP will misguess and you will need to edit (by hand) the resulting \&.bib file\&.
+.PP
+Any fields that \fIr2bib\fP doesn't know about it will ignore (and complain about on stderr)\&.
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Rusty Wright, Center For Music Experiment, University of California San Diego\&.
diff --git a/biblio/bibtex/utils/r2bib/r2bib.c b/biblio/bibtex/utils/r2bib/r2bib.c
new file mode 100644
index 0000000000..b577c75402
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/r2bib.c
@@ -0,0 +1,334 @@
+/* http://www.ctan.org/tex-archive/biblio/bibtex/utils/r2bib/ */
+# include <ctype.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+
+struct rb {
+ char rb_kl; /* refer key letter */
+ char * rb_kw; /* bibtex string */
+ char rb_emit; /* don't print data if 0 */
+ char * rb_data; /* refer data */
+};
+
+struct rb rb[] = {
+ { 'A', "author", 1, NULL },
+ { 'B', "booktitle", 1, NULL },
+ { 'C', "address", 1, NULL },
+ { 'D', "year", 1, NULL }, /* mismatch */
+ { 'E', "editor", 1, NULL },
+/* { 'H', "commentary1", 1, NULL },*/
+ { 'I', "publisher", 1, NULL },
+ { 'J', "journal", 1, NULL },
+ { 'K', "note", 1, NULL }, /* mismatch */
+ { 'L', "label", 0, NULL }, /* use as bibtex key */
+ { 'N', "number", 1, NULL },
+/* { 'O', "commentary2", 1, NULL },*/
+ { 'P', "pages", 1, NULL },
+ { 'Q', "institution", 1, NULL },
+ { 'R', "report", 0, NULL },
+ { 'S', "series", 1, NULL },
+ { 'T', "title", 1, NULL },
+ { 'V', "volume", 1, NULL },
+/* { 'X', "abstract", 1, NULL },*/
+ { 0, 0, 0, 0 }
+};
+
+struct bmap {
+ char bm_kl;
+ char *bm_entry;
+};
+
+/*
+ * entries are in order of precedence.
+ * any entry with a 'J' field must be
+ * an article, but anthing with an 'I'
+ * field doesn't have to be a book (if
+ * an entry has both 'J' and 'I' it is
+ * considered to be an article).
+ */
+struct bmap bmap[] = {
+ { 'J', "article" },
+ { 'R', "techreport" },
+ { 'I', "book" },
+ { 0, 0 }
+};
+
+void dumprb() {
+ register struct rb *trb;
+ register struct bmap *bm;
+ static int key;
+ char *bibkey;
+ char *cp;
+ int first;
+
+ /*
+ * first, figure out what type of entry this
+ * is.
+ */
+ for (bm = &bmap[0]; bm->bm_kl != 0; bm++) {
+ for (trb = &rb[0]; trb->rb_kl != 0; trb++) {
+ if ((trb->rb_kl == bm->bm_kl) && (trb->rb_data != NULL)) {
+ printf("@%s{", bm->bm_entry);
+ goto out;
+ }
+ }
+ }
+out:
+ if (bm->bm_kl == 0)
+ printf("@misc{");
+
+ /*
+ * in order of precedence; how to determine the
+ * bibtex key:
+ * 1. use keyword (%K) if only one word.
+ * 2. use refer label (%L).
+ * 3. otherwise just use the string "keyN" where N
+ * is the count of this bibliographic entry in
+ * the refer file.
+ */
+ key++;
+ for (trb = &rb[0]; trb->rb_kl != 0; trb++) {
+ if ((trb->rb_kl == 'K') && (trb->rb_data != NULL)) {
+ for (cp = trb->rb_data; *cp ; cp++) {
+ if (isspace(*cp))
+ break;
+ }
+
+ /* ran to end of string? */
+ if (*cp == 0) {
+ printf("%s,\n", trb->rb_data);
+
+ /* if used here then free & zero it */
+ (void) free(trb->rb_data);
+ trb->rb_data = NULL;
+ break;
+ }
+ }
+
+ if ((trb->rb_kl == 'L') && (trb->rb_data != NULL)) {
+ for (cp = trb->rb_data; *cp ; cp++) {
+ if (isspace(*cp))
+ break;
+ }
+
+ /* ran to end of string? */
+ if (*cp == 0) {
+ printf("%s,\n", trb->rb_data);
+ break;
+ }
+ }
+ }
+
+ /* nothing reasonable to use, punt */
+ if (trb->rb_kl == 0)
+ printf("key%d,\n", key);
+
+ first = 1;
+
+ for (trb = &rb[0]; trb->rb_kl != 0; trb++) {
+ if (trb->rb_data == NULL)
+ continue;
+
+ if (trb->rb_emit != 0) {
+ /*
+ * clank,
+ * this is so that things will line up.
+ */
+ if (strlen(trb->rb_kw) < 6)
+ cp = "\t\t";
+ else
+ cp = "\t";
+
+ if (! first)
+ printf(",\n");
+
+ printf("\t%s =%s\"%s\"", trb->rb_kw, cp, trb->rb_data);
+ first = 0;
+ }
+
+ (void) free(trb->rb_data);
+ trb->rb_data = NULL;
+ }
+
+ printf("\n}\n\n");
+}
+
+void stuffrb(struct rb *lrb, char *cp)
+{
+ extern char *andfix();
+ extern char *sanz();
+
+ /* empty data field */
+ if ((cp = sanz(cp)) == NULL)
+ return;
+
+ if (lrb->rb_kl == 'A')
+ cp = andfix(cp);
+
+ if (lrb->rb_data == NULL) {
+ if ((lrb->rb_data = malloc(strlen(cp) + 1)) == NULL) {
+ perror("malloc");
+ exit(1);
+ }
+
+ strcpy(lrb->rb_data, cp);
+ }
+ else {
+ char *conj;
+
+ if (lrb->rb_kl == 'A')
+ conj = " and ";
+ else
+ conj = " ";
+
+ if ((lrb->rb_data = realloc(lrb->rb_data, strlen(lrb->rb_data) + strlen(cp) + strlen(conj) + 1)) == NULL) {
+ perror("realloc");
+ exit(1);
+ }
+
+ strcat(lrb->rb_data, conj);
+ strcat(lrb->rb_data, cp);
+ }
+}
+
+int r2bib(char * file, FILE * fid)
+{
+ extern char *sanz();
+ register char *cp;
+ struct rb *lrb; /* last rb stored into */
+ int line;
+ char buf[BUFSIZ];
+ int err;
+
+ lrb = NULL;
+ err = 0;
+ line = 0;
+
+ while (fgets(buf, sizeof(buf), fid) != NULL) {
+ line++;
+
+ if ((cp = sanz(buf)) == NULL) {
+ if (lrb != NULL) {
+ dumprb();
+ lrb = NULL;
+ }
+ continue;
+ }
+
+ /*
+ * if the first letter is a % then it's the
+ * a new record, otherwise it's a continuation
+ * of the previous one.
+ */
+ if (cp[0] == '%') {
+ for (lrb = &rb[0]; lrb->rb_kl != 0; lrb++) {
+ if (lrb->rb_kl == cp[1]) {
+ stuffrb(lrb, &cp[2]);
+ break;
+ }
+ }
+ if (lrb->rb_kl == 0) {
+ fprintf(stderr, "r2b: %s: line %d: unknown key letter %c, ignoring\n", file, line, cp[1]);
+ err = 1;
+ }
+ }
+ else {
+ if (lrb == NULL) {
+ fprintf(stderr, "r2b: %s: line %d: bad format, ignoring\n", file, line);
+ err = 1;
+ continue;
+ }
+
+ stuffrb(lrb, &cp[0]);
+ }
+ }
+
+ if (lrb != NULL)
+ dumprb();
+
+ return(err);
+}
+
+int main(int argc, char *argv[])
+{
+ register FILE *fid;
+ register int i;
+ int err;
+
+ err = 0;
+
+ if (argc > 1) {
+ for (i = 1; i < argc; i++) {
+ if ((fid = fopen(argv[i], "r")) == NULL) {
+ fprintf(stderr, "fopen: ");
+ perror(argv[i]);
+ continue;
+ }
+ err += r2bib(argv[i], fid);
+ }
+ }
+ else
+ err += r2bib("stdin", stdin);
+
+ if (err)
+ exit(1);
+
+ exit(0);
+}
+
+/*
+ */
+char * andfix(char *string)
+{
+ register char *tmp;
+ register char *cp;
+
+ tmp = string;
+
+ for (cp = string; *cp ; cp++) {
+ if (strncmp(cp, " and ", 5) == 0) {
+ /*
+ * +2 for the curly braces around "{and}",
+ * +1 for the null at the end.
+ */
+ if ((tmp = malloc(strlen(string) + 2 + 1)) == NULL) {
+ perror("malloc");
+ exit(1);
+ }
+
+ strncpy(tmp, string, cp - string);
+ tmp[cp - string] = 0; /* strncpy doesn't */
+ strcat(tmp, " {and} ");
+ strcat(tmp, cp + 5);
+ }
+ }
+
+ return(tmp);
+}
+
+char * sanz(char *bp)
+{
+ register char *cp;
+
+ cp = &bp[strlen(bp) - 1];
+
+ /*
+ * back up over any spaces chars
+ */
+ while (isspace(*cp) && (cp >= bp))
+ cp--;
+
+ if (cp < bp)
+ return(NULL); /* empty line */
+
+ *++cp = 0;
+
+ while (isspace(*bp) && (bp < cp))
+ bp++;
+
+ if (cp == bp)
+ return(NULL); /* empty line */
+
+ return(bp);
+}
diff --git a/biblio/bibtex/utils/r2bib/risDateAdj.cc b/biblio/bibtex/utils/r2bib/risDateAdj.cc
new file mode 100644
index 0000000000..d21207b46f
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/risDateAdj.cc
@@ -0,0 +1,1960 @@
+
+#line 3 "risDateAdj.cc"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 5
+#define YY_END_OF_BUFFER 6
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[63] =
+ { 0,
+ 0, 0, 6, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 1, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 5, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 6, 1, 7, 8, 9, 10,
+ 8, 8, 8, 8, 8, 8, 8, 1, 1, 1,
+ 1, 1, 1, 1, 11, 1, 1, 12, 1, 13,
+ 1, 1, 1, 14, 1, 1, 15, 16, 17, 18,
+ 1, 1, 19, 1, 1, 1, 1, 1, 20, 1,
+ 1, 1, 1, 1, 1, 1, 21, 22, 23, 1,
+
+ 24, 1, 25, 1, 1, 1, 1, 26, 1, 27,
+ 28, 29, 1, 30, 1, 31, 32, 33, 1, 1,
+ 34, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[35] =
+ { 0,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int16_t yy_base[66] =
+ { 0,
+ 0, 1, 111, 112, 90, 0, 104, 103, 102, 101,
+ 100, 99, 97, 96, 95, 95, 94, 93, 14, 3,
+ 3, 73, 72, 13, 74, 66, 70, 68, 6, 61,
+ 65, 66, 66, 60, 10, 8, 53, 35, 36, 31,
+ 0, 44, 41, 0, 112, 40, 44, 47, 112, 50,
+ 59, 11, 68, 112, 5, 72, 70, 73, 0, 4,
+ 112, 112, 83, 5, 0
+ } ;
+
+static yyconst flex_int16_t yy_def[66] =
+ { 0,
+ 63, 63, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 64, 62, 64, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 65, 65,
+ 62, 0, 62, 62, 62
+ } ;
+
+static yyconst flex_int16_t yy_nxt[147] =
+ { 0,
+ 60, 44, 45, 46, 44, 43, 61, 54, 8, 9,
+ 29, 29, 29, 40, 40, 40, 57, 5, 5, 6,
+ 6, 20, 20, 20, 21, 22, 23, 24, 25, 26,
+ 27, 30, 28, 34, 31, 41, 41, 41, 42, 42,
+ 42, 41, 45, 49, 35, 44, 45, 46, 44, 47,
+ 48, 50, 50, 50, 51, 51, 51, 52, 52, 52,
+ 53, 54, 55, 53, 41, 41, 56, 56, 56, 53,
+ 54, 55, 53, 53, 54, 55, 53, 58, 58, 58,
+ 59, 59, 59, 4, 4, 41, 41, 41, 41, 41,
+ 41, 39, 38, 37, 36, 33, 32, 19, 19, 19,
+
+ 18, 17, 16, 15, 14, 13, 12, 11, 10, 7,
+ 62, 3, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62
+ } ;
+
+static yyconst flex_int16_t yy_chk[147] =
+ { 0,
+ 65, 44, 44, 44, 44, 64, 60, 55, 6, 6,
+ 20, 20, 20, 29, 29, 29, 52, 1, 2, 1,
+ 2, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 21, 19, 24, 21, 35, 35, 36, 40, 40,
+ 40, 36, 46, 43, 24, 42, 42, 42, 42, 42,
+ 42, 47, 47, 47, 48, 48, 48, 50, 50, 50,
+ 51, 51, 51, 51, 39, 38, 51, 51, 51, 53,
+ 53, 53, 53, 56, 56, 56, 56, 57, 57, 57,
+ 58, 58, 58, 63, 63, 37, 34, 33, 32, 31,
+ 30, 28, 27, 26, 25, 23, 22, 18, 17, 16,
+
+ 15, 14, 13, 12, 11, 10, 9, 8, 7, 5,
+ 3, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "risDateAdj.ll"
+/* This is a lex(1) file, see http://dinosaur.compilertools.net/
+* or http://en.wikipedia.org/wiki/Lex_programming_tool .
+*
+* Compilation on UNIX systems is done by
+* make risDateAdj
+* On other systems one may need to call lex or flex and cc explicitly:
+* lex -8 -o risDateAdj.c risDateAdj.l
+* cc [-std=gnu99] [-s] [-O] -o risDateAdj risDateAdj.c -ll
+*
+* The executable works as a filter and patches the Y1, Y2 and PY fields of RIS
+* files (the standard input) from a
+* Apr., YYYY
+* type produced for example by JSTOR or a
+* YYYY-MM-DD
+* or a
+* YYYY
+* or a
+* YYYY/DD
+* type to the standard defined in http://www.refman.com/support/risformat_intro.asp .
+*
+* TODO:
+* ingentaconnect produces lines PY -- ///January 2009
+* which also fall into the category of faulty but recoverable inputs.
+* And this ought also be implemented.
+* Richard J. Mathar, 2009-02-11
+*/
+#line 30 "risDateAdj.ll"
+#include <strings.h>
+#include <sys/types.h>
+#include <regex.h>
+
+#define Y1PATCH_PMAT_SIZ 7
+
+regex_t preg1,
+ preg2 ,
+ preg3 ,
+ preg4 ;
+regmatch_t pmat[Y1PATCH_PMAT_SIZ] ;
+
+/* Fit monam month to integer in the range 1 to 12.
+* @return Return a number from 1 to 12 if the month is recognized, 0 if not.
+*/
+int name2Month(const char *monam)
+{
+ static const char *jan2dec[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"} ;
+ for(int i=0; i < 12 ; i++)
+ if( strncasecmp(monam,jan2dec[i],3) == 0 )
+ return i+1 ;
+ return 0 ;
+}
+
+/* Generate a line YYY/MM/DD/otherinfo line on output.
+* @param tagline the original line, including the tag and the <CR></LF>
+*/
+void y1patch(const char *yytext)
+{
+ /* the original tag including the mandatory white space copied thru
+ */
+ fprintf(yyout,"%.6s",yytext) ;
+
+ if( regexec(&preg2,yytext+6,0,0,0) == 0 )
+ {
+ /* The ISO case. Replace dashes by slashes
+ */
+ fprintf(yyout,"%.4s/%.2s/%.2s/ %s",yytext+6,yytext+11,yytext+14,yytext+17) ;
+ }
+ else if( regexec(&preg1,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ /* pmat[0] all, pmat[1] the mont, pmat[2] any intermediate dots and blanks, pmat[3] the year.
+ */
+ int mon = name2Month(yytext+6) ;
+ int yr = atoi(yytext+6+pmat[3].rm_so) ;
+ if ( mon )
+ fprintf(yyout,"%d/%02d// ",yr,mon) ;
+ else
+ fprintf(yyout,"%d/// ",yr) ;
+
+ /* the original pattern plus any <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+ }
+ else if( regexec(&preg3,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ /* pmat[0] all, pmat[1] the mont, pmat[2] the date, pmat[3] the year.
+ */
+ int mon = name2Month(yytext+6) ;
+ int dat = atoi(yytext+6+pmat[2].rm_so) ;
+ int yr = atoi(yytext+6+pmat[3].rm_so) ;
+ if ( mon )
+ fprintf(yyout,"%d/%02d/%02d/ ",yr,mon,dat) ;
+ else
+ fprintf(yyout,"%d//%02d/ ",yr,dat) ;
+
+ /* the original pattern plus any <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+ }
+ else if( regexec(&preg4,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ int yr = atoi(yytext+6) ;
+ if ( pmat[1].rm_so >=0 )
+ {
+ int mon = atoi(yytext+6+pmat[1].rm_so+1) ;
+ fprintf(yyout,"%d/%02d//",yr,mon) ;
+ }
+ else
+ fprintf(yyout,"%d///",yr) ;
+
+ /* the original <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6+pmat[0].rm_eo) ;
+ }
+ else
+ /* give up and copy through
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+
+}
+#undef Y1PATCH_PMAT_SIZ
+
+/* the scanner ought be compiled with the "-i" flag to
+* trigger also on the various upper/lowercase variants of these patterns
+*/
+#line 627 "risDateAdj.cc"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 133 "risDateAdj.ll"
+
+
+ /* Lines which look correct are copied trough as they are.
+ * This means they contain no 3-letter mont acronyms as substrings.
+ */
+
+ /* If the tag is immediately followed by one of the TLA (three-letter
+ * acronyms above), or looks like an ISO date we try conversion.
+ */
+#line 819 "risDateAdj.cc"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 63 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 112 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+/* rule 1 can match eol */
+#line 143 "risDateAdj.ll"
+case 2:
+/* rule 2 can match eol */
+#line 144 "risDateAdj.ll"
+case 3:
+/* rule 3 can match eol */
+#line 145 "risDateAdj.ll"
+case 4:
+/* rule 4 can match eol */
+YY_RULE_SETUP
+#line 145 "risDateAdj.ll"
+{
+
+ /* debugging
+ * printf("%d\n",__LINE__) ;
+ */
+ y1patch(yytext) ;
+ }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 154 "risDateAdj.ll"
+ECHO;
+ YY_BREAK
+#line 928 "risDateAdj.cc"
+case YY_STATE_EOF(INITIAL):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 63 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 63 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 62);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 154 "risDateAdj.ll"
+
+
+int main(int argc, char *argv[])
+{
+ /* preg1: at least three characters (matching months supposedly)
+ * followed by any comma, dot and white space, and the year
+ */
+ int stat =regcomp(&preg1,
+ "\\([[:alpha:]]\\{3,\\}\\)\\([[:space:],\\./]*\\)\\([[:digit:]]\\{4\\}\\)\\(.*\\)", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg2: the ISO YYYY-MM-DD format
+ */
+ stat =regcomp(&preg2, "[[:digit:]]\\{4\\}-[[:digit:]]\\{2\\}-[[:digit:]]\\{2\\}.*", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg3: the fullmontname 1-or-2digit-date, 4-digityear
+ */
+ stat =regcomp(&preg3,
+ "\\([[:alpha:]]\\{3,\\}\\) \\([[:digit:]]\\{1,2\\}\\)[ ,]*\\([[:digit:]]\\{4\\}\\).*", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg4: a sole 4-digit year, optionally with a slash and 2-digit month
+ */
+ stat =regcomp(&preg4, "[[:digit:]]{4}(/[[:digit:]]{1,2})?[[:blank:]]*", REG_ICASE|REG_EXTENDED) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ yylex() ;
+ regfree(& preg4) ;
+ regfree(& preg3) ;
+ regfree(& preg2) ;
+ regfree(& preg1) ;
+ return 0 ;
+}
+
diff --git a/biblio/bibtex/utils/r2bib/risDateAdj.ll b/biblio/bibtex/utils/r2bib/risDateAdj.ll
new file mode 100644
index 0000000000..5bef2c8f5f
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/risDateAdj.ll
@@ -0,0 +1,190 @@
+ /* This is a lex(1) file, see http://dinosaur.compilertools.net/
+ * or http://en.wikipedia.org/wiki/Lex_programming_tool .
+ *
+ * Compilation on UNIX systems is done by
+ * make risDateAdj
+ * On other systems one may need to call lex or flex and cc explicitly:
+ * lex -8 -o risDateAdj.c risDateAdj.l
+ * cc [-std=gnu99] [-s] [-O] -o risDateAdj risDateAdj.c -ll
+ *
+ * The executable works as a filter and patches the Y1, Y2 and PY fields of RIS
+ * files (the standard input) from a
+ * Apr., YYYY
+ * type produced for example by JSTOR or a
+ * YYYY-MM-DD
+ * or a
+ * YYYY
+ * or a
+ * YYYY/DD
+ * type to the standard defined in http://www.refman.com/support/risformat_intro.asp .
+ *
+ * TODO:
+ * ingentaconnect produces lines PY -- ///January 2009
+ * which also fall into the category of faulty but recoverable inputs.
+ * And this ought also be implemented.
+ * Richard J. Mathar, 2009-02-11
+ */
+%option noyywrap
+
+%{
+#include <strings.h>
+#include <sys/types.h>
+#include <regex.h>
+
+#define Y1PATCH_PMAT_SIZ 7
+
+regex_t preg1,
+ preg2 ,
+ preg3 ,
+ preg4 ;
+regmatch_t pmat[Y1PATCH_PMAT_SIZ] ;
+
+/* Fit monam month to integer in the range 1 to 12.
+* @return Return a number from 1 to 12 if the month is recognized, 0 if not.
+*/
+int name2Month(const char *monam)
+{
+ static const char *jan2dec[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"} ;
+ for(int i=0; i < 12 ; i++)
+ if( strncasecmp(monam,jan2dec[i],3) == 0 )
+ return i+1 ;
+ return 0 ;
+}
+
+/* Generate a line YYY/MM/DD/otherinfo line on output.
+* @param tagline the original line, including the tag and the <CR></LF>
+*/
+void y1patch(const char *yytext)
+{
+ /* the original tag including the mandatory white space copied thru
+ */
+ fprintf(yyout,"%.6s",yytext) ;
+
+ if( regexec(&preg2,yytext+6,0,0,0) == 0 )
+ {
+ /* The ISO case. Replace dashes by slashes
+ */
+ fprintf(yyout,"%.4s/%.2s/%.2s/ %s",yytext+6,yytext+11,yytext+14,yytext+17) ;
+ }
+ else if( regexec(&preg1,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ /* pmat[0] all, pmat[1] the mont, pmat[2] any intermediate dots and blanks, pmat[3] the year.
+ */
+ int mon = name2Month(yytext+6) ;
+ int yr = atoi(yytext+6+pmat[3].rm_so) ;
+ if ( mon )
+ fprintf(yyout,"%d/%02d// ",yr,mon) ;
+ else
+ fprintf(yyout,"%d/// ",yr) ;
+
+ /* the original pattern plus any <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+ }
+ else if( regexec(&preg3,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ /* pmat[0] all, pmat[1] the mont, pmat[2] the date, pmat[3] the year.
+ */
+ int mon = name2Month(yytext+6) ;
+ int dat = atoi(yytext+6+pmat[2].rm_so) ;
+ int yr = atoi(yytext+6+pmat[3].rm_so) ;
+ if ( mon )
+ fprintf(yyout,"%d/%02d/%02d/ ",yr,mon,dat) ;
+ else
+ fprintf(yyout,"%d//%02d/ ",yr,dat) ;
+
+ /* the original pattern plus any <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+ }
+ else if( regexec(&preg4,yytext+6,Y1PATCH_PMAT_SIZ,pmat,0) == 0 )
+ {
+ int yr = atoi(yytext+6) ;
+ if ( pmat[1].rm_so >=0 )
+ {
+ int mon = atoi(yytext+6+pmat[1].rm_so+1) ;
+ fprintf(yyout,"%d/%02d//",yr,mon) ;
+ }
+ else
+ fprintf(yyout,"%d///",yr) ;
+
+ /* the original <CR><NL>
+ */
+ fprintf(yyout,"%s",yytext+6+pmat[0].rm_eo) ;
+ }
+ else
+ /* give up and copy through
+ */
+ fprintf(yyout,"%s",yytext+6) ;
+
+}
+#undef Y1PATCH_PMAT_SIZ
+
+%}
+
+RISTAG "Y1 - "|"PY - "|"Y2 - "
+DIGIT [0-9]
+
+ /* the scanner ought be compiled with the "-i" flag to
+ * trigger also on the various upper/lowercase variants of these patterns
+ */
+MONTH "Jan"|"Feb"|"Mar"|"Apr"|"May"|"Jun"|"Jul"|"Aug"|"Sep"|"Oct"|"Nov"|"Dec"
+
+%%
+
+ /* Lines which look correct are copied trough as they are.
+ * This means they contain no 3-letter mont acronyms as substrings.
+ */
+
+ /* If the tag is immediately followed by one of the TLA (three-letter
+ * acronyms above), or looks like an ISO date we try conversion.
+ */
+{RISTAG}{MONTH}.+\n |
+{RISTAG}{DIGIT}{4}[[:blank:]]*\r?\n |
+{RISTAG}{DIGIT}{4}\/{DIGIT}{1,2}[[:blank:]]*\r?\n |
+{RISTAG}{DIGIT}{4}-{DIGIT}{2}-{DIGIT}{2}.+\n {
+
+ /* debugging
+ * printf("%d\n",__LINE__) ;
+ */
+ y1patch(yytext) ;
+ }
+
+
+%%
+int main(int argc, char *argv[])
+{
+ /* preg1: at least three characters (matching months supposedly)
+ * followed by any comma, dot and white space, and the year
+ */
+ int stat =regcomp(&preg1,
+ "\\([[:alpha:]]\\{3,\\}\\)\\([[:space:],\\./]*\\)\\([[:digit:]]\\{4\\}\\)\\(.*\\)", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg2: the ISO YYYY-MM-DD format
+ */
+ stat =regcomp(&preg2, "[[:digit:]]\\{4\\}-[[:digit:]]\\{2\\}-[[:digit:]]\\{2\\}.*", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg3: the fullmontname 1-or-2digit-date, 4-digityear
+ */
+ stat =regcomp(&preg3,
+ "\\([[:alpha:]]\\{3,\\}\\) \\([[:digit:]]\\{1,2\\}\\)[ ,]*\\([[:digit:]]\\{4\\}\\).*", REG_ICASE) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ /* preg4: a sole 4-digit year, optionally with a slash and 2-digit month
+ */
+ stat =regcomp(&preg4, "[[:digit:]]{4}(/[[:digit:]]{1,2})?[[:blank:]]*", REG_ICASE|REG_EXTENDED) ;
+ if ( stat )
+ fprintf(stderr,"line %d - Internal error %d\n",__LINE__,stat) ;
+
+ yylex() ;
+ regfree(& preg4) ;
+ regfree(& preg3) ;
+ regfree(& preg2) ;
+ regfree(& preg1) ;
+ return 0 ;
+}
diff --git a/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.1 b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.1
new file mode 100644
index 0000000000..e69d1f26cb
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.1
@@ -0,0 +1,54 @@
+.TH "wileyEndNoteFilt" 1 "Mon Dec 7 2015" "Version 2015-12-07" "r2bib" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+wileyEndNoteFilt \- convert Wiley's EndNote author tags to the standard
+.PP
+.SH "SYNOPSIS "
+.PP
+.PP
+\fIwileyEndNoteFilt\fP
+.PP
+.SH "OPTIONS "
+.PP
+.PP
+none
+.PP
+.SH "DESCRIPTION "
+.PP
+.PP
+\fIwileyEndNoteFilt\fP interprets the standard input as an EndNote bibligraphy file and rewrites lines with %A and %E tags if they contain at least one author and if each author is followed by a comma\&. Basically the format
+.PP
+%A firstinit firstM\&. firstAfam, sendinit secondM\&. secondM2\&. secondAfam,
+.PP
+is dispersed into lines
+.PP
+%A firstAfam, firstinit firstM\&.
+.PP
+%A secondAfam, sendinit secondM\&. secondM2\&.
+.PP
+with only one person per tag, regrouping first names and middle names relative to family names\&.
+.PP
+Need of this type of filter arises with EndNote files produced by Wiley's web interfaces\&. The obvious problem with the plain format which shows all authors in the natural language format is that fillers of two kinds, namely the roman numbers and 'Jr\&.' and 'Sr\&.' tags on one hand and any qualifiers like 'de' and 'van' particularly frequent in languages like Dutch on the other, cannot easily be dispatched into the standard format, which is first-names-and-initials, de-von-van-dos-etc last-name, Jr-Sr-numerals\&. In addition, it is not obvious (to European readers) whether Chinese names have already been swapped once or are in the traditional format\&.
+.PP
+Keeping this in mind, this filter ought only be run if the input is of the aforementioned comma-delimited format, but not if it originates from multiple sources of mixed author-editor styles\&. In addition, the EndNote import filter provided on the Wiley web page is certainly to be favoured if the data are imported into the native EndNote\&.
+.PP
+.SH "EXAMPLES "
+.PP
+.PP
+cat foo*\&.enw | wileyEndNoteFilt > bar\&.end
+.PP
+.SH "CAUTION "
+.PP
+.PP
+An attempt is made to swap first and family names on the fly\&. Generally, the last string of the name is interpreted as the family name\&. If the name contains strings like ' von ' or ' dos ', they are classified as modifiers which are frequent in Dutch, German, Spanish and Italian compound names, and these are also attributed to the family name\&. The source code contains a hard-coded list of these initialiasers; this may certainly fail in some cases\&.
+.PP
+.SH "BUGS "
+.PP
+.PP
+The filter will stumble if some names contain HTML-components which use commas\&. No such cases exist in the character entity references in HTML 4\&.0, so this seems not to be an issue\&.
+.PP
+.SH "AUTHOR "
+.PP
+.PP
+Richard J\&. Mathar, http://www.mpia.de/~mathar
diff --git a/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.cc b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.cc
new file mode 100644
index 0000000000..ac7397eefb
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.cc
@@ -0,0 +1,2075 @@
+
+#line 3 "wileyEndNoteFilt.cc"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 5
+#define YY_END_OF_BUFFER 6
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[30] =
+ { 0,
+ 0, 0, 6, 5, 5, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,
+ 0, 0, 0, 0, 0, 0, 2, 4, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 1, 1, 1, 1, 4, 1, 1, 1,
+ 1, 1, 1, 1, 5, 1, 1, 1, 6, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 8, 1, 1, 1, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[10] =
+ { 0,
+ 1, 2, 1, 1, 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int16_t yy_base[35] =
+ { 0,
+ 0, 5, 29, 30, 6, 10, 25, 24, 23, 22,
+ 0, 0, 21, 20, 20, 19, 15, 7, 30, 30,
+ 8, 7, 0, 0, 5, 4, 30, 30, 30, 17,
+ 4, 2, 1, 0
+ } ;
+
+static yyconst flex_int16_t yy_def[35] =
+ { 0,
+ 30, 30, 29, 29, 29, 29, 29, 29, 29, 29,
+ 31, 32, 29, 29, 31, 32, 29, 29, 29, 29,
+ 29, 29, 33, 34, 33, 34, 29, 29, 0, 29,
+ 29, 29, 29, 29
+ } ;
+
+static yyconst flex_int16_t yy_nxt[40] =
+ { 0,
+ 26, 25, 16, 5, 15, 28, 27, 6, 5, 24,
+ 23, 22, 6, 7, 8, 9, 10, 4, 4, 21,
+ 20, 19, 18, 17, 14, 13, 12, 11, 29, 3,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29
+ } ;
+
+static yyconst flex_int16_t yy_chk[40] =
+ { 0,
+ 34, 33, 32, 1, 31, 26, 25, 1, 2, 22,
+ 21, 18, 2, 5, 5, 6, 6, 30, 30, 17,
+ 16, 15, 14, 13, 10, 9, 8, 7, 3, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "wileyEndNoteFilt.ll"
+/* This is a lex(1) file, see http://dinosaur.compilertools.net/
+* or http://en.wikipedia.org/wiki/Lex_programming_tool .
+*
+* Compilation on UNIX systems is done by
+* make wileyEndNoteFilt
+* On other systems one may need to call lex or flex and cc explicitly:
+* lex -8 -o wileyEndNoteFilt.c wileyEndNoteFilt.l
+* cc [-s] [-O] [-D MSDOS] [-D WILEYENDNOTERIS] -o wileyEndNoteFilt wileyEndNoteFilt.c -ll
+*
+* Definition of the macro MSDOS means that the output is rewritten
+* with CR+LF line terminators (which alternatively can be achieved
+* by the standard unix2dos(1)).
+*
+* Definition of the macro WILEYENDNOTERIS means that the RIS type tags
+* "A1 - " and "A2 - " are handled supposing that there is only
+* one name per line and swapping first and last names.
+*
+* The executable works as a filter and converts author names produced
+* by downloading EndNote files from Wiley's web pages such that they become
+* standardized. This means: the initials (first names) and last names of authors
+* are swapped and separated by a comma on output, and multiple
+* authors become separate lines.
+*
+* Use examples:
+* cat *.enw | wileyEndNoteFilt
+* cat *.enw | recode h1..h4 | wileyEndNoteFilt > tmp.end ; end2xml tmp.end > tmp.xml
+*
+* Notes:
+* The filter changes lines of the %A or %E tag containing at least one author.
+* This means (i) the author list is only parsed until a line feed, so author
+* lists continued on lines that do not start with another tag will remain
+* incomplete
+* (ii) a tag followed by no author is copied through unchanged.
+*
+* Richard J. Mathar, 2010-01-21
+*/
+#line 40 "wileyEndNoteFilt.ll"
+#include <string.h>
+#include <stdlib.h>
+
+/* remove trailing carriage return and line feeds from inp
+* (this string may be changed on output).
+*/
+void trimlf(char *inp)
+{
+ /* point to the last non-0 character */
+ char *c = inp+strlen(inp)-1 ;
+ while ( *c == '\n' || *c == '\r' )
+ *c-- = '\0' ;
+}
+
+/* remove blanks at the start and/or end of inp
+* (this string may be changed on output).
+*/
+void trim(char *inp)
+{
+ /* point to the last non-0 character */
+ char *c = inp+strlen(inp)-1 ;
+ while ( *c == ' ')
+ *c-- = '\0' ;
+
+ while( *inp == ' ')
+ memmove(inp,inp+1,strlen(inp)) ;
+}
+
+#define WILEYENDNOTEFILT_MAX_AUTH 2048
+#define WILEYENDNOTEFILT_MAX_TRAIL 32
+
+/* Handle a single name without any separator
+* @param inp A string of the form "firstname middle-name lastname".
+*/
+void revStr1(char *inp, const char *tag)
+{
+
+ /* Search for the last blank, usually right before the last name.
+ * This does not yet handle cases like Marvin D. den Anker
+ * with composite last names, or Henry Ford II with roman numbers like I
+ * or II following...
+ */
+ char * lastbl=strrchr(inp,' ') ;
+
+ if ( lastbl != inp )
+ {
+ /* the revised string: lastname, firstinitls[, trail]; */
+ char resul[WILEYENDNOTEFILT_MAX_AUTH] ;
+
+ /* a trailing portion like Jr., II etc. German cases like Dr. Werner von Braun, where "Dr." is
+ * part of the trialing portion but syntactically in front of the first name are not handled
+ * correctly. Similarly "Pope Paul Benedict" will yield strange results.
+ * We also assume that the roman numerals are not followed by dots.
+ */
+ char trail[WILEYENDNOTEFILT_MAX_TRAIL] ;
+
+ int lastl ;
+
+ memset(trail,'\0',WILEYENDNOTEFILT_MAX_TRAIL) ;
+
+ /* back up if this is a composite name followed by Jr., Sr. or a dotless Roman numeral from I to VII */
+ if ( strcmp(lastbl," I")==0 || strcmp(lastbl," II")==0 || strcmp(lastbl," III")==0 || strcmp(lastbl," Jr.")==0
+ || strcmp(lastbl," IV")==0 || strcmp(lastbl," V")==0 || strcmp(lastbl," VI")==0 || strcmp(lastbl," VII")==0
+ || strcmp(lastbl," Sr.")==0
+ )
+ {
+ /* copy the trailing piece over and chop it off the original string
+ */
+ sprintf(trail,",%s",lastbl) ;
+ *lastbl = '\0' ;
+ lastbl=strrchr(inp,' ') ;
+ }
+
+ /* Start of the surname. Derived names of Spanish, Dutch or German origin. Does not catch the German
+ * "Graefin" or similar titles which use diacritical vocals.
+ * Start with the longest matches (that is: catch the "Baron" in "Baron von Munchhausen", not the "von").
+ */
+ char * surn= strstr(inp," Baron ") ; /* triggers also Baron von Munchhausen, for example */
+ if ( surn == NULL)
+ surn= strstr(inp," Duke ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Earl ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Graf ") ; /* triggers also "Graf von", "Graf zu" etc */
+ if ( surn == NULL)
+ surn= strstr(inp," Gr\344fin ") ; /* assume U+00E4 for the diaresis in UTF-8 */
+ if ( surn == NULL)
+ surn= strstr(inp," Herzog ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," v. d. ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," von ") ; /* triggers also on "von der" */
+ if ( surn == NULL)
+ surn= strstr(inp," Von ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," van ") ; /* triggers also "van den", "van der", "van de" */
+ if ( surn == NULL)
+ surn= strstr(inp," Van ") ; /* Van Morrisson is intepreted as a last name */
+ if ( surn == NULL)
+ surn= strstr(inp," da ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Da ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," de ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," De ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," du ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Du ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," do ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Do ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," della ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Della ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," le ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Le ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," dos ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Dos ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," ter ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Ter ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," ten ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Ten ") ;
+ /* the cases "e" and "i" are handled unsafely here:
+ * probably another component of the family name
+ * precedes these */
+ if ( surn == NULL)
+ surn= strstr(inp," e ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," E ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," i ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," de ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," De ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," den ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Den ") ;
+
+ /* if no such modifier is found: assume the last name starts at the last blank */
+ if ( surn == NULL)
+ surn= lastbl ;
+
+ lastl= strlen(inp)-(surn-inp)-1 ;
+ memset(resul,'\0',WILEYENDNOTEFILT_MAX_AUTH) ;
+ strncpy(resul,surn+1,lastl) ;
+
+ if ( surn != inp)
+ {
+ /* output separator comma: lastname, firstname. Firstname starts with a blank. */
+ strcat(resul,",") ;
+#ifdef WILEYENDNOTEFILT_RIS
+ strcat(resul," ") ;
+#endif
+ strncat(resul,inp,surn-inp) ;
+ }
+
+ /* if there is a trailing portion append. Usually this is
+ * just '\0' and appending does not hurt.
+ */
+ strcat(resul,trail) ;
+
+ trim(resul) ;
+#ifdef MSDOS
+ fprintf(yyout,"%s %s\r\n",tag,resul) ;
+#else
+ fprintf(yyout,"%s %s\n",tag,resul) ;
+#endif
+ }
+ else
+ /* If there is no blank, this is probably a single last name, which we copy as is
+ * (without comma) to stdout.
+ */
+#ifdef MSDOS
+ fprintf(yyout,"%s%s\r\n",tag,inp) ;
+#else
+ fprintf(yyout,"%s%s\n",tag,inp) ;
+#endif
+}
+#undef WILEYENDNOTEFILT_MAX_AUTH
+#undef WILEYENDNOTEFILT_MAX_TRAIL
+
+/** Split the line (without the starting "%A " or "%E " EndNote tag) into
+* the individual authors (which are each followed by a comma).
+* @param inp A string of the form "first-author, second-author, last-author,"
+* or "first-author, second-author, last-author" or "first-author".
+* @param tag The "%A" or "%E"
+*/
+void revStr(const char *inp, const char *tag)
+{
+ /* strtok(3) modifies 'inp', so we construct a temporary copy.
+ */
+ char *inpsave = (char *) malloc((strlen(inp)+1)*sizeof(char)) ;
+ char *tok ;
+ char *tokreent ;
+
+ strcpy(inpsave,inp) ;
+ trimlf(inpsave) ;
+ /* Loop over all terminating separators (=commas) */
+ tok = inpsave ;
+
+#ifdef WILEYENDNOTEFILT_RIS
+ trim(tok) ;
+ revStr1(tok,tag) ;
+#else
+
+
+ tok = strtok_r(inpsave,",",&tokreent) ;
+ while(tok)
+ {
+
+ /* skip leading white space in author names
+ while(*tok == ' ')
+ tok++ ;
+ */
+
+ /* pass the "firstinit secndinit lastname" to the subroutine
+ * without the comma separator.
+ */
+ revStr1(tok,tag) ;
+ tok = strtok_r(NULL,",",&tokreent) ;
+ }
+#endif
+ free(inpsave) ;
+}
+#line 742 "wileyEndNoteFilt.cc"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 284 "wileyEndNoteFilt.ll"
+
+#line 926 "wileyEndNoteFilt.cc"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 30 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 30 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+/* rule 1 can match eol */
+YY_RULE_SETUP
+#line 285 "wileyEndNoteFilt.ll"
+{
+
+ /* if this is a tag followed by one or more authors, push the list
+ * of authors, including the LF, the initial blank after the tag and all commas, to revStr().
+ */
+ revStr(yytext+2,"%A") ;
+ }
+ YY_BREAK
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 292 "wileyEndNoteFilt.ll"
+{
+
+#ifdef WILEYENDNOTEFILT_RIS
+ /* if this is a tag followed by one or more authors, push the list
+ * of authors, including the LF, the initial blank after the tag and all commas, to revStr().
+ */
+ revStr(yytext+5,"A1 -") ;
+#else
+ fprintf(yyout,"%s",yytext) ;
+#endif
+ }
+ YY_BREAK
+case 3:
+/* rule 3 can match eol */
+YY_RULE_SETUP
+#line 304 "wileyEndNoteFilt.ll"
+{
+
+ /* Same as above for the list of editors.
+ */
+ revStr(yytext+2,"%E") ;
+ }
+ YY_BREAK
+case 4:
+/* rule 4 can match eol */
+YY_RULE_SETUP
+#line 311 "wileyEndNoteFilt.ll"
+{
+
+#ifdef WILEYENDNOTEFILT_RIS
+ /* Same as above for the list of editors.
+ */
+ revStr(yytext+5,"A2 -") ;
+#else
+ fprintf(yyout,"%s",yytext) ;
+#endif
+ }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 321 "wileyEndNoteFilt.ll"
+ECHO;
+ YY_BREAK
+#line 1068 "wileyEndNoteFilt.cc"
+case YY_STATE_EOF(INITIAL):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 30 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 30 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 29);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 321 "wileyEndNoteFilt.ll"
+
+
+
+int main(int argc, char *argv[])
+{
+ ++argv, --argc; /* Skip over program name. */
+ if (argc > 0)
+ yyin = fopen(argv[0], "r");
+ else
+ yyin = stdin;
+ yylex();
+ return 0 ;
+}
+
diff --git a/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.ll b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.ll
new file mode 100644
index 0000000000..7ebcf5ec6a
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/wileyEndNoteFilt.ll
@@ -0,0 +1,332 @@
+ /* This is a lex(1) file, see http://dinosaur.compilertools.net/
+ * or http://en.wikipedia.org/wiki/Lex_programming_tool .
+ *
+ * Compilation on UNIX systems is done by
+ * make wileyEndNoteFilt
+ * On other systems one may need to call lex or flex and cc explicitly:
+ * lex -8 -o wileyEndNoteFilt.c wileyEndNoteFilt.l
+ * cc [-s] [-O] [-D MSDOS] [-D WILEYENDNOTERIS] -o wileyEndNoteFilt wileyEndNoteFilt.c -ll
+ *
+ * Definition of the macro MSDOS means that the output is rewritten
+ * with CR+LF line terminators (which alternatively can be achieved
+ * by the standard unix2dos(1)).
+ *
+ * Definition of the macro WILEYENDNOTERIS means that the RIS type tags
+ * "A1 - " and "A2 - " are handled supposing that there is only
+ * one name per line and swapping first and last names.
+ *
+ * The executable works as a filter and converts author names produced
+ * by downloading EndNote files from Wiley's web pages such that they become
+ * standardized. This means: the initials (first names) and last names of authors
+ * are swapped and separated by a comma on output, and multiple
+ * authors become separate lines.
+ *
+ * Use examples:
+ * cat *.enw | wileyEndNoteFilt
+ * cat *.enw | recode h1..h4 | wileyEndNoteFilt > tmp.end ; end2xml tmp.end > tmp.xml
+ *
+ * Notes:
+ * The filter changes lines of the %A or %E tag containing at least one author.
+ * This means (i) the author list is only parsed until a line feed, so author
+ * lists continued on lines that do not start with another tag will remain
+ * incomplete
+ * (ii) a tag followed by no author is copied through unchanged.
+ *
+ * Richard J. Mathar, 2010-01-21
+ */
+%option noyywrap
+
+%{
+#include <string.h>
+#include <stdlib.h>
+
+/* remove trailing carriage return and line feeds from inp
+* (this string may be changed on output).
+*/
+void trimlf(char *inp)
+{
+ /* point to the last non-0 character */
+ char *c = inp+strlen(inp)-1 ;
+ while ( *c == '\n' || *c == '\r' )
+ *c-- = '\0' ;
+}
+
+/* remove blanks at the start and/or end of inp
+* (this string may be changed on output).
+*/
+void trim(char *inp)
+{
+ /* point to the last non-0 character */
+ char *c = inp+strlen(inp)-1 ;
+ while ( *c == ' ')
+ *c-- = '\0' ;
+
+ while( *inp == ' ')
+ memmove(inp,inp+1,strlen(inp)) ;
+}
+
+#define WILEYENDNOTEFILT_MAX_AUTH 2048
+#define WILEYENDNOTEFILT_MAX_TRAIL 32
+
+/* Handle a single name without any separator
+* @param inp A string of the form "firstname middle-name lastname".
+*/
+void revStr1(char *inp, const char *tag)
+{
+
+ /* Search for the last blank, usually right before the last name.
+ * This does not yet handle cases like Marvin D. den Anker
+ * with composite last names, or Henry Ford II with roman numbers like I
+ * or II following...
+ */
+ char * lastbl=strrchr(inp,' ') ;
+
+ if ( lastbl != inp )
+ {
+ /* the revised string: lastname, firstinitls[, trail]; */
+ char resul[WILEYENDNOTEFILT_MAX_AUTH] ;
+
+ /* a trailing portion like Jr., II etc. German cases like Dr. Werner von Braun, where "Dr." is
+ * part of the trialing portion but syntactically in front of the first name are not handled
+ * correctly. Similarly "Pope Paul Benedict" will yield strange results.
+ * We also assume that the roman numerals are not followed by dots.
+ */
+ char trail[WILEYENDNOTEFILT_MAX_TRAIL] ;
+
+ int lastl ;
+
+ memset(trail,'\0',WILEYENDNOTEFILT_MAX_TRAIL) ;
+
+ /* back up if this is a composite name followed by Jr., Sr. or a dotless Roman numeral from I to VII */
+ if ( strcmp(lastbl," I")==0 || strcmp(lastbl," II")==0 || strcmp(lastbl," III")==0 || strcmp(lastbl," Jr.")==0
+ || strcmp(lastbl," IV")==0 || strcmp(lastbl," V")==0 || strcmp(lastbl," VI")==0 || strcmp(lastbl," VII")==0
+ || strcmp(lastbl," Sr.")==0
+ )
+ {
+ /* copy the trailing piece over and chop it off the original string
+ */
+ sprintf(trail,",%s",lastbl) ;
+ *lastbl = '\0' ;
+ lastbl=strrchr(inp,' ') ;
+ }
+
+ /* Start of the surname. Derived names of Spanish, Dutch or German origin. Does not catch the German
+ * "Graefin" or similar titles which use diacritical vocals.
+ * Start with the longest matches (that is: catch the "Baron" in "Baron von Munchhausen", not the "von").
+ */
+ char * surn= strstr(inp," Baron ") ; /* triggers also Baron von Munchhausen, for example */
+ if ( surn == NULL)
+ surn= strstr(inp," Duke ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Earl ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Graf ") ; /* triggers also "Graf von", "Graf zu" etc */
+ if ( surn == NULL)
+ surn= strstr(inp," Gr\344fin ") ; /* assume U+00E4 for the diaresis in UTF-8 */
+ if ( surn == NULL)
+ surn= strstr(inp," Herzog ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," v. d. ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," von ") ; /* triggers also on "von der" */
+ if ( surn == NULL)
+ surn= strstr(inp," Von ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," van ") ; /* triggers also "van den", "van der", "van de" */
+ if ( surn == NULL)
+ surn= strstr(inp," Van ") ; /* Van Morrisson is intepreted as a last name */
+ if ( surn == NULL)
+ surn= strstr(inp," da ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Da ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," de ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," De ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," du ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Du ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," do ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Do ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," della ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Della ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," le ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Le ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," dos ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Dos ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," ter ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Ter ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," ten ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Ten ") ;
+ /* the cases "e" and "i" are handled unsafely here:
+ * probably another component of the family name
+ * precedes these */
+ if ( surn == NULL)
+ surn= strstr(inp," e ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," E ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," i ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," de ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," De ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," den ") ;
+ if ( surn == NULL)
+ surn= strstr(inp," Den ") ;
+
+ /* if no such modifier is found: assume the last name starts at the last blank */
+ if ( surn == NULL)
+ surn= lastbl ;
+
+ lastl= strlen(inp)-(surn-inp)-1 ;
+ memset(resul,'\0',WILEYENDNOTEFILT_MAX_AUTH) ;
+ strncpy(resul,surn+1,lastl) ;
+
+ if ( surn != inp)
+ {
+ /* output separator comma: lastname, firstname. Firstname starts with a blank. */
+ strcat(resul,",") ;
+#ifdef WILEYENDNOTEFILT_RIS
+ strcat(resul," ") ;
+#endif
+ strncat(resul,inp,surn-inp) ;
+ }
+
+ /* if there is a trailing portion append. Usually this is
+ * just '\0' and appending does not hurt.
+ */
+ strcat(resul,trail) ;
+
+ trim(resul) ;
+#ifdef MSDOS
+ fprintf(yyout,"%s %s\r\n",tag,resul) ;
+#else
+ fprintf(yyout,"%s %s\n",tag,resul) ;
+#endif
+ }
+ else
+ /* If there is no blank, this is probably a single last name, which we copy as is
+ * (without comma) to stdout.
+ */
+#ifdef MSDOS
+ fprintf(yyout,"%s%s\r\n",tag,inp) ;
+#else
+ fprintf(yyout,"%s%s\n",tag,inp) ;
+#endif
+}
+#undef WILEYENDNOTEFILT_MAX_AUTH
+#undef WILEYENDNOTEFILT_MAX_TRAIL
+
+/** Split the line (without the starting "%A " or "%E " EndNote tag) into
+* the individual authors (which are each followed by a comma).
+* @param inp A string of the form "first-author, second-author, last-author,"
+* or "first-author, second-author, last-author" or "first-author".
+* @param tag The "%A" or "%E"
+*/
+void revStr(const char *inp, const char *tag)
+{
+ /* strtok(3) modifies 'inp', so we construct a temporary copy.
+ */
+ char *inpsave = (char *) malloc((strlen(inp)+1)*sizeof(char)) ;
+ char *tok ;
+ char *tokreent ;
+
+ strcpy(inpsave,inp) ;
+ trimlf(inpsave) ;
+ /* Loop over all terminating separators (=commas) */
+ tok = inpsave ;
+
+#ifdef WILEYENDNOTEFILT_RIS
+ trim(tok) ;
+ revStr1(tok,tag) ;
+#else
+
+
+ tok = strtok_r(inpsave,",",&tokreent) ;
+ while(tok)
+ {
+
+ /* skip leading white space in author names
+ while(*tok == ' ')
+ tok++ ;
+ */
+
+ /* pass the "firstinit secndinit lastname" to the subroutine
+ * without the comma separator.
+ */
+ revStr1(tok,tag) ;
+ tok = strtok_r(NULL,",",&tokreent) ;
+ }
+#endif
+ free(inpsave) ;
+}
+%}
+
+TAGA "%A "
+TAGARIS "A1 - "
+TAGE "%E "
+TAGERIS "A2 - "
+%%
+{TAGA}.+\n {
+
+ /* if this is a tag followed by one or more authors, push the list
+ * of authors, including the LF, the initial blank after the tag and all commas, to revStr().
+ */
+ revStr(yytext+2,"%A") ;
+ }
+{TAGARIS}.+\n {
+
+#ifdef WILEYENDNOTEFILT_RIS
+ /* if this is a tag followed by one or more authors, push the list
+ * of authors, including the LF, the initial blank after the tag and all commas, to revStr().
+ */
+ revStr(yytext+5,"A1 -") ;
+#else
+ fprintf(yyout,"%s",yytext) ;
+#endif
+ }
+
+{TAGE}.+\n {
+
+ /* Same as above for the list of editors.
+ */
+ revStr(yytext+2,"%E") ;
+ }
+
+{TAGERIS}.+\n {
+
+#ifdef WILEYENDNOTEFILT_RIS
+ /* Same as above for the list of editors.
+ */
+ revStr(yytext+5,"A2 -") ;
+#else
+ fprintf(yyout,"%s",yytext) ;
+#endif
+ }
+%%
+
+int main(int argc, char *argv[])
+{
+ ++argv, --argc; /* Skip over program name. */
+ if (argc > 0)
+ yyin = fopen(argv[0], "r");
+ else
+ yyin = stdin;
+ yylex();
+ return 0 ;
+}
diff --git a/biblio/bibtex/utils/r2bib/ylwrap b/biblio/bibtex/utils/r2bib/ylwrap
new file mode 100755
index 0000000000..1c4d77612c
--- /dev/null
+++ b/biblio/bibtex/utils/r2bib/ylwrap
@@ -0,0 +1,249 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2012-12-21.17; # UTC
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+get_dirname ()
+{
+ case $1 in
+ */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
+ # Otherwise, we want the empty string (not ".").
+ esac
+}
+
+# guard FILE
+# ----------
+# The CPP macro used to guard inclusion of FILE.
+guard()
+{
+ printf '%s\n' "$1" \
+ | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
+ -e 's/__*/_/g'
+}
+
+# quote_for_sed [STRING]
+# ----------------------
+# Return STRING (or stdin) quoted to be used as a sed pattern.
+quote_for_sed ()
+{
+ case $# in
+ 0) cat;;
+ 1) printf '%s\n' "$1";;
+ esac \
+ | sed -e 's|[][\\.*]|\\&|g'
+}
+
+case "$1" in
+ '')
+ echo "$0: No files given. Try '$0 --help' for more information." 1>&2
+ exit 1
+ ;;
+ --basedir)
+ basedir=$2
+ shift 2
+ ;;
+ -h|--h*)
+ cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+ INPUT is the input file
+ OUTPUT is one file PROG generates
+ DESIRED is the file we actually want instead of OUTPUT
+ PROGRAM is program to run
+ ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--v*)
+ echo "ylwrap $scriptversion"
+ exit $?
+ ;;
+esac
+
+
+# The input.
+input="$1"
+shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case "$input" in
+ [\\/]* | ?:[\\/]*)
+ # Absolute path; do nothing.
+ ;;
+ *)
+ # Relative path. Make it absolute.
+ input="`pwd`/$input"
+ ;;
+esac
+input_rx=`get_dirname "$input" | quote_for_sed`
+
+# Since DOS filename conventions don't allow two dots,
+# the DOS version of Bison writes out y_tab.c instead of y.tab.c
+# and y_tab.h instead of y.tab.h. Test to see if this is the case.
+y_tab_nodot=false
+if test -f y_tab.c || test -f y_tab.h; then
+ y_tab_nodot=true
+fi
+
+# The parser itself, the first file, is the destination of the .y.c
+# rule in the Makefile.
+parser=$1
+
+# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
+# instance, we rename #include "y.tab.h" into #include "parse.h"
+# during the conversion from y.tab.c to parse.c.
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test "$#" -ne 0; do
+ if test "$1" = "--"; then
+ shift
+ break
+ fi
+ from=$1
+ # Handle y_tab.c and y_tab.h output by DOS
+ if $y_tab_nodot; then
+ case $from in
+ "y.tab.c") from=y_tab.c;;
+ "y.tab.h") from=y_tab.h;;
+ esac
+ fi
+ shift
+ to=$1
+ shift
+ sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+ sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+ [\\/]* | ?:[\\/]*) ;;
+ *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines. But that might take us over the 14-char limit.
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+ 0) "$prog" "$input" ;;
+ *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+ for from in *
+ do
+ to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
+ if test -f "$from"; then
+ # If $2 is an absolute path name, then just use that,
+ # otherwise prepend '../'.
+ case $to in
+ [\\/]* | ?:[\\/]*) target=$to;;
+ *) target="../$to";;
+ esac
+
+ # Do not overwrite unchanged header files to avoid useless
+ # recompilations. Always update the parser itself: it is the
+ # destination of the .y.c rule in the Makefile. Divert the
+ # output of all other files to a temporary file so we can
+ # compare them to existing versions.
+ if test $from != $parser; then
+ realtarget="$target"
+ target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
+ fi
+
+ # Munge "#line" or "#" directives. Don't let the resulting
+ # debug information point at an absolute srcdir. Use the real
+ # output file name, not yy.lex.c for instance. Adjust the
+ # include guards too.
+ sed -e "/^#/!b" \
+ -e "s|$input_rx|$input_sub_rx|" \
+ -e "$sed_fix_filenames" \
+ -e "$sed_fix_header_guards" \
+ "$from" >"$target" || ret=$?
+
+ # Check whether files must be updated.
+ if test "$from" != "$parser"; then
+ if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+ echo "$to is unchanged"
+ rm -f "$target"
+ else
+ echo "updating $to"
+ mv -f "$target" "$realtarget"
+ fi
+ fi
+ else
+ # A missing file is only an error for the parser. This is a
+ # blatant hack to let us support using "yacc -d". If -d is not
+ # specified, don't fail when the header file is "missing".
+ if test "$from" = "$parser"; then
+ ret=1
+ fi
+ fi
+ done
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/biblio/bibtex/utils/refer-tools/ref2bib.shar b/biblio/bibtex/utils/refer-tools/ref2bib.shar
new file mode 100644
index 0000000000..be28884237
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/ref2bib.shar
@@ -0,0 +1,1838 @@
+#! /bin/sh
+# FROM pmaresch@hawk.ulowell.edu
+# This is a shell archive. Remove anything before this line, then unpack
+# it by saving it into a file and typing "sh file". To overwrite existing
+# files, type "sh file -c". You can also feed this as standard input via
+# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
+# will see the following message at the end:
+# "End of shell archive."
+# Contents: makekeys makekeys.awk ref2bib ref2bib.awk ref2bib.dat
+# ref2bib.sed ref2bib.sh
+# Wrapped by pmaresch@hewey on Tue Jul 3 10:40:43 1990
+PATH=/bin:/usr/bin:/usr/ucb ; export PATH
+if test -f makekeys -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"makekeys\"
+else
+echo shar: Extracting \"makekeys\" \(198 characters\)
+sed "s/^X//" >makekeys <<'END_OF_makekeys'
+X#!/bin/sh
+X# The shell script invokes AWK(1) to build keys from a BibTeX source file.
+X# The genereation of keys can be altered by changing the
+X# values of some awk variables
+X#
+Xawk -f makekeys.awk $*
+END_OF_makekeys
+if test 198 -ne `wc -c <makekeys`; then
+ echo shar: \"makekeys\" unpacked with wrong size!
+fi
+chmod +x makekeys
+# end of overwriting check
+fi
+if test -f makekeys.awk -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"makekeys.awk\"
+else
+echo shar: Extracting \"makekeys.awk\" \(4029 characters\)
+sed "s/^X//" >makekeys.awk <<'END_OF_makekeys.awk'
+X#
+X# makekeys
+X#
+X# AWK(1) source file to build a key according the information
+X# in the 'author' or 'organization' fields.
+X# Pierre Mareschal (c) 1989
+X# Original from:
+X# Ref2bib(1L) - A Refer(1) to BibTeX(1L) converter
+X#
+XBEGIN{
+X for(i=1;i<=27;i++)
+X addkey[i] = substr("abcdefghijklmnopqrstuvwxyz",i,1);
+X lkey = 4; # number of characters used from authors to make key
+X maxauthor = 1; # maximum number of authors to use in constructing key
+X rx = 1; # current entry
+X firstnamefirst=1; # true="First Lastname", false ="Lastname First"
+X quote=1; # Field separator is either " or {
+X usedate=1; # use date in key
+X check=0; # debug mode
+X}
+X
+X/^@/ {
+X done=$0
+X split($0,type,"{")
+X}
+X
+X/[yY][eE][aA][rR]/ {
+X entry[lines] = $0
+X lines++
+X D ++;
+X if(D > 1) {
+X err=1
+X print "Two dates: Reference " rx > "makekeys.errs"
+X print date > "makekeys.errs"
+X }
+X split($0,db,"\"")
+X if((db[2]<1900)||(db[2]>=2000)) {
+X split($0,db,"{")
+X if((db[2]<1900)||(db[2]>=2000)) {
+X split($0,db,"=")
+X if((db[2]<1900)||(db[2]>=2000)) {
+X err=1
+X print "Date error? : Reference " rx > "makekeys.errs"
+X }
+X }
+X }
+X date = substr(db[2], 0, 4)
+X next
+X}
+X
+X/[aA][uU][tT][hH][oO][rR]/ {
+X entry[lines] = $0
+X lines++
+X if (A==0) keys="";
+X A ++;
+X if(A > maxauthor) next
+X
+X i = 1
+X if(quote==1) {
+X split($0,tmp,"\""); split(tmp[2],tmp2,"\""); split(tmp2[1],names)
+X } else {
+X split($0,tmp,"{"); split(tmp[2],tmp2,"}"); split(tmp2[1],names)
+X }
+X while(names[i] != "") {
+X if(firstnamefirst == 1) {
+X while( (names[i] != "and") && (names[i] != "")) i++
+X lastname=names[i-1]
+X } else {
+X lastname=names[i]
+X while( (names[i] != "and") && (names[i] != "")) i++
+X }
+X i++
+X ic = 0
+X lc = 1
+X while(ic < lkey && lc <= length(lastname) ) {
+X kc = substr(lastname, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ) {
+X keys = keys kc
+X ic++
+X if(ic==lkey) break
+X } else if ( kc == "\\" ) {
+X lc ++;
+X }
+X lc ++;
+X }
+X A ++;
+X if(A > maxauthor) next
+X }
+X next
+X}
+X
+X
+X/[oO][rR][gG][aA][nN][iI][sSzZ][aA][tT][iI][oO][nN]/ {
+X entry[lines] = $0
+X lines++
+X if (O==0) okeys="";
+X O ++;
+X if(O > maxauthor) next
+X
+X i = 1
+X if(quote==1) {
+X split($0,tmp,"\""); split(tmp[2],tmp2,"\""); split(tmp2[1],names)
+X } else {
+X split($0,tmp,"{"); split(tmp[2],tmp2,"}"); split(tmp2[1],names)
+X }
+X while(names[i] != "") {
+X if(firstnamefirst == 1) {
+X while( (names[i] != "and") && (names[i] != "")) i++
+X lastname=names[i-1]
+X } else {
+X lastname=names[i]
+X while( (names[i] != "and") && (names[i] != "")) i++
+X }
+X i++
+X ic = 0
+X lc = 1
+X while(ic < lkey && lc <= length(lastname) ) {
+X kc = substr(lastname, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ) {
+X okeys = okeys kc
+X ic++
+X if(ic==lkey) break
+X } else if ( kc == "\\" ) {
+X lc ++;
+X }
+X lc ++;
+X }
+X O ++;
+X if(O > maxauthor) next
+X }
+X next
+X}
+X
+X!/^@/ {
+X entry[lines] = $0
+X lines++
+X}
+X
+X/^$/ {
+X if( lines > 1 ) {
+X ndate = split(date,df)
+X if ( ndate > 2) print " Funny date " date > "makekeys.errs"
+X if (ndate == 1 ) {
+X df[2] = df[1]
+X df[1] = ""
+X }
+X if((keys == "") && (okeys != "")) keys = okeys
+X if(keys == "") keys = "ANON"
+X if(usedate == 1) {
+X keys = keys substr(df[2],3,2)
+X }
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++;
+X keys = keys addkey[key_suffix];
+X } else {
+X keyused[keys] = 1
+X }
+X if(check==1) print done
+X printf "%s{%s,\n",type[1],keys
+X for(line = 1; line < lines; line++) {
+X print entry[line];
+X }
+X keys=""
+X okeys=""
+X type[1]=""
+X A=0
+X D=0
+X lines=1
+X rx++
+X }
+X}
+X
+XEND { if( lines > 1 ) {
+X ndate = split(date,df)
+X if ( ndate > 2) print " Funny date " date > "makekeys.errs"
+X if (ndate == 1 ) {
+X df[2] = df[1]
+X df[1] = ""
+X }
+X if((keys == "") && (okeys != "")) keys = okeys
+X if(keys == "") keys = "ANON"
+X if(usedate == 1) {
+X keys = keys substr(df[2],3,2)
+X }
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++;
+X keys = keys addkey[key_suffix];
+X } else {
+X keyused[keys] = 1
+X }
+X if(check==1) print done
+X printf "%s{%s,\n",type[1],keys
+X for(line = 1; line < lines; line++) {
+X print entry[line];
+X }
+X keys=""
+X okeys=""
+X type[1]=""
+X A=0
+X D=0
+X lines=1
+X rx++
+X }
+X}
+END_OF_makekeys.awk
+if test 4029 -ne `wc -c <makekeys.awk`; then
+ echo shar: \"makekeys.awk\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+if test -f ref2bib -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ref2bib\"
+else
+echo shar: Extracting \"ref2bib\" \(328 characters\)
+sed "s/^X//" >ref2bib <<'END_OF_ref2bib'
+X#!/bin/sh
+X# shell script to convert refer (or bib) databases to BiBTeX format
+X# reads its arguments (or standard input)
+X# and writes the BibTeX to standard output
+X# errors etc. in ref2bib.errs
+X# The gnereation of keys can be altered by changing the
+X# values of some awk variables
+X#
+Xsed -f ref2bib.sed $* | awk -f ref2bib.awk
+END_OF_ref2bib
+if test 328 -ne `wc -c <ref2bib`; then
+ echo shar: \"ref2bib\" unpacked with wrong size!
+fi
+chmod +x ref2bib
+# end of overwriting check
+fi
+if test -f ref2bib.awk -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ref2bib.awk\"
+else
+echo shar: Extracting \"ref2bib.awk\" \(13137 characters\)
+sed "s/^X//" >ref2bib.awk <<'END_OF_ref2bib.awk'
+X#
+X# awk script to convert refer (or bib) format databases
+X# to BiBTeX format.
+X#
+X# written by Peter King, Heriot-Watt University
+X# use freely, but dont claim that you wrote it
+X#
+X# Generates keys using authors names and year (see %A entry )
+X#
+X# You may wish to alter treatment of key fields that are ignored
+X# such as %U %W %Y %K etc.
+X#
+X# regular expressions should be sorted according to frequency
+X# so that minimal tests are made
+X# From tests in a local data base the order given appears quite good
+X# 2883 %A
+X# 1813 blank lines
+X# 1774 %T
+X# 1764 %D
+X# 1505 %P
+X# 1347 %J
+X# 1331 %V
+X# 1201 %N
+X# 773 .. continuation lines
+X# 501 %C
+X# 424 %I
+X# 192 %B
+X# 187 %E
+X# 92 %S
+X# 89 %R
+X# 33 %X
+X# 30 %K
+X# 16 %O
+X# 12 %any other % lines
+X#
+XBEGIN {
+X for(i=1;i<=27;i++)
+X addkey[i] = substr(" abcdefghijklmnopqrstuvwxyz",i,1);
+X lkey = 3; # number of characters used from authors to make key
+X maxauthor = 3; # maximum number of authors to use in
+X # constructing key
+X rx = 1
+X }
+X
+X/\\[*u0]/ || /\\d[^{]/|| /\\s[^s]/ {
+X err = 1
+X print "Non translated \\ symbol : Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X }
+X
+X/^%A/ {
+X if (A==0) keys="";
+X A ++; lastx = "A";
+X authors[A] = substr($0,4)
+X if(A> maxauthor) next
+X ic = 0
+X lc = 1
+X while(ic < lkey && lc <= length($NF) ){
+X kc = substr( $NF, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ){
+X keys = keys kc
+X ic++
+X if(ic==lkey) next
+X }
+X else if ( kc == "\\" ) lc ++;
+X lc ++;
+X }
+X next
+X }
+X
+X/^$/ {
+X if(NR==pr+1){
+X }
+X else {
+X refs ++
+X # if FILENAME != prevname then new file
+X acnt[A]++;if(A>MaxA)MaxA=A;
+X if(T==0)print "No title : Reference "refs" "keys > "ref2bib.errs"
+X if(A==0)print "No author : Reference "refs" "keys > "ref2bib.errs"
+X if(D==0)print "No date : Reference "refs" "keys > "ref2bib.errs"
+X if( (!T)||(!A)||(!D))err=1;
+X # classify the reference
+X if(J){
+X #journal or conference
+X if(B||E||R)print "Journal & book?: Reference "refs" "keys > "ref2bib.errs"
+X if(C||I) {conf++
+X type = "INPROCEEDINGS"
+X }
+X else{
+X jour ++;
+X type = "ARTICLE"
+X }
+X if(!P) print "No page nos.? : Reference "refs" "keys > "ref2bib.errs"
+X if( B||E||R||(!P))err=1
+X if(err){
+X print "Journal reference in error" > "ref2bib.errs"
+X }
+X }
+X else
+X if(B){
+X # article in book
+X type = "INCOLLECTION"
+X bookart++
+X if(N||R||(!E)||(!I)||(!C)||(!P)||(V&&(!S)))err=1
+X if(!E) print "No editor? Reference "refs" " keys > "ref2bib.errs"
+X if(!I) print "No publisher? Reference "refs" " keys > "ref2bib.errs"
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(!P) print "No page nos.? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(R)print "Report? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(R){
+X #report
+X type = "TECHREPORT"
+X reps++
+X if(E||N)err=1
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E) print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Report reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(I){
+X wholebook ++
+X type = "BOOK"
+X # book
+X if(N||R||E||(!C)||(V&&(!S)))err=1
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E)print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else {
+X unclass ++
+X type = "MISC"
+X err=1
+X print "Unclassified reference in error" > "ref2bib.errs"
+X }
+X
+X # generate date
+X ndate = split(date,df)
+X if ( ndate > 2) print " Funny date " date > "ref2bib.errs"
+X if (ndate == 1 ) { df[2] = df[1]; df[1] = ""; }
+X
+X
+X # generate key
+X if(keys == "") keys = "ANON"
+X keys = keys substr(df[2],3,2)
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++;
+X keys = keys addkey[key_suffix];
+X }
+X else keyused[keys] = 1
+X if (err) {
+X print "Key: " keys > "ref2bib.errs"
+X if(A) for (i=1;i<=A;i++)
+X print "%A " authors[i] > "ref2bib.errs"
+X if(T) print "%T " title > "ref2bib.errs"
+X if(J) print "%J "journal > "ref2bib.errs"
+X if(B) print "%B "book > "ref2bib.errs"
+X if(V) print "%V "volume > "ref2bib.errs"
+X if(N) print "%N "number > "ref2bib.errs"
+X if(I) print "%I "publisher > "ref2bib.errs"
+X if(C) print "%C "city > "ref2bib.errs"
+X if(E) for (i=1;i<=E;i++)print "%E "editor[i] > "ref2bib.errs"
+X if(S) print "%S "series > "ref2bib.errs"
+X if(P) print "%P "pages > "ref2bib.errs"
+X if(R) print "%R "report > "ref2bib.errs"
+X if(D) print "%D "date > "ref2bib.errs"
+X if(O) print "%O "other > "ref2bib.errs"
+X print "" > "ref2bib.errs"
+X }
+X
+X if(T){
+X twc = split(title,z)
+X title = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt +length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X title = title sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(O){
+X twc = split(other,z)
+X other = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X other = other sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(X){
+X twc = split(abstr,z)
+X abstr = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X abstr = abstr sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X printf "@%s{%s",type,keys
+X if(A) {
+X printf ",\n\tauthor={%s",authors[1]
+X for(i=2;i<=A;i++) printf " and %s",authors[i]
+X printf "}"
+X }
+X if(T) printf ",\n\ttitle={%s}",title
+X if(B) printf ",\n\tbooktitle={%s}",book
+X if(E) {
+X printf ",\n\teditor={%s",editor[1]
+X for(i=2;i<=E;i++) printf " and\n\t\t%s",editor[i]
+X printf "}"
+X }
+X if(I) printf ",\n\tpublisher={%s}",publisher
+X if(C) printf ",\n\taddress={%s}",city
+X if(J) { # substitute the journal abbreviations from the standard styles
+X journal = "{ " journal "}"
+X # {acmcs} {"ACM Computing Surveys"}
+X if ( journal ~ /Comp.* Sur/ ) journal = "acmcs"
+X # {acta} {"Acta Informatica"}
+X if ( journal ~ /Acta Inf/ ) journal = "acta"
+X # {cacm} {"Communications of the ACM"}
+X if ( journal ~ /Com.* ACM/ ) journal = "cacm"
+X if ( journal ~ /CACM/ ) journal = "cacm"
+X # {ibmjrd} {"IBM Journal of Research and Development"}
+X if ( journal ~ /IBM J.*R.*D/ ) journal = "ibmjrd"
+X # {ibmsj} {"IBM Systems Journal"}
+X if ( journal ~ /IBM Sy.*J/ ) journal = "ibmsj"
+X # {ieeese} {"IEEE Transactions on Software Engineering"}
+X if ( journal ~ /IEEE Tran.*Soft.*Eng/ ) journal = "ieeese"
+X # {ieeetc} {"IEEE Transactions on Computers"}
+X if ( journal ~ /IEEE Tran.*Computers/ ) journal = "ieeetc"
+X # {ieeetcad}
+X if ( journal ~ /IEEE Tran.*Comp.*Desig/ ) journal = "ieeetcad"
+X # {ipl} {"Information Processing Letters"}
+X if ( journal ~ /Inf.*Proc.*Lett/ ) journal = "ipl"
+X # {jacm} {"Journal of the ACM"}
+X if ( journal ~ /Jou.* ACM/ ) journal = "jacm"
+X if ( journal ~ /JACM/ ) journal = "jacm"
+X # {jcss} {"Journal of Computer and System Sciences"}
+X if ( journal ~ /J.*Comp.*Sys.*Sc/ ) journal = "jcss"
+X # {scp} {"Science of Computer Programming"}
+X if ( journal ~ /Sc.*Comp.*Prog/ ) journal = "scp"
+X # {sicomp} {"SIAM Journal on Computing"}
+X if ( journal ~ /SIAM .*Comp/ ) journal = "sicomp"
+X # {tocs} {"ACM Transactions on Computer Systems"}
+X if ( journal ~ /ACM Tran.*Comp.*Sys/ ) journal = "tocs"
+X # {tods} {"ACM Transactions on Database Systems"}
+X if ( journal ~ /ACM Tran.*Data.*Sys/ ) journal = "tods"
+X # {tog} {"ACM Transactions on Graphics"}
+X if ( journal ~ /ACM Tran.*Grap/ ) journal = "tog"
+X # {toms} {"ACM Transactions on Mathematical Software"}
+X if ( journal ~ /ACM Tran.*Math.*Soft/ ) journal = "toms"
+X # {toois} {"ACM Transactions on Office Information Systems"}
+X if ( journal ~ /ACM Tran.*Off.*Inf.*Sys/ ) journal = "toois"
+X # {toplas} {"ACM Transactions on Programming Languages and Systems"}
+X if ( journal ~ /ACM Tran.*Prog.*Lan.*Sys/ ) journal = "toplas"
+X # {tcs} {"Theoretical Computer Science"}
+X if ( journal ~ /Th.*Comp.*Sci/ ) journal = "tcs"
+X
+X printf ",\n\tjournal=%s",journal
+X }
+X if(V) printf ",\n\tvolume={%s}",volume
+X if(N) printf ",\n\tnumber={%s}",number
+X if(P) printf ",\n\tpages={%s}",pages
+X if(O) printf ",\n\tnote={%s}",other
+X if(R) printf ",\n\tnumber={%s}",report
+X if(S) printf ",\n\tseries={%s}",series
+X if(df[1] != "")
+X printf ",\n\tmonth={%s}",df[1]
+X if(D) printf ",\n\tyear={%s}",df[2]
+X if(X) printf ",\n\tannote={%s}",abstr
+X if(L) printf ",\n\tkey={%s}",label
+X printf "\n}\n\n"
+X
+X A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;I=0;J=0;
+X K=0;L=0;M=0;N=0;O=0;P=0;Q=0;R=0;S=0;T=0;
+X U=0;V=0;W=0;X=0;Y=0;Z=0;
+X type = ""
+X book=""
+X title = ""
+X volume = ""
+X city = ""
+X date = ""
+X publisher = ""
+X journal = ""
+X number = ""
+X other = ""
+X page = ""
+X report = ""
+X series = ""
+X toterr +=err
+X rx++
+X }
+X err = 0
+X pr = NR
+X next
+X }
+X
+X/^%T/ {
+X T ++; lastx = "T"
+X if(T>1){err=1
+X print "Two titles: Reference " rx > "ref2bib.errs"
+X print title > "ref2bib.errs"
+X }
+X title = substr($0,4)
+X next
+X }
+X
+X/^%D/ {
+X D ++; lastx = "D"
+X if(D>1){err=1
+X print "Two dates: Reference " rx > "ref2bib.errs"
+X print date > "ref2bib.errs"
+X }
+X if(($NF<1900)||($NF>=2000)){err=1
+X print "Date error? : Reference " rx > "ref2bib.errs"
+X }
+X date = substr($0,4);
+X next
+X }
+X
+X/^%P/ {
+X P ++; lastx = "P"
+X if(P>1){err=1
+X print "Two page nos? : Reference " rx > "ref2bib.errs"
+X print pages > "ref2bib.errs"
+X }
+X pages = substr($0,4)
+X next
+X }
+X
+X/^%J/ {
+X J ++; lastx = "J"
+X if(J>1){err=1
+X print "Two journals: Reference " rx > "ref2bib.errs"
+X print journal > "ref2bib.errs"
+X }
+X journal = substr($0,4)
+X next
+X }
+X
+X/^%V/ {
+X V ++; lastx = "V"
+X if(V>1){err=1
+X print "Two volumes: Reference " rx > "ref2bib.errs"
+X print volume > "ref2bib.errs"
+X }
+X volume = substr($0,4)
+X next
+X }
+X
+X/^%N/ {
+X N ++; lastx = "N"
+X if(N>1){err=1
+X print "Two issue numbers: Reference " rx > "ref2bib.errs"
+X print number > "ref2bib.errs"
+X }
+X number = substr($0,4)
+X next
+X }
+X
+X/^[^%]/ {
+X if( lastx == "A") authors[A] = authors[A] " " $0
+X if( lastx == "B") book = book " " $0
+X if( lastx == "C") city = city " " $0
+X if( lastx == "D") date = date " " $0
+X if( lastx == "E") editor[E] = editor[E] " " $0
+X if( lastx == "I") publisher = publisher " " $0
+X if( lastx == "J") journal = journal " " $0
+X if( lastx == "L") label = label " " $0
+X if( lastx == "N") number = number " " $0
+X if( lastx == "O") other = other " " $0
+X if( lastx == "P") pages = pages " " $0
+X if( lastx == "R") report = report " " $0
+X if( lastx == "S") series = series " " $0
+X if( lastx == "T") title = title " " $0
+X if( lastx == "V") volume = volume " " $0
+X if( lastx == "X") abstr = abstr " " $0
+X next
+X }
+X
+X/^%C/ {
+X C ++; lastx = "C"
+X if(C>1){err=1
+X print "Two cities: Reference " rx > "ref2bib.errs"
+X print city > "ref2bib.errs"
+X print " 2 cities " FILENAME, pr+1, NR > "ref2bib.errs"
+X }
+X city = substr($0,4)
+X next
+X }
+X
+X/^%I/ {
+X I ++; lastx = "I"
+X if(I>1){err=1
+X print "Two publishers: Reference " rx > "ref2bib.errs"
+X print publisher > "ref2bib.errs"
+X }
+X publisher = substr($0,4)
+X next
+X }
+X
+X/^%B/ {
+X B ++; lastx = "B"
+X if(B>1){err=1
+X print "Two books: Reference " rx > "ref2bib.errs"
+X print book > "ref2bib.errs"
+X }
+X book = substr($0,4)
+X next
+X }
+X
+X/^%E/ { # this really deals with 'bib' format
+X # refer only allows one %E fielsd, so we ought to
+X # split it somehow
+X E ++; lastx = "E"
+X editor[E] = substr($0,4)
+X next
+X }
+X
+X/^%[^ABCDEIJKLNOPRSTVX]/ {
+X F ++; lastx = "F"; # should not get these
+X print "Unexpected flag: Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X err = 1
+X next
+X }
+X
+X/^%O/ {
+X O ++; lastx = "O"
+X if(O>1){err=1
+X print "Two others: Reference " rx > "ref2bib.errs"
+X print other > "ref2bib.errs"
+X }
+X other = substr($0,4)
+X next
+X }
+X
+X/^%S/ {
+X S ++; lastx = "S"
+X if(S>1){err=1
+X print "Two series: Reference " rx > "ref2bib.errs"
+X print series > "ref2bib.errs"
+X }
+X series = substr($0,4)
+X next
+X }
+X
+X/^%R/ {
+X R ++; lastx = "R"
+X if(R>1){err=1
+X print "Two reports: Reference " rx > "ref2bib.errs"
+X print report > "ref2bib.errs"
+X }
+X report = substr($0,4)
+X next
+X }
+X
+X/^%X/ {
+X X ++; lastx = "X"
+X abstr = substr($0,4)
+X if(X>1){err=1
+X print "Two abstracts: Reference " rx > "ref2bib.errs"
+X }
+X next
+X }
+X
+X/^%K/ {
+X lastx = "K"
+X next
+X }
+XEND {
+X print refs " references" > "ref2bib.errs"
+X if(toterr) print toterr " erroneous" > "ref2bib.errs"
+X if(conf) print conf " conference papers" > "ref2bib.errs"
+X if(jour) print jour " journal articles" > "ref2bib.errs"
+X if(wholebook) print wholebook " books" > "ref2bib.errs"
+X if(totB) print totB " book articles" > "ref2bib.errs"
+X if(reps) print reps " reports" > "ref2bib.errs"
+X if(unclass) print unclass " Unclassified" > "ref2bib.errs"
+X if(totO) print totO " have additional information." > "ref2bib.errs"
+X if(totK) print totK " have additional keywords." > "ref2bib.errs"
+X if(totX) print totX " have abstracts/commentaries." > "ref2bib.errs"
+X print totA " authors" > "ref2bib.errs"
+X for(i=0;i<=MaxA;i++)if(acnt[i]){
+X print i, " authors ", acnt[i] > "ref2bib.errs"
+X av += i*acnt[i]
+X }
+X print "Average ", av/refs > "ref2bib.errs"
+X print totT " titles" > "ref2bib.errs"
+X print "Key frequencies" > "ref2bib.errs"
+X for(k in keyused) print k, keyused[k] > "ref2bib.errs"
+X
+X }
+END_OF_ref2bib.awk
+if test 13137 -ne `wc -c <ref2bib.awk`; then
+ echo shar: \"ref2bib.awk\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+if test -f ref2bib.dat -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ref2bib.dat\"
+else
+echo shar: Extracting \"ref2bib.dat\" \(2302 characters\)
+sed "s/^X//" >ref2bib.dat <<'END_OF_ref2bib.dat'
+X%A Larry Rowe
+X%T Report on the 1989 Software CAD Databases Workshop
+X%I Computer Science Division-EECS, U.C. Berkeley
+X%D March 1989
+X%J To be Published
+X%K scad report
+X
+X%A Bienvenido Velez
+X%T Data Base Representations For Programs
+X%D November 1988
+X%C University of California, Berkeley
+X%R MS Report
+X%K C program database
+X
+X%A Philip A. Bernstein
+X%T Database System Support for Software Engineering -- An Extende
+Xd Abstract --
+X%D 1987
+X
+X%A James R. Larus
+X%T An Interactive Program Analysis System For Franz Lisp
+X%D October 1982
+X%C University of California, Berkeley
+X%R MS Report
+X%K lisp database program analysis
+X
+X%A Margaret H. Butler
+X%T Persistent LISP: Storing Interobject References in a Database
+X%D November 1987
+X%C University of California, Berkeley
+X%R Report No. UCB CSD 88-401, PhD Thesis
+X%K persistent lisp database
+X
+X%A Scott E. Hudson
+X%A Roger King
+X%T Object-Oriented Database Support for Software Development Envi
+Xronments
+X%J Proceedings of ACM SIGMOD 1987 Annual Conference
+X%D May, 1987
+X%C San Francisco, California
+X
+X%A Mark Bigger
+X%T A Database Model for Software Development Environments
+X%D 1986
+X%K UCLA Eng-Math, LD791.8 C6 B482
+X
+X%A Mark Linton
+X%T Queries and Views of Programs Using a Relational Database Syst
+Xem
+X%R PhD Thesis
+X%D December 1983
+X%C University of California, Berkeley
+X%K omega programs relations
+X
+X%A Michael Powell
+X%T Database Support For Programming Environments
+X%J Proceedings Eng. Design Applications of ACM-IEEE Data Base Wee
+Xk
+X%C San Jose, Ca.
+X%D May 1983.
+X%A Mark Linton
+X%T Implementing Relational Views of Programs
+X%J Proc of the ACM SIGSOFT-SIGPLAN software engineering symposium
+X on practical software development environments.
+X%C Pittsburgh, Penn
+X%D April 1984
+X%K relational views programs
+X
+X%A R. Snodgrass
+X%T Monitoring a Software Development Environment: a Relational Ap
+Xproach
+X%J Proc. of the ACM SIGSOFT-SIGPLAN Software Engineering Symposiu
+Xm on
+XPractical Software Development Environments.
+X%C Pittsburgh, Penn
+X%D April 1984
+X%K monitoring environment relational
+X
+X%A S. Horwitz
+X%A T. Teitelbaum
+X%T Relations and Attributes: A Symbiotic Basis for Editing Enviro
+Xnments
+X%J Proc. of the ACM SIGSOFT-SIGPLAN Software Engineering Symposiu
+Xm On Practical Software Development Environments.
+X%C Pittsburgh, Penn
+X%D April 1984
+X%K relations attributed grammars environments
+END_OF_ref2bib.dat
+if test 2302 -ne `wc -c <ref2bib.dat`; then
+ echo shar: \"ref2bib.dat\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+if test -f ref2bib.sed -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ref2bib.sed\"
+else
+echo shar: Extracting \"ref2bib.sed\" \(4389 characters\)
+sed "s/^X//" >ref2bib.sed <<'END_OF_ref2bib.sed'
+X#
+X# sed script to do some of the ref to bib database conversion
+X#
+X# written by Peter King, Heriot-Watt University
+X# You may do anything you like with this code
+X# EXCEPT claim that you wrote it
+X#
+X# First alter the TeX special characters
+Xs/\(.\)%/\1\\%/g
+Xs/&/\\&/g
+Xs/\$/\\$/g
+Xs/#/\\#/g
+Xs/_/\\_/g
+Xs/{/\\{/g
+Xs/}/\\}/g
+X# convert the special characters and accents from troff to BibTeX
+X# assumes the accents are those of the Berkeley -ms with .AM
+X#
+X/\\/s/\(.\)\\\\*\*'/{\\'\1}/g
+X/\\/s/\(.\)\\\\*\*`/{\\`\1}/g
+X/\\/s/\(.\)\\\\*\*^/{\\^\1}/g
+X/\\/s/\(.\)\\\\*\*:/{\\"\1}/g
+X/\\/s/\(.\)\\\\*\*~/{\\~\1}/g
+X/\\/s/\(.\)\\\\*\*_/{\\=\1}/g
+X/\\/s/\([oO]\)\\\\*\*\//{\\\1}/g
+X/\\/s/\([aA]\)\\\\*\*o/{\\\1\1}/g
+X/\\/s/\(.\)\\\\*\*,/{\\c{\1}}/g
+X/\\/s/\(.\)\\\\*\*v/{\\v{\1}}/g
+X/\\/s/\(.\)\\\\*\*"/{\\H{\1}}/g
+X/\\/s/\(.\)\\\\*\*\./{\\d{\1}}/g
+X/\\/s/\\\\*\*8/{\\ss}/g
+X/\\/s/\\\\*\*(P\([lL]\)/{\\\1}/g
+X/\\/s/\\\\*\*(\([oO]\)\//{\\\1}/g
+X# quotes
+X/\\/s/\\\\*\*Q/``/g
+X/\\/s/\\\\*\*U/''/g
+X/\\/s/\\\\*\*-/---/g
+X# \0 as space between surname de\0Souza etc.
+X/\\/s/\\\\*0\([a-z]*\)\\\\*0/\\0\1 /g
+X/\\/s/ \([a-z]*\)\\\\*0/ \1 /g
+X# but trap the ones that start with a capital letter and convert them to
+X# ties
+X/\\/s/\\\\*0/~/g
+X#
+X# now deal with special characters and Greek
+X/\\/s/\\\\*(em/---/g
+X/\\/s/\\\\*(if/$\\infty$/g
+X/\\/s/\\\\*(\*a/$\\alpha$/g
+X/\\/s/\\\\*(\*b/$\\beta$/g
+X/\\/s/\\\\*(\*g/$\\gamma$/g
+X/\\/s/\\\\*(\*d/$\\delta$/g
+X/\\/s/\\\\*(\*e/$\\epsilon$/g
+X/\\/s/\\\\*(\*z/$\\zeta$/g
+X/\\/s/\\\\*(\*y/$\\eta$/g
+X/\\/s/\\\\*(\*h/$\\theta$/g
+X/\\/s/\\\\*(\*i/$\\iota$/g
+X/\\/s/\\\\*(\*k/$\\kappa$/g
+X/\\/s/\\\\*(\*l/$\\lambda$/g
+X/\\/s/\\\\*(\*m/$\\mu$/g
+X/\\/s/\\\\*(\*n/$\\nu$/g
+X/\\/s/\\\\*(\*c/$\\xi$/g
+X/\\/s/\\\\*(\*o/$o$/g
+X/\\/s/\\\\*(\*p/$\\pi$/g
+X/\\/s/\\\\*(\*r/$\\rho$/g
+X/\\/s/\\\\*(\*s/$\\sigma$/g
+X/\\/s/\\\\*(\*t/$\\tau$/g
+X/\\/s/\\\\*(\*u/$\\upsilon$/g
+X/\\/s/\\\\*(\*f/$\\phi$/g
+X/\\/s/\\\\*(\*x/$\\chi$/g
+X/\\/s/\\\\*(\*q/$\\psi$/g
+X/\\/s/\\\\*(\*w/$\\omega$/g
+X/\\/s/\\\\*(\*A/A/g
+X/\\/s/\\\\*(\*B/B/g
+X/\\/s/\\\\*(\*G/$\\Gamma$/g
+X/\\/s/\\\\*(\*D/$\\Delta$/g
+X/\\/s/\\\\*(\*E/E/g
+X/\\/s/\\\\*(\*Z/Z/g
+X/\\/s/\\\\*(\*Y/H/g
+X/\\/s/\\\\*(\*H/$\\Theta$/g
+X/\\/s/\\\\*(\*I/I/g
+X/\\/s/\\\\*(\*K/K/g
+X/\\/s/\\\\*(\*L/$\\Lambda$/g
+X/\\/s/\\\\*(\*M/M/g
+X/\\/s/\\\\*(\*N/N/g
+X/\\/s/\\\\*(\*C/$\\Xi$/g
+X/\\/s/\\\\*(\*O/$O$/g
+X/\\/s/\\\\*(\*P/$\\Pi$/g
+X/\\/s/\\\\*(\*R/P/g
+X/\\/s/\\\\*(\*S/$\\Sigma$/g
+X/\\/s/\\\\*(\*T/T/g
+X/\\/s/\\\\*(\*U/$\\Upsilon$/g
+X/\\/s/\\\\*(\*F/$\\Phi$/g
+X/\\/s/\\\\*(\*X/X/g
+X/\\/s/\\\\*(\*Q/$\\Psi$/g
+X/\\/s/\\\\*(\*W/$\\Omega$/g
+X# Now trap title words that must be capitalised
+X/^%[^T]/b
+X#
+X# first all words that are all capitals (at least two consecutive)
+X# we need the slashes to allow for M/M/1 queues
+Xs;[A-Z][A-Z/][A-Z/0-9]*;{&};g
+X#
+X# then some proper names
+X# first some mathematicians
+X# (for some I've added the Pattern [^ -]* toe the end to get Markov,
+X# Markovian, etc.
+Xs/Abel/{&}/g
+Xs/Bernoulli/{&}/g
+Xs/Bessel/{&}/g
+Xs/Beta/{&}/g
+Xs/Borel/{&}/g
+Xs/Cauchy/{&}/g
+Xs/Church/{&}/g
+Xs/Rosser/{&}/g
+Xs/Dedekind/{&}/g
+Xs/Descartes/{&}/g
+Xs/Dirichlet/{&}/g
+Xs/Euclid[^ -,;]*/{&}/g
+Xs/Euler/{&}/g
+Xs/Fibonacci/{&}/g
+Xs/Fermat/{&}/g
+Xs/Fourier/{&}/g
+Xs/Fresnel/{&}/g
+Xs/Frobenius/{&}/g
+Xs/Perron/{&}/g
+Xs/Gamma/{&}/g
+Xs/Gauss[^ -,;]*/{&}/g
+Xs/Hilbert/{&}/g
+Xs/Horner/{&}/g
+Xs/Holder/{&}/g
+Xs/Jacobi[^ -,;]*/{&}/g
+Xs/Jensen/{&}/g
+Xs/Markov[^ -,;]*/{&}/g
+Xs/Arnoldi/{&}/g
+Xs/Laplace/{&}/g
+Xs/Laguerre/{&}/g
+Xs/Lagrange/{&}/g
+Xs/Legendre/{&}/g
+Xs/Leibnitz/{&}/g
+Xs/Rayleigh/{&}/g
+Xs/Ritz/{&}/g
+Xs/Riemann/{&}/g
+X# this is really Rouche (acute accent) , but the accent processing will disrupt it
+Xs/Rouch/{&}/g
+Xs/Stieltjes/{&}/g
+Xs/Stiener/{&}/g
+Xs/Schwarz/{&}/g
+Xs/Weibull/{&}/g
+Xs/Wald/{&}/g
+Xs/Kronecker/{&}/g
+Xs/Diophantine/{&}/g
+Xs/Delbrouck/{&}/g
+Xs/Bayes[^ -,;]*/{&}/g
+Xs/Jackson/{&}/g
+Xs/Newhall/{&}/g
+Xs/Turing/{&}/g
+Xs/Norton/{&}/g
+Xs/Petri/{&}/g
+Xs/Wilkinson/{&}/g
+Xs/Skinner/{&}/g
+Xs/Schafer/{&}/g
+Xs/Dempster/{&}/g
+Xs/Runge/{&}/g
+Xs/Kutta/{&}/g
+Xs/Pollaczek/{&}/g
+Xs/Khinchin/{&}/g
+Xs/Palm/{&}/g
+Xs/Erlang/{&}/g
+Xs/Engset/{&}/g
+Xs/Little's/{&}/g
+Xs/Kosten/{&}/g
+Xs/Gittins/{&}/g
+Xs/Feller/{&}/g
+Xs/Cox/{&}/g
+Xs/Poisson/{&}/g
+Xs/Chapman/{&}/g
+Xs/Kolmogorov/{&}/g
+Xs/Smirnov/{&}/g
+Xs/Weiner/{&}/g
+Xs/Hopf/{&}/g
+Xs/Stirling/{&}/g
+X
+X# computing
+Xs/Buzen/{&}/g
+Xs/Gordon/{&}/g
+Xs/Newell/{&}/g
+Xs/Lemoine/{&}/g
+Xs/Pierce/{&}/g
+Xs/Harrison/{&}/g
+Xs/Cambridge/{&}/g
+Xs/Ethernet/{&}/g
+Xs/Aloha/{&}/g
+X
+X# coding theory
+Xs/Hamming/{&}/g
+Xs/Huffman/{&}/g
+Xs/Reed/{&}/g
+Xs/Shannon/{&}/g
+Xs/Solomon/{&}/g
+Xs/Viterbi/{&}/g
+END_OF_ref2bib.sed
+if test 4389 -ne `wc -c <ref2bib.sed`; then
+ echo shar: \"ref2bib.sed\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+if test -f ref2bib.sh -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ref2bib.sh\"
+else
+echo shar: Extracting \"ref2bib.sh\" \(18299 characters\)
+sed "s/^X//" >ref2bib.sh <<'END_OF_ref2bib.sh'
+X#!/bin/sh
+X#
+X# shell script to convert refer (or bib) databases to BiBTeX format
+X#
+X# reads its arguments (or standard input)
+X# and writes the BibTeX to standard output
+X#
+X# the in-line files ref2b*.{sed,awk} do not change, and could be
+X# stored in a library somewhere. The sed script can actually be
+X# given as an argument in ' ' quotes provided the ' in the
+X# file are replaced with '\'' !!
+X# the awk script is too large for this treatment.
+X#
+X# The gnereation of keys can be altered by changing the
+X# values of some awk variables
+X#
+X# errors etc. in ref2bib.errs
+X#
+Xcat << 'ZZ' >ref2b$$.sed
+X#
+X# sed script to do some of the ref to bib database conversion
+X#
+X# written by Peter King, Heriot-Watt University
+X# You may do anything you like with this code
+X# EXCEPT claim that you wrote it
+X#
+X# First alter the TeX special characters
+Xs/\(.\)%/\1\\%/g
+Xs/&/\\&/g
+Xs/\$/\\$/g
+Xs/#/\\#/g
+Xs/_/\\_/g
+Xs/{/\\{/g
+Xs/}/\\}/g
+X# convert the special characters and accents from troff to BibTeX
+X# assumes the accents are those of the Berkeley -ms with .AM
+X#
+X/\\/s/\(.\)\\\\*\*'/{\\'\1}/g
+X/\\/s/\(.\)\\\\*\*`/{\\`\1}/g
+X/\\/s/\(.\)\\\\*\*^/{\\^\1}/g
+X/\\/s/\(.\)\\\\*\*:/{\\"\1}/g
+X/\\/s/\(.\)\\\\*\*~/{\\~\1}/g
+X/\\/s/\(.\)\\\\*\*_/{\\=\1}/g
+X/\\/s/\([oO]\)\\\\*\*\//{\\\1}/g
+X/\\/s/\([aA]\)\\\\*\*o/{\\\1\1}/g
+X/\\/s/\(.\)\\\\*\*,/{\\c{\1}}/g
+X/\\/s/\(.\)\\\\*\*v/{\\v{\1}}/g
+X/\\/s/\(.\)\\\\*\*"/{\\H{\1}}/g
+X/\\/s/\(.\)\\\\*\*\./{\\d{\1}}/g
+X/\\/s/\\\\*\*8/{\\ss}/g
+X/\\/s/\\\\*\*(P\([lL]\)/{\\\1}/g
+X/\\/s/\\\\*\*(\([oO]\)\//{\\\1}/g
+X# quotes
+X/\\/s/\\\\*\*Q/``/g
+X/\\/s/\\\\*\*U/''/g
+X/\\/s/\\\\*\*-/---/g
+X# \0 as space between surname de\0Souza etc.
+X/\\/s/\\\\*0\([a-z]*\)\\\\*0/\\0\1 /g
+X/\\/s/ \([a-z]*\)\\\\*0/ \1 /g
+X# but trap the ones that start with a capital letter and convert them to
+X# ties
+X/\\/s/\\\\*0/~/g
+X#
+X# now deal with special characters and Greek
+X/\\/s/\\\\*(em/---/g
+X/\\/s/\\\\*(if/$\\infty$/g
+X/\\/s/\\\\*(\*a/$\\alpha$/g
+X/\\/s/\\\\*(\*b/$\\beta$/g
+X/\\/s/\\\\*(\*g/$\\gamma$/g
+X/\\/s/\\\\*(\*d/$\\delta$/g
+X/\\/s/\\\\*(\*e/$\\epsilon$/g
+X/\\/s/\\\\*(\*z/$\\zeta$/g
+X/\\/s/\\\\*(\*y/$\\eta$/g
+X/\\/s/\\\\*(\*h/$\\theta$/g
+X/\\/s/\\\\*(\*i/$\\iota$/g
+X/\\/s/\\\\*(\*k/$\\kappa$/g
+X/\\/s/\\\\*(\*l/$\\lambda$/g
+X/\\/s/\\\\*(\*m/$\\mu$/g
+X/\\/s/\\\\*(\*n/$\\nu$/g
+X/\\/s/\\\\*(\*c/$\\xi$/g
+X/\\/s/\\\\*(\*o/$o$/g
+X/\\/s/\\\\*(\*p/$\\pi$/g
+X/\\/s/\\\\*(\*r/$\\rho$/g
+X/\\/s/\\\\*(\*s/$\\sigma$/g
+X/\\/s/\\\\*(\*t/$\\tau$/g
+X/\\/s/\\\\*(\*u/$\\upsilon$/g
+X/\\/s/\\\\*(\*f/$\\phi$/g
+X/\\/s/\\\\*(\*x/$\\chi$/g
+X/\\/s/\\\\*(\*q/$\\psi$/g
+X/\\/s/\\\\*(\*w/$\\omega$/g
+X/\\/s/\\\\*(\*A/A/g
+X/\\/s/\\\\*(\*B/B/g
+X/\\/s/\\\\*(\*G/$\\Gamma$/g
+X/\\/s/\\\\*(\*D/$\\Delta$/g
+X/\\/s/\\\\*(\*E/E/g
+X/\\/s/\\\\*(\*Z/Z/g
+X/\\/s/\\\\*(\*Y/H/g
+X/\\/s/\\\\*(\*H/$\\Theta$/g
+X/\\/s/\\\\*(\*I/I/g
+X/\\/s/\\\\*(\*K/K/g
+X/\\/s/\\\\*(\*L/$\\Lambda$/g
+X/\\/s/\\\\*(\*M/M/g
+X/\\/s/\\\\*(\*N/N/g
+X/\\/s/\\\\*(\*C/$\\Xi$/g
+X/\\/s/\\\\*(\*O/$O$/g
+X/\\/s/\\\\*(\*P/$\\Pi$/g
+X/\\/s/\\\\*(\*R/P/g
+X/\\/s/\\\\*(\*S/$\\Sigma$/g
+X/\\/s/\\\\*(\*T/T/g
+X/\\/s/\\\\*(\*U/$\\Upsilon$/g
+X/\\/s/\\\\*(\*F/$\\Phi$/g
+X/\\/s/\\\\*(\*X/X/g
+X/\\/s/\\\\*(\*Q/$\\Psi$/g
+X/\\/s/\\\\*(\*W/$\\Omega$/g
+X# Now trap title words that must be capitalised
+X/^%[^T]/b
+X#
+X# first all words that are all capitals (at least two consecutive)
+X# we need the slashes to allow for M/M/1 queues
+Xs;[A-Z][A-Z/][A-Z/0-9]*;{&};g
+X#
+X# then some proper names
+X# first some mathematicians
+X# (for some I've added the Pattern [^ -]* toe the end to get Markov,
+X# Markovian, etc.
+Xs/Abel/{&}/g
+Xs/Bernoulli/{&}/g
+Xs/Bessel/{&}/g
+Xs/Beta/{&}/g
+Xs/Borel/{&}/g
+Xs/Cauchy/{&}/g
+Xs/Church/{&}/g
+Xs/Rosser/{&}/g
+Xs/Dedekind/{&}/g
+Xs/Descartes/{&}/g
+Xs/Dirichlet/{&}/g
+Xs/Euclid[^ -,;]*/{&}/g
+Xs/Euler/{&}/g
+Xs/Fibonacci/{&}/g
+Xs/Fermat/{&}/g
+Xs/Fourier/{&}/g
+Xs/Fresnel/{&}/g
+Xs/Frobenius/{&}/g
+Xs/Perron/{&}/g
+Xs/Gamma/{&}/g
+Xs/Gauss[^ -,;]*/{&}/g
+Xs/Hilbert/{&}/g
+Xs/Horner/{&}/g
+Xs/Holder/{&}/g
+Xs/Jacobi[^ -,;]*/{&}/g
+Xs/Jensen/{&}/g
+Xs/Markov[^ -,;]*/{&}/g
+Xs/Arnoldi/{&}/g
+Xs/Laplace/{&}/g
+Xs/Laguerre/{&}/g
+Xs/Lagrange/{&}/g
+Xs/Legendre/{&}/g
+Xs/Leibnitz/{&}/g
+Xs/Rayleigh/{&}/g
+Xs/Ritz/{&}/g
+Xs/Riemann/{&}/g
+X# this is really Rouche (acute accent) , but the accent processing will disrupt it
+Xs/Rouch/{&}/g
+Xs/Stieltjes/{&}/g
+Xs/Stiener/{&}/g
+Xs/Schwarz/{&}/g
+Xs/Weibull/{&}/g
+Xs/Wald/{&}/g
+Xs/Kronecker/{&}/g
+Xs/Diophantine/{&}/g
+Xs/Delbrouck/{&}/g
+Xs/Bayes[^ -,;]*/{&}/g
+Xs/Jackson/{&}/g
+Xs/Newhall/{&}/g
+Xs/Turing/{&}/g
+Xs/Norton/{&}/g
+Xs/Petri/{&}/g
+Xs/Wilkinson/{&}/g
+Xs/Skinner/{&}/g
+Xs/Schafer/{&}/g
+Xs/Dempster/{&}/g
+Xs/Runge/{&}/g
+Xs/Kutta/{&}/g
+Xs/Pollaczek/{&}/g
+Xs/Khinchin/{&}/g
+Xs/Palm/{&}/g
+Xs/Erlang/{&}/g
+Xs/Engset/{&}/g
+Xs/Little's/{&}/g
+Xs/Kosten/{&}/g
+Xs/Gittins/{&}/g
+Xs/Feller/{&}/g
+Xs/Cox/{&}/g
+Xs/Poisson/{&}/g
+Xs/Chapman/{&}/g
+Xs/Kolmogorov/{&}/g
+Xs/Smirnov/{&}/g
+Xs/Weiner/{&}/g
+Xs/Hopf/{&}/g
+Xs/Stirling/{&}/g
+X
+X# computing
+Xs/Buzen/{&}/g
+Xs/Gordon/{&}/g
+Xs/Newell/{&}/g
+Xs/Lemoine/{&}/g
+Xs/Pierce/{&}/g
+Xs/Harrison/{&}/g
+Xs/Cambridge/{&}/g
+Xs/Ethernet/{&}/g
+Xs/Aloha/{&}/g
+X
+X# coding theory
+Xs/Hamming/{&}/g
+Xs/Huffman/{&}/g
+Xs/Reed/{&}/g
+Xs/Shannon/{&}/g
+Xs/Solomon/{&}/g
+Xs/Viterbi/{&}/g
+XZZ
+Xcat << 'ZZ' > ref2b$$.awk
+X#
+X# awk script to convert refer (or bib) format databases
+X# to BiBTeX format.
+X#
+X# written by Peter King, Heriot-Watt University
+X# use freely, but dont claim that you wrote it
+X#
+X# Generates keys using authors names and year (see %A entry )
+X#
+X# You may wish to alter treatment of key fields that are ignored
+X# such as %U %W %Y %K etc.
+X#
+X# regular expressions should be sorted according to frequency
+X# so that minimal tests are made
+X# From tests in a local data base the order given appears quite good
+X# 2883 %A
+X# 1813 blank lines
+X# 1774 %T
+X# 1764 %D
+X# 1505 %P
+X# 1347 %J
+X# 1331 %V
+X# 1201 %N
+X# 773 .. continuation lines
+X# 501 %C
+X# 424 %I
+X# 192 %B
+X# 187 %E
+X# 92 %S
+X# 89 %R
+X# 33 %X
+X# 30 %K
+X# 16 %O
+X# 12 %any other % lines
+X#
+XBEGIN {
+X for(i=1;i<=27;i++)
+X addkey[i] = substr(" abcdefghijklmnopqrstuvwxyz",i,1);
+X lkey = 3; # number of characters used from authors to make key
+X maxauthor = 3; # maximum number of authors to use in
+X # constructing key
+X rx = 1
+X }
+X
+X/\\[*u0]/ || /\\d[^{]/|| /\\s[^s]/ {
+X err = 1
+X print "Non translated \\ symbol : Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X }
+X
+X/^%A/ {
+X if (A==0) keys="";
+X A ++; lastx = "A";
+X authors[A] = substr($0,4)
+X if(A> maxauthor) next
+X ic = 0
+X lc = 1
+X while(ic < lkey && lc <= length($NF) ){
+X kc = substr( $NF, lc, 1)
+X if ( kc ~ /[a-zA-Z]/ ){
+X keys = keys kc
+X ic++
+X if(ic==lkey) next
+X }
+X else if ( kc == "\\" ) lc ++;
+X lc ++;
+X }
+X next
+X }
+X
+X/^$/ {
+X if(NR==pr+1){
+X }
+X else {
+X refs ++
+X # if FILENAME != prevname then new file
+X acnt[A]++;if(A>MaxA)MaxA=A;
+X if(T==0)print "No title : Reference "refs" "keys > "ref2bib.errs"
+X if(A==0)print "No author : Reference "refs" "keys > "ref2bib.errs"
+X if(D==0)print "No date : Reference "refs" "keys > "ref2bib.errs"
+X if( (!T)||(!A)||(!D))err=1;
+X # classify the reference
+X if(J){
+X #journal or conference
+X if(B||E||R)print "Journal & book?: Reference "refs" "keys > "ref2bib.errs"
+X if(C||I) {conf++
+X type = "Inproceedings"
+X }
+X else{
+X jour ++;
+X type = "Article"
+X }
+X if(!P) print "No page nos.? : Reference "refs" "keys > "ref2bib.errs"
+X if( B||E||R||(!P))err=1
+X if(err){
+X print "Journal reference in error" > "ref2bib.errs"
+X }
+X }
+X else
+X if(B){
+X # article in book
+X type = "Incollection"
+X bookart++
+X if(N||R||(!E)||(!I)||(!C)||(!P)||(V&&(!S)))err=1
+X if(!E) print "No editor? Reference "refs" " keys > "ref2bib.errs"
+X if(!I) print "No publisher? Reference "refs" " keys > "ref2bib.errs"
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(!P) print "No page nos.? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(R)print "Report? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(R){
+X #report
+X type = "Techreport"
+X reps++
+X if(E||N)err=1
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E) print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Report reference in error" > "ref2bib.errs"
+X }
+X }
+X else if(I){
+X wholebook ++
+X type = "Book"
+X # book
+X if(N||R||E||(!C)||(V&&(!S)))err=1
+X if(!C) print "No city? Reference "refs" " keys > "ref2bib.errs"
+X if(N)print "Issue no.? Reference "refs" " keys > "ref2bib.errs"
+X if(E)print "Editor? Reference "refs" " keys > "ref2bib.errs"
+X if(V&&(!S))print "Volume but no Series Reference "refs" " keys > "ref2bib.errs"
+X if(err){
+X print "Book reference in error" > "ref2bib.errs"
+X }
+X }
+X else {
+X unclass ++
+X type = "Misc"
+X err=1
+X print "Unclassified reference in error" > "ref2bib.errs"
+X }
+X
+X # generate date
+X ndate = split(date,df)
+X if ( ndate > 2) print " Funny date " date > "ref2bib.errs"
+X if (ndate == 1 ) { df[2] = df[1]; df[1] = ""; }
+X
+X
+X # generate key
+X if(keys == "") keys = "ANON"
+X keys = keys substr(df[2],3,2)
+X if(keyused[keys] >=1) {
+X key_suffix = keyused[keys]++;
+X keys = keys addkey[key_suffix];
+X }
+X else keyused[keys] = 1
+X if (err) {
+X print "Key: " keys > "ref2bib.errs"
+X if(A) for (i=1;i<=A;i++)
+X print "%A " authors[i] > "ref2bib.errs"
+X if(T) print "%T " title > "ref2bib.errs"
+X if(J) print "%J "journal > "ref2bib.errs"
+X if(B) print "%B "book > "ref2bib.errs"
+X if(V) print "%V "volume > "ref2bib.errs"
+X if(N) print "%N "number > "ref2bib.errs"
+X if(I) print "%I "publisher > "ref2bib.errs"
+X if(C) print "%C "city > "ref2bib.errs"
+X if(E) for (i=1;i<=E;i++)print "%E "editor[i] > "ref2bib.errs"
+X if(S) print "%S "series > "ref2bib.errs"
+X if(P) print "%P "pages > "ref2bib.errs"
+X if(R) print "%R "report > "ref2bib.errs"
+X if(D) print "%D "date > "ref2bib.errs"
+X if(O) print "%O "other > "ref2bib.errs"
+X print "" > "ref2bib.errs"
+X }
+X
+X if(T){
+X twc = split(title,z)
+X title = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt +length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X title = title sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(O){
+X twc = split(other,z)
+X other = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X other = other sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X if(X){
+X twc = split(abstr,z)
+X abstr = z[1]; lt = length(z[1]);
+X for(i=2;i<=twc;i++) {
+X if(lt + length(z[i]) >= 55) {sc = "\n\t\t";lt = 0;}
+X else sc = " ";
+X abstr = abstr sc z[i]
+X lt += length(z[i]) + 1
+X }
+X }
+X
+X printf "@%s{\t%s",type,keys
+X if(A) {
+X printf ",\n\tAuthor = { %s",authors[1]
+X for(i=2;i<=A;i++) printf " and\n\t\t%s",authors[i]
+X printf " }"
+X }
+X if(T) printf ",\n\tTitle = { %s }",title
+X if(B) printf ",\n\tBooktitle = { %s }",book
+X if(E) {
+X printf ",\n\tEditor = { %s",editor[1]
+X for(i=2;i<=E;i++) printf " and\n\t\t%s",editor[i]
+X printf " }"
+X }
+X if(I) printf ",\n\tPublisher = { %s }",publisher
+X if(C) printf ",\n\tAddress = { %s }",city
+X if(J) { # substitute the journal abbreviations from the standard styles
+X journal = "{ " journal " }"
+X # {acmcs} {"ACM Computing Surveys"}
+X if ( journal ~ /Comp.* Sur/ ) journal = "acmcs"
+X # {acta} {"Acta Informatica"}
+X if ( journal ~ /Acta Inf/ ) journal = "acta"
+X # {cacm} {"Communications of the ACM"}
+X if ( journal ~ /Com.* ACM/ ) journal = "cacm"
+X if ( journal ~ /CACM/ ) journal = "cacm"
+X # {ibmjrd} {"IBM Journal of Research and Development"}
+X if ( journal ~ /IBM J.*R.*D/ ) journal = "ibmjrd"
+X # {ibmsj} {"IBM Systems Journal"}
+X if ( journal ~ /IBM Sy.*J/ ) journal = "ibmsj"
+X # {ieeese} {"IEEE Transactions on Software Engineering"}
+X if ( journal ~ /IEEE Tran.*Soft.*Eng/ ) journal = "ieeese"
+X # {ieeetc} {"IEEE Transactions on Computers"}
+X if ( journal ~ /IEEE Tran.*Computers/ ) journal = "ieeetc"
+X # {ieeetcad}
+X if ( journal ~ /IEEE Tran.*Comp.*Desig/ ) journal = "ieeetcad"
+X # {ipl} {"Information Processing Letters"}
+X if ( journal ~ /Inf.*Proc.*Lett/ ) journal = "ipl"
+X # {jacm} {"Journal of the ACM"}
+X if ( journal ~ /Jou.* ACM/ ) journal = "jacm"
+X if ( journal ~ /JACM/ ) journal = "jacm"
+X # {jcss} {"Journal of Computer and System Sciences"}
+X if ( journal ~ /J.*Comp.*Sys.*Sc/ ) journal = "jcss"
+X # {scp} {"Science of Computer Programming"}
+X if ( journal ~ /Sc.*Comp.*Prog/ ) journal = "scp"
+X # {sicomp} {"SIAM Journal on Computing"}
+X if ( journal ~ /SIAM .*Comp/ ) journal = "sicomp"
+X # {tocs} {"ACM Transactions on Computer Systems"}
+X if ( journal ~ /ACM Tran.*Comp.*Sys/ ) journal = "tocs"
+X # {tods} {"ACM Transactions on Database Systems"}
+X if ( journal ~ /ACM Tran.*Data.*Sys/ ) journal = "tods"
+X # {tog} {"ACM Transactions on Graphics"}
+X if ( journal ~ /ACM Tran.*Grap/ ) journal = "tog"
+X # {toms} {"ACM Transactions on Mathematical Software"}
+X if ( journal ~ /ACM Tran.*Math.*Soft/ ) journal = "toms"
+X # {toois} {"ACM Transactions on Office Information Systems"}
+X if ( journal ~ /ACM Tran.*Off.*Inf.*Sys/ ) journal = "toois"
+X # {toplas} {"ACM Transactions on Programming Languages and Systems"}
+X if ( journal ~ /ACM Tran.*Prog.*Lan.*Sys/ ) journal = "toplas"
+X # {tcs} {"Theoretical Computer Science"}
+X if ( journal ~ /Th.*Comp.*Sci/ ) journal = "tcs"
+X
+X printf ",\n\tJournal = %s",journal
+X }
+X if(V) printf ",\n\tVolume = { %s }",volume
+X if(N) printf ",\n\tNumber = { %s }",number
+X if(P) printf ",\n\tPages = { %s }",pages
+X if(O) printf ",\n\tNote = { %s }",other
+X if(R) printf ",\n\tNumber = { %s }",report
+X if(S) printf ",\n\tSeries = { %s }",series
+X if(df[1] != "")
+X printf ",\n\tMonth = { %s }",df[1]
+X if(D) printf ",\n\tYear = { %s }",df[2]
+X if(X) printf ",\n\tAnnote = { %s }",abstr
+X if(L) printf ",\n\tKey = { %s }",label
+X printf "\t}\n\n"
+X
+X A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;I=0;J=0;
+X K=0;L=0;M=0;N=0;O=0;P=0;Q=0;R=0;S=0;T=0;
+X U=0;V=0;W=0;X=0;Y=0;Z=0;
+X type = ""
+X book=""
+X title = ""
+X volume = ""
+X city = ""
+X date = ""
+X publisher = ""
+X journal = ""
+X number = ""
+X other = ""
+X page = ""
+X report = ""
+X series = ""
+X toterr +=err
+X rx++
+X }
+X err = 0
+X pr = NR
+X next
+X }
+X
+X/^%T/ {
+X T ++; lastx = "T"
+X if(T>1){err=1
+X print "Two titles: Reference " rx > "ref2bib.errs"
+X print title > "ref2bib.errs"
+X }
+X title = substr($0,4)
+X next
+X }
+X
+X/^%D/ {
+X D ++; lastx = "D"
+X if(D>1){err=1
+X print "Two dates: Reference " rx > "ref2bib.errs"
+X print date > "ref2bib.errs"
+X }
+X if(($NF<1900)||($NF>=2000)){err=1
+X print "Date error? : Reference " rx > "ref2bib.errs"
+X }
+X date = substr($0,4);
+X next
+X }
+X
+X/^%P/ {
+X P ++; lastx = "P"
+X if(P>1){err=1
+X print "Two page nos? : Reference " rx > "ref2bib.errs"
+X print pages > "ref2bib.errs"
+X }
+X pages = substr($0,4)
+X next
+X }
+X
+X/^%J/ {
+X J ++; lastx = "J"
+X if(J>1){err=1
+X print "Two journals: Reference " rx > "ref2bib.errs"
+X print journal > "ref2bib.errs"
+X }
+X journal = substr($0,4)
+X next
+X }
+X
+X/^%V/ {
+X V ++; lastx = "V"
+X if(V>1){err=1
+X print "Two volumes: Reference " rx > "ref2bib.errs"
+X print volume > "ref2bib.errs"
+X }
+X volume = substr($0,4)
+X next
+X }
+X
+X/^%N/ {
+X N ++; lastx = "N"
+X if(N>1){err=1
+X print "Two issue numbers: Reference " rx > "ref2bib.errs"
+X print number > "ref2bib.errs"
+X }
+X number = substr($0,4)
+X next
+X }
+X
+X/^[^%]/ {
+X if( lastx == "A") authors[A] = authors[A] " " $0
+X if( lastx == "B") book = book " " $0
+X if( lastx == "C") city = city " " $0
+X if( lastx == "D") date = date " " $0
+X if( lastx == "E") editor[E] = editor[E] " " $0
+X if( lastx == "I") publisher = publisher " " $0
+X if( lastx == "J") journal = journal " " $0
+X if( lastx == "L") label = label " " $0
+X if( lastx == "N") number = number " " $0
+X if( lastx == "O") other = other " " $0
+X if( lastx == "P") pages = pages " " $0
+X if( lastx == "R") report = report " " $0
+X if( lastx == "S") series = series " " $0
+X if( lastx == "T") title = title " " $0
+X if( lastx == "V") volume = volume " " $0
+X if( lastx == "X") abstr = abstr " " $0
+X next
+X }
+X
+X/^%C/ {
+X C ++; lastx = "C"
+X if(C>1){err=1
+X print "Two cities: Reference " rx > "ref2bib.errs"
+X print city > "ref2bib.errs"
+X print " 2 cities " FILENAME, pr+1, NR > "ref2bib.errs"
+X }
+X city = substr($0,4)
+X next
+X }
+X
+X/^%I/ {
+X I ++; lastx = "I"
+X if(I>1){err=1
+X print "Two publishers: Reference " rx > "ref2bib.errs"
+X print publisher > "ref2bib.errs"
+X }
+X publisher = substr($0,4)
+X next
+X }
+X
+X/^%B/ {
+X B ++; lastx = "B"
+X if(B>1){err=1
+X print "Two books: Reference " rx > "ref2bib.errs"
+X print book > "ref2bib.errs"
+X }
+X book = substr($0,4)
+X next
+X }
+X
+X/^%E/ { # this really deals with 'bib' format
+X # refer only allows one %E fielsd, so we ought to
+X # split it somehow
+X E ++; lastx = "E"
+X editor[E] = substr($0,4)
+X next
+X }
+X
+X/^%[^ABCDEIJKLNOPRSTVX]/ {
+X F ++; lastx = "F"; # should not get these
+X print "Unexpected flag: Reference " rx > "ref2bib.errs"
+X print $0 > "ref2bib.errs"
+X err = 1
+X next
+X }
+X
+X/^%O/ {
+X O ++; lastx = "O"
+X if(O>1){err=1
+X print "Two others: Reference " rx > "ref2bib.errs"
+X print other > "ref2bib.errs"
+X }
+X other = substr($0,4)
+X next
+X }
+X
+X/^%S/ {
+X S ++; lastx = "S"
+X if(S>1){err=1
+X print "Two series: Reference " rx > "ref2bib.errs"
+X print series > "ref2bib.errs"
+X }
+X series = substr($0,4)
+X next
+X }
+X
+X/^%R/ {
+X R ++; lastx = "R"
+X if(R>1){err=1
+X print "Two reports: Reference " rx > "ref2bib.errs"
+X print report > "ref2bib.errs"
+X }
+X report = substr($0,4)
+X next
+X }
+X
+X/^%X/ {
+X X ++; lastx = "X"
+X abstr = substr($0,4)
+X if(X>1){err=1
+X print "Two abstracts: Reference " rx > "ref2bib.errs"
+X }
+X next
+X }
+X
+X/^%K/ {
+X lastx = "K"
+X next
+X }
+XEND {
+X print refs " references" > "ref2bib.errs"
+X if(toterr) print toterr " erroneous" > "ref2bib.errs"
+X if(conf) print conf " conference papers" > "ref2bib.errs"
+X if(jour) print jour " journal articles" > "ref2bib.errs"
+X if(wholebook) print wholebook " books" > "ref2bib.errs"
+X if(totB) print totB " book articles" > "ref2bib.errs"
+X if(reps) print reps " reports" > "ref2bib.errs"
+X if(unclass) print unclass " Unclassified" > "ref2bib.errs"
+X if(totO) print totO " have additional information." > "ref2bib.errs"
+X if(totK) print totK " have additional keywords." > "ref2bib.errs"
+X if(totX) print totX " have abstracts/commentaries." > "ref2bib.errs"
+X print totA " authors" > "ref2bib.errs"
+X for(i=0;i<=MaxA;i++)if(acnt[i]){
+X print i, " authors ", acnt[i] > "ref2bib.errs"
+X av += i*acnt[i]
+X }
+X print "Average ", av/refs > "ref2bib.errs"
+X print totT " titles" > "ref2bib.errs"
+X print "Key frequencies" > "ref2bib.errs"
+X for(k in keyused) print k, keyused[k] > "ref2bib.errs"
+X
+X }
+XZZ
+Xsed -f ref2b$$.sed $* | awk -f ref2b$$.awk
+Xrm -f ref2b$$.sed ref2b$$.awk
+Xexit
+END_OF_ref2bib.sh
+if test 18299 -ne `wc -c <ref2bib.sh`; then
+ echo shar: \"ref2bib.sh\" unpacked with wrong size!
+fi
+chmod +x ref2bib.sh
+# end of overwriting check
+fi
+echo shar: End of shell archive.
+exit 0
+
diff --git a/biblio/bibtex/utils/refer-tools/refer-to-bibtex.el b/biblio/bibtex/utils/refer-tools/refer-to-bibtex.el
new file mode 100644
index 0000000000..ba9893df40
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/refer-to-bibtex.el
@@ -0,0 +1,575 @@
+;From michael@uni-paderborn.de Thu Jul 12 07:25:01 1990
+;Return-Path: <michael@uni-paderborn.de>
+;Received: from mcsun.EU.net by life.ai.mit.edu (4.1/AI-4.10) id AA23180; Thu, 12 Jul 90 07:24:37 EDT
+;Received: by mcsun.EU.net with SMTP; Thu, 12 Jul 90 13:24:18 +0200 (MET)
+;Received: from athene.uni-paderborn.de
+; by unido.informatik.uni-dortmund.de with SMTP via EUnet (UNIDO-2.0.1.q) via EUnet
+; for wheaties.ai.mit.edu
+; id AK07977; Thu, 12 Jul 90 10:58:24 +0100
+;Received: by athene.uni-paderborn.de; Thu, 12 Jul 90 10:55:58 +0200 (PB-3.13)
+;Date: Thu, 12 Jul 90 10:55:58 +0200
+;From: Michael Schmidt <michael@uni-paderborn.de>
+;Message-Id: <9007120855.AA04022@athene.uni-paderborn.de>
+;To: tmb@wheaties.ai.mit.edu (Thomas M. Breuel)
+;Subject: Re: BibTex <-> Tib/Refer converter wanted
+;Newsgroups: comp.text.tex,comp.text
+;In-Reply-To: Your message of 30 Jun 90 00:08:58 GMT in comp.text.tex,comp.text
+;Organization: Replace me with your organization
+;Status: R
+;
+;In article <9290@life.ai.mit.edu> you write:
+;>I am looking for a converter to convert BibTex bibliography files
+;>to Tib/Refer files and vice versa.
+;
+;What about a little emacs miracle (GNU, of course).
+;
+; Michael
+;
+;--
+; LAST EDIT: Thu Jan 12 22:47:18 1989 by Michael Schmidt (schmidt)
+;; refer-to-bibtex.el
+;; Convert refer-style bibliographic entries to ones usable by latex bib
+;; copyright 1988 Henry Kautz
+;;
+;; Use: from a buffer containing the refer-style bibliography,
+;; M-x r2b-convert-buffer
+;; Program will prompt for an output buffer name, and will log
+;; warnings during the conversion process in the buffer *Log*.
+
+(provide 'refer-to-bibtex)
+;**********************************************************
+; User Parameters
+
+(defvar r2b-trace-on nil "*trace conversion")
+
+(defvar r2b-journal-abbrevs
+ '( ("aij" "{Artificial Intelligence}")
+ )
+ "Abbreviation list for journal names.
+If the car of an element matches the data exactly, it is replaced by
+the cadr when output. Braces must be included if replacement is a
+{string}, but not if replacement is a bibtex abbreviation. The cadr
+may be eliminated if is exactly the same as the car.")
+
+(defvar r2b-booktitle-abbrevs
+ '( ("mi" "{Machine Intelligence}")
+ ("aaai88" "{Proceedings of AAAI-88}")
+ ("ijcai88")
+ )
+ "Abbreviation list for book and proceedings names. If the car of
+an element matches the data exactly, it is replaced by the cadr when
+output. Braces must be included if replacement is a {string}, but not
+if replacement is a bibtex abbreviation. The cadr may be eliminated
+if is exactly the same as the car.
+ For example, the default value means that aaai88 is expanded
+to ordinary test, but ijcai88 is treated as a bibtex macro.")
+
+(defvar r2b-proceedings-list
+ '(("ijcai88"))
+ "Assoc list of books or journals which are really conference proceedings,
+but whose name and whose abbrev expansion (as defined in r2b-journal-abbrevs
+and r2b-booktitle-abbrevs) does not contain the words 'conference' or
+'proceeding'. (Those cases are handled automatically.)
+The entry must match the given data exactly.")
+
+(defvar r2b-stop-words
+ "A\\|The\\|Some\\|\\An"
+ "Words not considered to use to build the citation key")
+
+;**********************************************************
+; Utility Functions
+
+(setq capitalize-title-stop-words
+ (concat
+ "\\(the\\|and\\|of\\|is\\|a\\|an\\|of\\|for\\|in\\|to\\|in\\|on\\|at\\|"
+ "by\\|with\\|that\\|its\\)\\b"))
+
+(defun capitalize-title-region (begin end)
+ "Like capitalize-region, but don't capitalize stop words, except the first"
+ (interactive "r")
+ (let ((case-fold-search t))
+ (save-restriction
+ (narrow-to-region begin end)
+ (goto-char (point-min))
+ (capitalize-word 1)
+ (while (re-search-forward "\\<" nil t)
+ (if (looking-at capitalize-title-stop-words)
+ (downcase-word 1)
+ (if (let ((case-fold-search nil)) (looking-at ".[A-Z]"))
+ (forward-word 1)
+ (capitalize-word 1)))
+ )
+ )))
+
+(defun capitalize-title (s)
+ "Like capitalize, but don't capitalize stop words, except the first"
+ (save-excursion
+ (set-buffer (get-buffer-create "$$$Scratch$$$"))
+ (erase-buffer)
+ (insert s)
+ (capitalize-title-region (point-min) (point-max))
+ (buffer-string)))
+
+;*********************************************************
+(defun r2b-reset ()
+ "unbind defvars, for debugging"
+ (interactive)
+ (makunbound 'r2b-journal-abbrevs)
+ (makunbound 'r2b-booktitle-abbrevs)
+ (makunbound 'r2b-proceedings-list)
+ (makunbound 'r2b-stop-words)
+ (makunbound 'r2b-stop-regexp)
+ )
+
+(defvar r2b-stop-regexp
+ (concat "\\(\\(" r2b-stop-words "\\|\\)\\b\\)[ \t\n]*\\([A-Z0-9]+\\)"))
+
+
+(defun r2b-trace (&rest args)
+ (if r2b-trace-on
+ (progn
+ (apply (function message) args)
+ (sit-for 0)
+ )))
+
+(defun r2b-match (exp)
+ "returns string matched in current buffer"
+ (buffer-substring (match-beginning exp) (match-end exp)))
+
+(defvar r2b-out-buf-name "*Out*" "*output from refer-to-bibtex" )
+(defvar r2b-log-name "*Log*" "*logs errors from refer-to-bibtex" )
+(defvar r2b-in-buf nil)
+(defvar r2b-out-buf nil)
+(defvar r2b-log nil)
+
+(defvar r2b-error-found nil)
+
+(setq r2b-variables '(
+ r2b-error-found
+ r2bv-author
+ r2bv-primary-author
+ r2bv-date
+ r2bv-year
+ r2bv-decade
+ r2bv-month
+ r2bv-title
+ r2bv-title-first-word
+ r2bv-editor
+ r2bv-annote
+ r2bv-tr
+ r2bv-address
+ r2bv-institution
+ r2bv-keywords
+ r2bv-booktitle
+ r2bv-journal
+ r2bv-volume
+ r2bv-number
+ r2bv-pages
+ r2bv-booktitle
+ r2bv-kn
+ r2bv-publisher
+ r2bv-school
+ r2bv-type
+ r2bv-where
+ r2bv-note
+ ))
+
+(defun r2b-clear-variables ()
+ "set all global vars used by r2b to nil"
+ (let ((vars r2b-variables))
+ (while vars
+ (set (car vars) nil)
+ (setq vars (cdr vars)))
+ ))
+
+(defun r2b-warning (&rest args)
+ (setq r2b-error-found t)
+ (princ (apply (function format) args) r2b-log)
+ (princ "\n" r2b-log))
+
+(defun r2b-get-field (var field &optional unique required)
+ "Set VAR to string value of FIELD, if any. If none, VAR is set to nil.
+If multiple fields appear, then separate values with the '\\nand\\t\\t',
+unless UNIQUE is non-nil, in which case log error and return first value.
+Trim off leading blanks and tabs on first line, and
+trailing blanks and tabs of every line.
+Returns value of var."
+ (let (item val (not-past-end t))
+ (r2b-trace "snarfing %s" field)
+ (goto-char (point-min))
+ (while (and not-past-end
+ (re-search-forward
+ (concat "^" field "\\b[ \t]*\\(.*\\)") nil t))
+ (setq item (r2b-match 1))
+ (while (and (setq not-past-end (zerop (forward-line 1)))
+ (not (looking-at "[ \t]*$\\|%")))
+ (looking-at "\\(.*[^ \t\n]\\)[ \t]*$")
+ (setq item (concat item "\n" (r2b-match 1)))
+ )
+ (if (null val)
+ (setq val item)
+ (if unique
+ (r2b-warning "*Illegal multiple field %s %s" field item)
+ (setq val (concat val "\n\t\tand " item))
+ )
+ )
+ )
+ (if (and (null val) required)
+ (r2b-warning "*Missing field %s" field))
+ (set var val)
+ ))
+
+(defun r2b-set-match (var n regexp string )
+ "set VAR to the Nth subpattern in REGEXP matched by STRING, or nil if none"
+ (set var
+ (if (and (stringp string) (string-match regexp string))
+ (substring string (match-beginning n) (match-end n))
+ nil)
+ )
+ )
+
+(defvar r2b-month-abbrevs
+ '(("jan") ("feb") ("mar") ("apr") ("may") ("jun") ("jul") ("aug")
+ ("sep") ("oct") ("nov") ("dec")))
+
+(defun r2b-convert-month ()
+ "Try to convert r2bv-month to a standard 3 letter name"
+ (if r2bv-month
+ (let ((months r2b-month-abbrevs))
+ (if (string-match "[^0-9]" r2bv-month)
+ (progn
+ (while (and months (not (string-match (car (car months))
+ r2bv-month)))
+ (setq months (cdr months)))
+ (if months
+ (setq r2bv-month (car (car months)))))
+ (progn
+ (setq months (car (read-from-string r2bv-month)))
+ (if (and (numberp months)
+ (> months 0)
+ (< months 13))
+ (setq r2bv-month (car (nth months r2b-month-abbrevs)))
+ (progn
+ (r2b-warning "* Ridiculous month")
+ (setq r2bv-month nil))
+ ))
+ ))
+ )
+ )
+
+(defun r2b-snarf-input ()
+ "parse buffer into global variables"
+ (let ((case-fold-search t))
+ (r2b-trace "snarfing...")
+ (sit-for 0)
+ (set-buffer r2b-in-buf)
+ (goto-char (point-min))
+ (princ " " r2b-log)
+ (princ (buffer-substring (point) (progn (end-of-line) (point))) r2b-log)
+ (terpri r2b-log)
+
+ (r2b-get-field 'r2bv-author "%A" nil t)
+ (r2b-set-match 'r2bv-primary-author 1
+ "\\b\\(\\w+\\)[ \t]*\\($\\|,\\)" r2bv-author)
+
+ (r2b-get-field 'r2bv-date "%D" t t)
+ (r2b-set-match 'r2bv-year 0 "[12][0-9][0-9][0-9]" r2bv-date)
+ (and (null r2bv-year)
+ (r2b-set-match 'r2bv-year 1 "[^0-9]\\([0-9][0-9]\\)$" r2bv-date)
+ (setq r2bv-year (concat "19" r2bv-year)))
+ (r2b-set-match 'r2bv-decade 1 "..\\(..\\)" r2bv-year)
+ (r2b-set-match 'r2bv-month 0
+ "[0-9]+/\\|[a-zA-Z]+" r2bv-date)
+ (if (and (stringp r2bv-month) (string-match "\\(.*\\)/$" r2bv-month))
+ (setq r2bv-month (substring r2bv-month 0 (match-end 1))))
+ (r2b-convert-month)
+
+ (r2b-get-field 'r2bv-title "%T" t t)
+ (r2b-require 'r2bv-title)
+ (setq r2bv-title (capitalize-title r2bv-title))
+ (r2b-set-match 'r2bv-title-first-word 3
+ r2b-stop-regexp
+ r2bv-title)
+
+
+ (r2b-get-field 'r2bv-editor "%E")
+ (r2b-get-field 'r2bv-annote "%X" t )
+ (r2b-get-field 'r2bv-tr "%R" t)
+ (r2b-get-field 'r2bv-address "%C" t)
+ (r2b-get-field 'r2bv-institution "%I" t)
+ (r2b-get-field 'r2bv-keywords "%K")
+ (r2b-get-field 'r2bv-booktitle "%B" t)
+ (r2b-get-field 'r2bv-journal "%J" t)
+ (r2b-get-field 'r2bv-volume "%V" t)
+ (r2b-get-field 'r2bv-number "%N" t)
+ (r2b-get-field 'r2bv-pages "%P" t)
+ (r2b-get-field 'r2bv-where "%W" t)
+ )
+ )
+
+
+(defun r2b-put-field (field data &optional abbrevs)
+ "print bibtex FIELD = {DATA} if DATA not null; precede
+with a comma and newline; if ABBREVS list is given, then
+try to replace the {DATA} with an abbreviation"
+ (if data
+ (let (match nodelim multi-line)
+ (if (and abbrevs (setq match (assoc data abbrevs)))
+ (progn
+ (if (null (cdr match))
+ (setq data (car match))
+ (setq data (car (cdr match))))
+ (setq nodelim t)))
+ (if (and (not (equal data ""))
+ (not (string-match "[^0-9]" data)))
+ (setq nodelim t))
+ (princ ", \n ")
+ (princ field)
+ (princ " =\t")
+ (if (not nodelim) (princ "{"))
+ (string-match ".*" data)
+ (if (> (match-end 0) 59)
+ (princ "\n"))
+ (princ data)
+ (if (not nodelim) (princ "}"))
+ )
+ ))
+
+
+(defun r2b-require (vars)
+ "If any of VARS is null, set to empty string and log error"
+ (cond
+ ((null vars))
+ ((listp vars) (r2b-require (car vars)) (r2b-require (cdr vars)))
+ (t
+ (if (null (symbol-value vars))
+ (progn
+ (r2b-warning "*Missing value for field %s" vars)
+ (set vars "")
+ )))
+ )
+ )
+
+
+(defmacro moveq (new old)
+ "set NEW to OLD and set OLD to nil"
+ (list 'progn (list 'setq new old) (list 'setq old 'nil)))
+
+(defun r2b-barf-output ()
+ "generate bibtex based on global variables"
+ (let ((standard-output r2b-out-buf) (case-fold-search t) match)
+
+ (r2b-trace "...barfing")
+ (sit-for 0)
+ (set-buffer r2b-out-buf)
+
+ (setq r2bv-kn (concat r2bv-primary-author r2bv-decade
+ r2bv-title-first-word))
+
+ (setq r2bv-entry-kind
+ (cond
+ ((and r2bv-journal
+ (or
+ (string-match "proceeding\\|conference" r2bv-journal)
+ (assoc r2bv-journal r2b-proceedings-list)
+ (and
+ (setq match (assoc r2bv-journal r2b-booktitle-abbrevs))
+ (string-match "proceeding\\|conference"
+ (car (cdr (match)))))))
+ (moveq r2bv-booktitle r2bv-journal)
+ (moveq r2bv-publisher r2bv-institution)
+ 'inproceedings)
+ ((and r2bv-booktitle
+ (or
+ (string-match "proceeding\\|conference" r2bv-booktitle)
+ (assoc r2bv-booktitle r2b-proceedings-list)
+ (and
+ (setq match (assoc r2bv-booktitle
+ r2b-booktitle-abbrevs))
+ (string-match "proceeding\\|conference"
+ (car (cdr (match)))))))
+ (moveq r2bv-publisher r2bv-institution)
+ 'inproceedings)
+ ((and r2bv-tr (string-match "phd" r2bv-tr))
+ (moveq r2bv-school r2bv-institution)
+ (r2b-require 'r2bv-school )
+ 'phdthesis)
+ ((and r2bv-tr (string-match "master" r2bv-tr))
+ (moveq r2bv-school r2bv-institution)
+ (r2b-require 'r2bv-school )
+ 'mastersthesis)
+ ((and r2bv-tr (string-match "draft\\|unpublish" r2bv-tr))
+ (moveq r2bv-note r2bv-institution)
+ 'unpublished)
+ (r2bv-journal
+ 'article)
+ (r2bv-booktitle
+ (moveq r2bv-publisher r2bv-institution)
+ (r2b-require 'r2bv-publisher)
+ 'incollection)
+ (r2bv-tr
+ (r2b-require 'r2bv-institution)
+ (if (string-match "\\(.+\\)[ /t/n]+\\([^ /t/n]\\)+$"
+ r2bv-tr)
+ (progn
+ (setq r2bv-type (substring r2bv-tr 0 (match-end 1)))
+ (setq r2bv-number (substring r2bv-tr
+ (match-beginning 2)))
+ (setq r2bv-tr nil))
+ (moveq r2bv-number r2bv-tr))
+ 'techreport)
+ (r2bv-institution
+ (moveq r2bv-publisher r2bv-institution)
+ (r2b-require 'r2bv-publisher)
+ 'book)
+ (t
+ 'misc)
+ ))
+
+ (r2b-require '(r2bv-author r2bv-title r2bv-year))
+
+ (if r2b-error-found
+ (princ "\n% Warning -- Errors During Conversion Next Entry\n"))
+
+ (princ "\n@")
+ (princ r2bv-entry-kind)
+ (princ "( ")
+ (princ r2bv-kn)
+
+ (r2b-put-field "author" r2bv-author )
+ (r2b-put-field "title" r2bv-title )
+ (r2b-put-field "year" r2bv-year )
+
+ (r2b-put-field "month" r2bv-month r2b-month-abbrevs)
+ (r2b-put-field "journal" r2bv-journal r2b-journal-abbrevs)
+ (r2b-put-field "volume" r2bv-volume)
+ (r2b-put-field "number" r2bv-number)
+ (r2b-put-field "type" r2bv-type)
+ (r2b-put-field "booktitle" r2bv-booktitle r2b-booktitle-abbrevs)
+ (r2b-put-field "editor" r2bv-editor)
+ (r2b-put-field "publisher" r2bv-publisher)
+ (r2b-put-field "institution" r2bv-institution)
+ (r2b-put-field "school" r2bv-school)
+ (r2b-put-field "pages" r2bv-pages)
+ (r2b-put-field "address" r2bv-address)
+ (r2b-put-field "note" r2bv-note)
+ (r2b-put-field "keywords" r2bv-keywords)
+ (r2b-put-field "where" r2bv-where)
+ (r2b-put-field "annote" r2bv-annote)
+
+ (princ " )\n")
+ )
+ )
+
+
+(defun r2b-convert-record (output-name)
+ "transform current bib entry and append to buffer OUTPUT"
+ (interactive
+ (list (read-string "Output to buffer: " r2b-out-buf-name)))
+ (let (rec-end rec-begin not-done)
+ (setq r2b-out-buf-name output-name)
+ (setq r2b-out-buf (get-buffer-create output-name))
+ (setq r2b-in-buf (current-buffer))
+ (set-buffer r2b-out-buf)
+ (goto-char (point-max))
+ (setq r2b-log (get-buffer-create r2b-log-name))
+ (set-buffer r2b-log)
+ (goto-char (point-max))
+ (set-buffer r2b-in-buf)
+ (setq not-done (re-search-forward "[^ \t\n]" nil t))
+ (if not-done
+ (progn
+ (re-search-backward "^[ \t]*$" nil 2)
+ (re-search-forward "^%")
+ (beginning-of-line nil)
+ (setq rec-begin (point))
+ (re-search-forward "^[ \t]*$" nil 2)
+ (setq rec-end (point))
+ (narrow-to-region rec-begin rec-end)
+ (r2b-clear-variables)
+ (r2b-snarf-input)
+ (r2b-barf-output)
+ (set-buffer r2b-in-buf)
+ (widen)
+ (goto-char rec-end)
+ t)
+ nil
+ )
+ ))
+
+
+(defun r2b-convert-buffer (output-name)
+ "transform current buffer and append to buffer OUTPUT"
+ (interactive
+ (list (read-string "Output to buffer: " r2b-out-buf-name)))
+ (save-excursion
+ (setq r2b-log (get-buffer-create r2b-log-name))
+ (set-buffer r2b-log)
+ (erase-buffer))
+ (widen)
+ (goto-char (point-min))
+ (message "Working, please be patient...")
+ (sit-for 0)
+ (while (r2b-convert-record output-name) t)
+ (message "Done, results in %s, errors in %s"
+ r2b-out-buf-name r2b-log-name)
+ )
+
+(defvar r2b-load-quietly nil "*Don't print help message when loaded")
+
+(defvar r2b-help-message
+" Refer to Bibtex Bibliography Conversion
+
+A refer-style database is of the form:
+
+%A Joe Blow
+%T Great Thoughts I've Thought
+%D 1977
+etc.
+
+This utility converts these kind of databases to bibtex form, for
+users of TeX and LaTex. Instructions:
+1. Visit the file containing the refer-style database.
+2. The command
+ M-x r2b-convert-buffer
+ converts the entire buffer, appending it's output by default in a
+ buffer named *Out*, and logging progress and errors in a buffer
+ named *Log*. The original file is never modified.
+ Note that results are appended to *Out*, so if that buffer
+ buffer already exists and contains material you don't want to
+ save, you should kill it first.
+3. Switch to the buffer *Out* and save it as a named file.
+4. To convert a single refer-style entry, simply position the cursor
+ at the entry and enter
+ M-x r2b-convert-record
+ Again output is appended to *Out* and errors are logged in *Log*.
+
+This utility is very robust and pretty smart about determining the
+type of the entry. It includes facilities for expanding refer macros
+to text, or substituting bibtex macros. See the source file,
+ refer-to-bibtex.el
+for information on how to customize the conversion process.
+
+If you don't want to see this help message when you load this utility,
+then include the following line in your .emacs file:
+ (setq r2b-load-quietly t)
+
+Please send bug reports and suggestions to
+ Henry Kautz
+ allegra!kautz
+ kautz@allegra.att.com")
+
+
+(defun r2b-help ()
+ "print help message"
+ (interactive)
+ (with-output-to-temp-buffer "*Help*"
+ (princ r2b-help-message)))
+
+(if (not r2b-load-quietly)
+ (r2b-help))
+
+(message "r2b loaded")
+--
+ Michael
+
diff --git a/biblio/bibtex/utils/refer-tools/refer.bst b/biblio/bibtex/utils/refer-tools/refer.bst
new file mode 100644
index 0000000000..8b7fe4b634
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/refer.bst
@@ -0,0 +1,387 @@
+%From @mitvma.mit.edu:cjmchale@cs.tcd.ie Mon Jul 2 19:48:31 1990
+%Return-Path: <@mitvma.mit.edu:cjmchale@cs.tcd.ie>
+%Received: from mitvma.mit.edu by life.ai.mit.edu (4.1/AI-4.10) id AA07748; Mon, 2 Jul 90 19:48:24 EDT
+%Received: from MITVMA.MIT.EDU by mitvma.mit.edu (IBM VM SMTP R1.2.1MX) with BSMTP id 4555; Mon, 02 Jul 90 19:47:32 EDT
+%Received: from IRLEARN.UCD.IE by MITVMA.MIT.EDU (Mailer R2.05) with BSMTP id
+% 0199; Mon, 02 Jul 90 19:47:23 EDT
+%Received: from ccvax.ucd.ie by IRLEARN.UCD.IE (Mailer R2.03B) with BSMTP id
+% 2688; Mon, 02 Jul 90 14:45:10 GMT
+%Received: from cs.tcd.ie by ccvax.ucd.ie; Mon, 2 Jul 90 14:38 GMT
+%Received: from csaran.cs.tcd.ie by cs.tcd.ie; Mon, 2 Jul 90 14:42 GMT
+%Date: Mon, 2 Jul 90 14:39:44 BST
+%From: cjmchale%cs.tcd.ie@mitvma.mit.edu
+%Subject: Re: BibTex <-> Tib/Refer converter wanted
+%Sender: cjmchale%cs.tcd.ie@mitvma.mit.edu
+%To: tmb@wheaties.ai.mit.edu
+%Newsgroups: comp.text.tex,comp.text
+%In-Reply-To: <9290@life.ai.mit.edu>
+%Organization: DSG, Dept. of Comp.Sc., Trinity College, Dublin, Ireland.
+%Message-Id: <9007021439.aa02454@csaran.cs.tcd.ie>
+%Status: R
+%
+%In article <9290@life.ai.mit.edu> you write:
+%>I am looking for a converter to convert BibTex bibliography files
+%>to Tib/Refer files and vice versa. Even if you have just a
+%>shell script that isn't completely general, that would be fine.
+%>
+%> Thanks, Thomas.
+%>
+%>PS: thanks to everyone who responded to my question about refer-style
+%>bibliography processors. The answer was to get Tib from ENEEVAX.UMD.EDU.
+%
+%You may not be aware of this but BibTeX is actually a (special
+%purpose) programming language! The source code file for a BibTeX
+%program is the bibliography style file (".bst"). BibTeX reads in the
+%bibtex entries and the code in the ".bst" file munges them about and
+%usually writes LaTeX code out. However, if you learn how to program
+%BibTeX (as the local guru for its manual---it's only about 10 or 20
+%pages long) then you could write your own custom ".bst" files that
+%will do exactly what you want them to. In particular, instead of
+%writing out LaTeX style code it could write out "Hello World" or even
+%generate a file that looks quite like a refer style file.
+%
+%It would be difficult to get such a ".bst" file to convert TeX
+%commands (which might be imbedded in the bib entries) to refer
+%commands but the actual changing of "author=..." to %A ... is trivial
+%(for the most part; there are a few mismatches between the fields that
+%BibTeX and refer use).
+%
+%Anyway, I've written such a ".bst" file and a UNIX "sh" shell script
+%to automate the process. I've included them below.
+%
+%------------------- Start of file "refer.bst" ---------------------
+%
+% 8/4/'90
+% Hacked together by Ciaran McHale (cjmchale@cs.tcd.ie) to translate
+% BibTeX bibliographies into refer format
+% Based on a bib style file by Kannan Varadhan
+%
+
+
+ENTRY
+ { % entry fields
+ abstract % non standard
+ address
+ annote % non standard
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keywords % non standard
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {} % no integer entry variables
+ { label extra.label sort.label } % label entry variables
+
+
+STRINGS { s t a.name }
+
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {handle.names}
+{ 't := % type e.g. "A" for authors, "E" for editors
+ 's := % the string containing the names
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 'a.name :=
+
+ a.name "others" =
+ 'skip$ % don't print out "%A others"
+ { "%" t * " " * a.name * write$ newline$ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+
+
+
+
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+
+
+
+
+STRINGS { is.digit.tmp }
+
+FUNCTION {is.digit}
+
+{
+ 'is.digit.tmp :=
+ is.digit.tmp "0" =
+ is.digit.tmp "1" = or
+ is.digit.tmp "2" = or
+ is.digit.tmp "3" = or
+ is.digit.tmp "4" = or
+ is.digit.tmp "5" = or
+ is.digit.tmp "6" = or
+ is.digit.tmp "7" = or
+ is.digit.tmp "8" = or
+ is.digit.tmp "9" = or
+}
+
+FUNCTION {handle.maybe.empty}
+{
+ 't :=
+ duplicate$
+ empty$
+ 'pop$
+ { "%" t * " " * swap$ * write$ newline$ }
+ if$
+}
+
+FUNCTION {translate}
+{
+ newline$ % get a blank line between each entry
+
+ title "T" handle.maybe.empty
+ booktitle "B" handle.maybe.empty
+
+ % there may be multiple authors so handle it differently
+ author empty$
+ { " empty author in " cite$ * warning$ }
+ { author "A" handle.names }
+ if$
+ editor "E" handle.maybe.empty
+ journal "J" handle.maybe.empty
+ keywords "K" handle.maybe.empty
+ cite$ "L" handle.maybe.empty
+ volume "V" handle.maybe.empty
+ abstract "X" handle.maybe.empty
+
+ % The date, if present may be just the year or both the month and year
+ % or might even be just the month
+ month empty$ year empty$ and
+ 'skip$ % no date of publication so nothing to do
+ {
+ month empty$ % I'm using the if statement because I'm not
+ { "" } % sure that--- month " " year * --- would work.
+ { month " " * } % (The manual doesn't mention anything about
+ if$ % this so I'm playing safe)
+ year empty$
+ { "" }
+ { year }
+ if$
+ *
+ "D" handle.maybe.empty
+ }
+ if$
+ pages "P" handle.maybe.empty
+ note "O" handle.maybe.empty
+ number "N" handle.maybe.empty
+ series "S" handle.maybe.empty
+ annote "Y" handle.maybe.empty
+ address "C" handle.maybe.empty
+
+}
+
+
+FUNCTION {article} { translate }
+FUNCTION {book} { translate }
+FUNCTION {booklet} { translate }
+FUNCTION {inbook} { translate }
+FUNCTION {incollection} { translate }
+FUNCTION {inproceedings} { translate }
+FUNCTION {manual} { translate }
+FUNCTION {mastersthesis} { translate }
+FUNCTION {misc} { translate }
+FUNCTION {phdthesis} { translate }
+FUNCTION {proceedings} { translate }
+FUNCTION {techreport} { translate }
+FUNCTION {unpublished} { translate }
+FUNCTION {default.type} { translate }
+
+
+READ
+
+ITERATE {call.type$}
+------------------- End of file "refer.bst" ---------------------
+
+------------------- Start of file "bib2refer" ---------------------
+#! /bin/sh
+# Written by Ciaran McHale (cjmchale@cs.tcd.ie) 8/4/'90
+
+FN=`basename $0`
+
+case $# in
+0) echo "Usage: $FN <filename> [<filename>*]" ; exit 1 ;;
+esac
+
+#
+# This shell script uses bibtex and a custom made bibliography style file
+# to translate BibTeX bibliographies into refer format. It is based on
+# another shell script written by Eamonn McManus, Alan Judge and Ciaran McHale.
+#
+STYLE=refer # BibTeX-to-refer style file
+
+FILE=tmp
+RESULT=${FN}.out
+BIBFILE=${FILE}.bib
+
+# clean up if interrupted
+trap 'rm ${FILE}.bbl ${FILE}.aux ${FILE}.blg ; exit 1' 1 2 3 15
+
+> ${FILE}.bbl # truncate the files
+> ${FILE}.aux
+> ${FILE}.blg
+
+#
+#Hand craft the .aux file
+#
+BIBRECD=""
+for i
+do
+ file="`echo $i | sed 's/.bib//'`"
+ BIBRECD="${BIBRECD},${file}"
+done
+BIBRECD="`echo $BIBRECD | sed 's/^,//'`" # remove 1st " "
+
+echo "\bibstyle{$STYLE}" >> ${FILE}.aux
+echo "\bibdata{$BIBRECD}" >> ${FILE}.aux
+
+# Read all the files (command line arguments) and use them to write
+# the necessary info into the .aux file.
+for i
+do
+ file="`echo $i | sed 's/.bib//'`"
+ bibfile=${file}.bib
+ echo FILE $bibfile has `egrep '^@' $bibfile | wc -l` records
+ # create the .aux file with \citation commands in it
+ sed -n 's/^@.*[{(][ ]*\(.*\)/\\citation {\1}/p' $bibfile |
+ sed 's/[, ]//g' >>${FILE}.aux
+
+done
+
+bibtex $FILE
+cp ${FILE}.bbl ${RESULT}
+
+echo; echo ${FN}: output in ${RESULT}; echo
+
+# Cleanup...
+rm ${FILE}.bbl ${FILE}.aux ${FILE}.blg
+
+exit 0
+------------------- End of file "bib2refer" ---------------------
+
+
+This was written as a quick hack and I haven't tested it thoroughly so
+if you see any problems then be prepared to get out the BibTeX
+programming manual and change a line or two (hopefully that won't be
+necessary).
+
+
+Ciaran.
+--
+Ciaran McHale
+Department of Computer Science, Trinity College, Dublin 2, Ireland.
+Telephone: +353-1-772941 ext 1538 FAX: +353-1-772204 Telex: 93782 TCD EI
+email: cjmchale@cs.tcd.ie or cjmchale%cs.tcd.ie@cunyvm.cuny.edu
+ My opinions and bad language do not represent Trinity
+
diff --git a/biblio/bibtex/utils/refer-tools/refer2bibtex-0.9.4.pl b/biblio/bibtex/utils/refer-tools/refer2bibtex-0.9.4.pl
new file mode 100644
index 0000000000..89f88352d3
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/refer2bibtex-0.9.4.pl
@@ -0,0 +1,1745 @@
+#
+# r2b : convert a refer database to a BiBTeX database
+# Copyright 1992-1994 by Dana Jacobsen (dana@acm.org)
+# 2000-2002 changes and extensions by Frank Roth (roth@gfz-potsdam.de) and
+# Hartmut Palm (palm@gfz-potsdam.de)
+#
+#version = "0.1.1";# 17 Apr 92 jacobsd Wrote original version
+#version = "0.2.0";# 20 Apr 92 jacobsd Added tib support
+#version = "0.3.0";# 21 Apr 92 jacobsd Rewrote heuristics
+#version = "0.4.0";# 22 Apr 92 jacobsd Revamped the rofftotex stuff
+#version = "0.5.2";# 24 Apr 92 jacobsd some cleanup
+#version = "0.6.0";# 25 Apr 92 jacobsd understands names
+#version = "0.6.1";# 26 Apr 92 jacobsd cleanup
+#version = "0.6.2";# 27 Apr 92 jacobsd added support for a few more fields
+#version = "0.6.3";# 27 Apr 92 jacobsd little more tib support
+#version = "0.6.4";# 27 Apr 92 jacobsd added Roman-8 chars and more options
+#version = "0.6.5";# 27 Apr 92 jacobsd integrated error routine
+#version = "0.7.0";# 2 May 92 jacobsd added groff chars and fixed bugs
+#version = "0.7.1";# 2 May 92 jacobsd fixed a few more things
+#version = "0.7.2";# 10 Aug 92 jacobsd changed key generation
+#version = "0.7.3";# 16 Aug 92 jacobsd added ISBN, 2 overstrikes, -q
+#version = "0.7.4";# 19 Aug 92 jacobsd overstrike, changes for proceedings
+#version = "0.7.5";# 20 Aug 92 jacobsd efficiency moves, month abbrevs
+#version = "0.7.6";# 29 Aug 92 jacobsd added eqn flag
+#version = "0.7.7";# 2 Sep 92 jacobsd changed name, edition, report parsing
+#version = "0.8.0";# 4 Sep 92 jacobsd added date and option field to header
+#version = "0.8.1";# 7 Sep 92 jacobsd added ibm option, corrected ms macros
+#version = "0.8.2";# 5 Oct 92 jacobsd fixed -ms/-mm macro confusion (again)
+#version = "0.8.3";# 5 Oct 92 jacobsd parsedate, edition, movements
+#version = "0.8.4";# 8 Oct 92 jacobsd added \s point size changing
+#version = "0.8.5";# 14 May 93 jacobsd literals, parsename, font changing
+#version = "0.9.0";# 20 May 93 jacobsd
+#version = "0.9.1";# 20 May 93 jacobsd revamped refer input section
+#version = "0.9.2";# 22 Oct 94 jacobsd Changed to work with perl 5.000
+#version = "0.9.3";# 23 Dec 94 jacobsd Fixed {} caps problem with Perl 5.
+$version = "0.9.4";# 08 Jul 02 roth&palm added several features/spec.chars.
+#
+# todo: final debugging for release
+#
+# All bug-fixes, suggestions, flames, and compliments gladly accepted.
+#
+
+# These are site selected.
+#
+$maxflength = 2950; # Bibtex doesn't want lines longer than this.
+$maxllength = 14; # maximum length of the text in a label (plus decade)
+$prcontents = 0; # print the contents (%Y) field.
+
+# These are the program defaults that can be changed by command line options.
+#
+$roffconv = 1; # -n : no roff-to-tex conversion
+$ibmconv = 0; # -ibm : convert ibm graphics characters
+$nowarnings = 0; # -q : don't print warnings
+$tibfmt = 0; # -tib : tib bibliography format
+$overstrike = 0; # -overstrike : allow \:o = \(:o. European troff??
+$handleeqn = 0; # -eqn : handle some eqn @@ delimited constructs
+$ignorelabel= 0; # -ignorelabel: don't use L field for citekey
+$deroffonly = 0; # -deroff-only
+$protectTeX = 1; # -noprotect : don't protect TeX special characters
+$nameconv = 1; # -noname-conv
+$revauthor = 0; # -reverse-author
+$capprotect = 1; # -nocap-protect = 0. -cap-protect = 2.
+$accedina = 0; # -acceditorina = 1: accept editor(s) in %A field(s)
+# added in version 0.9.4
+
+$convertcommand = '';
+$toterrors = 0;
+
+while (@ARGV) {
+ $_ = shift @ARGV;
+ $convertcommand .= ' ' . $_;
+ /^--$/ && do { push(@files, @ARGV); undef @ARGV; next; };
+ /^-n$/ && do { $roffconv = 0; next; };
+ /^-ibm/ && do { $ibmconv = 1; next; };
+ /^-q$/ && do { $nowarnings = 1; next; };
+ /^-qq$/ && do { $nowarnings = 2; next; }; # this turns off ALL messages
+ /^-tib/ && do { $tibfmt = 1; next; };
+ /^-ove/ && do { $overstrike = 1; next; };
+ /^-eqn/ && do { $handleeqn = 1; next; };
+ /^-der/ && do { $deroffonly = 1; next; };
+ /^-non/ && do { $nameconv = 0; next; };
+ /^-rev/ && do { $revauthor = 1; next; };
+ /^-noc/ && do { $capprotect = 0; next; };
+ /^-cap/ && do { $capprotect = 2; next; };
+ /^-ign/ && do { $ignorelabel = 1; next; };
+ /^-nop/ && do { $protectTeX = 0; next; };
+ /^-acc/ && do { $accedina = 1; next; }; # added in version 0.9.4
+ push (@files, $_);
+}
+
+if ($#files == -1) {
+ push (@files, "-");
+}
+
+print "%\n";
+print "% converted from ", ($tibfmt ? "tib" : "refer");
+print " format by refer-to-bibtex $version";
+@tarr = localtime(time);
+# convert month from numeric to textual
+$tarrmon = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug,
+ Sep, Oct, Nov, Dec)[$tarr[4]];
+# add a leading 0 if the minute is only 1 digit.
+$tarr[1] = '0' . $tarr[1] if length($tarr[1]) == 1;
+# print date in format "21:09, 4 Sep 92"
+$tarr[5]+=1900; # changed in version 0.9.4
+print " -- $tarr[2]:$tarr[1], $tarr[3] $tarrmon $tarr[5]\n";
+# print the command line as they entered it, so we know special options
+print "% r2b$convertcommand\n";
+print "%\n\n";
+
+# These are the accepted refer codes.
+#
+# let 0 be a valid identifier, but we ignore it. EndNote Plus puts it
+# out as a type identifier, but it's often wrong. We'll figure it out.
+# Organized these in likelihood order and get some speed improvement.
+# A: 21%, DT: 11.3%, P: 10%, K: 8.7%, V: 7.1%, J: 6.3%, ICB: 4.0%
+%allidents = ('A', ' and ', 'E', ' and ', 'Q', ' and ',
+ 'X', "\n\n",
+ 'D', ' ', 'T', ' ', 'P', ' ', 'K', ' ', 'V', ' ',
+ 'J', ' ', 'I', ' ', 'C', ' ', 'B', ' ', 'N', ' ',
+ 'S', ' ', 'L', ' ', 'R', ' ', 'O', ' ', '*', ' ',
+ 'H', ' ', 'G', ' ', 'Y', ' ', 'M', ' ', 'U', ' ',
+ 'Z', ' ', 'l', ' ', '$',
+ '0', ' ',
+ );
+
+# These are the fields that are required to be present for each BibTeX
+# type. They will generate a syntax warning if they are not present.
+# AE means A or E, BT means B or T.
+%reqfields = ('article', "A:T:J:Yr",
+ 'book', "AE:T:I:Yr",
+ 'incollection', "A:T:B:I:Yr",
+ 'inproceedings', "A:T:B:Yr",
+ 'mastersthesis', "A:T:Sch:Yr",
+ 'phdthesis', "A:T:Sch:Yr",
+ 'proceedings', "BT:Yr",
+ 'techreport', "A:T:Ins:Yr",
+ 'unpublished', "A:T:O",
+ );
+
+
+foreach $infile (@files) {
+ open (IN, $infile) || ((warn "Can't open $infile: $!\n"), next);
+ $linenum = 0;
+ $lastfield = 0;
+ $errors = 0;
+
+ if ($deroffonly) {
+ while (<IN>) {
+ $linenum++;
+ $_ = &doibmtoroff($_) if $ibmconv;
+ $_ = &dorofftotex($_) if $roffconv;
+ print $_;
+ }
+ next;
+ }
+
+ while (<IN>) {
+ $linenum++;
+
+ if (/^%(.)\s*(.*)$/) {
+ $field = $1;
+ $rest = $2;
+ $lastfield = 0;
+
+ # A '#' as the first character of text is taken to be a comment.
+ next if ($rest =~ /^#/);
+
+ # Convert 'o' and 'r' to O. These are some of tib's translated fields,
+ # as well as typos, where they really meant O.
+ $field =~ s/[or]/O/;
+
+ # Abstracts, contents, and comments seem to be non-standard. I have
+ # assumed %X for abstract and %Y for contents.
+ # Refer, tib, and bib seem to have their own styles, and usually
+ # people add on fields anyway. This is reaching the limits of what I
+ # can handle even by hand-translating.
+ $lastfield = $field;
+
+ # A '%' as the field is taken to be a comment.
+ next if ($field eq '%');
+ # HEY! check this: '\' or '\\' ?
+ if ($field eq '\\') {
+ print q/@preamble{ "/, substr($_, 1), qq/" }\n/;
+ next;
+ }
+
+ if (defined $allidents{$field}) {
+ $entry{$field} = join($allidents{$field}, $entry{$field}, $rest);
+ } else {
+ &anerror("Unknown field identifier: $_");
+ }
+ } else {
+ if ( /^\s*$/ ) {
+ &doentry() if $lastfield;
+ %entry = ();
+ $lastfield = '';
+ } else {
+ chop;
+ if ( $lastfield) {
+ if ( $lastfield =~ /X|Y/) {
+ $entry{$lastfield} .= "\n" . $_;
+ } else {
+ $entry{$lastfield} .= " " . $_;
+ }
+ } else {
+ print STDERR "line $linenum:";
+ print STDERR "Line without field identifier: \n$_\n";
+ $errors++;
+ }
+ }
+ }
+
+ }
+
+ if (%entry) {
+ &doentry();
+ }
+
+ foreach $type (sort keys(%number)) {
+ ($nowarnings < 2) && printf STDERR "%5d %s\n", $number{$type}, $type;
+ $totalentries += $number{$type};
+ }
+
+ if ($nowarnings < 2) {
+ print STDERR "$totalentries entries, ";
+ $errors == 0 ? print STDERR "no error" : print STDERR "$errors error";
+ $errors == 1 ? print STDERR "\n" : print STDERR "s\n";
+ }
+ $toterrors += $errors;
+}
+
+exit $toterrors;
+
+
+
+
+##########################################
+#
+sub doentry {
+
+# do some processing on each field
+
+ foreach $field (keys(%entry)) {
+ $entry{$field} =~ s/^\s+//;
+ $entry{$field} =~ s/\s+$//;
+
+ $entry{$field} = &doibmtoroff($entry{$field}) if $ibmconv;
+ $entry{$field} = &dorofftotex($entry{$field}) if $roffconv;;
+
+ if (length($entry{$field}) > $maxflength) {
+ $entry{$field} = substr($entry{$field}, 0, $maxflength-3);
+ $entry{$field} .= "...";
+ &anerror("field %$field longer than $maxflength characters.");
+ }
+ #$entry{$field} =~ s/(^|[^\\])~/$1\\ /g; # ties (~) to literal space (\ )
+ }
+
+
+# Because the refer format does not have fields set aside for such things
+# as edition, ISBN, ISSN, look for them in other fields. Also, some people
+# often put things like pages, techreport, and other information in the
+# wrong field. Once again, look for them and move them to the correct one.
+
+ # Look for Thesis or Dissertation in O and move to R
+ if ($entry{O}) {
+ $_ = $entry{O};
+ if ( (!$entry{R}) && ( (/thesis/i) || /dissert/i) ) {
+ $entry{R} = $entry{O};
+ delete $entry{O};
+ }
+ }
+
+ # Look for "Tech* Rep*" in S and move to R
+ if ( ($entry{S} =~ /tech\w*\s+rep\w*/i) && (!$entry{R}) ) {
+ $entry{R} = $entry{S};
+ delete $entry{S};
+ }
+
+ # Look for "* No. *" in V and move to N
+ if (($entry{V} =~ /(\d+)\s+(no\.?|numb?e?r?\.?)\s+(\d+)/i) && (!$entry{N})){
+ $entry{N} = $3;
+ $entry{V} =~ s/(\d+)\s+(no\.?|numb?e?r?\.?)\s+(\d+)/$1/i;
+ }
+
+ # Look for "* Edition" in some fields and move to Ed field
+ foreach $field (V,S,R,T,O,B) {
+ if ($entry{$field} =~ /([\w\d]+)\s+edition/i) {
+ $entry{Ed} = $1;
+ $entry{$field} =~ s/\s*[-,;(]?\s*([\w\d]+)\s+edition\s*[),;]?\s*//i;
+ if ($entry{$field} =~ /^\s*$/) {
+ delete $entry{$field};
+ }
+ last;
+ }
+ }
+
+ # Look for ISBN/ISSN # in some fields and move to ISBN/ISSN
+ foreach $field (G,O) {
+ if ($entry{$field} =~ /IS[BS]N/) {
+ $entry{$field} =~ s/\\ /~/g;
+ if ($entry{$field} =~ /ISBN\s*:?\s*(\d\S*)/i) {
+ $entry{ISBN} = $1;
+ $entry{ISBN} =~ s/[;.,]$//g;
+ $entry{ISBN} =~ s/~/-/g;
+ $entry{$field} =~ s/\s*[,;]?\s*ISBN\s*:?\s*(\d\S*)\s*[,;]?//i;
+ }
+ if ($entry{$field} =~ /ISSN\s*:?\s*(\d\S*)/i) {
+ $entry{ISSN} = $1;
+ $entry{ISSN} =~ s/[;.,]$//g;
+ $entry{ISSN} =~ s/~/-/g;
+ $entry{$field} =~ s/\s*[,;]?\s*ISSN\s*:?\s*(\d\S*)\s*[,;]?//i;
+ }
+ $entry{$field} =~ s/(^|[^\\])~/$1\\ /g;
+ }
+ }
+
+ # look for pp or pages in O and move to P
+ if ( (!$entry{P}) && ($entry{O} =~ /[XIVxiv]*\+?(\d+)\s*(pp\.?|pages),?/i) ) {
+ $entry{P} = $1;
+ $entry{O} =~ s/\s*[,;]?\s*[XIVxiv]*\+?(\d+)\s*(pp\.?|pages),?\s*//i;
+ }
+
+ # look for date in B if there is no D field
+ if ( (!$entry{D}) && ($entry{B}) ) {
+ if ($entry{B} =~ /\b(\d\d\d\d)\b/) {
+ $entry{D} = $1;
+ } elsif ($entry{B} =~ /'(\d\d)\b/) {
+ $entry{D} = $1;
+ }
+ }
+
+ # pick out reptype and repnumber
+# undef ($reptype, $repnumber);
+ undef $reptype; # new in 0.9.4
+ undef $repnumber; # new in 0.9.4
+ if ($entry{R}) {
+ ($reptype, $repnumber) = $entry{R} =~ /(.+)\s+(\S+)$/;
+ if ($repnumber !~ /\d/) {
+ $reptype = $entry{R};
+ undef $repnumber;
+ }
+
+# As %R fields (as me, F. Roth use them) may contain more than 'report',
+# 'thesis' etc., when e.g. a part of the 'US Natl. Rep. to the IUGG' is
+# referenced we extended cap-protection to these fields.
+# type fields: cap-protect = 0, leave them alone.
+# cap-protect = 1, protect multi-cap sequences, and singles.
+# (default)
+# cap-protect = 2, protect all capitals.
+ if ($capprotect == 1) { # new in 0.9.4
+ 1 while $reptype =~ # new in 0.9.4
+ s/([^{\\\w]|^)([A-Z]+)([^\{\}\\\w]|$)/$1\{$2\}$3/g; #new in 0.9.4
+ $reptype =~ s/^\{([A-Z])\}/$1/; # new in 0.9.4
+ } elsif ($capprotect == 2) { # new in 0.9.4
+ $reptype =~ s/(\\=[A-Z]+)/{$1}/g; # new in 0.9.4
+ $reptype =~ s/(\\?[A-Z]+)/{$1}/g; # new in 0.9.4
+ } # new in 0.9.4
+ }
+
+# titles: cap-protect = 0, leave them alone.
+# cap-protect = 1, protect multi-cap sequences, and singles. (default)
+# cap-protect = 2, protect all capitals.
+ if ($entry{T}) {
+ if ($capprotect == 1) {
+ 1 while $entry{T} =~
+ s/([^{\\\w]|^)([A-Z]+)([^\{\}\\\w]|$)/$1\{$2\}$3/g;
+ $entry{T} =~ s/^\{([A-Z])\}/$1/;
+ } elsif ($capprotect == 2) {
+# $entry{T} =~ s/(\\[A-Z]+)/{$1}/g; # off in 0.9.4
+ $entry{T} =~ s/(\\=[A-Z]+)/{$1}/g; # new in 0.9.4
+ $entry{T} =~ s/(\\?[A-Z]+)/{$1}/g; # new in 0.9.4
+ }
+ }
+
+ # set date fields
+
+ &parsedate();
+
+ # convert names to BiBTeX format as best we can
+ if ($entry{A}) {
+ $entry{Key_A} = &parsename($entry{A}, A);
+ $entry{A} = $fname;
+ $aeditors = $editors;
+ $acauthor = $corpauthors;
+ }
+ if ($entry{E}) {
+ $entry{Key_E} = &parsename($entry{E}, E);
+ $entry{E} = $fname;
+ } elsif ($aeditors) {
+ $entry{E} = $entry{A};
+ $entry{Key_E} = $entry{Key_A};
+ delete $entry{Key_A};
+ delete $entry{A};
+ }
+ if ($entry{Q} || $entry{I}) {
+ if ($entry{Q}) {
+ $entry{Q} =~ s/^and //;
+ $entry{Q} =~ s/\s+/ /g;
+ ($entry{Key_Q}) = split(/[\s~]/, $entry{Q});
+ } else {
+ ($entry{Key_I}) = split(/[\s~]/, $entry{I});
+ }
+ if ($acauthor) {
+ ($entry{Key_A}) = split(/[\s~]/, $entry{A});
+ $entry{Key_A} =~ s/^{([^}]*)}?.*$/$1/;
+ }
+ } elsif ($acauthor) {
+ $entry{Q} = $entry{A};
+ ($entry{Key_Q}) = split(/[\s~]/, $entry{Q});
+ $entry{Key_Q} =~ s/^{([^}]*)}?.*$/$1/;
+ delete $entry{Key_A};
+ delete $entry{A};
+ }
+
+ # set or generate key
+ &genkey();
+
+ # determine the Entry Type
+ # This is where the heuristics really come into play. We need to examine
+ # what fields we were given, and occasionally the field contents, to
+ # determine what type of entry this is.
+
+ if ($entry{J} && !$entry{B}) {
+ $type = 'article';
+ $_ = $entry{J};
+ if (/^proc\w*\.\s/i || /proceeding/i || /proc[.]?\s+of\s/i ||
+ /conference/i || /symposium/i || /workshop/i ) {
+ $type = 'inproceedings';
+ $entry{B} = $entry{J};
+ if ($entry{N}) { # These should be %B Proc, %J Journal, but do anyway.
+ # Hope they did "proceedings of ..., published as ..."
+ if (/^(.*)published\s+(in|as)\s+(.*)$/i) {
+ $entry{B} = $1;
+ $entry{J} = $3;
+ $entry{B} =~ s/,?\s*$//;
+ }
+ $entry{O} .= "Published as $entry{J}";
+ if ($entry{V}) { $entry{O} .= ", volume $entry{V}"; }
+ if ($entry{N}) { $entry{O} .= ", number $entry{N}"; }
+ delete $entry{V};
+ delete $entry{N};
+ }
+ delete $entry{J};
+ }
+ } elsif ($entry{B}) {
+ $type = '';
+ if ($entry{T}) {
+ $type .= 'in';
+ }
+ $_ = $entry{B};
+ if (/^proc\w*\.\s/i || /proceeding/i || /conference/i || /workshop/i) {
+ $type .= 'proceedings';
+ } else {
+ $type .= 'collection';
+ }
+ if ($entry{J}) {
+ $entry{O} .= "Published as $entry{J}";
+ if ($entry{V}) { $entry{O} .= ", volume $entry{V}"; }
+ if ($entry{N}) { $entry{O} .= ", number $entry{N}"; }
+ delete $entry{J};
+ delete $entry{V};
+ delete $entry{N};
+ }
+ } elsif ($entry{R}) {
+ $type = 'techreport';
+ $_ = $reptype;
+ s/^{\\[rbi][mft] //g; # just in case someone changed the font
+ tr/A-Za-z//cd; # only A-z are left
+ if (/^phd/i) {
+ $type = 'phdthesis';
+# $reptype = "Ph.{D}. Thesis"; # will print as Ph.D. thesis !
+ $reptype = "Ph.{D}. {T}hesis"; # T in braces in version 0.9.4
+ }
+ if (/^diploma/i) {
+ $type = 'phdthesis';
+# $reptype = "Diploma Thesis";
+ $reptype = "Diploma {T}hesis"; # T in braces in version 0.9.4
+ }
+ if (/^master/i || /^m[as]thes/i) {
+ $type = 'mastersthesis';
+# $reptype = "Master's Thesis";
+ $reptype = "Master's {T}hesis"; # T in braces in version 0.9.4
+ }
+ if (/^phd/i || /^master/i || /^m[as]thes/i || /^diploma/i) {
+ if ($entry{R} =~ /thesis/i) {
+ ($repnumber) = $entry{R} =~ /thesis\W*(.*)$/i;
+ }
+ if ($entry{R} =~ /dissert/i) {
+ $reptype =~ s/Thesis/Dissertation/;
+ ($repnumber) = $entry{R} =~ /dissert\w*\W*(.*)$/i;
+ }
+ }
+ /^draft/i && ($type = 'unpublished');
+ /^unpublish/i && ($type = 'unpublished');
+
+ if (!$entry{N}) {
+ $entry{N} = $repnumber;
+ }
+ $entry{Type} = $reptype;
+ undef $reptype;
+ undef $repnumber;
+ if ( (!$entry{Q}) && ($entry{I}) ) {
+ $entry{Q} = $entry{I};
+ $iinq = 1; # new in 0.9.4
+ delete $entry{I};
+ } else { # new in 0.9.4
+ $entry{Ins} = $entry{I}; # new in 0.9.4
+ }
+ } elsif ($entry{I}) {
+ $type = 'book';
+ } else {
+ $type = 'misc';
+ }
+
+ # BibTeX has no collection type, sigh. We change 'collection' to 'book'.
+ if ($type eq 'collection') {
+ $type = 'book';
+ }
+
+ $number{$type}++;
+
+ if ( ($entry{Q}) && ($entry{A}) && ($iinq == 0) ) { # added in 0.9.4
+ &anerror("%Warning: Corp. author (%Q) and person as author (%A)."); # -"-
+ $qina = 1; # -"-
+ if ($lina == 1) { # -"-
+ $entry{A} = $entry{A} . " and {" . $entry{Q} . "}"; # to cover mixed %A %Q
+ $lina = 0; # -"-
+ } else { # -"-
+ $entry{A} = "{" . $entry{Q} . "} and " . $entry{A}; # to cover mixed %Q %A
+ $linq = 0; # -"-
+ }
+ }
+ # if we have an institution but no author, the Inst. is the author
+ if ( ($entry{Q}) && (!$entry{A}) ) {
+ $entry{A} = "{" . $entry{Q} . "}";
+ }
+
+ # if there is no address, but a "header" field, assume H stands for "held in"
+ if ( ($entry{H}) && (!$entry{C}) ) {
+ $entry{C} = $entry{H};
+ delete $entry{H};
+ }
+ # set institution to be the corporate author unless it's Anonymous
+ if ($entry{Q} !~ /^anon\.?\w*$/i) {
+ if ($qina == 0 && $iinq == 1) { # added in version 0.9.4
+ $entry{Ins} = $entry{Q};
+ $iinq = 0; # added in version 0.9.4
+ } # added in version 0.9.4
+ $qina = 0; # added in version 0.9.4
+ }
+ # if we have a reptype and number, but no "Type" entry, move to other.
+ if ($reptype) {
+ $entry{O} .= $entry{R};
+ delete $entry{R};
+ }
+
+
+ # Change things around for some types
+ if ( ($type eq 'mastersthesis') || ($type eq 'phdthesis') ) {
+ $entry{Sch} = $entry{Ins};
+ delete $entry{Ins};
+ } elsif ($type eq 'unpublished') {
+ $entry{O} .= $entry{Ins};
+ delete $entry{Ins};
+ }
+
+ # Check for required fields
+ foreach $field ( split(/:/, $reqfields{$type}) ) {
+ if ($field eq AE) {
+ $entry{A} || $entry{E} ||
+ &anerror("Missing A and E (Author and Editor) fields.");
+ } elsif ($field eq BT) {
+ $entry{B} || $entry{T} || &anerror("Missing T (Title) field.");
+ } else {
+ $entry{$field} || &anerror("Missing $field field.");
+ }
+ }
+
+ # set up the entry output string
+
+ $ent = '';
+ $ent .= "\@$type\{$key,\n";
+
+ if ($entry{Key}) { $ent .= " key = \{$entry{Key}\},\n"; }
+ if ($entry{A}) { $ent .= " author = \{$entry{A}\},\n"; }
+ if ($entry{E}) { $ent .= " editor = \{$entry{E}\},\n"; }
+ if ($entry{'T'}) { $ent .= " title = \{$entry{'T'}\},\n"; }
+ if ($entry{B}) {
+ if ($entry{T}) {
+ $ent .= " booktitle = \{$entry{B}\},\n";
+ } else {
+ $ent .= " title = \{$entry{B}\},\n";
+ } }
+ if ($entry{Ins}) { $ent .= " institution = \{$entry{Ins}\},\n"; }
+ if ($entry{Sch}) { $ent .= " school = \{$entry{Sch}\},\n"; }
+ if ($entry{J}) { $ent .= " journal = \{$entry{J}\},\n"; }
+ if ($entry{Type}){ $ent .= " type = \{$entry{Type}\},\n"; }
+ if ($entry{S}) { $ent .= " series = \{$entry{S}\},\n"; }
+ if ($entry{V}) { $ent .= " volume = \{$entry{V}\},\n"; }
+ if ($entry{N}) { $ent .= " number = \{$entry{N}\},\n"; }
+ if ($entry{Ed}) { $ent .= " edition = \{$entry{Ed}\},\n"; }
+ if ($entry{P}) { $ent .= " pages = \{$entry{P}\},\n"; }
+ if ($entry{I}) { $ent .= " publisher = \{$entry{I}\},\n"; }
+ if ($entry{C}) { $ent .= " address = \{$entry{C}\},\n"; }
+ # since we allow abbrevs for month, don't print {}s
+ if ($entry{Mo}) { $ent .= " month = $entry{Mo},\n"; }
+ if ($entry{Yr}) { $ent .= " year = \{$entry{Yr}\},\n"; }
+ if ($entry{'$'}) { $ent .= " price = \{$entry{'$'}\},\n"; }
+ if ($entry{'*'}) { $ent .= " copyright = \{$entry{'*'}\},\n"; }
+# if ($entry{K}) { $ent .= " keywords = \{$entry{K}\},\n"; }
+ if ($entry{K}) { $ent .= " keywords = \{$entry{K}\},\n"; # added in 0.9.4
+ $extname = ''; } # - " -
+ if ($entry{M}) { $ent .= " mrnumber = \{$entry{M}\},\n"; }
+ if ($entry{'l'}) { $ent .= " language = \{$entry{'l'}\},\n"; }
+ if ($entry{U}) { $ent .= " annote = \{$entry{U}\},\n"; }
+ if ($entry{ISBN}){ $ent .= " ISBN = \{$entry{ISBN}\},\n"; }
+ if ($entry{ISSN}){ $ent .= " ISSN = \{$entry{ISSN}\},\n"; }
+ if ($entry{X}) { $ent .= " abstract = \{$entry{X}\},\n"; }
+ if ($entry{G}) { $ent .= " note = \{$entry{G}\},\n"; }
+ if ($entry{H}) { $ent .= " note = \{$entry{H}\},\n"; }
+ if ($entry{O}) { $ent .= " note = \{$entry{O}\},\n"; }
+ if ($entry{Z}) { $ent .= " note = \{$entry{Z}\},\n"; }
+ if ($entry{Y}) { if (!$prcontents) { $entry{Y} = "(not listed)"; }
+ $ent .= " contents = \{$entry{Y}\},\n"; }
+
+ substr($ent, -2, 1) = '';
+ $ent .= "\}\n\n";
+
+ &printerrors();
+ print $ent;
+}
+
+##########################################
+#
+# date looks like month dec year
+# -------------------------------- ------------------- -- ---------------
+# 1984 84 1984
+# 1974-1975 74 1974-1975
+# August 1984 aug 84 1984
+# May 1984 May 1984 may 84 1984
+# 1976 November nov 76 1976
+# 1976 November 1976 nov 76 1976
+# 21 August 1984 {21 August} 84 1984
+# August 18-21, 1984 {August 18-21} 84 1984
+# 18-21 August 1991 {18-21 August} 91 1991
+# July 31-August 4, 1984 1984 {July 31-August 4} 84 1984
+# July-August 1980 {July-August} 80 1980
+# February 1984 (revised May 1991) feb 84 1984
+# Winter 1990 {Winter} 90 1990
+# 1988 (in press) 88 1988 (in press)
+# to appear ?? to appear
+#
+sub parsedate {
+ local($date) = $entry{D};
+
+# These were done earlier for each field
+# $date =~ s/^\s+//;
+# $date =~ s/\s+$//;
+ $date =~ s/(\S+)\s+(\d+)\s+\1\s+\2/$1 $2/; # handle duplicate dates
+ $date =~ s/^\s*(\d\d\d+)\s+(\S+)/$2 $1/; # handle 1976 November
+ while ($date =~ /\s*[(]?((\d\d\d\d[-\/])?\d\d\d\d)[).]?\s*(\(.*\))?$/) {
+ $entry{Yr} = $1;
+ $date =~ s/,?\s*[(]?(\d\d\d\d[-\/])?\d\d\d\d[).]?\s*(\(.*\))?$//;
+ }
+# $entry{YrKey} = $entry{Yr} ? $entry{Yr} : "????";
+ if ($entry{Yr}) {
+ $entry{YrKey} = $entry{Yr};
+ } elsif ($date =~ /(\d\d\d\d)/) {
+ $entry{YrKey} = $1;
+ } else {
+ $entry{YrKey} = "????";
+ }
+ $entry{Decade} = substr($entry{YrKey}, 2, 2);
+ return unless length($date);
+
+ $_ = $date;
+ if (!/[-\d]/) {
+ /^jan/i && do { $entry{Mo} = "jan"; };
+ /^feb/i && do { $entry{Mo} = "feb"; };
+ /^mar/i && do { $entry{Mo} = "mar"; };
+ /^apr/i && do { $entry{Mo} = "apr"; };
+ /^may/i && do { $entry{Mo} = "may"; };
+ /^jun/i && do { $entry{Mo} = "jun"; };
+ /^jul/i && do { $entry{Mo} = "jul"; };
+ /^aug/i && do { $entry{Mo} = "aug"; };
+ /^sep/i && do { $entry{Mo} = "sep"; };
+ /^oct/i && do { $entry{Mo} = "oct"; };
+ /^nov/i && do { $entry{Mo} = "nov"; };
+ /^dec/i && do { $entry{Mo} = "dec"; };
+ }
+
+ if (!$entry{Mo}) {
+ if (!$entry{Yr}) {
+ $entry{Yr} = $entry{D};
+ }
+ else {
+ $entry{Mo} = '{' . $date . '}';
+ }
+ }
+ $entry{Decade} = substr($entry{YrKey}, 2, 2);
+}
+
+##########################################
+# key is Author's last name followed by last 2 digits of year.
+# in corporate author's case, key is first word and first 2 digits.
+# order is L, A, Q, E, I, "Anonymous"
+# In case of conflict, ascending letters are added to the end
+# Perl knows that "z"+1 == "aa" and "az"+1 == "ba". Uskomatonta!
+#
+# BiBTeX's cite keys are case-INsensitive. We want to keep the
+# pretty looking capitalization though, so we modify key and lkey.
+# We now check Label fields for duplicate keys
+sub genkey {
+ local($noadd) = @_;
+ local($name, $lenkey);
+ local($keysav); # added in version 0.9.4
+
+ if ($entry{L} && (!$ignorelabel) ) {
+ $key = $entry{L};
+ } else {
+ $name = $entry{Key_A} || $entry{Key_Q} || $entry{Key_E}
+ || $entry{Key_I} || $noadd || "Anonymous";
+
+ $name = substr($name,0,$maxllength);
+ $key = $name . $entry{Decade};
+ }
+
+ $key =~ s/,//g;
+ $keysav=$key; # added in version 0.9.4
+ $key =~ s/\\ae/ae/g; # added in version 0.9.4
+ $key =~ s/\\AE/Ae/g; # added in version 0.9.4
+ $key =~ s/\\oe/oe/g; # added in version 0.9.4
+ $key =~ s/\\OE/Oe/g; # added in version 0.9.4
+ $key =~ s/\\[acduv]//g; # added in version 0.9.4
+ $key =~ s/\\ecr\\symbol\{157\}/I/g; # added in version 0.9.4
+ $key =~ s/\\ecr\\symbol\{208\}/D/g; # added in version 0.9.4
+ $key =~ s/\\ecr\\symbol\{240\}/d/g; # added in version 0.9.4
+ $key =~ s/\\ecr\\symbol\{222\}/Th/g; # added in version 0.9.4
+ $key =~ s/\\ecr\\symbol\{254\}/th/g; # added in version 0.9.4
+ $key =~ s/\\"([AOUaou])/$1e/g; # added in version 0.9.4
+ $key =~ s/[\s\{\}]//g; # added in version 0.9.4
+ $key =~ tr/A-Za-z0-9\/\-//cd; # added in version 0.9.4
+ if ($key ne $keysav) {$extname = ' ' . $key;} # added in version 0.9.4
+ $lenkey = length($key);
+ $lkey = $key;
+ $lkey =~ tr/A-Z/a-z/; # citekeys are case-insensitive
+
+ if ($allkeys{$lkey}) {
+ $key .= 'a';
+ $lkey = $key;
+ $lkey =~ tr/A-Z/a-z/;
+ while ($allkeys{$lkey}) {
+ substr($key,$lenkey)++; # increment all chars past Decade
+ $lkey = $key;
+ $lkey =~ tr/A-Z/a-z/;
+ }
+ }
+
+ if (!$noadd) {
+ $allkeys{$lkey} = $key;
+ if ($name eq "Anonymous") {
+ $entry{Key} = $key;
+ }
+ }
+ $key;
+}
+
+
+##########################################
+# parsename parses names into BiBTeX format
+#
+# This uses heuristics to parse a name into First, von, Last, and Jr
+# parts. It handles multiple names (John doe, jane doe) on a line.
+# It does not handle names in "last, first" format.
+# it returns a key (last name of author or editor, first name of corp).
+# It sets $fname to the full bibtex name.
+# It sets $editors or $corpauthors if it thinks the name is one.
+#
+sub parsename {
+ local($allnames, $ntype) = @_;
+ local($firstn, $vonn, $lastn, $jrn);
+ local(@names, $keyn, $oname, $nname, $rest);
+
+ $editors = $corpauthors = "";
+
+ # handle unpaddable spaces (\ ) in names as if they were ties (\0)
+ $allnames =~ s/\\ /~/g; # the ties (~) get converted back later.
+ $allnames =~ s/\s+/ /g;
+ $allnames =~ s/^and //;
+ $allnames =~ s/^and$//;
+
+ if ( ($allnames !~ /\s/) && ($allnames !~ /anonymous/i) ){
+ $corpauthors = 1;
+ }
+ @names = split(/ and /, $allnames);
+ if (!$nameconv) {
+ $fname = $allnames;
+ $_ = shift @names;
+ # if we're leaving names alone, they're probably already in "Last, First"
+ # format, so use the first part of the name as the key.
+ ($name) = /^\s*(\S*)/;
+ # ($name) = /(\S*)\s*$/;
+ $name =~ tr/A-Za-z0-9\/\-//cd;
+ return $name;
+ }
+ $fname = "";
+ while (@names) {
+ $oname = $name = shift @names;
+ $firstn = $vonn = $lastn = '';
+
+ if ( $revauthor && ($ntype eq A) && ($name =~ /,/) ) {
+ $jrn = "";
+ if ($name =~ s/[,\s]+([sj]r\.?|I+)\s*$//i) {
+ $jrn = ", " . $1;
+ }
+ $name =~ s/^(.*)\s*,\s*(.*)/$2 $1$jrn/g;
+ }
+ $jrn = "";
+
+# $name =~ s/[\s~]+([sj]r\.?|\(?edi?t?o?r?s?\.?\)?|I+)(,|$)/, $1/i;
+ $name =~ s/[\s~]+([sj]r\.?|\(?edi?t?o?r?s?\.?\)?|\(?he?ra?u?sge?b?e?r?\.?\)|I+)(,|$)/, $1/i; # extended in version 0.9.4
+ $name =~ s/,,/,/g;
+ ($nname, $jrn) = split(/,[^~]/, $name, 2);
+# print "name: $name -> $nname : $jrn\n";
+ $nname =~ s/\s+$//;
+ $jrn =~ s/^[\s~]+//;
+ $jrn =~ s/,$//;
+ if ($jrn =~ /\s/) {
+# ($jrn, $rest) = $jrn =~ /([sj]r\.?|\(?edi?t?o?r?s?\.?\)?|I+)?,?\s*(.*)$/i;
+ ($jrn, $rest) = $jrn =~ /([sj]r\.?|\(?edi?t?o?r?s?\.?\)?|\(?he?ra?u?sge?b?e?r?\.?\)|I+)?,?\s*(.*)$/i; # extended in version 0.9.4
+ unshift(@names, $rest);
+ }
+ $jrn =~ s/([^\\])~/$1 /g;
+ ($firstn) = $nname =~ /^((\S* )*)/;
+ $nname = substr($nname, length($firstn));
+ $lastn = $nname;
+ $lastn =~ s/([^\\])~/$1 /g;
+ $firstn =~ s/([^\\])~/$1 /g;
+ while ($firstn =~ / ([a-z]+ )$/) {
+ $rest = $1;
+ $vonn = $rest . $vonn;
+ $firstn = substr($firstn, 0, length($firstn) - length($rest));
+ }
+ while ($lastn =~ /^([a-z]+ )/) {
+ $rest = $1;
+ $vonn .= $rest;
+ $lastn = substr($lastn, length($rest));
+ }
+
+ if ($jrn) {
+ if ($jrn =~ /^(et\.?\s*al\.?)|(others)$/i) {
+ undef $jrn;
+ unshift(@names, "others");
+ }
+# BibTeX suppresses Editors in the output, if the publication type is an
+# 'article' or 'techreport'. This does not always fit. Therefore the
+# following was added in version 0.9.4:
+ if (!$accedina || (!$entry{J}) && (!$entry{R}) ) {
+ if ($jrn =~ /^[(]?edi?t?o?r?s?[\.]?[)]?$/i) {
+ undef $jrn;
+ $editors = 1;
+ }
+ if ($jrn =~ /^[(]?he?ra?u?sge?b?e?r?[\.]?[)]?$/i) { # added in 0.9.4
+ $editors = 1; # - " -
+ } # - " -
+ } # - " -
+ if ($jrn =~ /^inc[\.]?$/i) {
+ $lastn .= ", " . $jrn;
+ undef $jrn;
+ $corpauthors = 1;
+ }
+ }
+ if ($lastn =~ /^(et\s*al)|(others)$/i) {
+ $lastn = "others";
+ }
+ if ($lastn =~ /\s/) {
+ $lastn = "{" . $lastn . "}";
+ }
+
+ if (!$keyn) {
+ if ($corpauthors) {
+ ($keyn) = $lastn =~ /^(\S+)/;
+ } else {
+ ($keyn) = $lastn; # =~ /(\S+)$/; # if you want last of Last
+ }
+ }
+
+ if ($jrn) {
+ $fname .= " and " . $vonn . $lastn . ", " . $jrn . ", " . $firstn;
+ } else {
+ $fname .= " and " . $firstn . $vonn . $lastn;
+ }
+ }
+ $fname =~ s/^ and\s+//;
+ $fname =~ s/\s+$//;
+ $fname =~ s/\s+/ /g;
+ if ($ntype eq A) {
+ if ($corpauthors) {
+ &anerror("Corporate Author (%Q) in %A.");
+ } elsif ($editors) {
+ &anerror("Editors (%E) in %A.");
+ }
+ } elsif ($ntype eq Q) {
+ if ($editors) {
+ &anerror("Editors (%E) in %Q.");
+ }
+ } elsif ($ntype eq E) {
+ if ($corpauthors && (!$entry{A})) {
+ &anerror("Corporate Author (%Q) in %E.");
+ }
+ }
+ $keyn;
+}
+
+
+
+
+##########################################
+# stores error information until it gets printed
+#
+# This allows us to fully process the entry so we can print out
+# valid key information without having to go through ugly gyrations.
+#
+sub anerror {
+ local($err) = @_;
+
+ push(@errorstring, $err);
+ $errors++;
+}
+
+
+
+##########################################
+# prints out stored error information
+#
+sub printerrors {
+ local($klen, $errst);
+
+ if (@errorstring && (!$nowarnings)) {
+ $klen = $maxllength; # a little short, but most labels aren't this long
+ foreach $_ (@errorstring) {
+ $errst .= sprintf("%-${klen}s (%5d): %s\n", $key, $errline, $_);
+ }
+ print STDERR $errst;
+ }
+ undef @errorstring;
+ $errline = $linenum+1;
+}
+
+
+
+##########################################
+# converts *roff characters to TeX characters
+#
+# If anyone has any corrections or additions, I'd be happy to see them.
+#
+# Is there a better way to do this? (i.e. eval)
+#
+sub dorofftotex {
+ local($_) = @_;
+ local($fbraces, $nchanges);
+
+ study; # presumably this will help us.
+
+ # tib: refer format, TeX formatting.
+ # This should probably be set up to read a configuration file into
+ # a variable then use eval. If there is such a beast as a "detibify"
+ # program, then this won't be necessary.
+ if ($tibfmt) {
+ 1 while s#\\egroup(.*)\\bgroup#{\\Reffont $1}#g;
+ s/\\Citefont//g;
+ s/\\ACitefont//g;
+ s/\\Authfont//g;
+ s/\\Titlefont//g;
+ s/\\Tomefont/\\sl/g;
+ s/\\Volfont//g;
+ s/\\Flagfont//g;
+ s/\\Reffont/\\rm/g;
+ s/\\Smallcapsfont/\\sevenrm/g;
+ s/\\Flagstyle//g; # This should be smarter
+
+ if (/\|/) {
+ s/\|JAN\|/January/g; # yes, the parsedate routine can handle
+ s/\|FEB\|/February/g; # these most of the time, but sometimes
+ s/\|MAR\|/March/g; # they're put in the middle of non-date
+ s/\|APR\|/April/g; # strings, so we'd better convert them.
+ s/\|MAY\|/May/g;
+ s/\|JUN\|/June/g;
+ s/\|JUL\|/July/g;
+ s/\|AUG\|/August/g;
+ s/\|SEP\|/September/g;
+ s/\|OCT\|/October/g;
+ s/\|NOV\|/November/g;
+ s/\|DEC\|/December/g;
+
+ # My example of tib format is AGbib from INRIA, so this is set up to
+ # handle the common cases for that bibliography.
+
+ s/\|UNIV\|/University/g;
+ s/\|DEPT\|/Department/g;
+ s/\|DCS\|/Department of Computer Science/g;
+ s/\|PCS\|/Progr. and Computer Science/g;
+ s/\|CSD\|/Computer Science Department/g;
+ s/\|TR\|/Technical Report/g;
+
+ s/\|COMPJ\|/The Computer Journal/g;
+ s/\|JACM\|/Journal of the ACM/g;
+ s/\|CACM\|/Communications of the ACM/g;
+ s/\|SGPLN\|/Sigplan Notices/g;
+ s/\|SIAJC1\|/SIAM Journal on Computing/g;
+ s/\|ACTAI2\|/Acta Informatica/g;
+ s/\|IEETS1\|/IEEE Transactions on Software Engineering/g;
+ s/\|INFPL2\|/Information Processing Letters/g;
+ if (s/\|LNCS\|/Lecture Notes in Computer Science/g) {
+ $entry{I} .= " " . "Springer-Verlag";
+ $entry{C} .= " " . "New York--Heidelberg--Berlin"; }
+ if (s/\|IFBSV\|/Inf. Fachb./g) {
+ $entry{I} .= " " . "Springer-Verlag";
+ $entry{C} .= " " . "New York--Heidelberg--Berlin"; }
+ s/\|SCICP\|/Science of Computer Programming/g;
+ s/\|SP&E\|/Software---Practice and Experience/g;
+ s/\|POPL\|/ACM Symp. on Principles of Progr. Languages/g;
+ s/\|TOPLAS\|/ACM Trans. Progr. Languages and Systems/g;
+
+ if (s/\|Addison\|/Addison Wesley/g) {
+ $entry{C} .= " " . "Reading, MA"; }
+ if (s/\|PrHall\|/Prentice Hall/g) {
+ $entry{C} .= " " . "Englewood Cliffs, NJ"; }
+ if (s/\|NHoll\|/North-Holland/g) {
+ $entry{C} .= " " . "Amsterdam"; }
+ if (s/\|Cambridge\|/Cambridge University Press/g) {
+ $entry{C} .= " " . "New York"; }
+ if (s/\|Springer\|/Springer-Verlag/g) {
+ $entry{C} .= " " . "New York--Heidelberg--Berlin"; }
+
+ s/\|TWEINF\|/Onderafdeling der Informatica, Tech. Hogeschool Twente/g;
+ s/\|TUMINF\|/Institut f{\"u}r Informatik, Tech. University M{\"u}nchen/g;
+ s/\|HELDCS\|/Department of Computer Science, University of Helsinki/g;
+ if (s/\|IBMTJW\|/IBM T.J. Watson Research Center/g) {
+ $entry{C} .= " " . "Yorktown Heights, NY"; }
+ if (s/\|INRIA\|/INRIA/g) {
+ $entry{C} .= " " . "Rocquencourt"; }
+ if (s/\|IRIAL\|/IRIA-Laboria/g) {
+ $entry{C} .= " " . "Rocquencourt"; }
+ $entry{C} =~ s/^\s+//;
+ $entry{I} =~ s/^\s+//;
+ }
+ return $_;
+ }
+
+ s#_#_U#g; # _ will be the escape character
+
+ # don't do troff character conversion if there aren't any backslashes
+ # in the string. Hopefully this will save a little work.
+ if (/\\/) {
+
+ # to make commands, we need command characters, but we don't want
+ # any of the command characters that they use to be passed through
+ # or we'll end up with invalid input. So, _ is the escape character.
+
+ # _U is _
+ # _B is a backslash
+ # _I is a literal backslash
+ # _S is a space
+ # _C is {\
+ # _L is {
+ # _R is }
+ # _l is <
+ # _g is >
+ # _T is ~
+ # _A is ^
+ # _D is $
+ # _M is $\
+ # _V is |
+ # _E is ${}^
+ # _H is \hbox{
+ # _h is \leavevmode
+ # _c is a special continuation character for long lines
+
+ # I'm not sure I quite get this -- refer strips off one \ for most
+ # characters it seems. But other times it doesn't. Argh! I'll
+ # go ahead and replace \\ with \ to handle this. It shouldn't ever
+ # come up that this is bad since \e and \(rs are a real backslashes.
+
+ s#\\\\#\\#g; # \\ -> \
+
+ # font changes
+ # if one uses \fP, everything is fine -- otherwise we need to get complex
+ $fbraces = 0;
+ $fbraces += s#\\f[1R]#_Crm_S#g; # \f1 -> {\rm
+ $fbraces += s#\\f[2I]#_Cit_S#g; # \f2 -> {\it
+ $fbraces += s#\\f[3B]#_Cbf_S#g; # \f3 -> {\bf
+ $fbraces -= s#\\fP#_R#g; # \fP -> }
+ while ($fbraces) { # too many {'s
+ if ($fbraces < 0) {
+ $nchanges = s#_R##;
+ &anerror("Used \\fP with no previous font.");
+ $fbraces += $nchanges;
+ } else { # Changed newline matching because 4.019 had problems
+# $nchanges = s#(_Cit_S)([\s\S]*)_Crm_S#$1$2_R#;
+ $nchanges = s#(_Cit_S)((.|\n)*)_Crm_S#$1$2_R#;
+ if (!$nchanges)
+ { $nchanges = s#(_Cbf_S)([\s\S]*)_Crm_S#$1$2_R#; }
+ if (!$nchanges)
+ { $nchanges = s#(_C\w\w_S)([\s\S]*)_C\w\w_S#$1$2_R#; }
+ if (!$nchanges) {
+ $_ .= "_R"; # couldn't get it, so stick a } on
+ $fbraces--;
+ &anerror("Problems with font changing. Suggest using \\fP.");
+ }
+ $fbraces -= ($nchanges * 2);
+ }
+ }
+
+ # point size changes
+ # first, U\s-2NIX\s0 -> {\sc Unix}
+ s/\b([A-Z])\\s-[12]([A-Z]+)\\s0/_Csc_S$1\L$2\E_R/g;
+ # very similar to font changes. If \s0 is used, everything is fine.
+ $fbraces = 0;
+ $fbraces += s#\\s-1#_Csmall_S#g; # \s-1 -> {\small
+ $fbraces += s#\\s-2#_Cfootnotesize_S#g; # \s-2 -> {\footnotesize
+ $fbraces += s#\\s-3#_Cscriptsize_S#g; # \s-3 -> {\scriptsize
+ $fbraces += s#\\s-4#_Ctiny_S#g; # \s-4 -> {\tiny
+ $fbraces += s#\\s+1#_Clarge_S#g; # \s+1 -> {\large
+ $fbraces += s#\\s+2#_CLarge_S#g; # \s+2 -> {\Large
+ $fbraces += s#\\s+3#_CLARGE_S#g; # \s+3 -> {\LARGE
+ $fbraces += s#\\s+4#_Chuge_S#g; # \s+4 -> {\huge
+ $fbraces -= s#\\s0#_R#g; # \s0 -> }
+ while ($fbraces) { # too many {'s
+ if ($fbraces < 0) {
+ $nchanges = s#_R##;
+ &anerror("Used \\s0 with no previous point size change.");
+ $fbraces += $nchanges;
+ } else {
+ $nchanges = s#(_Csmall_S)(.*)_Clarge_S#$1$2_R#;
+ if (!$nchanges)
+ { $nchanges = s#(_Cfootnotesize_S)(.*)_CLarge_S#$1$2_R#; }
+ if (!$nchanges)
+ { $nchanges = s#(_Cscriptsize_S)(.*)_CLARGE_S#$1$2_R#; }
+ if (!$nchanges)
+ { $nchanges = s#(_Clarge_S)(.*)_Csmall_S#$1$2_R#; }
+ if (!$nchanges)
+ { $nchanges = s#(_CLarge_S)(.*)_Cfootnotesize_S#$1$2_R#; }
+ if (!$nchanges)
+ { $nchanges = s#(_CLARGE_S)(.*)_Cscriptsize_S#$1$2_R#; }
+ if (!$nchanges) {
+ $_ .= "_R"; # last resort. Add an }.
+ $fbraces--;
+ &anerror("Problems with point size changing. Suggest using \\s0.");
+ }
+ $fbraces -= ($nchanges * 2);
+ }
+ }
+
+
+ # other troff special characters
+ # some of these aren't available as standard TeX, so I made up replacements.
+ # Perhaps they should be def'ed in a preamble and used that way, but I
+ # doubt most files use \(rg, \(ct, and such, so why waste resources.
+ # If you're really concerned about eth, thorn, yogh, or ogonek, go get
+ # the cmoer fonts -- they do the characters right.
+
+ # grab some common overstrikes made by people who don't have a real
+ # troff manual or implementation.
+
+ s#\\o'(\w)\\\(aa'#_C'$1_R#g; # \o'e\(aa' -> {\'e}
+ s#\\o'(\w)\\\(ga'#_C`$1_R#g; # \o'e\(ga' -> {\`e}
+
+ # Lots of bibliographies from Europe use \:o to mean \(o:, etc. Both
+ # Elan troff and groff don't know what this means, so I don't do the
+ # conversion by default. Use '-overstrike' to get this behaviour.
+
+ if ($overstrike) {
+ s#\\([:`'^~,v/o])([AEIOUYaeiouyNnCcSs])#\\\($2$1#g;
+ }
+
+ s#\\\(bu#_Mbullet_D#g; # \(bu -> $\bullet$
+ s#\\\(ci#_Mbigcirc_D#g; # \(ci -> $\bigcirc$
+ s#\\\(sq#_MBox_D#g; # \(sq -> $\Box$
+ s#\\\(ct#_h_Brm_Brlap/c_R#g; # \(ct -> \hbox{\rm\rlap/c}
+ s#\\\(rg#_h_Braise.6em_H_Booalign_L_L_Bmathhexbox20D_R_Bcrcr\n_Bhfil_Braise.07ex_Hr_R_Bhfil_R_R_R#g;
+ s#\\\(co#_h_Braise.6em_H_Bcopyright_R_R#g;
+ s#\\\(lh#_MLongleftarrow_D#g; # \(lh -> $\Longleftarrow$ #wrong!
+ s#\\\(rh#_MLongrightarrow_D#g; # \(rh -> $\Longrightarrow$
+ s#\\\(dg#_Bdag #g; # \(dg -> \dag
+ s#\\\(dd#_Bddag #g; # \(dd -> \ddag
+ s#\\\(sc#_BS #g; # \(sc -> \S
+ s#\\\(br#_D_V_D#g; # \(br -> $|$
+ s#\\\(fm#_E_Bprime_D#g; # \(fm -> ${}^\prime$
+ s#\\\(de#_E_Bcirc_D#g; # \(de -> ${}^\circ$
+ s#\\\(em#--#g; # \(em -> --
+ s#\\\(hy#-#g; # \(hy -> -
+ s#\\\(ru#_Cvrule width1.2ex height0.1ex depth0ex_R#g;
+ s#\\\(ul#_Cvrule width1.2ex height-.3ex depth.4ex_R#g;
+ s#\\\-#---#g; # \- -> --
+ s#\\\(aa#_C'_L _R_R#g; # \(aa -> {\'{ }}
+ s#\\'#_C'_L _R_R#g; # \' -> {\'{ }}
+ s#\\\(ga#_C`_L _R_R#g; # \(ga -> {\`{ }}
+ s#\\`#_C`_L _R_R#g; # \` -> {\`{ }}
+ s#\\\(sl#/#g; # \(sl -> /
+ s#\\e#_I#g; # \e -> $\backslash$
+ s#\\0#_T#g; # \0 -> ~
+ s#\\ #_B #g; # '\ ' -> '\ '
+ s#\\\^#_D_B,_D#g; # \^ -> $\,$
+ s#\\\|#_D_B:_D#g; # \| -> $\:$
+ s#\\\(fi#fi#g; # \(fi -> fi
+ s#\\\(fl#fl#g; # \(fl -> fl
+ s#\\\(ff#ff#g; # \(ff -> ff
+ s#\\\(Fi#ffi#g; # \(Fi -> ffi
+ s#\\\(Fl#ffl#g; # \(Fl -> ffl
+
+ s#\\\(pl#_D+_D#g; # \(pl -> $+$
+ s#\\\(mi#_D-_D#g; # \(mi -> $-$
+ s#\\\(mu#_Mtimes_D#g; # \(mu -> $\times$
+ s#\\\(di#_Mdiv_D#g; # \(di -> $\div$
+ s#\\\(\+\-#_Mpm_D#g; # \(+- -> $\pm$
+ s#\\\(no#_Mneg_D#g; # \(no -> $\neg$
+ s#\\\(\*\*#_Mast_D#g; # \(** -> $\ast$
+ s#\\\(eq#_D=_D#g; # \(eq -> $=$
+ s#\\\(>=#_Mgeq_D#g; # \(>= -> $\geq$
+ s#\\\(<=#_Mleq_D#g; # \(<= -> $\leq$
+ s#\\\(==#_Mequiv_D#g; # \(== -> $\equiv$
+ s#\\\(~=#_Msimeq_D#g; # \(~= -> $\simeq$
+ s#\\\(ap#_Msim_D#g; # \(ap -> $\sim$
+ s#\\\(!e#_Mneq_D#g; # \(!e -> $\neq$
+ s#\\\(\->#_Mrightarrow_D#g; # \(-> -> $\rightarrow$
+ s#\\\(<\-#_Mleftarrow_D#g; # \(<- -> $\leftarrow$
+ s#\\\(ua#_Muparrow_D#g; # \(ua -> $\uparrow$
+ s#\\\(da#_Mdownarrow_D#g; # \(da -> $\downarrow$
+ s#\\\(cu#_Mcup_D#g; # \(cu -> $\cup$
+ s#\\\(ca#_Mcap_D#g; # \(ca -> $\cap$
+ s#\\\(sb#_Msubset_D#g; # \(sb -> $\subset$
+ s#\\\(sp#_Msupset_D#g; # \(sp -> $\supset$
+ s#\\\(ib#_Msubseteq_D#g; # \(ib -> $\subseteq$
+ s#\\\(ip#_Msupseteq_D#g; # \(ip -> $\supseteq$
+ s#\\\(if#_Minfty_D#g; # \(if -> $\infty$
+ s#\\\(es#_Memptyset_D#g; # \(es -> $\emptyset$
+ s#\\\(is#_Mint_D#g; # \(is -> $\int$
+ s#\\\(pd#_Mpartial_D#g; # \(pd -> $\partial$
+ s#\\\(sr#_Msurd_D#g; # \(sr -> $\surd$
+ s#\\\(gr#_Mnabla_D#g; # \(gr -> $\nabla$
+ s#\\\(pt#_Mpropto_D#g; # \(pt -> $\propto$
+ s#\\\(mo#_Min_D#g; # \(mo -> $\in$
+ s#\\\(or#_Mmid_D#g; # \(or -> $\mid$
+ s#\\\((\d)(\d)#_D$1_Bover$2_D#g; # \(14 -> $1\over4$
+
+ s#\\\(m\.#_Mcdot_D#g; # \(m. -> $\cdot$
+ s#\\\(!s#_Mnot_Bsubset_D#g; # \(!s -> $\not\subset$
+ s#\\\(an#_Mwedge_D#g; # \(an -> $\wedge$
+ s#\\\(lo#_Mvee_D#g; # \(lo -> $\vee$
+ s#\\\(tf#_D_H._R_Braise.9ex_H._R_H._R_D#g;# \(tf -> .:.
+ s#\\\(cm#_Mni_D#g; # \(cm -> $\ni$
+ s#\\\(fa#_Mforall_D#g; # \(fa -> $\forall$
+ s#\\\(te#_Mexists_D#g; # \(te -> $\exists$
+ s#\\\(!m#_Mnotin_D#g; # \(!m -> $\notin$
+ s#\\\(a\+#_Moplus_D#g; # \(a+ -> $\oplus$
+ s#\\\(ax#_Motimes_D#g; # \(ax -> $\otimes$
+ s#\\\(ag#_Mangle_D#g; # \(ag -> $\angle$
+ s#\\\(rn#_Moverline_L _R_D#g; # \(rn -> $\overline{ }$
+ s#\\\(<<#_Mll_D#g; # \(<< -> $\ll$
+ s#\\\(>>#_Mgg_D#g; # \(>> -> $\gg$
+ s#\\\(<>#_Mleftrightarrow_D#g; # \(<> -> $\leftrightarrow$
+ s#\\\(//#_D/_D#g; # \(// -> $/$
+ s#\\\(L<#_Mlangle_D#g; # \(L< -> $\langle$
+ s#\\\(R>#_Mrangle_D#g; # \(R> -> $\rangle$
+ s#\\\(dm#_Mdiamond_D#g; # \(dm -> $\diamond$
+ s#\\\(lt#_Mlbrace_D#g; # \(lt -> $\lbrace$
+ s#\\\(rt#_Mrbrace_D#g; # \(rt -> $\rbrace$
+ s#\\\(lb#_Mlfloor_D#g; # \(lb -> $\lfloor$
+ s#\\\(rt#_Mrfloor_D#g; # \(rt -> $\rfloor$
+ s#\\\(lk#_Mlbrace_D#g; # \(lk -> $\lbrace$
+ s#\\\(rk#_Mrbrace_D#g; # \(rk -> $\rbrace$
+ s#\\\(lf#_Mlfloor_D#g; # \(lf -> $\lfloor$
+ s#\\\(rf#_Mrfloor_D#g; # \(rf -> $\rfloor$
+ s#\\\(lc#_Mlceil_D#g; # \(lc -> $\lceil$
+ s#\\\(rc#_Mrceil_D#g; # \(rc -> $\rceil$
+
+ s#\\\(bv#_Cmbox_Cboldmath_Mmid_D_R_R#g; # \(bv -> {\mbox{\boldmath$\mid$}}
+ s#\\\(bx#_Cvrule width.5em height.6em depth-.1em_R#g;
+ s#\\\(cf#^#g; # \(cf -> ^
+ s#\\\(al#_Maleph_D#g; # \(al -> $\aleph$
+ s#\\\(If#_MIm_D#g; # \(If -> $\Im$
+ s#\\\(Rf#_MRe_D#g; # \(Rf -> $\Re$
+ s#\\\(ws#_Mwp_D#g; # \(ws -> $\wp$
+ s#\\\(mt#_E_Bprime_D#g; # \(mt -> ${}^\prime$
+ s#\\\(sd#_E_L_Bprime_B!_Bprime_R_D#g; # \(sd -> ${}^{\prime\!\prime}$
+ s#\\\(pa#_BP#g; # \(pa -> \P
+ s#\\\(Cc#_Mclubsuit_D#g; # \(Cc -> $\clubsuit$
+ s#\\\(Cd#_Mdiamondsuit_D#g; # \(Cd -> $\diamondsuit$
+ s#\\\(Ch#_Mheartsuit_D#g; # \(Ch -> $\heartsuit$
+ s#\\\(Cs#_Mspadesuit_D#g; # \(Cs -> $\spadesuit$
+ s#\\\(bt#_Mperp_D#g; # \(bt -> $\perp$
+ s#\\\(<:#_MLeftarrow_D#g; # \(<: -> $\Leftarrow$
+ s#\\\(:>#_MRightarrow_D#g; # \(:> -> $\Rightarrow$
+ s#\\\(io#_MLeftrightarrow_D#g; # \(io -> $\Leftrightarrow$
+ s#\\\(u=#_MUparrow_D#g; # \(u= -> $\Uparrow$
+ s#\\\(d=#_MDownarrow_D#g; # \(d= -> $\Downarrow$
+ s#\\\(r1#_Mrightleftharpoons_D#g; # \(r1 -> $\rightleftharpoons$
+ s#\\\(r2#_Mleftharpoondown_D#g; # \(r2 -> $\leftharpoondown$
+ s#\\\(cr#_Mhookleftarrow_D#g; # \(cr -> $\hookleftarrow$
+ s#\\\(AL#_M_D#g; # \(AL ->
+ s#\\\(DL#_M_D#g; # \(DL ->
+
+ s#\\\(\*a#_Malpha_D#g; # \(*a -> $\alpha$
+ s#\\\(\*b#_Mbeta_D#g; # \(*b -> $\beta$
+ s#\\\(\*c#_Mxi_D#g; # \(*c -> $\xi$
+ s#\\\(\*d#_Mdelta_D#g; # \(*d -> $\delta$
+ s#\\\(\*e#_Mvarepsilon_D#g; # \(*e -> $\varepsilon$
+ s#\\\(\*f#_Mphi_D#g; # \(*f -> $\phi$
+ s#\\\(\*g#_Mgamma_D#g; # \(*g -> $\gamma$
+ s#\\\(\*h#_Mtheta_D#g; # \(*h -> $\theta$
+ s#\\\(\*([ij])\\\*(['`])#_C$2_B$1_R#g; # \\(*i\\*' -> {\'\i} new 0.9.4
+ s#\\\(\*i#_Miota_D#g; # \(*i -> $\iota$
+ s#\\\(\*k#_Mkappa_D#g; # \(*k -> $\kappa$
+ s#\\\(\*l#_Mlambda_D#g; # \(*l -> $\lambda$
+ s#\\\(\*m#_Mmu_D#g; # \(*m -> $\mu$
+ s#\\\(\*n#_Mnu_D#g; # \(*n -> $\nu$
+ s#\\\(\*o#_Do_D#g; # \(*o -> $o$
+ s#\\\(\*p#_Mpi_D#g; # \(*p -> $\pi$
+ s#\\\(\*q#_Mpsi_D#g; # \(*q -> $\psi$
+ s#\\\(\*r#_Mrho_D#g; # \(*r -> $\rho$
+ s#\\\(\*s#_Msigma_D#g; # \(*s -> $\sigma$
+ s#\\\(\*t#_Mtau_D#g; # \(*t -> $\tau$
+ s#\\\(\*u#_Mupsilon_D#g; # \(*u -> $\upsilon$
+ s#\\\(\*w#_Momega_D#g; # \(*w -> $\omega$
+ s#\\\(\*x#_Mchi_D#g; # \(*x -> $\chi$
+ s#\\\(\*y#_Meta_D#g; # \(*y -> $\eta$
+ s#\\\(\*z#_Mzeta_D#g; # \(*z -> $\zeta$
+ s#\\\(ts#_Mvarsigma_D#g; # \(ts -> $\varsigma$
+ s#\\\(\*C#_MXi_D#g; # \(*C -> $\Xi$
+ s#\\\(\*D#_MDelta_D#g; # \(*D -> $\Delta$
+ s#\\\(\*F#_MPhi_D#g; # \(*F -> $\Phi$
+ s#\\\(\*G#_MGamma_D#g; # \(*G -> $\Gamma$
+ s#\\\(\*H#_MTheta_D#g; # \(*H -> $\Theta$
+ s#\\\(\*L#_MLambda_D#g; # \(*L -> $\Lambda$
+ s#\\\(\*P#_MPi_D#g; # \(*P -> $\Pi$
+ s#\\\(\*Q#_MPsi_D#g; # \(*Q -> $\Psi$
+ s#\\\(\*R#_Crm_SP_R#g; # \(*R -> {\rm P}
+ s#\\\(\*S#_MSigma_D#g; # \(*S -> $\Sigma$
+ s#\\\(\*U#_Crm_SY_R#g; # \(*U -> {\rm Y}
+ s#\\\(\*W#_MOmega_D#g; # \(*W -> $\Omega$
+ s#\\\(\*Y#_Crm_SH_R#g; # \(*Y -> {\rm H}
+ s#\\\(\*(\w)#_Crm_S$1_R#g; # \(*_ -> {\rm _}
+
+ # from the -mm macros
+
+ s#\\\*\(Tm#_E_Crm_Buppercase_LTM_R_R_D#g;# \*(Tm -> ${}^{\rm\uppercase{TM}}$
+
+ # I am SO disgusted with troff. It seems that unless the -ms option is
+ # given, all accents are done in the -mm way e\*'. In fact, when the
+ # -ms option is given, only the original 7 accents are done postfix.
+
+ # (ij) changed to ([ij]) in version 0.9.4
+ #
+# s#(ij)\\\*(['`])#_C$1_B$2_R#g; # i\*' -> {\'\i}
+ s#([ij])\\\*(['`])#_C$2_B$1_R#g; # i\*' -> {\'\i}
+# s#(ij)\\\*:#_C"_B$1_R#g; # i\*: -> {\"\i}
+ s#([ij])\\\*:#_C"_B$1_R#g; # i\*: -> {\"\i}
+# s#(ij)\\\*\^#_C_A_B$1_R#g; # i\*^ -> {\^\i}
+ s#([ij])\\\*\^#_C_A_B$1_R#g; # i\*^ -> {\^\i}
+#
+ s#(\w)\\\*(['`])#_C$2$1_R#g; # e\*' -> {\'e}
+ s#(\w)\\\*\^#_C_A$1_R#g; # e\*^ -> {\^e}
+ s#(\w)\\\*~#_C_T$1_R#g; # e\*~ -> {\~e}
+ s#(\w)\\\*:#_C"$1_R#g; # e\*: -> {\"e}
+ s#(\w)\\\*;#_C"$1_R#g; # U\*; -> {\"U}
+ s#(\w)\\\*,#_Cc_L$1_R_R#g; # e\*, -> {\c{e}}
+#
+# added but suspended as they are old versions:
+# s#\\\*\(D-#_Cecr_Bsymbol_L208_R_R#g; # \*(D- -> {\ecr\symbol{208}} in 0.9.4
+# s#\\\*\(d-#_Cecr_Bsymbol_L240_R_R#g; # \*(d- -> {\ecr\symbol{240}} in 0.9.4
+# s#\\\*\(Th#_Cecr_Bsymbol_L222_R_R#g; # \*(Th -> {\ecr\symbol{222}} in 0.9.4
+# s#\\\*\(th#_Cecr_Bsymbol_L254_R_R#g; # \*(th -> {\ecr\symbol{254}} in 0.9.4
+#
+# new TC fonts [T1] allow \DH, \dh, \TH, \th in BibTeX !!! new in 0.9.4
+ s#\\\*\(D-#_CDH_R#g; # \*(D- -> {\DH} new in 0.9.4
+ s#\\\*\(d-#_Cdh_R#g; # \*(d- -> {\dh} new in 0.9.4
+ s#\\\*\(Th#_CTH_R#g; # \*(Th -> {\TH} new in 0.9.4
+ s#\\\*\(th#_Cth_R#g; # \*(th -> {\th} new in 0.9.4
+ s#u\\\*o#_Cecr_Bsymbol_L183_R_R#g; # u\*o -> {\ecr\symbol{183}} " in 0.9.4
+
+ # from the Berkeley -ms macros
+
+ s#\\\*\-#--#g; # \*- -> --
+ s#\\\*Q#``#g; # \*Q -> ``
+ s#\\\*U#''#g; # \*U -> ''
+ s#\\\*\(BU#_Mbullet_D#g; # \*(BU -> $\bullet$
+ s#\\\*\(EM#--#g; # \*(EM -> --
+
+ # changed in 0.8.1, from e\*' to \*'e.
+ # These only get used if the above fail (which they don't).
+ # An '-ms' option? What a hack..
+
+ s#\\\*(['`])(ij)#_C$2_B$1_R#g; # \*'i -> {\'\i}
+ s#\\\*:(ij)#_C"_B$1_R#g; # \*:i -> {\"\i}
+ s#\\\*\^(ij)#_C_A_B$1_R#g; # \*^i -> {\^\i}
+ s#\\\*(['`])(\w)#_C$1$2_R#g; # \*'e -> {\'e}
+ s#\\\*\^(\w)#_C_A$1_R#g; # \*^e -> {\^e}
+ s#\\\*~(\w)#_C_T$1_R#g; # \*~e -> {\~e}
+ s#\\\*C(\w)#_Cv_L$1_R_R#g; # \*Cc -> {\v{c}}
+ s#\\\*,(\w)#_Cc_L$1_R_R#g; # \*,e -> {\c{e}}
+ s#\\\*:(\w)#_C"$1_R#g; # \*:e -> {\"e}
+
+ s#(\w)\\\*v#_Cv_L$1_R_R#g; # c\*v -> {\v{c}}
+ s#(\w)\\\*_U#_C=$1_R#g; # e\*_ -> {\=e}
+ s#([Oo])\\\*/#_C$1_R#g; # o\*/ -> {\o}
+ s#([Ll])\\\*/#_C$1_R#g; # L\\*/ -> {\L} new in 0.9.4
+ s#(\w)\\\*\.#_Cd_L$1_R_R#g; # e\*. -> {\d{e}}
+ s#([Aa])\\\*o#_C$1$1_R#g; # a\*o -> {\aa}
+
+ s#\\\(-D#_CDH_R#g; # \*(D- -> {\DH} new in 0.9.4
+ s#\\\(Sd#_Cdh_R#g; # \*(d- -> {\dh} new in 0.9.4
+ s#\\\(TP#_CTH_R#g; # \*(Th -> {\TH} new in 0.9.4
+ s#\\\(Tp#_Cth_R#g; # \*(th -> {\th} new in 0.9.4
+ s#\\\(ID#_Cecr_Bsymbol_L157_R_R#g; # \*(IDot -> {\ecr\symbol{157}} " 0.9.4
+
+ s#\\\*([!?])#$1`#g; # \*? -> ?`
+ s#\\s-[123]\\\*8\\s0#_Css_R#g; # \*8 -> {\ss} new in 0.9.4
+ s#\\\*8#_Css_R#g; # \*8 -> {\ss}
+ s#\\\*3#_h_Blower.5ex_H3_R_R#g; # \*3 -> \hbox{\lower.5ex 3}
+ s#\\\*\(Th#_hI_Bhskip-.6ex_Braise.5ex_H_Mscriptscriptstyle_Bsupset_D_R_R#g;
+ s#\\\*\(th#_h_Clower.3ex_H_Blarge l_R_R_Bhskip-.52ex o_R#g;
+ s#\\\*D\-#_h_Booalign_L_LD_R_Bcrcr\n_Bhskip.2ex_Braise.25ex_H-_R_Bhfil_R_R#g;
+ s#\\\*d\-#_h_Booalign_L_Mpartial_D_Bcrcr\n_Bhskip.55ex_Braise.7ex_H-_R_Bhfil_R_R#g;
+ s#\\\*\(([AO])e#_C$1E_R#g; # \*(Ae -> {\AE}
+ s#\\\*\(([ao])e#_C$1e_R#g; # \*(ae -> {\ae}
+ s#\\\*q#_Cc_Lo_R_R#g; # \*q -> {\c{o}} # wrong
+
+ # International (Roman-8) symbols
+
+ s#\\\(\.\.#_C"_B _R#g; # \(.. -> {\"\ }
+ s#\\\(([AEIOUYaeouy]):#_C"$1_R#g; # \(A: -> {\"A} Umlaute
+ s#\\\(([AEIOUaceouy])'#_C'$1_R#g; # \(A' -> {\'A}
+ s#\\\(([AEIOUaeouy])`#_C`$1_R#g; # \(A` -> {\`A}
+ s#\\\(([AEIOUaeouy])\^#_C_A$1_R#g; # \(A^ -> {\^A}
+ s#\\\(i:#_C"_Bi_R#g; # \(i: -> {\"\i}
+ s#\\\(i(['`])#_C$1_Bi_R#g; # \(i' -> {\'\i}
+ s#\\\(i\^#_C_A_Bi_R#g; # \(i^ -> {\^\i}
+ s#\\\(([ANOano])~#_C_T$1_R#g; # \(A~ -> {\~A}
+ s#\\\(([CcOo]),#_Cc_L$1_R_R#g; # \(c, -> {\c{c}}
+ s#\\\(([Ss])v#_Cv_L$1_R_R#g; # \(sv -> {\v{s}}
+ s#\\\(([Oo])/#_C$1_R#g; # \(O/ -> {\O}
+ s#\\\(ss#_Css_R#g; # \(ss -> {\ss}
+ s#\\\(L\-#_Cpounds_R#g; # \(L- -> {\pounds}
+ s#\\\(L=#_Cpounds_R#g; # \(L= -> {\pounds} # (Wrong!)
+ s#\\\(Y=#_h_Brm_Brlap=Y_R#g; # \(Y= -> \hbox{\rm\rlap=Y}
+ s#\\\(I([!?])#$1`#g; # \I! -> !`
+ s#\\\((AE|ae|OE|oe)#_C$1_R#g; # \(AE -> {\AE}
+ s#\\\(([Aa])o#_C$1$1_R#g; # \(Ao -> {\AA}
+ s#\\\(TH#_hI_Bhskip-.6ex_Braise.5ex_H_Mscriptscriptstyle_Bsupset_D_R_R#g;
+ s#\\\(th#_h_Clower.3ex_H_Blarge l_R_R_Bhskip-.52ex o_R#g;
+ s#\\\(D\-#_h_Booalign_L_LD_R_Bcrcr\n_Bhskip.2ex_Braise.25ex_H-_R_Bhfil_R_R#g;
+ s#\\\(d\-#_h_Booalign_L_Mpartial_D_Bcrcr\n_Bhskip.55ex_Braise.7ex_H-_R_Bhfil_R_R#g;
+ s#\\\(([ao])_U#_E_Cb_Cscriptsize $1_R_R_D#g;
+
+ # The "Scandinavian currency sign" is made with a bold \circ rlap'ed
+ # with 8 .'s. Big, long, and ugly, but the result is not too bad.
+
+ s#\\\(ox#_h_Booalign_Cmbox_Cboldmath_Mcirc_D_R_Bcrcr\n_Bhskip-.04ex_Braise.78ex_H._R_Bhfil_Bcrcr\n_Bhskip-.04ex_Braise.08ex_H._R_Bhfil_Bcrcr\n_c#g;
+ s#_c#_Bhskip.7ex_Braise.78ex_H._R_Bhfil_Bcrcr\n_Bhskip.7ex_Braise.08ex_H._R_Bhfil_Bcrcr\n_c#g;
+ s#_c#_Bhskip-.14ex_Braise.89ex_H._R_Bhfil_Bcrcr\n_Bhskip-.14ex_Braise-.02ex_H._R_Bhfil_Bcrcr\n_c#g;
+ s#_c#_Bhskip.8ex_Braise.89ex_H._R_Bhfil_Bcrcr\n_Bhskip.8ex_Braise-.02ex_H._R_Bhfil_Bcrcr\n_R_R#g;
+
+ # All the symbols from groff chars.tr that aren't listed above.
+ # What the heck is this?? not only is a\*: an a umlaut, but so is
+ # \(a: and also \(:a ! God, I wish troff would get it together!
+ # Oh, some people ignore all this and use \o to overlap it themselves!
+ # \(ao is Ao in Roman-8, and an o in groff.
+ # \(Cs is Cards Spades in Roman-8 and Currency Scandanavian in groff.
+ # How do I know which they meant??
+
+ s#\\\(bs##g; # \(bs -> (not implemented)
+ s#\\\(%0#_h%_Bhskip-.16ex_Blower.15ex_H_Bscriptsize 0_R_R#g;
+ s#\\\(f/#/#g; # \(f/ -> /
+ s#\\\(ha#_h_Braise.3em_H_Mscriptstyle_Bwedge_D_R_R#g;
+ s#\\\(ti#_Msim_D#g; # \(ti -> $\sim$
+ s#\\\(\-D#_h_Booalign_L_LD_R_Bcrcr\n_Bhskip.2ex_Braise.25ex_H-_R_Bhfil_R_R#g;
+ s#\\\(Sd#_h_Booalign_L_Mpartial_D_Bcrcr\n_Bhskip.8ex_Braise.7ex_H-_R_Bhfil_R_R#g;
+ s#\\\(TP#_hI_Bhskip-.6ex_Braise.5ex_H_Mscriptscriptstyle_Bsupset_D_R_R#g;
+ s#\\\(Tp#_h_Clower.3ex_H_Blarge l_R_R_Bhskip-.52ex o_R#g;
+ s#\\\(IJ#_LI_Bhskip-.2ex J_R#g; # \(IJ -> {I\hskip-.2ex J}
+ s#\\\(ij#_Li_Bhskip-.2ex j_R#g; # \(ij -> {i\hskip-.2ex j}
+ s#\\\('([ACEIOUaceou])#_C'$1_R#g; # \('A -> {\'A}
+ s#\\\(:([AEIOUYaeouy])#_C"$1_R#g; # \(:A -> {\"A} Umlaute
+ s#\\\(\^([AEIOUaeou])#_C_A$1_R#g; # \(^A -> {\^A}
+ s#\\\(`([AEIOUaeou])#_C`$1_R#g; # \(`A -> {\`A}
+ s#\\\((['`])i#_C$1_Bi_R#g; # \('i -> {\'\i}
+ s#\\\(\^i#_C_A_Bi_R#g; # \(^i -> {\^\i}
+ s#\\\(:i#_C"_Bi_R#g; # \(:i -> {\"\i}
+ s#\\\(~([ANOano])#_C_T$1_R#g; # \(~A -> {\~A}
+ s#\\\(v([CcgSsZz])#_Cv_L$1_R_R#g; # \(vs -> {\v{s}} + g in 0.9.4
+ s#\\\(,([CcSst])#_Cc_L$1_R_R#g; # \(,c -> {\c{c}} + Sst in 0.9.4
+ s#\\\(/([OoLl])#_C$1_R#g; # \(/O -> {\O}
+ s#\\\(o([Aa])#_C$1$1_R#g; # \(oA -> {\AA}
+ s#\\\(a"#_CH_L _R_R#g; # \(a" -> {\H{ }}
+# s#\\\(a\-#_C=_L _R_R#g; # \(a- -> {\={ }} new in 0.9.4:
+ s#([A-Za-z])\\\(a\-#_Mbar_L$1_R_D#g; # {[a-z]}\(a- -> $\bar{.}$
+ s#\\\(a\.#_C._L _R_R#g; # \(a. -> {\.{ }}
+ s#\\\(a\^#_C_A_L _R_R#g; # \(a^ -> {\^{ }}
+ s#\\\(ab#_Cu_L _R_R#g; # \(ab -> {\u{ }}
+# s#\\\(ac#_Cc_L _R_R#g; # \(ac -> {\c{ }} new in 0.9.4:
+ s#([Ss])\\\(ac#_Cc_L$1_R_R#g; # \(,S -> {\c{[Ss]}}
+ s#\\\(ad#_C"_L _R_R#g; # \(ad -> {\"{ }}
+# s#\\\(ah#_Cv_L _R_R#g; # \(ah -> {\v{ }} new in 0.9.4:
+ s#(\w)\\\(ah#_Cv_L$1_R_R#g; # .\(ah -> {\v{.}}
+ s#\\\(a~#_C_T_L _R_R#g; # \(a~ -> {\~{ }}
+ s#\\\(ho#_Cc_L _R_R#g; # \(ho -> {\c{ }} # (wrong!)
+ s#\\\(\.([ij])#_C$1_R#g; # \(.i -> {\i}
+ s#\\\(Do#\$#g; # \(Do -> $
+ s#\\\(Po#_Cpounds_R#g; # \(Po -> {\pounds}
+ s#\\\(Ye#_h_Brm_Brlap=Y_R#g; # \(Ye -> \hbox{\rm\rlap=Y}
+ s#\\\(Fo#_Mscriptscriptstyle_Bll_D#g; # \(Fo -> $\scriptscriptstyle\ll$
+ s#\\\(Fc#_Mscriptscriptstyle_Bgg_D#g; # \(Fc -> $\scriptscriptstyle\gg$
+ s#\\\(fo#_Mscriptscriptstyle_l_D#g; # \(fo -> $\scriptscriptstyle<$
+ s#\\\(fc#_Mscriptscriptstyle_g_D#g; # \(fc -> $\scriptscriptstyle>$
+ s#\\\(r([!?])#$1`#g; # \(r! -> !`
+ s#\\\(OK#_Cmbox_Cboldmath_Msurd_D_R_R#g; # \(OK ->{\mbox{\boldmath$\surd$}}
+ s#\\\(Of#_E_Cb_Cscriptsize a_R_R_D#g; # \(Of -> ${}^{\scriptsize a}}$
+ s#\\\(Om#_E_Cb_Cscriptsize o_R_R_D#g; # \(Om -> ${}^{\scriptsize o}}$
+ s#\\\(S(\d)#_E$1_D#g; # \(S1 -> ${}^1$
+ s#\\\(lA#_MLeftarrow_D#g; # \(lA -> $\Leftarrow$
+ s#\\\(rA#_MRightarrow_D#g; # \(rA -> $\Rightarrow$
+ s#\\\(hA#_MLeftrightarrow_D#g; # \(hA -> $\Leftrightarrow$
+ s#\\\(dA#_MDownarrow_D#g; # \(dA -> $\Downarrow$
+ s#\\\(uA#_MUparrow_D#g; # \(uA -> $\Uparrow$
+ s#\\\(vA#_MUpdownarrow_D#g; # \(vA -> $\Updownarrow$
+ s#\\\(va#_Mupdownarrow_D#g; # \(va -> $\updownarrow$
+ s#\\\(ba#_Chskip.4ex_Bvrule width.2ex height1.7ex depth0ex_R#g;
+ s#\\\(bb#_h_Bhskip.4ex_H_Booalign_Cvrule width.2ex height.5ex depth.4ex_Bcrcr\n_Bhfil_Braise.8ex_H_Bvrule width.2ex height.9ex depth0ex_R_Bhfil_R_R_R#g;
+ s#\\\(tm#_E_Crm_Buppercase_LTM_R_R_D#g; # \(tm -> ${}^{\rm\uppercase{TM}}$
+ s#\\\(ps#_BP#g; # \(ps -> \P
+ s#\\\(en#-#g; # \(en -> -
+ s#\\\(lB#_L_R[#g; # \(lB -> {}[
+ s#\\\(rB#]#g; # \(rB -> ]
+ s#\\\(lC#{#g; # \(lC -> {
+ s#\\\(rC#}#g; # \(rC -> }
+ s#\\\(la#_Mlangle_D#g; # \(la -> $\langle$
+ s#\\\(ra#_Mrangle_D#g; # \(ra -> $\rangle$
+ s#\\\(lq#``#g; # \(lq -> ``
+ s#\\\(rq#''#g; # \(rq -> ''
+ s#\\\(oq#`#g; # \(oq -> `
+ s#\\\(at#@#g; # \(at -> @
+ s#\\\(sh#\##g; # \(sh -> #
+ s#\\\(rs#_I#g; # \(rs -> $\backslash$
+ s#\\\(3d#_D_H._R_Braise.9ex_H._R_H._R_D#g;# \(3d -> .:.
+ s#\\\(~~#_Mapprox_D#g; # \(~~ -> $\approx$
+ s#\\\(!=#_Mneq_D#g; # \(!= -> $\neq$
+ s#\\\(=~#_Mcong_D#g; # \(=~ -> $\cong$
+ s#\\\(AN#_Mwedge_D#g; # \(AN -> $\wedge$
+ s#\\\(OR#_Mvee_D#g; # \(OR -> $\vee$
+ s#\\\(Ah#_Maleph_D#g; # \(Ah -> $\aleph$
+ s#\\\(Im#_MIm_D#g; # \(Im -> $\Im$
+ s#\\\(Re#_MRe_D#g; # \(Re -> $\Re$
+ s#\\\(md#_Mcdot_D#g; # \(md -> $\cdot$
+ s#\\\(nm#_Mnotin_D#g; # \(nm -> $\notin$
+ s#\\\(pp#_Mperp_D#g; # \(pp -> $\perp$
+ s#\\\(c\*#_Motimes_D#g; # \(c* -> $\otimes$
+ s#\\\(c\+#_Moplus_D#g; # \(c+ -> $\oplus$
+ s#\\\(\-h#_Mhbar_D#g; # \(-h -> $\hbar$
+ s#\\\(CL#_Mclubsuit_D#g; # \(CL -> $\clubsuit$
+ s#\\\(SP#_Mspadesuit_D#g; # \(SP -> $\spadesuit$
+ s#\\\(HE#_Mheartsuit_D#g; # \(HE -> $\heartsuit$
+ s#\\\(DI#_Mdiamondsuit_D#g; # \(DI -> $\diamondsuit$
+ s#\\\(CR#_Mhookleftarrow_D#g; # \(CR -> $\hookleftarrow$
+ s#\\\(st#_Mni_D#g; # \(st -> $\ni$
+ s#\\\(/_U#_Mangle_D#g; # \(/_ -> $\angle$
+ s#\\\(\-\+#_Mmp_D#g; # \(-+ -> $\mp$
+ s#\\\(nc#_Mnot_Bsupset_D#g; # \(nc -> $\not\supset$
+ s#\\\(ne#_Mnot_Bequiv_D#g; # \(ne -> $\not\equiv$
+
+
+ # misc
+
+ s#\\u([^\\]*)\\d#_Braisebox_L1ex_R_L$1_R#g;
+ s#\\d([^\\]*)\\u#_Braisebox_L-1ex_R_L$1_R#g;
+ s#\\z(.)#_Brlap_L$1_R#g; # \z|_ -> L
+ s#\\\*\(mm#mm#g; # \*(mm -> mm
+
+ s#\\&##g; # \& ->
+
+ } # done with troff special chars
+
+ # finally, do eqn processing if they asked for it.
+ #
+ # This is very crude, and handles only the very simple eqn constructs.
+ # We should have some support for reading in eqn definitions rather
+ # than hard-coding some.
+ #
+ if ($handleeqn) {
+ local ($oldline);
+ # print STDERR "\nfrom: $_\n" if /@.*@/;
+ # replace @blah $\foo$ bar@ with @blah \foo bar@
+ 1 while s/\@([^@]* su[bp] [^@]*)_M([^@]*)_D([^@]*)\@/\@$1_B$2$3\@/g;
+ 1 while s/\@([^@]*)_M([^@]*)_D([^@]* su[bp] [^@]*)\@/\@$1_B$2$3\@/g;
+ while (/\@.*\@/) {
+ $oldline = $_;
+ s/\@\s*roman\s+([^\@]*)\@/\@$1\@/g;
+ s/\@\s*{\s*([^\s@]+)\s*sub\s+([^\s@]+)\s*}\s*sup\s+([^\s@]+)\s*([^@]*)\@/_L_D_Crm_S$1_R__L$2_R_A_L$3_R_D_R\@$4\@/g;
+ s/\@\s*([^\s@]+)\s*sub\s+([^\s@]+)\s*([^@]*)@/_L_D_Crm_S$1_R__L$2_R_D_R\@$3\@/g;
+ s/\@\s*([^\s@]+)\s*sup\s+([^\s@]+)\s*([^@]*)@/_L_D_Crm_S$1_R_A_L$2_R_D_R\@$3\@/g;
+ s/_L_D_Crm_S""_R/_L_D_L_R/g; # handle @ "" sub 18 @
+ s/\@mu\@/_Mmu_D/g;
+ s/\@angstrom\@/_CAA_R/g;
+ s/\@co2\@/\@CO sub 2\@/g;
+ s/\@no2\@/\@NO sub 2\@/g;
+ s/\@nox\@/\@NO sub x\@/g;
+ s/\@n2\@/\@N sub 2\@/g;
+ s/\@so2\@/\@SO sub 2\@/g;
+ s/\@so4\@/\@{SO sub 4} sup 2-\@/g;
+ s/\@no3\@/\@{NO sub 3} sup -\@/g;
+ s/\@hno3\@/\@HNO sub 3\@/g;
+ if ($oldline eq $_) {
+ s/\@\s*([^\s@]+)\s*([^@]*)\@/_L$1_R\@$2\@/g;
+ }
+ s/\@\s*\@//g;
+ # print STDERR " to: $_\n";
+ }
+ }
+
+ # protect TeX characters
+ if ($protectTeX) {
+ s/\\/_I/g;
+ s/#/\\#/g;
+ s/\$/\\\$/g;
+ s/%/\\%/g;
+ s/&/\\&/g;
+ s/{/_D\\lbrace_D/g;
+ s/}/_D\\rbrace_D/g;
+ s/\|/\$|\$/g;
+ s/</\$<\$/g;
+ s/>/\$>\$/g;
+ s/\^/\\^{}/g;
+ s/~/\\~{}/g;
+ }
+
+ # now convert our escaped characters back to their real selves
+ s/_B/\\/g;
+ s/_I/\$\\backslash\$/g;
+ s/_C/{\\/g;
+ s/_S/ /g;
+ s/_L/{/g;
+ s/_R/}/g;
+ s/_l/</g;
+ s/_g/>/g;
+ s/_T/~/g;
+ s/_A/^/g;
+ s/_D/\$/g;
+ s/_M/\$\\/g;
+ s/_V/|/g;
+ s/_E/\${}^/g;
+ s/_H/\\hbox{/g;
+ s/_h/\\leavevmode\n\\hbox{/g;
+ s/_U/\\_/g;
+ s/\n\n/\\par\n/g; # this is for fields that want paragraphs
+ $_;
+}
+
+##########################################
+# This converts IBMish control character combinations into troff
+# This is new and mostly untested.
+# Why troff? We convert ibm to troff, then troff to TeX. That
+# way people can use this program to convert refer w/controls into
+# plain refer. Or they can get the full blown refer->TeX.
+#
+# refer(c) -> refer r2b -n -der -ibm
+# refer(c) -> TeX r2b -ibm
+# refer(c) -> tib r2b -der -ibm
+#
+sub doibmtoroff {
+ local($_) = @_;
+
+ if (/[\200-\376]/) {
+ # use the -ms i\*' for accents, as all troff's can handle that.
+ # I'd rather use \('i, but that works for groff, while eroff wants \(i'
+
+ s/[\200]/C\\*,/g;
+ s/[\201]/u\\*:/g;
+ s/[\202]/e\\*'/g;
+ s/[\203]/a\\*^/g;
+ s/[\204]/a\\*:/g;
+ s/[\205]/a\\*`/g;
+ s/[\206]/a\\*o/g;
+ s/[\207]/c\\*,/g;
+ s/[\210]/e\\*^/g;
+ s/[\211]/e\\*:/g;
+ s/[\212]/e\\*`/g;
+ s/[\213]/i\\*:/g;
+ s/[\214]/i\\*^/g;
+ s/[\215]/i\\*`/g;
+ s/[\216]/A\\*:/g;
+ s/[\217]/A\\*o/g;
+ s/[\220]/E\\*'/g;
+ s/[\221]//g; # Can't make out what this is supposed to be.
+ s/[\222]//g; # Ditto
+ s/[\223]/o\\*^/g;
+ s/[\224]/o\\*:/g;
+ s/[\225]/o\\*`/g;
+ s/[\226]/u\\*^/g;
+ s/[\227]/u\\*`/g;
+ s/[\230]/y\\*:/g;
+ s/[\231]/o\\*:/g;
+ s/[\232]/u\\*:/g;
+ s/[\233]/\\\(ct/g;
+ s/[\234]/\\\(L-/g;
+ s/[\235]/\\\(Y=/g;
+ s/[\236]//g; # should handle this
+ s/[\237]//g; # and this
+ s/[\240]/a\\*'/g;
+ s/[\241]/i\\*'/g;
+ s/[\242]/o\\*'/g;
+ s/[\243]/u\\*'/g;
+ s/[\244]/n\\*~/g;
+ s/[\245]/N\\*~/g;
+ s/[\246]/\\\(a_/g;
+ s/[\247]/\\\(o_/g;
+
+ s/[\250]/\\*?/g;
+ s/[\251]//g;
+ s/[\252]/\\\(no/g;
+ s/[\253]/\\\(12/g;
+ s/[\254]/\\\(14/g;
+ s/[\255]/\\*!/g;
+ s/[\256]/\\\(<</g;
+ s/[\257]/\\\(>>/g;
+
+ s/[\360]/\\\(==/g;
+ s/[\361]/\\\(+-/g;
+ s/[\362]/\\\(>=/g;
+ s/[\363]/\\\(<=/g;
+ s/[\364]//g;
+ s/[\365]//g;
+ s/[\366]/\\\(di/g;
+ s/[\367]/\\\(~~/g;
+
+ s/[\373]/\\\(sr/g;
+
+ # I'm taking a guess that \376 is supposed to be the R set.
+ s/[\376]/\\\(Re/g;
+ }
+
+ $_;
+}
+
+
diff --git a/biblio/bibtex/utils/refer-tools/tex2refer b/biblio/bibtex/utils/refer-tools/tex2refer
new file mode 100644
index 0000000000..e75311e181
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/tex2refer
@@ -0,0 +1,151 @@
+Article 2347 of comp.text.tex:
+Path: ai-lab!snorkelwacker!usc!wuarchive!uunet!mcsun!unido!tub!fauern!fauern!immd2.informatik.uni-erlangen.de!fritzke
+From: fritzke@immd2.informatik.uni-erlangen.de (B. Fritzke)
+Newsgroups: comp.text.tex
+Subject: BIBTEX to REFER conversion program (here it is)
+Message-ID: <3065@medusa.informatik.uni-erlangen.de>
+Date: 13 Aug 90 11:13:07 GMT
+Organization: Universitaet Erlangen, CS-Dep. IMMD II
+Lines: 139
+
+Recently I posted a request for a program to convert bibliographic
+references in the bibtex format to the refer format.
+
+Beneath a lot of 'me too!'-messages I got an answer with an
+awk script, that could do part of the job. After some iterations
+of improvement there now exist a pretty good version, that fits
+at least my needs.
+
+Because many people seem to be interested in the program, I post it
+to this newsgroup.
+
+How to make it run:
+ 1. put the stuff after the cut-line in a file called tex2refer (or t2r or so)
+ 2. Make that file executable by typing
+ chmod u+x tex2refer
+ on your Unix system
+
+Bernd Fritzke
+
+Bernd Fritzke ------> e-mail: fritzke@immd2.informatik.uni-erlangen.de
+University of Erlangen, CS IMMD II, Martensstr. 3, 8520 Erlangen (FRG)
+
+--------------------------------- cut here -----------------------------------
+#! /bin/sh
+#
+# tex2refer - converts bibtex entries to refer entries
+#
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# This software comes on a 'as is'-basis.
+# No guarantee for the correctness is given and no 'service' is provided
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+#
+# This program (an awk skript) converts bibliographic references from the
+# bibtex-format to the refer-format.
+# it reads from stdin and writes to stdout:
+#
+# usage: tex2refer < file.bib > file.refer
+#
+# Be aware, that some information is neccessarily lost, because
+#
+# * several bibtex field names are mapped to the same refer filed name
+# e.g. publisher, organization and school are all mapped to %I
+# * refer doesn't support types for references (like @inproceedings, @article)
+# (therefore the inverse mapping refer2tex is mostly based on heuristics)
+#
+# In this program are only the more important (I.M.H.O.) field names covered.
+# If tex2refer encounters unknown field names, it will ignore them but store their
+# names in a list, which is displayed after the conversion process.
+#
+# With this list the program can easily be extended by adding entries to the
+# associative array 'refer'
+#
+#
+# Thanks to Lee, who provided the main part of the program and added
+# some useful comments for readability
+#
+# Bernd Fritzke (fritzke@immd2.informatik.uni-erlangen.de)
+# August 1990
+#
+
+gawk ' #gnu awk, but works probably also with other versions
+BEGIN {
+ FS = " "
+ refer["author"] = "%A"
+ refer["AUTHOR"] = "%A"
+ refer["address"] = "%C"
+ refer["ADDRESS"] = "%C"
+ refer["year"] = "%D"
+ refer["YEAR"] = "%D"
+ refer["publisher"] = "%I"
+ refer["PUBLISHER"] = "%I"
+ refer["journal"] = "%J"
+ refer["JOURNAL"] = "%J"
+ refer["keywords"] = "%K"
+ refer["KEYWORDS"] = "%K"
+ refer["pages"] = "%P"
+ refer["PAGES"] = "%P"
+ refer["title"] = "%T"
+ refer["TITLE"] = "%T"
+ refer["volume"] = "%V"
+ refer["VOLUME"] = "%V"
+ refer["city"] = "%C"
+ refer["CITY"] = "%C"
+ refer["booktitle"] = "%B"
+ refer["BOOKTITLE"] = "%B"
+ refer["note"] = "%o"
+ refer["NOTE"] = "%o"
+ refer["organization"] = "%I"
+ refer["ORGANIZATION"] = "%I"
+ refer["school"] = "%I"
+ refer["SCHOOL"] = "%I"
+}
+
+/^@/ {next} # reference type (not supported by refer) next line
+# ---> "next" makes awk goto the start of the awk script & read the next
+# line of input, so here it is making it ignore lines starting
+# with an @ sign.
+
+# ensure that an = signs is surrounded by space:
+/\=/ { # "=" must be preceeded by `\` , also in line below
+ gsub(/\=/, " & ") # this may cause NF to be updated...
+ # Warning -- do not put single quotes in comments! This does not
+ # work reliably in a shell script.
+}
+
+($1 in refer && $2 == "=") { # Begin of a bibtex field definition
+ gsub(/[{}]/, "") # deleting curly brackets
+ gsub(/,$/, "") # deleting commas at end of line
+ printf "%s ", refer[$1]
+ for (i = 3; i <= NF; i++) { # Loop over the keywords ($2 is "=")
+ printf " %s", $i # and print them
+ }
+ printf "\n" # newline on the end of the refer entry
+}
+
+(!($1 in refer) && $2 == "=") { #collect unknown keywords
+ unknown[$1] = 1
+ next
+}
+
+/[^ ]/ {
+ if ($2 != "=") { # This is not a first line of an entry
+ # In this case, we are dealing with a continuation line.
+ gsub(/[{}]/, "") # deleting curly braces
+ gsub(/,$/, "") # deleting commas at end of line
+ printf " "
+ for (i = 1; i <= NF; i++) { # Loop over all the keywords
+ printf " %s", $i # and print them
+ }
+ printf "\n" # newline on the end of the refer entry
+ }
+}
+
+END {
+ for (a in unknown) {
+ print "------- unknown keyword: " a
+ }
+}
+' ${@+"$@"}
+
+
diff --git a/biblio/bibtex/utils/refer-tools/tib-to-bibtex.shar b/biblio/bibtex/utils/refer-tools/tib-to-bibtex.shar
new file mode 100644
index 0000000000..c03f44f144
--- /dev/null
+++ b/biblio/bibtex/utils/refer-tools/tib-to-bibtex.shar
@@ -0,0 +1,420 @@
+#! /bin/sh
+# This is a shell archive. Remove anything before this line, then unpack
+# it by saving it into a file and typing "sh file". To overwrite existing
+# files, type "sh file -c". You can also feed this as standard input via
+# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
+# will see the following message at the end:
+# "End of shell archive."
+# Contents: ttb.c ttb.1
+# Wrapped by sk@sun4 on Tue Jul 3 16:41:38 1990
+PATH=/bin:/usr/bin:/usr/ucb ; export PATH
+if test -f ttb.c -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ttb.c\"
+else
+echo shar: Extracting \"ttb.c\" \(6982 characters\)
+sed "s/^X//" >ttb.c <<'END_OF_ttb.c'
+X#define about "tibtobib 0.3, 1989 by uf"
+X
+X#include <stdio.h>
+X#include <ctype.h>
+X
+X#define maxlines 50
+X#define linelen 256
+X#define ntypes 8
+X#define ntags 18
+X
+X#define article 0
+X#define conference 1
+X#define inbook 2
+X#define mastersthesis 3
+X#define phdthesis 4
+X#define techreport 5
+X#define book 6
+X#define misc 7
+X
+X#define HELP 0
+X#define NOREF 10
+X#define NOBIB 11
+X#define BIGITEM 12
+X#define NOCONT1 13
+X#define NOCONT2 14
+X#define BIGLINE 15
+X#define BADTAG 16
+X#define MEMFULL 17
+X
+Xchar RCSHeader[]="$Header: /home/tex/local/ttb.c,v 1.3 90/02/15 14:55:30 sk Rel $";
+X
+Xstatic char *inputtype[]={"ARTICLE","CONFERENCE","INBOOK","MASTERSTHESIS",
+X "PHDTHESIS","TECHREPORT","BOOK","MISC"},
+X *recordtype[]={"AUTHOR","BOOKTITLE","ADDRESS","YEAR","EDITOR",
+X "PUBLISHER","JOURNAL","KEY","NUMBER","NOTE","PAGES",
+X "TYPE","SERIES","TITLE","VOLUME","COMMENT","ANNOTE",
+X "ABSTRACT"},
+X allowedtag[]={'A','B','C','D','E','I','J','K','N','O','P','R','S','T','V',
+X '%','x','X'},
+X organization[]="ORGANIZATION";
+X
+X
+Xchar *item[maxlines],buffer[maxlines*linelen],
+X reffile[linelen],bibfile[linelen];
+Xint curline=0,type,ilines;
+X
+XFILE *ref,*bib,*fopen();
+X
+Xmain(argc,argv)
+Xint argc;
+Xchar **argv;
+X{ int notready;
+X
+X if (argc != 2) {
+X fprintf(stderr,"%s, usage: ttb <filename>\n",about);
+X exit(HELP);
+X }
+X
+X strcpy(reffile,argv[1]);
+X if ((ref=fopen(reffile,"r")) == NULL) {
+X sprintf(reffile,"%s.ref",argv[1]);
+X if ((ref=fopen(reffile,"r")) == NULL) {
+X fprintf(stderr,"ttb: can open neither %s nor %s\n",argv[1],reffile);
+X exit(NOREF);
+X }
+X }
+X
+X if (!strcmp(argv[1]+strlen(argv[1])-4,".ref"))
+X argv[1][strlen(argv[1])-4]='\0';
+X sprintf(bibfile,"%s.bib",argv[1]);
+X if ((bib=fopen(bibfile,"w")) == NULL) {
+X fprintf(stderr,"ttb: can't open %s\n",bibfile);
+X exit(NOBIB);
+X }
+X
+X /* main loop */
+X
+X do {
+X notready=getitem();
+X type=classifyitem();
+X /* printitem(); */
+X putitem();
+X }
+X while(notready);
+X
+X /* exit */
+X
+X fclose(ref);
+X fclose(bib);
+X}
+X
+X
+Xgetitem()
+X{ char firstchar,secondchar;
+X int i,j,k,ok,ilm1,space,used,ignored=0;
+X
+X ilines = 0;
+X space = maxlines*linelen-1;
+X *item = buffer;
+X
+X while(!feof(ref)) {
+X
+X if (space<=0) {
+X fprintf(stderr,"ttb: %s, %d: buffer space exhausted\n",reffile,curline);
+X exit(MEMFULL);
+X }
+X
+X fgets(item[ilines++],space,ref);
+X ilm1 = ilines-1;
+X for (k=strlen(item[ilm1])-1; k>-1 && isspace(item[ilm1][k]); item[ilm1][k--]=0)
+X ;
+X /* printf("%s\n",item[ilm1]); */
+X curline++;
+X
+X if (ilines>maxlines) {
+X fprintf(stderr,"ttb: %s, line %d: too many lines for this item, line ignored\n",reffile,curline);
+X ilines--;
+X continue;
+X }
+X
+X if (strlen(item[ilm1]) == 0) { /* blank line */
+X ilines--;
+X ignored=0;
+X break;
+X }
+X
+X if ((firstchar=item[ilm1][0]) != '%') { /* continuation line */
+X if (ilines == 1) {
+X fprintf(stderr,"ttb: %s, line %d: leading continuation line ignored\n",reffile,curline);
+X ilines--;
+X continue;
+X }
+X if (ignored) {
+X fprintf(stderr,"ttb: %s, line %d: continuation line ignored\n",reffile,curline);
+X ilines--;
+X continue;
+X }
+X
+X ilines--;
+X *(item[ilines]-1) = '\n';
+X used = strlen(item[ilines])+1;
+X item[ilines] += used;
+X continue;
+X }
+X
+X secondchar = item[ilm1][1];
+X ok = 0;
+X for (i=0; i<ntags; i++)
+X if (secondchar == allowedtag[i]) {
+X ok = -1;
+X break;
+X }
+X
+X if (!ok) {
+X fprintf(stderr,"ttb: %s, line %d: field tag %c not allowed, line ignored\n",reffile,curline,secondchar);
+X ignored = -1;
+X ilines--;
+X continue;
+X }
+X
+X ignored = 0;
+X space -= (used = strlen(item[ilm1])+1);
+X item[ilines] = item[ilm1]+used;
+X }
+X
+X return(!feof(ref));
+X}
+X
+X
+Xint classifyitem()
+X{ int p,type;
+X
+X if (test('J') && test('V'))
+X type = article;
+X else
+X if (test('B'))
+X type = inbook;
+X else
+X if (p=test('R'))
+X if (index(item[p-1],"thesis"))
+X if (index(item[p-1],"master"))
+X type = mastersthesis;
+X else
+X type = phdthesis;
+X else
+X type = techreport;
+X else
+X if (test('I'))
+X type = book;
+X else
+X type = conference;
+X
+X return(type);
+X}
+X
+X
+Xindex(s,t)
+Xchar s[],t[];
+X{ int i,j,k;
+X
+X for (i=0; s[i]; i++) {
+X for (j=i,k=0; t[k] && tolower(s[j])==tolower(t[k]); j++,k++)
+X ;
+X if (t[k] == 0)
+X return(i+1);
+X }
+X
+X return(0);
+X}
+X
+X
+Xint test(c)
+Xchar c;
+X{ int i;
+X
+X for (i=0; i<ilines; i++)
+X if (item[i][1] == c)
+X return(i+1);
+X
+X return(0);
+X}
+X
+X
+Xputitem()
+X{ char author[linelen],year[linelen],page[linelen],record[linelen],
+X editor[linelen],secondchar;
+X int i,j,k,p,first;
+X
+X if (p=test('A')) {
+X if ((i = index(item[p-1],",")) > 4) {
+X strcpy(author,item[p-1]+3);
+X author[i-4]=0;
+X }
+X else {
+X for (k=strlen(item[p-1]); k>2 && item[p-1][k] != ' ' && item[p-1][k] != '.'; k--)
+X ;
+X strcpy(author,item[p-1]+k+1);
+X }
+X }
+X else
+X strcpy(author,"Mr.X");
+X
+X if (p=test('D'))
+X strcpy(year,item[p-1]+strlen(item[p-1])-2);
+X else
+X strcpy(year,"??");
+X
+X if (p=test('P')) {
+X for (i=3; i<strlen(item[p-1]) && (isalpha(item[p-1][i]) && i==3 || isdigit(item[p-1][i])); page[i-3]=item[p-1][i], i++)
+X ;
+X page[i-3]=0;
+X }
+X else
+X strcpy(page,"0");
+X
+X if (p=test('K')) /* user provides keyword */
+X fprintf(bib,"@%s{%s%c\n",inputtype[type],item[p-1]+3,ilines>0 ? ',' : ' ');
+X else
+X fprintf(bib,"@%s{%s%s:%s%c\n",inputtype[type],author,year,page,ilines>0 ? ',' : ' ');
+X
+X /* special cases: several authors, editors */
+X
+X first = !0;
+X strcpy(author,"");
+X if (test('A')) {
+X for (i=0; i<ilines; i++) {
+X if (item[i][1] == 'A') {
+X if (first)
+X first = 0;
+X else
+X strcat(author," and ");
+X strcat(author,item[i]+3);
+X }
+X }
+X fprintf(bib," %s = {%s}%c\n",recordtype[0],author,item[ilines-1][1] != 'A' ? ',' : ' ');
+X }
+X
+X first = !0;
+X strcpy(editor,"");
+X if (test('E')) {
+X for (i=0; i<ilines; i++) {
+X if (item[i][1] == 'E') {
+X if (first)
+X first = 0;
+X else
+X strcat(editor," and ");
+X strcat(editor,item[i]+3);
+X }
+X }
+X fprintf(bib," %s = {%s}%c\n",recordtype[4],editor,item[ilines-1][1] != 'E' ? ',' : ' ');
+X }
+X
+X /* all other fields */
+X
+X for (i=0; i<ilines; i++) {
+X secondchar = item[i][1];
+X if (secondchar == 'A' || secondchar == 'E')
+X continue;
+X
+X /* special case: %J in a conference */
+X
+X if (secondchar == 'J' && type == conference)
+X strcpy(record,organization);
+X
+X /* all other cases */
+X
+X else
+X for (j=0; j<ntags; j++)
+X if (secondchar == allowedtag[j]) {
+X strcpy(record,recordtype[j]);
+X break;
+X }
+X
+X fprintf(bib," %s = {%s}%c\n",record,item[i]+3,i<ilines-1 ? ',' : ' ');
+X }
+X
+X fprintf(bib,"}\n\n");
+X}
+X
+Xoption(argc,argv,c)
+Xchar **argv,c;
+Xint argc;
+X{ int i,j;
+X
+X for (i=1; i<argc; i++)
+X if (argv[i][0] == '-')
+X for (j=1; j<strlen(argv[i]); j++)
+X if (argv[i][j] == c)
+X return(i);
+X return(0);
+X}
+X
+Xprintitem()
+X{ int i;
+X
+X for (i=0; i<ilines; i++)
+X printf("%s\n",item[i]);
+X printf("\nitem consisting of %d lines, type = %d\n\n",ilines,type);
+X}
+X
+END_OF_ttb.c
+if test 6982 -ne `wc -c <ttb.c`; then
+ echo shar: \"ttb.c\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+if test -f ttb.1 -a "${1}" != "-c" ; then
+ echo shar: Will not over-write existing file \"ttb.1\"
+else
+echo shar: Extracting \"ttb.1\" \(727 characters\)
+sed "s/^X//" >ttb.1 <<'END_OF_ttb.1'
+X.TH TTB 1 "15-Feb-1990"
+X.SH NAME
+Xttb - tib to bibtex bibliography converter
+X
+X.SH SYNOPSIS
+X.B ttb
+X.IB file [.ref]
+X
+X.SH DESCRIPTION
+X.B ttb
+Xtakes as input a bibliography in tib format (see
+X.BR tib(5) )
+Xand produces an equivalent bibliography for use with
+X.BR bibtex(1)
+Xin
+X.IB file .bib.
+X.PP
+XIf a
+X.B %K
+Xfield is present in the
+X.B .ref
+Xfile, it is used as
+X.I key
+Xfor a LaTeX \\cite command.
+XOtherwise the
+X.I key
+Xis made up from the author, year and page of the reference like this:
+X.I author year
+X.B :
+X.I page
+X.SH FILES
+X.TP 16
+X~tex/local
+Xsource directory for ttb
+X.SH VERSION
+Xttb.c,v 1.3
+X.PP
+XTo find out what version you are using, type
+X.IP
+X.B ident `which ttb`
+X.SH "SEE ALSO"
+X.B tib(1,5,7), bibtex(1)
+X
+X.SH AUTHOR
+XUlrich Fastenrath
+END_OF_ttb.1
+if test 727 -ne `wc -c <ttb.1`; then
+ echo shar: \"ttb.1\" unpacked with wrong size!
+fi
+# end of overwriting check
+fi
+echo shar: End of shell archive.
+exit 0
+
diff --git a/biblio/bibtex/utils/tex2bib/README b/biblio/bibtex/utils/tex2bib/README
new file mode 100644
index 0000000000..b60ab81e23
--- /dev/null
+++ b/biblio/bibtex/utils/tex2bib/README
@@ -0,0 +1,74 @@
+ tex2bib
+ Input a TeX document containing \bibitems, translate these
+ to BibTeX format
+
+ Usage:
+ tex2bib [-k][-i infile] [-o outfile]
+ -k: regenerate keys
+ if infile not given, reads from stdin
+ if outfile not given, prints to stdout
+
+ The entire tex document is scanned for \bibitems, ending when
+ the string '\end{thebibliography}' is read.
+
+ Assumes that bibitems are formatted as follows:
+ -- {key}author(s), (date) at the beginning
+ -- titles of books or names of journals: {\em title}
+ -- article titles: after date, `` '' quotes optional
+ -- volume, pages: {\it vol}, nnn-nnn.
+ -- publisher/address: address:publisher
+
+ All text in the bibitem which cannot be parsed is included
+ in a note = { } field
+
+ Examples of a book, article, inproceedings:
+
+ \bibitem{Bertin83}Bertin, J. (1983),
+ {\em Semiology of Graphics} (trans. W. Berg). Madison, WI:
+ University of Wisconsin Press.
+
+ \bibitem{Bickel75}Bickel, P. J., Hammel, J. W. and O'Connell, J. W.
+ (1975).
+ Sex bias in graduate admissions: data from Berkeley. {\em
+ Science}, {\it 187}, 398-403.
+
+ \bibitem{Farebrother87}Farebrother, R. W. (1987),
+ ``Mechanical representations of the ${L}_1$ and ${L}_2$ estimation
+ problems'', In Y. Dodge (ed.) {\em Statistical data analysis
+ based on the L1 norm and related methods}, Amsterdam:
+ North-Holland., 455-464.
+
+
+ These are output as:
+
+ @Book{ Bertin:83,
+ author = {J. Bertin},
+ year = 1983,
+ title = {Semiology of Graphics},
+ publisher = {University of Wisconsin Press},
+ address = {Madison, WI},
+ note = {(trans. W. Berg).}
+ }
+ @Article{ Bickel:75,
+ author = {Bickel, P. J. and Hammel, J. W. and O'Connell, J. W.},
+ year = 1975,
+ title = {Sex Bias in Graduate Admissions: Data from Berkeley},
+ journal = {Science},
+ volume = 187,
+ pages = {398-403}
+ }
+ @InCollection{ Farebrother:87,
+ author = {R. W. Farebrother},
+ year = 1987,
+ title = {Mechanical Representations of the ${L}_1$ and ${L}_2$ Estimation Problems},
+ booktitle = {Statistical Data Analysis Based on the L1 Norm and Related Methods},
+ editor = {Y. Dodge},
+ publisher = {North-Holland},
+ address = {Amsterdam},
+ pages = {455-464}
+
+ Text in a bibitem is removed from the bibitem as it is assigned to
+ bibtex fields. Any text remaining is assigned to a note={ } field
+ at the end. Since the parsing is heuristic, some manual fixup work
+ can be expected at the end.
+
diff --git a/biblio/bibtex/utils/tex2bib/tex2bib b/biblio/bibtex/utils/tex2bib/tex2bib
new file mode 100644
index 0000000000..6631db3698
--- /dev/null
+++ b/biblio/bibtex/utils/tex2bib/tex2bib
@@ -0,0 +1,448 @@
+#! /usr/local/bin/perl
+
+$Script = 'tex2bib';
+$Version=0.97; # 22 Feb 2006 10:50:35
+$Author='Michael Friendly (friendly@yorku.ca)';
+
+# Copyright (c) 1997 Michael Friendly
+#
+# License:
+# This is free software subject to copyright, released according to the
+# BSD style license. It may be freely used, modified and distributed.
+# See: http://www.ctan.org/tex-archive/help/Catalogue/licenses.bsd.html
+# for details and further information.
+
+# tex2bib
+# Input a TeX document containing \bibitems, translate these
+# to BibTeX format
+#
+# Usage:
+# tex2bib [-k][-i infile] [-o outfile]
+# -k: regenerate keys
+# if infile not given, reads from stdin
+# if outfile not given, prints to stdout
+
+# The entire tex document is scanned for \bibitems, ending when
+# the string '\end{thebibliography}' is read.
+
+# Assumes that bibitems are formatted as follows:
+# -- {key}author(s), (date) at the beginning
+# -- titles of books or names of journals: {\em title}
+# -- article titles: after date, `` '' quotes optional
+# -- volume, pages: {\it vol}, nnn-nnn.
+# -- publisher/address: address:publisher
+#
+# All text in the bibitem which cannot be parsed is included
+# in a note = { } field
+#
+# Changes
+# 0.96 1998/06/22 Allow \bibitem keys to contain [\w:-]
+# 0.97 2006/02/21 Added BSD license
+#################################################################
+# Examples of a book, article, inproceedings:
+
+#\bibitem{Bertin83}Bertin, J. (1983),
+# {\em Semiology of Graphics} (trans. W. Berg). Madison, WI:
+# University of Wisconsin Press.
+#
+#\bibitem{Bickel75}Bickel, P. J., Hammel, J. W. and O'Connell, J. W.
+# (1975).
+# Sex bias in graduate admissions: data from Berkeley. {\em
+# Science}, {\it 187}, 398-403.
+#
+#\bibitem{Farebrother87}Farebrother, R. W. (1987),
+# ``Mechanical representations of the ${L}_1$ and ${L}_2$ estimation
+# problems'', In Y. Dodge (ed.) {\em Statistical data analysis
+# based on the L1 norm and related methods}, Amsterdam:
+# North-Holland., 455-464.
+
+
+# These are output as:
+
+#@Book{ Bertin:83,
+# author = {J. Bertin},
+# year = 1983,
+# title = {Semiology of Graphics},
+# publisher = {University of Wisconsin Press},
+# address = {Madison, WI},
+# note = {(trans. W. Berg).}
+#}
+#@Article{ Bickel:75,
+# author = {Bickel, P. J. and Hammel, J. W. and O'Connell, J. W.},
+# year = 1975,
+# title = {Sex Bias in Graduate Admissions: Data from Berkeley},
+# journal = {Science},
+# volume = 187,
+# pages = {398-403}
+#}
+#@InCollection{ Farebrother:87,
+# author = {R. W. Farebrother},
+# year = 1987,
+# title = {Mechanical Representations of the ${L}_1$ and ${L}_2$ Estimation Problems},
+# booktitle = {Statistical Data Analysis Based on the L1 Norm and Related Methods},
+# editor = {Y. Dodge},
+# publisher = {North-Holland},
+# address = {Amsterdam},
+# pages = {455-464}
+
+# Text in a bibitem is removed from the bibitem as it is assigned to
+# bibtex fields. Any text remaining is assigned to a note={ } field
+# at the end. Since the parsing is heuristic, some manual fixup work
+# can be expected at the end.
+
+#################################################################
+
+require 'getopt.pl' ;
+
+ Getopt("oikdrt:"); # ARGV now contains [inputfile] and
+ # $opt_o, $opt_i might be set.
+
+ $default_type = $opt_t || 'Article';
+
+ open(STDIN, "<$opt_i") or die "-i $opt_i: can't open.\n" if $opt_i ;
+ open(STDOUT, ">$opt_o") or die "-o $opt_o: can't create.\n" if $opt_o ;
+
+####################### Process input files ####################
+$bibs=0;
+while (<>)
+{
+ /^\s*\\end\{thebibliography/ && last;
+ if (/\\bibitem\s*\{([\w\d:-]+)\}/) {
+ $bibs++;
+ $key = $1;
+# print STDERR "$bibs key: $key\n";
+ }
+ # skip if we're still reading tex text (no bibitems encountered)
+ next unless $bibs;
+ chomp;
+ s/^\s*/ /;
+ $lines .= $_;
+}
+
+# All lines containing \bibitems have been read into the $lines string.
+# Now, split into separate items
+
+@items = split(/\\bibitem\s*/, $lines);
+print STDERR "items has ", scalar(@items), " items\n";
+
+@months = qw(january february march april may jun july august september
+ october november december);
+$month_pat = join('|', @months);
+
+foreach (@months) {
+ $month_abbrv{$_} = substr($_, 0,3);
+}
+
+$ordinal = 'first|second|third|fourth|1st\.?|2nd\.?|3rd\.?|4th\.?';
+
+# title words to ignore for casing;
+foreach ( qw(a about an and by for from in of on the to von with) ) {
+ $ignore_case{$_} = 1;
+}
+
+$outitems =0;
+%keys_seen = {};
+
+foreach $i (0..$#items) {
+ undef $title;
+ undef $pages;
+ undef $journal;
+ undef $volume;
+ undef $number;
+ undef $booktitle;
+ undef $editor;
+ undef $edition;
+ undef $month;
+ undef $publisher;
+ undef $address;
+ undef $chapter;
+ undef $rest;
+
+ print "$items[$i]\n" if $opt_d;
+ # assume each entry starts with
+ # {key}Author, F.I. etc (date[a-z]?)
+# $items[$i] =~ /^\{([^}]+)\}([^\(]*)\((\d{4})[a-z]?\)[,.]?\s*/;
+# ($key, $authors, $date) = ($1, $2, $3);
+ $items[$i] =~ /^\{([^}]+)\}\s*/;
+ $key = $1;
+# print "key: $key\n";
+ $rest = $';
+
+ $rest =~ /\((\d{4})[a-z]?\)[,.]?\s*/ &&
+ do {
+ $authors = $`;
+ $date = $1;
+ $rest = $';
+ };
+
+ unless (defined($key)) {
+ print STDERR "Skipping: $authors, $date in \n$items[$i]\n";
+ next;
+ }
+
+
+ $rest =~ s/^[.,]?\s+//;
+ $rest =~ s/\s+$//;
+
+# print "key: $key\n";
+# $key =~ m/(['A-Za-z]+)([^:]*)/ &&
+# do { $key = "$1:$2"; };
+# print "key: $key\n";
+
+ &parse_authors;
+
+ $orig_key = $key;
+ $key = &generate_key if $opt_k or $keys_seen{$key};
+
+ # if the $key has already been seen, make a new, unique one
+ if ($keys_seen{$key}) {
+ foreach $suffix (('b'..'z')) {
+ $try = $key . $suffix;
+# print STDERR "Seen $key ... trying $try\n";
+ unless ($keys_seen{$try}) {$key = $try; last; };
+ }
+ print STDERR "New unique key generated: $key (was $orig_key)\n"
+ unless $key eq $orig_key;
+ }
+ $keys_seen{$key}++;
+
+ # assume it's an article at first
+ $type = '@' . $default_type;
+
+ if ($rest =~ /^\{\\em\s+/) {
+ #tech report or book
+ $type = '@Book';
+ $rest =~ m/^\{\\em\s+(['\w ,?:]+)\}[., ]*/;
+ $title = $1;
+ $rest = $';
+ &parse_edition;
+ &parse_publish;
+
+ $rest =~ m/\sreport(s?)[,]?\s*/i &&
+ do {
+ $type ='@TechReport';
+ $rest = $` . $';
+ &parse_report_number;
+ };
+ }
+
+ else {
+ #does it begin with quoted title?
+ if ($rest =~ /^``/){
+ $rest =~ m/^``([^`]+)''[., ]*/;
+ $title = $1;
+ $rest = $';
+ }
+ else {
+ $rest =~ m#^(['\{\}\w\d,\(\)\\ :\?/-]+)[. ]*#;
+ $title = $1;
+ $rest = $';
+ }
+ $rest =~ s/^[,\s]+//;
+
+ if ($rest =~ /^\{\\em\s+/) {
+ $rest =~ m/^\{\\em\s+([\w\\& ,'-?]+)\}[., ]*/;
+ $journal = $1;
+ $rest = $';
+ }
+ # parse {\it volume (number)}
+ &parse_volume;
+
+ $rest =~ m/,?\s*(\d{1,4}--?\d{1,4})[.,]?\s*/ &&
+ do {
+ $pages = $1;
+ $rest = $`. $';
+ $pages =~ s/(\d)-(\d)/$1--$2/;
+ };
+
+ $rest =~ m/\(($month_pat)\)/i &&
+ do {
+ ($month = $1) =~ tr/A-Z/a-z/;
+ $month = $month_abbrv{$month};
+ $rest = $` . $';
+ };
+
+ $rest =~ m/(technical|tech\.)\s+report[,.]?/i &&
+ do {
+ $type ='@TechReport';
+ $rest = $` . $';
+ &parse_report_number;
+ };
+
+ $rest =~ m/^In\s+/i &&
+ do {
+ $rest = $';
+ $type ='@InCollection'; # maybe, proceedings
+ $rest =~ m/\{\\em\s+([\w ,':!?]+)\}[., ]*/ &&
+ do {
+ $booktitle = $1;
+ $rest = $` . $';
+ $type = '@InProceedings' if $booktitle =~ m/proceedings/i;
+ };
+ $rest =~ m/([\w., ]+)\s+\(eds?\.\)[,.]?\s*/i &&
+ do {
+ $editor = $1;
+ $rest = $` . $';
+ };
+ $rest =~ m/Chapter\s+(\d+)[.,]?\s*/i &&
+ do {
+ $chapter = $1;
+ $rest = $` . $';
+ };
+
+ &parse_edition;
+ &parse_publish;
+ };
+
+ $rest =~ m/proceedings/i &&
+ do {
+ $type = '@InProceedings';
+# print "$items[$i]\n";
+ };
+ }
+
+ $rest =~ s/^\s+//;
+ $rest =~ s/$date([,]?)//;
+
+ $title = &case_title($title);
+ $booktitle = &case_title($booktitle) if $booktitle;
+
+ print "$type\{$key";
+ print ",\n author\t= {$authors}";
+ print ",\n year\t= $date";
+ print ",\n title\t= {$title}" if $title;
+ print ",\n booktitle\t= {$booktitle}" if $booktitle;
+ print ",\n edition\t= {$edition}" if $edition;
+ print ",\n editor\t= {$editor}" if $editor;
+ print ",\n publisher\t= {$publisher}" if $publisher;
+ print ",\n address\t= {$address}" if $address;
+ print ",\n journal\t= {$journal}" if $journal;
+ print ",\n volume\t= $volume" if $volume;
+ print ",\n month\t= $month" if $month;
+ print ",\n number\t= $number" if $number;
+ print ",\n pages\t= {$pages}" if $pages;
+ print ",\n chapter\t= {$chapter}" if $chapter;
+ print ",\n note\t= {$rest}" if $rest;
+ print "\n\}\n";
+ $outitems++;
+}
+print STDERR "$outitems items processed\n";
+exit;
+
+########################### subroutines #############################
+
+# separate multiple authors with 'and'
+sub parse_authors {
+ # fix authors field
+ $authors =~ s/\s+$//;
+ $authors =~ s/\\&/and/;
+ $authors =~ s/([A-Z])\.([A-Z])\./$1. $2./g;
+ $authors =~ s/ ([A-Z])\.,\s+(?!Jr.)/ $1. and /g;
+ $authors =~ s/ and and / and /;
+# $authors =~ s/Friendly, M./Friendly, Michael/;
+ $authors =~ s/M. Friendly/Friendly, M./;
+ local($commas) = ($authors =~ tr/,/,/);
+ if ($opt_r && $commas == 1) {
+ @auth = split(/, /, $authors);
+ $authors = join(' ',reverse(@auth));
+ }
+
+}
+
+# extract last names of authors into @auth array
+sub split_authors {
+ @auth = split(/ and /, $authors);
+ @auth =~ grep(s/, .*$//g,@auth); # strip trailing initials
+ @auth =~ grep(s/^([A-Z]\.\s*)+//g,@auth);
+# @auth =~ grep(s/^[a-z ]+//,@auth); # strip any name prefixes
+
+ foreach $i (0..$#auth) {
+ @n = split(/ /, $auth[$i]);
+ $auth[$i] = pop(@n); # strip anything before lastname
+ $auth[$i] =~ s/[^\w]//g; # remove non-word chars
+ }
+
+# print STDERR "Authors: $authors --> ",
+ join('|',@auth),"\n" if scalar(@auth) > 1;
+
+}
+
+sub parse_volume {
+ $rest =~ m/,?\s*\{\\it\s+([A-Za-z \d()]+)\s*\}[.,]?/ &&
+ do {
+ $volume = $1;
+ $rest = $`. $';
+ $volume =~ m/\(([ \w]+)\)/ &&
+ do {
+ $volume = $`;
+ $number = $1;
+ };
+ $volume = "{$volume}" unless $volume =~ m/^\d*$/;
+ $number = "\{$number\}" unless $number =~ m/^\d*$/;
+ };
+
+}
+
+# find publisher and address in book/inproceedings items
+# assume the format is address:publisher
+sub parse_publish {
+ local($before, $after);
+ $rest =~ m#:\s*([\w-\\/& ]+)[.]?# &&
+ do {
+ $publisher = $1;
+ ($before, $after) = ($`, $');
+ $before =~ m/([\w, ]+)$/ &&
+ do {
+ $address = $1;
+ $before = $`;
+ $address =~ s/^\s+//;
+ };
+ $rest = $before . $after;
+ };
+}
+
+sub parse_report_number {
+ $rest =~ m/\s*(no\.|number)\s+(\d+)[,.]?\s*/i &&
+ do {
+ $number = $2;
+ $rest = $` . $';
+ }
+}
+
+sub parse_edition {
+ $rest =~ m/\(?($ordinal).*(edition|ed\.)\)?\.?\s*/i &&
+ do {
+ $edition = $1;
+ $rest = $` . $';
+ }
+}
+
+# Initial-caps for all non-ignored words
+sub case_title {
+ local($t) = @_;
+ local(@words) = split(/\s+/, $t);
+ local($w) =0;
+ local($colon);
+ foreach (@words) {
+ $w++;
+ next if /^[A-Z]/;
+ unless ($colon) {next if $ignore_case{$_}};
+ s/^([a-z])/\u$1/;
+ $colon = tr/:/:/;
+ }
+ join(' ', @words);
+}
+
+sub generate_key {
+ local($yr, $key);
+ ($yr = $date) =~ s/^1\d//;
+ &split_authors;
+ if (scalar(@auth) < 3) {
+ $key = join('', @auth, ':', $yr);
+ }
+ else {
+ $key = join('', $auth[0], '-etal:', $yr);
+ }
+# print STDERR "New key: $key (", join('|', @auth), ": $date)\n";
+ $key;
+}
diff --git a/biblio/bibtex/utils/text2bib/INSTALL b/biblio/bibtex/utils/text2bib/INSTALL
new file mode 100644
index 0000000000..d8210d48fb
--- /dev/null
+++ b/biblio/bibtex/utils/text2bib/INSTALL
@@ -0,0 +1,44 @@
+
+Installation instructions for text2bib PHP script
+=================================================
+
+Note
+----
+This software is supplied without any warranty whatsoever. In particular, it is not guaranteed to be free of security
+holes. If you make the software available to third parties via a webserver, you are liable for any damage to the server
+caused by those third parties.
+
+Files
+-----
+README
+INSTALL (this file)
+COPYING (GPL license)
+Convert.inc.php (defines bibtex object and conversion class, containing the method convertToBibtex, which does the main work, and formBibtex, which creates the bibtex file (and several auxiliary methods))
+
+How to install
+--------------
+Put the files in a directory.
+
+Create a PHP file containing the following text:
+
+-----------------%<---------------------
+include("Convert.inc.php");
+
+// Following lines are examples. See Convert.inc.php for all possibilities.
+$labelStyle = 'short';
+$overrideLabels = true;
+$lineEndings = 'w';
+$verbose = 1;
+$debug = 0;
+$itemSeparator = 'cr';
+$percentComment = 1;
+
+$convert = new Convert($labelStyle, $overrideLabels, $lineEndings, $verbose, $debug, $itemSeparator, $percentComment);
+$items = $convert->convertToBibtex($filename);
+$outputstring = $convert->formBibtex($items);
+-----------------%<---------------------
+
+Finally, display $outputstring in some way, or write it to a file.
+
+Martin J. Osborne
+2007-12-21
diff --git a/biblio/bibtex/utils/text2bib/README b/biblio/bibtex/utils/text2bib/README
new file mode 100644
index 0000000000..b00b3de995
--- /dev/null
+++ b/biblio/bibtex/utils/text2bib/README
@@ -0,0 +1,21 @@
+
+text2bib is a PHP script for converting references to BibTeX format. It aims to convert accurately references in any
+reasonable format. Here are three examples of references that it converts correctly:
+
+Arrow, K. J., L. Hurwicz, and H. Uzawa (1961), "Constraint qualifications in maximization problems," Naval Research
+Logistics Quarterly 8, 175-191.
+
+Arrow, K. J., L. Hurwicz, and H. Uzawa [1961], ``Constraint qualifications in maximization problems,'' {\it Naval Research
+Logistics Quarterly}, 8(2), 175-191.
+
+Arrow, K. J., L. Hurwicz, \& H. Uzawa. Constraint qualifications in maximization problems. \textit{Naval Research
+Logistics Quarterly}, 8(2): 175--191. 1961.
+
+The script is freely available, under the GPL license (see the file COPYING). It may currently be used via the web at
+http://theory.economics.utoronto.ca/text2bib
+where some more details of its operation are available.
+
+The file INSTALL gives instructions on how to install the script on a server.
+
+Martin J. Osborne
+2007-12-20
diff --git a/biblio/bibtex/utils/text2bib/docs/COPYING b/biblio/bibtex/utils/text2bib/docs/COPYING
new file mode 100644
index 0000000000..05da56c4f2
--- /dev/null
+++ b/biblio/bibtex/utils/text2bib/docs/COPYING
@@ -0,0 +1,123 @@
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+[one line to give the program's name and a brief idea of what it does.] Copyright (C) [year] [name of author]
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+[signature of Ty Coon], 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
diff --git a/biblio/bibtex/utils/tkbibtex/tkbibtex b/biblio/bibtex/utils/tkbibtex/tkbibtex
new file mode 100644
index 0000000000..83e9687dc8
--- /dev/null
+++ b/biblio/bibtex/utils/tkbibtex/tkbibtex
@@ -0,0 +1,2337 @@
+#! /bin/sh
+# the next line restarts using wish \
+exec wish $0 ${1+"$@"}
+
+#---------------------------------------------------------------------------
+# tkbibtex - a BibTeX file browser
+# Copyright (c) 1997 Peter Corke pic@cat.csiro.au
+# with major modifications by Guenter Milde (G.Milde@physik.tu-dresden.de)
+#
+# Needs Tcl/Tk version 8.0 or later
+#
+# tkbibtex home page at
+# http://www.cat.csiro.au/cmst/staff/pic/tkbibtex.html
+#
+# This is RELEASE 8 July 2000
+#
+set release 9
+#
+#---------------------------------------------------------------------------
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#---------------------------------------------------------------------------
+# Contributors:
+# Guenter Milde (G.Milde@physik.tu-dresden.de)
+# John Fulton <John.Fulton@iname.com>
+# Thomas Henlich <henlich@mmers1.mw.tu-dresden.de>
+#
+# COMMAND LINE SWITCHES:
+# ~~~~~~~~~~~~~~~~~~~~~
+set usage {Usage: tkbibtex [switches] [bibfile]
+
+ A browser/editor for BibTeX format bibliografy files
+
+ * General switches:
+
+ SWITCH ARG DESCRIPTION
+ TYPE
+
+ -debug int 0 = none, 1=moderate, 2=lots, ...
+ -lyx string name of pipe to connect to LyX with
+
+ * For non-interactive searching mode (entered if any of these switches given)
+
+ -search string search string (defaults to all)
+ -type string reference type to search (defaults to all)
+ -field string field to search (defaults to all)
+ -ys int starting year (inclusive) (defaults to 0)
+ -ye int ending year (inclusive) (defaults to 9999)
+ -last int ending year is this year, starting year is specified
+ number of years earlier
+ -exact case sensitive search
+ -case case sensitive search
+by default will list the BibTeX source of the matching entries to stdout, but
+
+ -count will output number of matches only, not BibTeX source
+ -list will display a one line summary (key, type, title)
+ per match
+
+Copyright (c) Peter Corke 1997-2000
+
+ }
+
+## user alterable inits, you may set/override these also in a file ~/.tkbibtexrc
+
+# default for ignore case check button in search window
+set search_ignore_case 1
+# which fields shall have a folding multiple line entry?
+set bigfields "annote title abstract"
+# number of lines in big fields
+set title_lines_big 4
+set annote_lines_big 10
+set abstract_lines_big 10
+set delete_confirm true
+
+# cite_grouping, controls how a list of references is pushed to LyX
+# false [ref1][ref2][ref3]
+# true [ref1,ref2,ref3]
+set cite_grouping true
+
+# citekey_lower, controls whether all cite keys are made lower case. bibtex
+# ignores case, so this is useful to detect duplicates.
+set citekey_lower false
+# name of strings file, searched for along BIBPATH
+set strfile "strings.bib"
+# initial height of references (main) window (in chars)
+set refs_height 30
+# initial width of references window (in chars)
+set refs_width 30
+# initial width of entries in browse window (in chars)
+set entrywidth 75
+# maximal number of backup copies: 0 = no backups, -1 unlimited
+set backup_max 9
+# default for new entries
+set reftype_default "article"
+
+# load user's init file if it exists
+if {[file exists "~/.tkbibtexrc"]} {
+ source "~/.tkbibtexrc"
+}
+
+
+# get BIBPATH environment variable if it exists
+if {[info exists env(BIBPATH)]} {
+ set bibpath $env(BIBPATH)
+ set bibpathlist [split $bibpath :]
+} else {
+ set bibpathlist ""
+}
+
+## initializations, modify with caution
+set curkey "" ;# keyword of the entry shown in the .browse window
+ # or "" if there is no .browse window
+set debug 0 ;# verbosity level 0,...,3 for debugging
+set bibchanged 0
+trace variable bibchanged w bibchange_proc
+set citelist ""
+set window_state ""
+set curreftype ""
+set fname "<noname>"
+set global_print_cmd "|lpr"
+
+foreach i $bigfields {set ${i}_big 0} ;# big_lentries folded to one line
+
+# initial values of command params that may be set by command line switches
+set arg_ys 0
+set arg_ye 9999
+set arg_search 9999
+set arg_reftype "All"
+set arg_field "All"
+set arg_search ".*"
+set arg_ignorecase 1
+set arg_count 0
+set command_line_mode 0
+set LyXpipe $env(HOME)/.lyxpipe
+
+# global bindings
+bind Button <Up> {tkTabToWindow [tk_focusPrev %W]}
+bind Button <Down> {tkTabToWindow [tk_focusNext %W]}
+bind Button <Left> {tkTabToWindow [tk_focusPrev %W]}
+bind Button <Right> {tkTabToWindow [tk_focusNext %W]}
+
+bind all <F1> {briefhelp Keys}
+bind all <Control-d> {edit_item duplicate}
+bind all <Control-r> {edit_item rename}
+bind all <Control-n> {edit_item new}
+bind all <Control-f> {finditem}
+bind all <Control-q> {quit}
+bind all <Control-s> {savebib}
+bind all <F2> {savebib}
+bind all <Shift-F2> {saveasbib}
+bind all <F3> {openbib}
+bind all <Shift-F3> {closebib}
+
+
+#---------------------------- DEFINES -------------------------------------
+# define BibTeX reference types and fields, see btxdoc.[tex/bib] for
+# documentation
+
+# common month names for the month menu
+set months {jan feb mar apr may jun jul aug sep oct nov dec}
+
+#---------------------------------------------------------------------
+# The following lists tailor the operation of tkbibtex.
+# 1. to add a new reference type, say a BIGBOOK type, add the name (in l.c.)
+# to the list "alltypes"
+# 2. to add a new field place the name in the lists "allfields" and:
+# 3. to make it mandatory for a type add that field name to the
+# list req(reftype).
+# 4. to make it optional for a type add that field name to the
+# list opt(reftype).
+# 5. to make it an additional field (for all types) add that field name
+# to the list ign (ignored fields)
+#---------------------------------------------------------------------
+
+# list of all fields
+set allfields {address author booktitle chapter edition \
+ editor howpublished institution journal month number \
+ organization pages publisher school series title type volume \
+ year note code url crossref annote abstract}
+
+# list of all reference types
+set alltypes {article book booklet inbook incollection \
+ inproceedings manual mastersthesis misc phdthesis proceedings \
+ techreport unpublished}
+
+# list of additional fields, ignored by the standard BibTeX styles
+set ign {crossref code url annote abstract}
+
+# lists of required and optional fields for each reference type
+set req(article) {author title journal year}
+set opt(article) {volume number pages month note}
+
+set req(book) {author title publisher year};# requires author OR editor
+set opt(book) {editor volume number series address edition month note}
+
+set req(booklet) {title}
+set opt(booklet) {author howpublished address month year note}
+
+set req(inbook) {author title chapter pages publisher year}
+ #(requires author or editor)
+set opt(inbook) {editor volume series address edition month note}
+
+set req(incollection) {author title booktitle publisher year}
+set opt(incollection) {editor volume number series type chapter \
+ pages address edition month note}
+
+set req(inproceedings) {author title booktitle year}
+set opt(inproceedings) {editor pages organization publisher address month note}
+
+set req(manual) {title}
+set opt(manual) {author organization address edition month year note}
+
+set req(misc) {}
+set opt(misc) {title author howpublished month year note}
+
+set req(mastersthesis) {author title school year}
+set opt(mastersthesis) {address month note}
+
+set req(phdthesis) {author title school year}
+set opt(phdthesis) {address month note}
+
+set req(proceedings) {title year}
+set opt(proceedings) {editor publisher organization address month note}
+
+set req(techreport) {author title institution year}
+set opt(techreport) {type number address month note}
+
+set req(unpublished) {author title note}
+set opt(unpublished) {month year}
+
+#-------------------------- Datastructures -----------------------------
+#
+# Datastructures are somewhat limited in Tcl. The two main ones are:
+#
+# citelist a list of all citations in the order they
+# are displayed in the main listbox
+# REFLIST an array in which the first index is the citation key,
+# and the second index is the field. Thus
+# REFLIST(Corke87b,type) = "article"
+# REFLIST(Corke87b,title) = "Yet another paper about..."
+#
+
+#----------------------- BibTeX format file i/o -----------------------------
+
+# return full path name for specified file along BIBPATH
+proc find_on_path {fname} {
+ global bibpathlist
+
+ if {[file exists $fname]} {
+ return $fname
+ }
+
+ foreach p $bibpathlist {
+ if {[file exists $p/$fname]} {
+ set fname $p/$fname
+ return $fname
+ }
+ }
+ return {}
+}
+
+#
+# parse the BibTeX format file and update the multidimensional array REFLIST.
+#
+proc bibparse {fname} {
+ global citelist errmsg
+
+ showmsg "loading $fname"
+ . config -cursor watch
+ trace vdelete REFLIST w REFLISTchange_proc
+ set dupcount [bibparse_f $fname]
+ trace variable REFLIST w REFLISTchange_proc
+ set REFLIST_update 0
+ update_citelistbox
+
+ . config -cursor ""
+ set count [llength $citelist]
+ if {$dupcount == 0} {
+ showmsg "$count records"
+ } else {
+ showmsg "$count records ($dupcount duplicates)"
+ }
+ testoutput 1 "$count records ($dupcount duplicates)"
+ if {$errmsg != ""} {
+ tk_messageBox -icon warning -type ok -message $errmsg
+ set errmsg ""
+ }
+
+}
+
+# -------- new parsing-algorithm by GM (rparse.tcl) --------------
+
+set preamblelist ""
+set errmsg ""
+
+# core file parser
+
+proc bibparse_f {fname} {
+
+ global errmsg
+
+ set f [open $fname r]
+
+ testoutput 1 "loading $fname"
+ showmsg "loading $fname"
+
+ set buffer [read $f]
+ close $f
+
+ testoutput 1 "parsing $fname"
+ showmsg "parsing $fname"
+
+ return [bibparse_s $buffer]
+}
+
+proc bibparse_s {buffer} {
+ # transform, to get a string that can be parsed by tcl-routines:
+
+ # We have to cheat to get tcl parsing a bibtex file: BibTeX uses special
+ # characters to separate entries and fields. But inside a {string}
+ # or a "string" they are escaped. This escaping is not regarded by "split"
+ # or "regexp", but it is implemented in Tcl's list functions,
+ # however assuming a space as separating character
+
+ # 1. escape backslashes (to prevent substitution of LaTeX-commands as
+ # there is one round of backslash substitution when the list element is not
+ # enclosed in braces) and quote whitespace
+
+ set new_entry 0
+ set count 0
+ set dupcount 0
+ set catch_msg ""
+
+ regsub -all {\\} $buffer {\\\\} buffer
+ regsub -all "\[\t\n ]+" $buffer {\ } buffer
+
+ # 2. put in additional whitespace where we want a separation
+ # '@' separates entries, ',' separates fields,
+ # 3. braces and quotes must be surrounded by whitespace,
+ # otherwise list commands will produce errors
+
+ regsub -all "\[@\{,]" $buffer { &} buffer
+ regsub -all "\[\}]" $buffer {& } buffer
+ regsub -all {"} $buffer { & } buffer ;# comment " only for syntax color
+
+ testoutput 3 $buffer
+
+ # now look at the entries
+ foreach element $buffer {
+
+ testoutput 3 "<$element>"
+
+ # the first element after a reftype contains the fields
+ if {$new_entry} {
+ parse_fields $element $reftype
+ if {$catch_msg != ""} {
+ append errmsg "$catch_msg \n\
+ The following record could not be parsed:\n \
+ <[ruecktrafo $element]> \n\n\
+ You might have to fix your *.bib file! \
+ (probabely use of \"quotes\" \
+ to enclose fields with umlauts) \n\n"
+ }
+ set new_entry 0
+ set catch_msg ""
+ continue
+ }
+ # look for reftype
+ if [regexp {^@([a-zA-Z]+) ?(\(?)} $element match reftype parantheses] {
+ set reftype [string tolower $reftype]
+ incr count
+ if {$count%10 == 0} { # show progress every tenth parsed entry
+ showmsg "parsing: $count records"
+ }
+ testoutput 1 "\nNew entry:"
+ if {$parantheses == "("} {
+ append errmsg "cannot handle entry in parantheses (yet): $element\n"
+ # Baustelle
+ # diese Klausel kann weg, wenn Klammern richtig behandelt werden
+ } else {
+ set new_entry 1
+ }
+ continue
+ }
+ # somethig else: warn user, as this will not be written back to file
+ testoutput 2 "ignored: <$element>"
+ if [regexp {[a-zA-Z]+} $element] {
+ append errmsg "ignored text: [ruecktrafo $element]\n"
+ }
+ }
+ return $dupcount
+}
+
+
+proc parse_fields {fields reftype} {
+
+ global preamblelist strlist citelist REFLIST errmsg citekey_lower
+ upvar dupcount dupcount
+ upvar catch_msg catch_msg
+ set pre_types {preamble string comment}
+ set fieldtext 0
+ set macro ""
+
+ testoutput 3 $fields
+
+ # store preambles, strings and comments to write them back
+ # when saving the file
+ if {[lsearch $pre_types $reftype] >= 0 } {
+ lappend preamblelist "@$reftype \{[ruecktrafo $fields]\}"
+ testoutput 1 "pre-stuff: [lindex $preamblelist end]"
+ if {$reftype == "string"} {
+ # strings will be parsed and put to the stringlist although
+ set keyw "" ;# a string definiton has no keyword
+ } else {
+ return
+ }
+ }
+
+ # process the fields
+ # use catch, as the list might contain syntactic errors
+ catch {
+ foreach item $fields {
+ testoutput 2 "<$item>"
+
+ # first field is keyword (except for strings)
+ if {![info exists keyw]} {
+ set keyw [string trim $item]
+ if {$citekey_lower} {
+ set keyw [string tolower $keyw]
+ }
+ # put in the Reflist
+ set REFLIST($keyw,reftype) $reftype
+ # if not already in the citelist, append it
+ if {[lsearch -exact $citelist $keyw] < 0} {
+ lappend citelist $keyw
+ } else {
+ # Baustelle: fragen: rename overwrite skip?
+ set r [tk_dialog .duplicate {Duplicate!} \
+ "Cite key <$keyw> already exists" \
+ warning 0 {Skip} {Overwrite}]
+ switch $r {
+ 0 {incr dupcount; return}
+ 1 {incr dupcount}
+ }
+ }
+ testoutput 1 "$reftype $keyw"
+ continue
+ }
+
+ # item is <"text"> or <{text}>
+ if {$fieldtext} {
+ set REFLIST($keyw,$fieldname) [ruecktrafo $item]
+ set fieldtext 0
+ testoutput 1 " $fieldname $REFLIST($keyw,$fieldname)"
+ continue
+ }
+
+ # count for concatenations
+ if [info exists concat] {
+ testoutput 3 "concat = <$concat>"
+ append REFLIST($keyw,$fieldname) "\{[ruecktrafo $item]\}"
+ unset concat
+ testoutput 1 " $fieldname $REFLIST($keyw,$fieldname)"
+ continue
+ }
+
+ # item of the form <?,?fieldname = ?macro? ?#?>
+ if [regexp {^,? ?([^ ]+) ?= ?(.*)} \
+ $item match fieldname macro] {
+ set fieldname [string tolower $fieldname]
+ if {$macro != ""} {
+ if [regexp {# ?$} $macro] {
+ set concat "#"
+ }
+ set REFLIST($keyw,$fieldname) "# $macro"
+ testoutput 1 " $fieldname $REFLIST($keyw,$fieldname)"
+ set macro ""
+ } else {
+ set fieldtext 1
+ }
+ continue
+ }
+ # concatenations < # ?macro? ?#?>
+ if [regexp {^ ?(#.*)} $item match concat] {
+ # if the first part is not a macro, put braces around
+ if {![regexp {^#} $REFLIST($keyw,$fieldname)]} {
+ set REFLIST($keyw,$fieldname) "#\{$REFLIST($keyw,$fieldname)\}"
+ }
+ append REFLIST($keyw,$fieldname) " $concat"
+ testoutput 1 " $fieldname $REFLIST($keyw,$fieldname)"
+ if {![regexp {# ?$} $concat]} {
+ unset concat
+ }
+ continue
+ }
+
+ if {![regexp {^ *,? *$} $item]} {
+ append errmsg "cannot parse <$item> \n"
+ }
+
+ } ;# ende {foreach {$fields}}...
+ } catch_msg;# ende catch {foreach ....}
+
+ if {$reftype == "string"} {
+ set strlist($fieldname) $REFLIST($keyw,$fieldname)
+ unset REFLIST($keyw,$fieldname)
+ }
+ if [info exists keyw] {unset keyw}
+}
+# ende proc parse fields
+
+
+proc ruecktrafo {string} {
+ # 1. change back spaces
+ regsub -all "(\}) " $string {\1} string
+ regsub -all " (\[@\{,])" $string {\1} string
+ regsub -all { (") } $string {\1} string ;# "only for syntax color
+
+ # Test what kind of string it is:
+ # if it was in quotes, it will have spaces around -> remove
+ # if the string was in braces -> dequote it
+ if {[regsub {^ (.*) $} $string {\1} string] == 0} {
+ regsub -all {(\\)?\\} $string {\1} string
+ }
+ return $string
+}
+
+# --------- end of stuff for the new parsing algorithm by GM ---------
+
+proc update_citelistbox {} {
+ global citelist
+
+ # cream the old listbox contents
+ .refs.list delete 0 end
+
+ # now reinsert all items in citelist order
+ foreach key $citelist {
+ .refs.list insert end $key
+ }
+}
+
+proc append_to_citelist {newkey} {
+ global bibchanged citelist
+
+ .refs.list insert end $newkey
+ lappend citelist $newkey
+ # note that we've updated the bib
+ incr bibchanged
+}
+
+
+# writebib package
+#
+# writebib citelist filename
+#
+# writes specified citations to the given filename
+#
+# writebib2str citelist
+#
+# writes specified citations to the global buffer writebib_str
+# and also returns this string
+#
+
+proc writebib {citelist fname} {
+ global debug
+
+ showmsg "writing $fname"
+ if {$debug} {
+ puts "writing $fname"
+ }
+ . config -cursor watch
+ set f [open $fname w]
+
+ writebib2 $citelist fwrite $f
+ close $f
+
+ . config -cursor ""
+ showmsg "[llength $citelist] entries written"
+}
+
+proc writebib2str {citelist} {
+ global writebib_str
+
+ set writebib_str ""
+ writebib2 $citelist swrite 0
+
+ return $writebib_str
+}
+
+proc writebib2 {citelist wproc arg} {
+ global REFLIST
+
+ foreach k $citelist {
+ set rt $REFLIST($k,reftype)
+ $wproc $arg "@$rt\{$k"
+
+ set res [array get REFLIST "$k,*"]
+ # now have a list comprising pairs of list elements; the REFLIST
+ # subscript then the value
+ set nfound 0
+
+ foreach {key val} $res {
+ regexp {,([a-z]+)} $key matchall lastkey
+ if {($lastkey != "reftype") && ($val != "")} {
+ testoutput 1 "<$key $val$>"
+ $wproc $arg ",\n"
+ if {[regexp ^# $val]} {
+ set val [string trimleft $val "#"]
+ $wproc $arg " $lastkey = $val"
+ } else {
+ $wproc $arg " $lastkey = \{$val\}"
+ }
+ }
+ }
+ # put end of record brace
+ $wproc $arg "\n\}\n\n"
+ }
+}
+
+proc fwrite {f str} {
+ puts -nonewline $f $str
+}
+
+proc swrite {f str} {
+ global writebib_str
+
+ append writebib_str $str
+}
+
+
+#----------------------- BROWSE WINDOW -----------------------------------
+
+# create the data entry window (.browse) with reftype menu and navigation bar
+# (the fields will be inserted by set_browsebox)
+proc create_browse {} {
+ global alltypes curreftype reftype_default
+
+ toplevel .browse
+ build_stringmenu
+ bind .browse <Destroy> {
+ if {"%W" == ".browse"} {
+ set curkey ""
+ trace vdelete curreftype w reftypechange_proc
+ }
+ }
+ bind .browse <Unmap> {wm_statechange %W}
+ bind .browse <Map> {wm_statechange %W}
+ # Reference type is a menu button whose current label shows the
+ # reference type. Clicking brings up a radiobutton menu that allows
+ # the type to change, and the browse box will reconfigure appropriately
+ frame .browse.reftype
+ label .browse.reftype.l -text "Reference type:" -width 15 -anchor e
+ menubutton .browse.reftype.m -menu .browse.reftype.m.menu -width 20 \
+ -relief raised -anchor w -text $reftype_default
+ menu .browse.reftype.m.menu
+ foreach i $alltypes {
+ .browse.reftype.m.menu add radiobutton -label $i -variable curreftype \
+ -value $i
+ }
+ pack .browse.reftype.l .browse.reftype.m -side left -anchor w
+ pack .browse.reftype -expand 1 -anchor w
+
+ # look for changes in the global curreftype
+ trace variable curreftype w reftypechange_proc
+
+ # a bottom line with helpful buttons:
+ frame .browse.navigate
+ button .browse.navigate.first -text {|< First} -underline 4\
+ -command {browseitem first .refs.list}
+ button .browse.navigate.prev -text {< Previous} -underline 3\
+ -command {browseitem previous .refs.list}
+ button .browse.navigate.next -text {Next >} -underline 0\
+ -command {browseitem next .refs.list}
+ button .browse.navigate.last -text {Last >|} -underline 0\
+ -command {browseitem last .refs.list}
+ button .browse.navigate.close -text Close -width 10 -underline 0\
+ -command {destroy .browse}
+ button .browse.navigate.help -text Help -width 10 -underline 0\
+ -command {briefhelp Browse}
+ pack .browse.navigate.first .browse.navigate.prev .browse.navigate.next\
+ .browse.navigate.last -side left -fill x -expand 1
+ pack .browse.navigate.help .browse.navigate.close -side right
+ pack .browse.navigate -side bottom -fill x
+ bind .browse.navigate 1 {focus .browse.navigate}
+
+ # bind the Alt + underlined keys
+ bind .browse <Alt-Key-f> {browseitem first .refs.list; break}
+ bind .browse <Alt-Key-p> {browseitem previous .refs.list; break}
+ bind .browse <Alt-Key-n> {browseitem next .refs.list; break}
+ bind .browse <Alt-Key-l> {browseitem last .refs.list; break}
+ bind .browse <Alt-Key-c> {destroy .browse; break}
+ bind .browse <Alt-Key-h> {briefhelp Browse; break}
+}
+
+
+# browse the specified cite key, optional arg "-focus" controls
+# whether the first item of .browse is focused on
+proc browse {name args} {
+ global REFLIST allfields curkey curreftype curfields \
+ bibchanged debug bigfields fname
+
+ # ignore stupid keys
+ # if {$name == ""} {return} ;# does this happen?
+
+ # unset empty array elements of last browsed entry
+ if {$curkey != ""} {
+ trace vdelete REFLIST w REFLISTchange_proc
+ foreach el [array names REFLIST $curkey,*] {
+ if {$REFLIST($el) == ""} {unset REFLIST($el)}
+ }
+ trace vdelete REFLIST w REFLISTchange_proc
+ }
+
+ # set curkey to new value
+ set curkey $name
+
+ # create browse window if need be and add the labeled entries for curreftype
+ if {[winfo exists .browse] == 0} {
+ create_browse
+ set_browsebox $REFLIST($name,reftype)
+ }
+
+ # configure the browse box with fields for this entry
+ if {$curreftype != $REFLIST($name,reftype)} {
+ # update curreftype: this calls set_browsebox and a rerun of browse
+ # via trace/curreftypechange_proc
+ set curreftype $REFLIST($name,reftype)
+ return
+ } else {
+ # delete non canonical fields (not predefined for this reference type)
+ foreach i [lrange [pack slaves .browse] 2 end] {
+ if [regexp {sep} $i] {continue}
+ if {[lsearch $curfields [string range $i 8 end]] < 0} {destroy $i}
+ }
+ }
+ # add nan canonical fields (not predefined but present in REFLIST)
+ foreach el [array names REFLIST $name,*] {
+ if [regexp {,([a-z]+)} $el matchall fieldname] {
+ if {$fieldname == "reftype"} {continue}
+ if {[lsearch $curfields $fieldname] < 0} {
+ lentry $fieldname
+ }
+ }
+ }
+
+ # attach the entry to the browse box by textvariables,
+ # do special actions for big_lentry boxes
+ foreach entry [lrange [pack slaves .browse] 2 end] {
+ if [regexp {sep} $entry] {continue}
+ set field [string range $entry 8 end]
+ if {[lsearch $bigfields $field] >= 0} {
+ .browse.$field.e delete 1.0 end
+ if [info exists REFLIST($name,$field)] {
+ .browse.$field.e insert 1.0 $REFLIST($name,$field)
+ }
+ } else {
+ trace vdelete REFLIST w REFLISTchange_proc
+ set in_reflist [info exists REFLIST($name,$field)]
+ # now link entry box to data using textvariable
+ .browse.$field.e config -textvariable REFLIST($name,$field)
+ if {!$in_reflist} {
+ .browse.$field.e delete 0 end
+ }
+ trace variable REFLIST w REFLISTchange_proc
+ }
+ }
+
+ # put cite key into the titlebar
+ wm title .browse "\[$fname\] $name"
+
+ # set focus to first entry if called with option -focus
+ # -force, as this is another toplevel window
+ if { [lindex $args 0] == "-focus"} {
+ focus -force .browse.[lindex $curfields 0].e
+ }
+}
+
+# configure the browse window fields for specified reference type
+proc set_browsebox {reftype} {
+ global req opt ign
+
+ # clear all old fields, (0st and 1st slave are reftype and navigate)
+ foreach i [lrange [pack slaves .browse] 2 end] {
+ # pack forget $i ;
+ # we better destroy and make anew, as this keeps the
+ # right order for keybord traversal
+ destroy $i
+ }
+
+ # add the new fields in right order, separate types with black lines
+ foreach i $req($reftype) {
+ lentry $i
+ }
+ frame .browse.sep1 -height 3 -background black
+ pack .browse.sep1 -fill x -expand 1
+
+ foreach i $opt($reftype) {
+ lentry $i
+ }
+ frame .browse.sep2 -height 3 -background black
+ pack .browse.sep2 -fill x -expand 1
+
+ foreach i $ign {
+ lentry $i
+ }
+
+}
+
+# create a labelled entry box, a frame holding a label and an entry
+# (with multiple lines if name is mentionend in global $bigfields)
+proc lentry {name} {
+ global bigfields entrywidth months
+
+ if {[winfo exists .browse.$name] == 0} {
+ frame .browse.$name
+ if {[lsearch $bigfields $name] >= 0} {
+ button .browse.$name.l -text "[string toupper $name]:" -width 14 \
+ -anchor e -default disabled -bd 1 -padx 2 -pady 0 \
+ -highlightthickness 0 -takefocus 0 -command "fold_button {$name}"
+ text .browse.$name.e -yscrollcommand ".browse.$name.s set" -height 1 \
+ -width 20
+ bind .browse.$name.e <KeyRelease> "update_biglentry $name"
+ bind .browse.$name.e <ButtonRelease> "update_biglentry $name"
+ bind .browse.$name.e <Tab> {tkTabToWindow [tk_focusNext %W]; break}
+ bind .browse.$name.e <Shift-Tab> {
+ tkTabToWindow [tk_focusPrev %W]; break}
+ bind .browse.$name.e <Up> {tkTextfieldUp %W}
+ bind .browse.$name.e <Down> {tkTextfieldDown %W}
+ # scrollbar will be displayed by proc fold_button if entry unfolded
+ scrollbar .browse.$name.s -takefocus 0 -command ".browse.$name.e yview"
+ } else {
+ label .browse.$name.l -text "[string toupper $name]:" \
+ -width 15 -anchor e
+ entry .browse.$name.e -width $entrywidth -insertofftime 0
+ bind .browse.$name.e <Up> {tkTabToWindow [tk_focusPrev %W]}
+ bind .browse.$name.e <Down> {tkTabToWindow [tk_focusNext %W]}
+ bind .browse.$name.e <Return> {tkTabToWindow [tk_focusNext %W]}
+ }
+ pack .browse.$name.l -side left
+ pack .browse.$name.e -side left -fill x -expand 1
+ }
+ pack .browse.$name -fill x -expand 1
+
+ # some special cases
+ switch $name {
+ month {
+ # bind right mouse button to string popup menu
+ menu .browse.month.menu
+ foreach i $months {
+ .browse.month.menu add radiobutton -label $i -value #$i \
+ -command "month_menu_proc $i"
+ }
+ bind .browse.$name.e <Button-3> "month_popup %W %X %Y"
+ }
+ crossref {
+ bind .browse.$name.e <Button-3> "crossrefGoto %W"
+ }
+ default {
+ # bind right mouse button to string popup menu
+ bind .browse.$name.e <Button-3> "string_popup %W %X %Y"
+ }
+ }
+
+}
+
+proc crossrefGoto {w} {
+ set newkey [$w get]
+ puts "going to $newkey"
+ browse $newkey
+}
+
+proc fold_button {name} {
+ global ${name}_big ${name}_lines_big
+
+ if [set ${name}_big] {
+ .browse.$name.e config -height 1 -wrap none
+ pack forget .browse.$name.s
+ set ${name}_big 0
+ } else {
+ .browse.$name.e config -height [set ${name}_lines_big] -wrap word
+ pack .browse.$name.s -side right -fill y
+ set ${name}_big 1
+ }
+}
+
+# if cursor is on first line: move to previous window,
+# otherwise the default binding works (move up one line)
+# to be bound to <Key-Up> in a textfield inside a formular
+proc tkTextfieldUp {w} {
+ if {[$w index insert] == [tkTextUpDownLine $w -1]} {
+ tkTabToWindow [tk_focusPrev $w]
+ return break
+ }
+}
+
+# if cursor is on last line: move to next window,
+# otherwise the default binding works (move down one line)
+# to be bound to <Key-Down> in a textfield inside a formular
+proc tkTextfieldDown {w} {
+ if {[$w index insert] == [tkTextUpDownLine $w 1]} {
+ tkTabToWindow [tk_focusNext $w]
+ return break
+ }
+}
+
+
+#invoked on right mouse button click in a month lentry box
+proc month_popup {w x y} {
+ global month_select
+
+puts "<$x $y>"
+ # pop-up the string menu
+ tk_popup .browse.month.menu $x $y
+ tkwait variable month_select
+ $w insert insert $month_select
+}
+
+proc month_menu_proc {which} {
+ global month_select
+
+puts "in month_menu_proc which = $which"
+ set month_select "#$which"
+}
+
+
+#invoked on right mouse button click in a lentry box
+proc string_popup {w x y} {
+ global string_select
+
+ # pop-up the string menu
+ tk_popup .browse.strmenu $x $y
+ tkwait variable string_select
+ $w insert insert $string_select
+
+ # patch by Thomas Henlich henlich@mmers1.mw.tu-dresden.de
+ set string_select ""
+}
+
+proc strmenu_proc {which} {
+ global string_select
+
+ set string_select "#$which"
+}
+
+proc build_stringmenu {} {
+ global strlist
+
+ menu .browse.strmenu
+ foreach i [array names strlist] {
+ .browse.strmenu add command -label $strlist($i) -command "strmenu_proc $i"
+ }
+}
+
+# if global variable curreftype has changed:
+# invoke set_browsebox() and update REFLIST
+proc reftypechange_proc {name el op} {
+ global curreftype curkey REFLIST debug curfields req opt ign
+
+ set curfields [concat $req($curreftype) $opt($curreftype) $ign]
+ .browse.reftype.m config -text $curreftype
+ if {$REFLIST($curkey,reftype) != $curreftype} {
+ set REFLIST($curkey,reftype) $curreftype
+ }
+ set_browsebox $curreftype
+ browse $curkey
+ testoutput 1 "reftype changing to $curreftype"
+}
+
+# as we cannot bind a textvariable to a text (only to an entry)
+# make sure that the big fields displayed in the browse box are updated
+# in the REFLIST.
+# bound to <KeyRelease>, <ButtonRelease>
+proc update_biglentry {fieldname} {
+ global REFLIST curkey bibchanged
+ set fieldtext [.browse.$fieldname.e get "1.0" end-1c]
+ if {[info exists REFLIST($curkey,$fieldname)]} {
+ # if fieldtext prev existed & has changed
+ if {$fieldtext != $REFLIST($curkey,$fieldname)} {
+ set REFLIST($curkey,$fieldname) $fieldtext
+# incr bibchanged # done by trace on REFLIST
+ }
+ } else {
+ # no fieldtext in REFLIST, check if now finite
+ if {$fieldtext != ""} {
+ set REFLIST($curkey,$fieldname) $fieldtext
+# incr bibchanged
+ }
+ }
+}
+
+# if the bib data has changed flag that in the main title bar
+proc REFLISTchange_proc {name el op} {
+ global bibchanged
+
+ incr bibchanged
+ #puts stdout "REFLIST $el changed, $bibchanged"
+}
+
+#
+# if any widget changes the bibliography in any way it increments the global
+# bibchanged. This trace handler then takes the necessary action
+#
+proc bibchange_proc {name el op} {
+ global bibchanged fname
+
+ if {$bibchanged == 0} {
+ wm title . [file tail $fname]
+ } elseif {$bibchanged == 1} {
+ wm title . "[file tail $fname] (mod)"
+ }
+ # clear the search window listbox
+ if {[winfo exists .find]} {
+ .find.list.lb delete 0 end
+ }
+}
+
+#----------------------- SEARCH WINDOW -----------------------------------
+
+# invoked to do the actual search
+proc searchbib {} {
+ global find_field searchstring citelist REFLIST search_ignore_case
+ global find_reftype find_startyear find_endyear
+
+ . config -cursor watch
+
+ # clear out the old entries in the results listbox
+ .find.list.lb delete 0 end
+ .find.m configure -text ""
+
+ set found [do_search $searchstring $find_reftype $find_field $find_startyear $find_endyear $search_ignore_case]
+ foreach f $found {
+ .find.list.lb insert end $f
+ }
+
+ # display how many hits
+ set nfound [llength $found]
+ .find.m configure -text [format "%d match(es) found" $nfound]
+
+ # put selection on first line of list box for next/prev buttons
+ .find.list.lb selection set 0
+ focus .find.list.lb
+
+ . config -cursor ""
+
+}
+
+proc do_search {searchstring find_reftype find_field find_startyear find_endyear search_ignore_case} {
+ global REFLIST citelist debug
+
+ # convert search field to upper case and extract relevant (or all) fields
+ if {$find_field != "All"} {
+ set el $find_field
+ }
+ if {$search_ignore_case} {
+ set search {regexp -nocase}
+ } else {
+ set search {regexp}
+ }
+
+ if {$debug} {
+ puts "startyear: $find_startyear"
+ puts "endyear: $find_endyear"
+ puts "reftype: $find_reftype"
+ puts "fieldtype: $find_field"
+ puts "search : $searchstring"
+ puts "LC test: $search"
+ }
+
+
+ # now we have a list comprising pairs of list elements:
+ # eg. { Corke96a,TITLE "blah blah blah" }
+ set found {}
+
+ foreach ref $citelist {
+ # screen for reference type (which can be a regexp)
+ if {$find_reftype != "All"} {
+ if {[regexp -nocase $find_reftype $REFLIST($ref,reftype) mv] == 0} {
+ continue;
+ }
+ if {$mv != $REFLIST($ref,reftype)} {
+ continue
+ }
+ }
+
+ # screen for year if its specified
+ if {($find_startyear != "") || ($find_endyear != "")} {
+ if {[info exists REFLIST($ref,year)]} {
+ set year $REFLIST($ref,year)
+ if {($find_endyear != "") && ($year > $find_endyear)} {
+ continue
+ }
+ if {($find_startyear != "") && ($year < $find_startyear)} {
+ continue
+ }
+ }
+ }
+
+ # now check particular field
+ if {$find_field == "All"} {
+ set res [array get REFLIST "$ref,*"]
+ foreach {key val} $res {
+ if {[eval $search $searchstring {$val}]} {
+ #found substring
+ lappend found $ref
+ break
+ }
+ }
+ } else {
+ if {![info exists REFLIST($ref,$el)]} {
+ continue
+ }
+ set w $REFLIST($ref,$el)
+ testoutput 1 "$w"
+ if {[eval $search $searchstring {$w}]} {
+ #found substring
+ lappend found $ref
+ }
+ }
+ }
+ return $found
+}
+
+# create the find/search box
+proc create_find {} {
+ global allfields alltypes find_field searchstring search_ignore_case
+ global find_reftype find_startyear find_endyear
+
+ toplevel .find
+ bind .find <Destroy> {
+ destroy .find
+ trace vdelete find_field w find_fieldchange_proc
+ trace vdelete find_reftype w find_reftypechange_proc
+ }
+ bind .find <Unmap> {wm_statechange %W}
+ bind .find <Map> {wm_statechange %W}
+ #explaining Header
+ wm title .find "find entries using regular expressions"
+
+ ######################################################################
+ # create the search entry boxes
+ # search string
+ # year range
+ # reference type
+
+ ######################################################################
+ # search string and ignore case button
+ frame .find.str
+ label .find.str.l -text "Search for:" -width 12 -anchor e -borderwidth 1
+ entry .find.str.e -textvariable searchstring
+ bind .find.str.e <Return> {searchbib}
+ checkbutton .find.str.c -variable search_ignore_case -text "Ignore case"
+ pack .find.str.l -side left
+ pack .find.str.e -fill x -expand 1 -side left
+ pack .find.str.c -expand 1 -side left
+ pack .find.str -fill x -expand 1 -pady 2m
+
+ ######################################################################
+ # create a menu button for search type
+ frame .find.field
+ label .find.field.l -text "Field:" -width 12 -anchor e
+ trace vdelete find_reftype w find_reftypechange_proc;# just in case still traced
+ set find_field All
+
+ menubutton .find.field.mb -menu .find.field.mb.menu -relief raised\
+ -text $find_field
+
+ menu .find.field.mb.menu
+ .find.field.mb.menu add radiobutton -label All -variable find_field -value All
+ foreach i $allfields {
+ .find.field.mb.menu add radiobutton -label $i -variable find_field -value $i
+ }
+ trace variable find_field w find_fieldchange_proc
+
+ pack .find.field.l -side left
+ pack .find.field.mb -fill x
+ pack .find.field -fill x
+
+ ######################################################################
+ # create a menu button for all reference types + All
+ set find_reftype All
+ frame .find.reftype
+ label .find.reftype.l -text "Ref Type:" -width 12 -anchor e
+
+ menubutton .find.reftype.mb -menu .find.reftype.mb.menu -relief raised -text $find_reftype
+ menu .find.reftype.mb.menu
+ .find.reftype.mb.menu add radiobutton -label All -variable find_reftype -value All
+ foreach i $alltypes {
+ .find.reftype.mb.menu add radiobutton -label $i -variable find_reftype -value $i
+ }
+ trace variable find_reftype w find_reftypechange_proc
+ pack .find.reftype.l -side left -fill x
+ pack .find.reftype.mb -fill x -expand 1
+ pack .find.reftype -fill x -expand 1
+
+
+ ######################################################################
+ frame .find.years
+ label .find.years.l -text "Years:" -width 12 -anchor e
+ pack .find.years.l -side left
+ entry .find.years.start -textvariable find_startyear
+ entry .find.years.end -textvariable find_endyear
+ pack .find.years.l .find.years.start .find.years.end -side left -fill x -expand 1
+ pack .find.years -expand 1
+
+ ######################################################################
+ # the search list box
+ frame .find.list
+ listbox .find.list.lb -yscrollcommand ".find.list.sb set" -selectmode extended
+ scrollbar .find.list.sb -command ".find.list.lb yview"
+ pack .find.list.sb -side right -fill y
+ pack .find.list.lb -side left -fill x -expand 1
+ pack .find.list -fill x -expand 1
+
+ bind .find.list.lb <Double-Button-1> { browse [selection_get -first] -focus}
+ bind .find.list.lb <Return> {browse [selection_get -first] -focus}
+
+ # next/prev buttons. Get current selection index and incr/decr.
+ bind .find <Down> {browseitem next .find.list.lb}
+ bind .find <Up> {browseitem previous .find.list.lb}
+ bind .find <Control-a> {allitems .find.list.lb}
+
+ ######################################################################
+ # frame .find.search
+ button .find.search -text "Search" -command searchbib
+ pack .find.search -side left -expand 1 -fill x
+ # pack .find.search -expand 1 -fill x
+
+ # message box
+ message .find.m -justify left -width 5c
+ pack .find.m -side left -fill x -expand 1
+
+ # the quit button
+ button .find.help -text "Help" -command {briefhelp Find}
+ button .find.dismiss -text "Dismiss" -command {destroy .find}
+ pack .find.dismiss .find.help -side right -anchor e -fill x
+}
+
+
+# whenever find_field changes, relabel the menu button
+proc find_fieldchange_proc {name el op} {
+ global find_field
+
+ .find.field.mb config -text $find_field
+}
+
+# whenever find_reftype changes, relabel the menu button
+proc find_reftypechange_proc {name el op} {
+ global find_reftype
+
+ .find.reftype.mb config -text $find_reftype
+}
+
+
+#----------------------- MAIN WINDOW -------------------------------------
+
+#---------- File menu -------------------
+
+# save to a new file
+proc saveasbib {} {
+ global fname
+ set fname [tk_getSaveFile -defaultextension .bib]
+ if {$fname == ""} return
+ testoutput 1 "saveasbib to $fname"
+ savebib
+}
+
+# save selected entries
+proc save_selected {} {
+ global fname
+ set selected_records [selection_get]
+ if {$selected_records == ""} {return}
+ set old_fname $fname
+ set fname [tk_getSaveFile -defaultextension .bib]
+ testoutput 1 "save <$selected_records> to $fname"
+ savebib $selected_records
+ set fname $old_fname
+ wm title . [file tail $fname]
+}
+
+# save bibliografy, if args != "": save only these selected records
+proc savebib {args} {
+ global fname bibchanged citelist backup_max
+
+ testoutput 1 "savebib to $fname"
+
+ if {($fname == "") || ($fname == "<noname>")} {
+ saveasbib
+ return ;# otherwise we would have an infinite recursion
+ }
+
+ if {[file exists $fname] && $backup_max != 0} {
+ # we don't want to overwrite an existing file, make a backup
+ # as does bibcard to a file named bibfile.bib.~VERSION~
+ # on *DOS call the backup *.bi~
+ # if $backup_max > 0, make not more than $backup_max backups
+
+ set s {}
+ # find all existing backups
+ catch {set s [glob $fname.~*]}
+
+ # find the highest to date
+ set max 0
+ foreach i $s {
+ regexp {([1-9]+)~} $i matchall vers
+ if {$vers > $max} {
+ set max $vers
+ }
+ }
+ # ours is the next one in sequence
+ incr max
+ # if backup_max > 0, make not more than $backup_max backups
+ if {$backup_max && $max > $backup_max} {
+ # rotate: discard oldest backup
+ set max 1
+ while {$max < $backup_max} {
+ set prev $max
+ incr max
+ puts $max
+ catch {file rename -force $fname.~$max~ $fname.~$prev~}
+ }
+ }
+ puts $max
+ # rename the bibliography file to the backup name
+ # give a second try if we are an a 8.3 file system (DOS)
+ if [catch {file rename -force $fname $fname.~$max~} info] {
+ testoutput 3 "catch returns <$info>"
+ file rename -force $fname "[file rootname $fname].bi~"
+ }
+ }
+ # write the new data
+ if {$args != ""} {
+ eval writebib $args $fname; # eval: otherwise $args is just one word
+ } else {
+ writebib $citelist $fname
+ }
+ set bibchanged 0
+}
+
+# fetch the selected items: if args == -first -> just the first selection
+proc selection_get {args} {
+
+ set owner [selection own]
+ if {($owner != ".refs.list") && ($owner != ".find.list.lb")} {
+ tk_dialog .d {Error} "Selection must be in main reference or find list window" {} -1 OK
+ return "";
+ }
+ set stat [catch {selection get} str]
+ if {$stat > 0} {
+ tk_dialog .d {No selection} {No bibliography item was selected} {} 0 OK
+ set str ""
+ }
+ # test, whether we want only one item
+ if { [lindex $args 0] == "-first"} {
+ set str [lindex $str 0]
+ }
+ return $str
+}
+
+proc quit {} {
+ check_save
+
+ exit
+}
+
+proc check_save {} {
+ global bibchanged fname debug curkey
+
+ if {$bibchanged > 0} {
+ set r [tk_dialog .save {Bibliography modified} \
+ "Bibliography $fname has been modified since last time it was saved.
+ Do you want to save it before exiting the application?" \
+ warning 0 {Save File} {Discard Changes}]
+ if {$debug} {
+ puts "check_save returns $r"
+ }
+ switch $r {
+ 0 {savebib}
+ 1 {return}
+ }
+ }
+}
+
+
+proc openbib {} {
+ global fname
+
+ # first close the current bib
+ closebib
+
+ set types {
+ {{Bib Files} {.bib} }
+ {{All Files} * }
+ }
+ set fname [tk_getOpenFile -filetypes $types]
+
+ if {$fname != ""} {
+ # Open the file ...
+ bibparse $fname
+
+ wm title . [file tail $fname]
+ }
+}
+
+proc mergebib {} {
+ global fname
+
+ set types {
+ {{Bib Files} {.bib} }
+ {{All Files} * }
+ }
+ set fname [tk_getOpenFile -filetypes $types]
+
+ if {$fname != ""} {
+ # Open the file ...
+ bibparse $fname
+ }
+}
+
+proc closebib {} {
+
+ global REFLIST citelist fname bibchanged
+
+ # if the current bib has changed, ask whether write it to disk
+ check_save
+
+ # clear the internal database
+ if {[info exists REFLIST]} {
+ unset REFLIST
+ }
+ set citelist {}
+ .refs.list delete 0 end
+ set fname "<noname>"
+ set bibchanged 0
+
+ wm title . " "
+
+ # close the browse box
+ if {[winfo exists .browse]} {
+ destroy .browse
+ }
+
+}
+
+#---------- Edit menu -------------------
+
+#GM, 30.1. a new function edit_item with subfunctions for
+# new, duplicate, delete, rename, crossref
+proc edit_item {what} {
+ global citelist REFLIST bibchanged reftype_default delete_confirm
+
+ if {$what != "delete"} {
+ if {$what != "new"} {
+ # not new or delete, is duplicate, rename, crossref
+ # get the citekey for current entry
+ set oldcitekey [selection_get -first]
+ if {$oldcitekey == ""} {return}
+ }
+ # prompt for new cite key
+ set newcitekey [getnewcitekey]
+ if {$newcitekey == ""} {return}
+ } else {
+ # for deletion: get the citekey for all selected entries
+ set oldcitekey [selection_get]
+ if {$delete_confirm} {
+ if [tk_dialog .d {Warning} "Delete:\n$oldcitekey?" {} 0 "Yes" "No"] {
+ return
+ }
+ }
+ destroy .browse
+ }
+
+ if {$what == "new"} {
+ # set to default reftype
+ set REFLIST($newcitekey,reftype) $reftype_default
+ }
+
+ if {$what == "crossref"} {
+ set REFLIST($newcitekey,reftype) $REFLIST($oldcitekey,reftype)
+ set REFLIST($newcitekey,crossref) $oldcitekey
+ }
+
+ if {$what == "duplicate" || $what == "rename"} {
+ # copy fields from old to new
+ testoutput 1 "copying $oldcitekey to $newcitekey"
+ foreach el [array names REFLIST $oldcitekey,*] {
+ regexp {,([a-z]+)} $el matchall fieldname
+ testoutput 2 "<$fieldname> = <$REFLIST($oldcitekey,$fieldname)>"
+ set REFLIST($newcitekey,$fieldname) $REFLIST($oldcitekey,$fieldname)
+ }
+ }
+
+ if {$what == "rename" || $what == "delete"} {
+ foreach ditem $oldcitekey {
+ testoutput 1 "deleting item $ditem"
+ # unset the old array elements
+ foreach el [array names REFLIST $oldcitekey,*] {
+ regexp {,([a-z]+)} $el matchall fieldname
+ unset REFLIST($oldcitekey,$fieldname)
+ }
+ # now take them out of the citelist
+ set i [lsearch -exact $citelist $ditem]
+ set citelist [lreplace $citelist $i $i]
+ # update the listbox in the main window
+ update_citelistbox
+ }
+ }
+ # note that we've updated the bib
+ incr bibchanged
+
+ if {$what != "delete"} {
+ append_to_citelist $newcitekey
+ .refs.list selection clear 0 end
+ .refs.list selection set end
+ browse $newcitekey -focus
+ }
+}
+# end of edit_item {what}
+
+# push the currently selected bib entry to LyX
+proc pushitem {} {
+ global REFLIST citelist bibchanged cite_grouping
+
+ # get the citekey for current entry
+ set items [selection_get]
+ if {$items == ""} {
+ tk_dialog .d {No selection} {No bibliography item was selected} {} -1 OK
+ return
+ }
+
+ if {$cite_grouping} {
+ LyX_insertcite [join $items ,]
+ } else {
+ foreach item $items {
+ LyX_insertcite $item
+ }
+ }
+}
+
+# navigate, show (which = first|previous|next|last) item in browse box
+proc browseitem {which widget} {
+ set curline [$widget curselection]
+ set lastline [expr [$widget index end] -1]
+ # clear all selections (may be more than one)
+ $widget selection clear 0 end
+ # deal with 0 or multiple
+ if {[llength $curline] == 0} {set curline 0}
+ if {[llength $curline] > 1} {set curline [lindex $curline 0]}
+ switch $which {
+ first {set curline 0}
+ previous {if {$curline > 0} {incr curline -1}}
+ next {if {$curline < $lastline} {incr curline}}
+ last {set curline $lastline}
+ }
+ $widget selection set $curline
+ $widget see $curline
+ browse [selection_get]
+}
+
+# select all items
+proc allitems {widget} {
+ $widget selection set 0 end
+}
+
+# bring up the find/search window which then does its own thing
+proc finditem {} {
+ # create search window if need be
+ if {[winfo exists .find] == 0} {
+ create_find
+ }
+ focus .find.str.e
+}
+
+# selection handler for PRIMARY requests
+#
+# assume the string is in writebib_str, return the amount requested in
+# the selection request.
+proc selection_handler {offs maxb} {
+ global writebib_str debug
+
+ if {$debug} {
+ puts "selection_hander invoked: $offs $maxb"
+ }
+ set s [string range $writebib_str $offs [expr $offs+$maxb-1]]
+ #puts "s: $s"
+ return $s
+}
+
+proc selection_lost {} {
+ #puts "selection lost"
+}
+
+
+proc copyitem_to_paste {} {
+ # format the item into a string
+ set cl [selection_get]
+ writebib2str $cl
+ # put the string to the PRIMARY selection
+ # grab the PRIMARY selection
+ selection own -command selection_lost -selection PRIMARY .
+ # create a handler for PRIMARY selection requests
+ selection handle -selection PRIMARY -type STRING . selection_handler
+}
+
+# paste the current paste buffer into the bib
+proc pasteitem {} {
+ global bibchanged
+
+ # get the paste buffer
+ set s [selection get -selection PRIMARY]
+
+ # parse it
+ if {[catch {set dup [bibparse_s $s]}] != 0} {
+ tk_dialog .d {Error} "Syntax error with pasted data\nPerhaps not BibTeX data?\nIgnoring it." {} -1 OK
+ } else {
+ # put it in the bib
+ set REFLIST_update 0
+ update_citelistbox
+ puts "$dup duplicates loaded"
+
+ incr bibchanged
+ }
+}
+
+proc not_implemented {func} {
+ tk_dialog .d {Unimplemented} "Feature $func is not yet implmented" {} -1 OK
+}
+
+# prompt for a new cite key
+proc getnewcitekey {} {
+ global citelist newcitekey
+ set answer 1; # tkdialog returns 1 for "Retry"
+
+ # popup a box and get the new cite key
+ toplevel .newcitekey
+ label .newcitekey.l -text "New cite key:"
+ entry .newcitekey.e
+ pack .newcitekey.l .newcitekey.e -side left
+
+ # grab focus
+ focus .newcitekey.e
+
+ # wait for <Return> at end of line
+ bind .newcitekey <Return> {set newcitekey [.newcitekey.e get]}
+
+ while {$answer } {
+ tkwait variable newcitekey
+ # check if it exists, if so: browse it and give a warning
+ if {[lsearch $citelist $newcitekey] < 0} {
+ break
+ } else {
+ testoutput 1 "citekey exists"
+ set answer [tk_dialog .d {Warning} \
+ "cite key already exists" {} 1 "Abort" "Retry" "Browse"]
+ testoutput 3 "tkdialog returns $answer"
+ if {$answer == 0} {set newcitekey ""}
+ if {$answer == 2} {browse $newcitekey; set newcitekey ""; break}
+ }
+ }
+ # clean up
+ destroy .newcitekey
+
+ return $newcitekey
+}
+
+# put into a message window, so we can compare two entries or
+# copy and paste stuff to a different entry, in the long run the possibility
+# to have two browse windows might be better
+proc displayitem {} {
+
+ global REFLIST citelist
+
+ # format entry for display
+ set citekey [selection_get]
+ append itemstring "$REFLIST($citekey,reftype): $citekey\n"
+ foreach i [array names REFLIST $citekey,*] {
+ if {$REFLIST($i) != ""} {
+ set j [string first "," $i]
+ incr j
+ append itemstring "[string range $i $j end] = $REFLIST($i)\n"
+ }
+ }
+ # set up a window
+ toplevel .displayitem
+ frame .displayitem.f
+ text .displayitem.f.t -width 80 -height 30 -wrap word \
+ -yscrollcommand ".displayitem.f.scroll set"
+ scrollbar .displayitem.f.scroll -command ".displayitem.f.t yview"
+ button .displayitem.b -text "OK" -command "destroy .displayitem"
+ pack .displayitem.f.t -side left -fill x -expand 1
+ pack .displayitem.f.scroll -side right -fill y -expand 1
+ pack .displayitem.f
+ pack .displayitem.b -side bottom -anchor s
+
+ bind .displayitem q {destroy .displayitem}
+ bind .displayitem <Return> {destroy .displayitem}
+ wm title .displayitem "Show item"
+ # insert itemtext
+
+ .displayitem.f.t configure -state normal
+ .displayitem.f.t delete 0.0 end
+ .displayitem.f.t insert end $itemstring
+ .displayitem.f.t configure -state disabled
+
+}
+
+# for diagnostics, list current fields to stdout (bound to key 's')
+proc showitem {} {
+ global REFLIST citelist
+
+ puts ""
+ set oldcitekey [selection_get]
+ foreach i [array names REFLIST $oldcitekey,*] {
+ if {$REFLIST($i) != ""} {
+ puts stdout "($i) = $REFLIST($i)"
+ }
+ }
+}
+
+proc sortitems {} {
+ global citelist
+
+ set citelist [lsort $citelist]
+
+ update_citelistbox
+}
+
+# 18/5/2000 John Fulton <John.Fulton@iname.com>
+proc printitem {} {
+# memory of last print command entered
+ global global_print_cmd
+
+
+ # local print command
+ set printcmd ""
+
+ # popup a box and get a different print command
+ toplevel .printcmd
+ label .printcmd.l -text "Print command:"
+ entry .printcmd.e -textvariable global_print_cmd
+
+ button .printcmd.print -text "Print" -command {
+ # get the item to print
+ set s [selection get -selection PRIMARY]
+ puts $s
+
+ # print the entry
+ writebib $s $global_print_cmd
+
+ # clean up
+ destroy .printcmd
+ }
+ button .printcmd.cancel -text "Cancel" -command {
+ # clean up
+ destroy .printcmd
+ }
+ pack .printcmd.l -side left
+ pack .printcmd.e -side left
+ pack .printcmd.print -ipadx 2 -side left
+ pack .printcmd.cancel -side left
+
+ # grab focus
+ set oldFocus [focus]
+ focus .printcmd.e
+
+ # wait for <Return> at end of line
+ tkwait window .printcmd
+ focus $oldFocus
+}
+
+
+#---------- Help menu -------------------
+proc abouttkbibtex {} {
+ global release
+ toplevel .about
+
+ set aboutstr "tkbibtex
+
+ A portable browser/editor for BibTeX format bibliographies.
+
+ by Peter Corke 1/97 (pic@cat.csiro.au)
+ major modifications by G. Milde (g.milde@physik.tu-dresden.de)
+ Release $release"
+ message .about.m -width 40c -text $aboutstr
+
+ button .about.www -text "Goto home page" -command {
+ exec netscape -remote openURL(http://www.cat.csiro.au/dmt/programs/autom/pic/tkbibtex.html)
+ }
+
+ button .about.b -text "OK" -command "destroy .about"
+ pack .about.m .about.www .about.b
+ wm title .about "About tkbibtex"
+}
+
+proc briefhelp {topic} {
+ global usage
+
+ set helptopics {Usage Keys Menus Browse Find}
+
+ set helpstr(Usage) $usage
+
+ set helpstr(Keys) \
+"Key bindings in main window:
+
+ Selection:
+ <Mouseclick> select entry
+ <Shift-Mouseclick> select a block of entries
+ <Crtl-Mouseclick> select multiple entries
+ <Ctrl-A> Select all Items
+
+ On the selected entry:
+ <Enter> Browse entry (show in browse window for editing)
+ <DoubleMouseclick> Browse entry
+ <Up> Browse next entry
+ <Down> Browse previous entry
+
+ u Duplicate entry (Edit|Duplicate-entry)
+ s Show entry (no editing)
+ c Push citation to LyX
+ <Del> Delete entry (Edit|Delete)
+ ^C Copy item to paste buffer (Edit|Copy)
+ ^V Paste from buffer (Edit|Paste)
+
+ Misc.:
+ f Find entry (Edit|Find)
+ n Create new bib entry (Edit|New-entry)
+ q Quit
+
+Keybindings in Browse window:
+
+ <Tab> or <Down> Next field
+ <Enter> Next field (in one-line fields)
+ <Shift Tab> or <Up> Previous field
+ <Alt> + Underlined invoces Menus and Buttons"
+
+
+ set helpstr(Menus) "Tkbibtex Menus
+
+File menu:
+ Open Open a file via browser window
+ Merge Merge a file via browser window (records with same
+ Citekey will overwrite those already loaded)
+ SaveAs... Save data to a different file
+ Save Save data
+ Save Selected Save selected entries
+ Close Close the file (save if needed)
+ Exit Exit program (save if needed)
+
+ for Close and Exit a prompt box will be issued if the bibliography
+ has been modified but not yet saved. When the file is written the
+ previous version is saved with a unique appended number.
+
+Edit menu:
+ New entry Create a new BibTeX entry
+ Duplicate entry Duplicate the current selection but assign new citekey
+ Crossref entry Create a new citation with cross reference to the current selection
+ Find entry Invoke the search window
+ Delete entry Delete the selected entries from the database
+ Copy to buffer Copy selected entries to PRIMARY cut buffer, can be
+ pasted into other applications.
+ Insert to LyX Push citation to Lyx
+ Show entry Show entry in a message window (no editing)
+ Sort Sort keys alphabetically
+ Print Print bib items"
+
+ set helpstr(Find) "Search/find window:
+
+ * Find all entries containing the searchstring in specified field
+ * Seachstring is a regular expression: .*?()[]\ have special meanings
+ * Either start year or end year or both may be specified.
+ * The entries found are displayed in a list which can be browsed by the
+ same key bindings as in the main window:
+
+ Selection:
+ <Mouseclick> select entry
+ <Shift-Mouseclick> select a block of entries
+ <Crtl-Mouseclick> select multiple entries
+ <Ctrl-A> Select all Items
+
+ On the selected entry:
+ <Enter> Browse entry (show in browse window for editing)
+ <Double-Mouseclick> Browse entry
+ <Up> Browse next entry
+ <Down> Browse previous entry"
+
+
+ set helpstr(Browse) "Browse box:
+
+* The browse box shows all fields for the specified entry,
+ allowing for editing
+
+ ! BibTeX distinguishes between
+ - normal fieldtext (enclosed in brackets or double quotes),
+ - numbers (may be enclosed or not) and
+ - strings (words beginning with a character, not enclosed).
+
+ -> Normal text entries will become enclosed in brackets.
+ -> If an entry shall be written to the file as is, precede it with
+ a hash (e.g. month strings -> #jan - #dec).
+
+* The reftype button brings up a menu of reference types to choose from
+
+* Black lines seperate the three different types of field BibTeX knows
+ about:
+ Required fields (have to be present to get a well formed citation)
+ Optional fields (not necessary but show up in the citation if present)
+ Additional fields (ignored by the standard BibTeX styles
+ but may contain usefull information)
+
+* Some fields are foldable multiple line entries that unfold if the label
+ button is clicked on.
+
+* Right clicking in an entry box brings up either:
+ * a menu of standard monthnames (if a month entry)
+ * jump to the citation that is cross-referenced (if a crossref entry)
+ * a menu of string items (if there are any defined) which will
+ be inserted.
+
+* Keybindings:
+ <Tab> or <Down> Next field
+ <Enter> Next field (in one-line fields)
+ <Shift Tab> or <Up> Previous field
+ <Alt> + Underlined invoces Buttons"
+
+
+ # set up the help window
+ # (show help in a text widget, so we can incorporate hypertext tags later)
+ if {![winfo exists .briefhelp]} {
+ toplevel .briefhelp
+
+ frame .briefhelp.m
+ label .briefhelp.m.l -text "Topics:"
+ pack .briefhelp.m
+ pack .briefhelp.m.l -side left
+ foreach top $helptopics {
+ button .briefhelp.m.[string tolower $top] -text $top -underline 0 \
+ -command "briefhelp $top"
+ pack .briefhelp.m.[string tolower $top] -side left
+
+ bind .briefhelp <Alt-Key-[string index [string tolower $top] 0]> \
+ "briefhelp $top; break"
+ }
+ #.briefhelp configure -menu .briefhelp.m does not work as desired
+
+
+ frame .briefhelp.f
+ text .briefhelp.f.t -width 80 -height 20 \
+ -yscrollcommand ".briefhelp.f.scroll set"
+ scrollbar .briefhelp.f.scroll -command ".briefhelp.f.t yview"
+ button .briefhelp.b -text "OK" -command "destroy .briefhelp"
+ pack .briefhelp.f.t -side left -fill x -expand 1
+ pack .briefhelp.f.scroll -side right -fill y -expand 1
+ pack .briefhelp.f
+ pack .briefhelp.b -side bottom -anchor s
+
+ bind .briefhelp q {destroy .briefhelp}
+ bind .briefhelp <Escape> {destroy .briefhelp}
+ wm title .briefhelp "Tkbibtex Help"
+ } else {
+ foreach top $helptopics {
+ .briefhelp.m.[string tolower $top] configure -state normal
+ }
+ }
+ # make the topics button active
+ .briefhelp.m.[string tolower $topic] configure -state active
+
+ # insert the topic
+
+ .briefhelp.f.t configure -state normal
+ .briefhelp.f.t delete 0.0 end
+ .briefhelp.f.t insert end $helpstr($topic)
+ .briefhelp.f.t configure -state disabled
+
+}
+
+# handle changes to iconify/deiconify state, make all windows adopt the same
+# state.
+proc wm_statechange {w} {
+ global window_state
+
+ # check if window state has changed
+ set toplevel [winfo toplevel $w]
+ if {[wm state $toplevel] != $window_state} {
+ #puts "window state changed $window_state"
+ set window_state [wm state .]
+ if {[wm state $toplevel] == "normal"} {
+ # unminimize all windows
+ wm deiconify .
+ if {[winfo exists .find]} {
+ wm deiconify .find
+ }
+ if {[winfo exists .browse]} {
+ wm deiconify .browse
+ }
+ } elseif {[wm state $toplevel] == "iconic"} {
+ # minimize all windows
+ wm iconify .
+ if {[winfo exists .find]} {
+ wm iconify .find
+ }
+ if {[winfo exists .browse]} {
+ wm iconify .browse
+ }
+ }
+ }
+}
+#---------- create the main window ------------------
+proc create_main {} {
+ global alltypes refs_height refs_width
+
+
+# # create the menu bar
+ menu .mbar -tearoff 0
+ .mbar add cascade -label "File" -menu .mbar.file -underline 0
+ .mbar add cascade -label "Edit" -menu .mbar.edit -underline 0
+ .mbar add cascade -label "Help" -menu .mbar.help -underline 0
+
+# declare the menu to the main window
+ . configure -menu .mbar
+
+ # create the File menu
+ menu .mbar.file
+# .mbar.file add command -label "New" -underline 0 -command closebib
+# this might beocme usefull if we can open multiple files...
+ .mbar.file add command -label "Open" -underline 0 \
+ -accelerator F3 -command openbib
+ .mbar.file add command -label "Merge" -underline 0 -command mergebib
+ .mbar.file add command -label "SaveAs" -underline 4 \
+ -accelerator Shift-F2 -command saveasbib
+ .mbar.file add command -label "Save" -underline 0 \
+ -accelerator "^S / F2" -command savebib
+ .mbar.file add command -label "Save Selected" -underline 7 \
+ -command {save_selected}
+ .mbar.file add command -label "Print Selected ..." -underline 0 \
+ -accelerator P -command printitem
+ .mbar.file add command -label "Close" -underline 0 \
+ -accelerator Shift-F3 -command closebib
+ .mbar.file add command -label "Exit" -underline 0 \
+ -accelerator ^Q -command quit
+
+ # create the edit menu
+ menu .mbar.edit
+ .mbar.edit add command -label "New entry" -underline 0 \
+ -accelerator N -command {edit_item new}
+ .mbar.edit add command -label "Duplicate entry" -underline 1 \
+ -accelerator U -command {edit_item duplicate}
+ .mbar.edit add command -label "Cross-reference entry" \
+ -accelerator X -command {edit_item crossref}
+ .mbar.edit add command -label "Find entry ..." -underline 0 \
+ -accelerator F -command finditem
+ .mbar.edit add command -label "Rename entry" -underline 0 \
+ -accelerator R -command {edit_item rename}
+ .mbar.edit add command -label "Delete entry" -underline 0 \
+ -accelerator <Del> -command {edit_item delete}
+ .mbar.edit add command -label "Push to LyX" -underline 0 \
+ -accelerator c -command pushitem
+ .mbar.edit add command -label "Copy to buffer" -underline 0 \
+ -accelerator ^C -command copyitem_to_paste
+ .mbar.edit add command -label "Paste buffer" -underline 0 \
+ -accelerator ^V -command pasteitem
+ # for diagnostics, list current fields
+ .mbar.edit add command -label "Show entry" -underline 0 \
+ -accelerator S -command displayitem
+ .mbar.edit add command -label "Sort" -underline 1 -command sortitems
+
+ # create the help menu
+ menu .mbar.help
+ .mbar.help add command -label "Brief help" -underline 0 \
+ -accelerator <F1> -command {briefhelp Keys}
+ .mbar.help add command -label "About tkbibtex" -underline 0 \
+ -command abouttkbibtex
+
+ menubutton .new -relief raised -text "New" -menu .new.menu
+ menu .mbar.edit.new
+ foreach i $alltypes {
+ .mbar.edit.new add command -label $i -command "new_item $i"
+ }
+
+ # now the message window
+ message .m -relief groove -width 30c -justify left -anchor w
+ pack .m -fill x -expand 1
+
+ # then the scrolling list of citations
+ frame .refs
+ listbox .refs.list -height $refs_height -width $refs_width\
+ -yscrollcommand ".refs.scroll set" -selectmode extended
+ scrollbar .refs.scroll -command ".refs.list yview"
+
+ pack .refs.list -side left -fill x -fill both -expand true
+ pack .refs.scroll -side right -fill y
+ pack .refs -side bottom -expand true -fill both
+
+ # double click on the cite key to display it in browse box
+ bind .refs.list <Double-Button-1> {browse [selection_get -first] -focus}
+ bind . <Return> {browse [selection_get -first] -focus}
+ bind . <Down> {browseitem next .refs.list}
+ bind . <Up> {browseitem previous .refs.list}
+
+ # some helpful keyboard bindings
+ bind Button <Key-Return> "tkButtonInvoke %W"; # Enter invokes Buttons
+ bind . c {pushitem}
+ bind . u {edit_item duplicate}
+ bind . f {finditem}
+ bind . <Alt-f> { }; # dummy entry to enable Menu shortcut
+ bind . n {edit_item new}
+ bind . p {printitem}
+ bind . <Control-q> {quit}
+ bind . q {quit}
+ bind . r {edit_item rename}
+ bind . s {displayitem}
+ bind . <Control-c> copyitem_to_paste
+# bind . <Control-Key-Insert> copyitem_to_paste
+# this binding does prevent copyitem_to_paste from working! (Why?)
+ bind . <Control-v> pasteitem
+# bind . <Shift-Key-Insert> pasteitem
+# this binding does prevent pasteitem from working! (Why?)
+ bind . <Control-a> {allitems .refs.list}
+ bind . <Delete> {edit_item delete}
+ bind . <Unmap> {wm_statechange %W}
+ bind . <Map> {wm_statechange %W}
+ wm protocol . WM_DELETE_WINDOW quit
+ wm protocol . WM_SAVE_YOURSELF quit
+}
+
+# show one line status messages in the main window
+proc showmsg {m} {
+ global interactive_mode
+
+ if {$interactive_mode} {
+ .m config -text $m
+ update idletasks
+ }
+}
+
+#---------------------- LyX support -----------------------
+
+# Interface to Lyx based on development/LyXserver/sampleclient.tcl
+# =========================================================================
+# File: sampleclient.tcl, chb, Sun 05.11.1995 (19:24)
+# sampleclient.tcl,v 1.1.1.1 1996/08/19 14:39:38 larsbj Exp
+# This file contains examples for communicating to LyX via the
+# LyXserver interface. It contains a panel of shortcuts to
+# demonstrate how users can define their own macros. It also shows
+# how new commands can be built into LyX using the 'notify' mechanism.
+# =========================================================================
+
+
+# --- 1. check cmdargs (pipename) -----------------------------------------
+
+set LyXChan -1
+
+proc LyX_connect {} {
+ global LyXpipe LyXChan
+
+ set inpipe $LyXpipe.in
+
+ if { [file exists $inpipe] } {
+ if { "[file type $inpipe]" != "fifo" } {
+ tk_dialog .d {LyX connection} "LyXpipe <$inpipe> is not a pipe!" {} -1 OK
+ }
+ puts "Connecting to LyX via $LyXpipe.in"
+ set LyXChan [open $inpipe {WRONLY NONBLOCK}]
+puts "<LyxChan $LyXChan>"
+ } else {
+ tk_dialog .d {LyX connection} "No LyXpipe ($LyXpipe.*) exists\nCheck your .LyXrc file" {} -1 OK
+ }
+
+}
+
+# ---
+# Format for communication:
+#
+# client->LyX: "LYXCMD:<client>:<command>:<argument>" >$inpipe
+# LyX->client (answer): "INFO:<client>:<command>:<data>" <$outpipe
+# LyX->client (notify): "NOTIFY:<key-sequence>" <$outpipe
+# (notifies are asynchroneous and are handled by 'outputhandler'
+# above)
+# ---
+
+proc LyX_insertcite {cite} {
+ global LyXChan
+
+ # open the pipe each time, in case LyX crashes...
+ LyX_connect
+ puts "sending citation $cite to LyX"
+ puts $LyXChan "LYXCMD:sampleclient:citation-insert:$cite"
+ close $LyXChan
+}
+
+#---------------------- Auxilliary functions -----------------------------
+
+# Put a text on stdout, if the global var debug is >= debug_level
+proc testoutput {debug_level text} {
+ global debug
+ if {$debug >= $debug_level} {puts stdout $text}
+}
+
+proc show_usage {} {
+ global usage
+ puts stdout $usage
+ exit
+}
+
+
+#------------------------------ MAIN BODY ----------------------------
+
+#warn about wrong version
+if {[info tclversion] < 8} {
+ puts stdout "tkbibtex needs Tcl/Tk version 8.0 or later"
+}
+
+# handle command line switches
+while {[llength $argv] > 0} {
+ if {$debug} {
+ puts [lindex $argv 0]
+ }
+ switch -regexp -- [lindex $argv 0] {
+ ^-debug { set debug [lindex $argv 1]; \
+ set argv [lrange $argv 2 end] ; \
+ }
+ ^-ys { set arg_ys [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-ye { set arg_ye [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-last { set t [clock seconds]; \
+ set arg_ye [clock format $t -format %Y]; \
+ set arg_ys [expr $arg_ye-[lindex $argv 1]]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-type { set arg_reftype [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-field { set arg_field [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-search { set arg_search [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ incr command_line_mode
+ }
+ ^-exact -
+ ^-case { set arg_ignorecase 0; \
+ set argv [lrange $argv 1 end]; \
+ incr command_line_mode
+ }
+ ^-count { set arg_count 1; \
+ set argv [lrange $argv 1 end]; \
+ incr command_line_mode
+ }
+ ^-l -
+ ^-list { set arg_list 1; \
+ set argv [lrange $argv 1 end]; \
+ incr command_line_mode
+ }
+
+ ^-lyx { set LyXpipe [lindex $argv 1]; \
+ set argv [lrange $argv 2 end]; \
+ }
+ ^-help -
+ ^-.* { show_usage}
+ default {break}
+ }
+}
+
+
+if {$command_line_mode} {
+ # COMMAND LINE MODE, NO DISPLAY
+ set interactive_mode false
+
+ # read string file if it exists
+ set strfname [find_on_path $strfile]
+ if {$strfname != {}} {
+ bibparse_f $strfname
+ }
+
+# load the specified bibtex files if they exist
+ foreach f $argv {
+ set fp [find_on_path $f]
+ if {$fp != {}} {
+ bibparse_f $fp
+ }
+ }
+
+ set found [do_search $arg_search $arg_reftype $arg_field $arg_ys \
+ $arg_ye $arg_ignorecase]
+ if {$arg_count} {
+ puts stdout [llength $found]
+ } else {
+ puts stdout [writebib2str $found]
+ }
+ exit 0
+} else {
+ # INTERACTIVE MODE
+
+ set interactive_mode true
+ # create the main window
+ create_main
+
+ update idletasks
+
+ # read string file if it exists
+ set strfname [find_on_path $strfile]
+ if {$strfname != {}} {
+ bibparse $strfname
+ }
+
+ # load the specified bibtex files if they exist
+ foreach f $argv {
+ set fname $f
+ set fp [find_on_path $f]
+ if {$fp != {}} {
+ bibparse_f $fp
+ }
+ update_citelistbox
+ }
+
+ # unset global filename if more than one input file
+ if {[llength $argv] > 1} {
+ set fname "<noname>"
+ }
+
+ wm title . $fname
+
+ showmsg ""
+}
diff --git a/biblio/bibtex/utils/tkbibtex/tkbibtex.1 b/biblio/bibtex/utils/tkbibtex/tkbibtex.1
new file mode 100644
index 0000000000..f1c53bbefd
--- /dev/null
+++ b/biblio/bibtex/utils/tkbibtex/tkbibtex.1
@@ -0,0 +1,151 @@
+.TH TKBIBTEX 1 "17 March 2000"
+.UC 4
+.SH NAME
+tkbibtex \- portable BibTeX editor and browser
+.SH SYNOPSIS
+.br
+.I tkbibtex
+[bibfile]
+.SH DESCRIPTION
+.I tkbibtex
+is a portable editor and browser for BibTeX format file. It is written in
+Tcl/Tk and runs under Unix or Windows based wish interpreters.
+It is inspired by, or modeled on, an old OpenWindows application called bibcard.
+It also has a non-GUI command line mode which is useful for generating
+publication lists.
+.P
+.I tkbibtex
+supports 3 different windows. The first is a scrolling list of cite keys
+which has a toolbar with File, Edit and Help menus.
+The bibtex file can be given on the command line (it will be searched for along
+the path given by the BIBPATH envariable), or opened via the File/Open
+command.
+The current bib file name is shown in the title bar, as well as the modification
+status.
+Double clicking on an entry brings up the selected citation in the
+browser window. The up and down arrow keys can also be used to move up and down the citation list.
+.P
+The browser window shows all the fields associated with the selected entry
+and its title bar shows the citation key.
+The fields shown depend on the citation type which can be changed by the
+reference type menu button.
+Required fields have a bold label while optional fields have an italic label.
+String values are preceeded by a hash.
+.P
+The search window provides a wide variety of searching modes. The search
+can cover all fields or be limited to a specific field.
+The search can be further
+constrained by reference type and year range by specifying either or both
+a starting and ending (inclusive) year.
+A list of matching cite keys is listed in this window, and once again
+double clicking or up/down arrow keys can be used to browse this list using
+the browser window.
+
+.SH Features
+The following are features I think are particularly cute.
+.P
+* In the browser window you can right-click in a field and it will bring up
+a menu of string constants. I normally define strings for journal names.
+The name of the bibtex string file that is used to build the menu can
+be set in the
+.I .tkbibtexrc
+file (eg. set strfile strings.bib). It is searched for along the BIBPATH.
+.P
+* The browser window has an `Annote' button which expands the annotation
+window. This scrolling text entry box allows for an arbitrary amount of
+freeform text to be stored
+in the bibtex file in the ANNOTE field. This is useful for storing commentary
+or reviews of papers read. This material does not appear in the bibliography
+with any of the normal reference styles.
+.P
+* Multiple selection is enabled in the main and search window citation lists.
+.P
+* Edit/Copy copies the actual
+bibtex source of selected citations to the clipboard.
+.P
+* Edit/Paste pastes
+bibtex source into the bibliography.
+.P
+* Single-key shortcuts exist for most menu functions, see Help for details.
+.P
+* Every time tkbibtex writes an output file it copies the existing bib file to
+a unique name. These build up over time and should be periodically culled.
+
+.SH NON-GUI MODE
+tkbibtex
+also has a command line mode
+.P
+.I tkbibtex
+[switches] [bibfile]
+.P
+which can be used to select entries from the
+.I bibfile
+according to various filtering options.
+.TP 5
+.I \-type string
+apply search only to refernces of the specified type, ie.
+.I article
+or
+.I inproceedings.
+This can also be a regexp, eg.
+.I article!inproceedings
+.TP 5
+.I \-field string
+apply search only to the specified field.
+.TP 5
+.I \-search string
+filter out all citations that match this string
+.TP 5
+.I \-ys year
+filter out articles with year greater than or equal to that specified (default 0)
+.TP 5
+.I \-ye year
+filter out articles with year less than or equal to that specified (default 9999)
+.TP 5
+.I \-last nyears
+filter out articles whose year falls within the last
+.I nyears
+.TP 5
+.I \-exact
+make all searches case sensitive
+.TP 5
+.I \-count
+instead of outputting BibTeX entries to stdout, just count the matching
+references.
+.TP 5
+.I \-list
+instead of outputting BibTeX entries to stdout, provide a one
+line summary of the form "key (type): title".
+
+.P
+For example, to count the number of journal papers jointly authored
+with Foo before 1997, we could use the command line
+.P
+.NF
+% tkbibtex -count -ye 1997 -field author -search Foo publist.bib
+.FI
+
+
+.SH FILES
+At startup a file called
+.I .tkbibtexrc
+in the user's home directory is sourced if it exists.
+
+.SH ENVIRONMENT
+.I BIBPATH
+is a colon separated list of directories which will be searched for named
+bib files.
+
+.SH SEE\ ALSO
+bibtex, latex, tcl, tk
+
+.SH BUGS
+The parser for the bibtex file format is simple minded and expects each
+record to occupy a single line, ending with a "}" or "},". The last line
+of each group must be a close brace on a line by itself.
+This means that old, existing, bib files may need some manual editing
+before they will work with tkbibtex.
+.SH AUTHOR
+P.I. Corke
+.br
+pic@cat.csiro.au
diff --git a/biblio/bibtex/utils/xbibfile/INSTALL b/biblio/bibtex/utils/xbibfile/INSTALL
new file mode 100644
index 0000000000..686510de39
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/INSTALL
@@ -0,0 +1,11 @@
+Oh, maybe a few words about installation are in order.
+
+To compile and link the 'xbibfile' executable, you will need a C compiler and
+libraries, together with a GTK version 2.0 or greater graphics library.
+Basically one executable will be generated that can be stored where ever you
+desire. Because there are a number of sources files involved, a 'Makefile' is
+provided. Thus on a Unix or Linux system:
+ make
+ ./xbibfile &
+and you are away.
+
diff --git a/biblio/bibtex/utils/xbibfile/Makefile b/biblio/bibtex/utils/xbibfile/Makefile
new file mode 100644
index 0000000000..7c459e7cc3
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/Makefile
@@ -0,0 +1,106 @@
+CC = gcc
+OBJ = xbibfile.o cleanup.o selecting.o filing.o linking.o error.o\
+ article.o book.o booklet.o conference.o inbook.o incol.o \
+ inproc.o manual.o masters.o misc.o phd.o proceedings.o \
+ techreport.o unpublished.o \
+ probes.o listall.o listword.o listauthors.o listwriter.o listyears.o \
+ listpubyear.o listref.o listuplinks.o
+
+xbibfile: $(OBJ)
+ $(CC) $(OBJ) -o xbibfile `pkg-config --libs gtk+-2.0`
+
+xbibfile.o: xbibfile.c xbibfile.h
+ $(CC) `pkg-config --cflags gtk+-2.0` -c xbibfile.c -o xbibfile.o
+
+filing.o: filing.c
+ $(CC) -c filing.c -o filing.o `pkg-config --cflags gtk+-2.0`
+
+selecting.o: selecting.c
+ $(CC) -c selecting.c -o selecting.o `pkg-config --cflags gtk+-2.0`
+
+cleanup.o: cleanup.c
+ $(CC) -c cleanup.c -o cleanup.o `pkg-config --cflags gtk+-2.0`
+
+article.o: article.c xbibfile.h
+ $(CC) -c article.c -o article.o `pkg-config --cflags gtk+-2.0`
+
+book.o: book.c xbibfile.h
+ $(CC) -c book.c -o book.o `pkg-config --cflags gtk+-2.0`
+
+inproc.o: inproc.c xbibfile.h
+ $(CC) -c inproc.c -o inproc.o `pkg-config --cflags gtk+-2.0`
+
+phd.o: phd.c xbibfile.h
+ $(CC) -c phd.c -o phd.o `pkg-config --cflags gtk+-2.0`
+
+masters.o: masters.c xbibfile.h
+ $(CC) -c masters.c -o masters.o `pkg-config --cflags gtk+-2.0`
+
+incol.o: incol.c xbibfile.h
+ $(CC) -c incol.c -o incol.o `pkg-config --cflags gtk+-2.0`
+
+booklet.o: booklet.c xbibfile.h
+ $(CC) -c booklet.c -o booklet.o `pkg-config --cflags gtk+-2.0`
+
+conference.o: conference.c xbibfile.h
+ $(CC) -c conference.c -o conference.o `pkg-config --cflags gtk+-2.0`
+
+inbook.o: inbook.c xbibfile.h
+ $(CC) -c inbook.c -o inbook.o `pkg-config --cflags gtk+-2.0`
+
+unpublished.o: unpublished.c xbibfile.h
+ $(CC) -c unpublished.c -o unpublished.o `pkg-config --cflags gtk+-2.0`
+
+manual.o: manual.c xbibfile.h
+ $(CC) -c manual.c -o manual.o `pkg-config --cflags gtk+-2.0`
+
+misc.o: misc.c xbibfile.h
+ $(CC) -c misc.c -o misc.o `pkg-config --cflags gtk+-2.0`
+
+proceedings.o: proceedings.c xbibfile.h
+ $(CC) -c proceedings.c -o proceedings.o `pkg-config --cflags gtk+-2.0`
+
+techreport.o: techreport.c xbibfile.h
+ $(CC) -c techreport.c -o techreport.o `pkg-config --cflags gtk+-2.0`
+
+linking.o: linking.c xbibfile.h
+ $(CC) -c linking.c -o linking.o `pkg-config --cflags gtk+-2.0`
+
+error.o: error.c
+ $(CC) -c error.c -o error.o `pkg-config --cflags gtk+-2.0`
+
+probes.o: probes.c
+ $(CC) -c probes.c -o probes.o `pkg-config --cflags gtk+-2.0`
+
+listall.o: listall.c
+ $(CC) -c listall.c -o listall.o `pkg-config --cflags gtk+-2.0`
+
+listword.o: listword.c
+ $(CC) -c listword.c -o listword.o `pkg-config --cflags gtk+-2.0`
+
+listauthors.o: listauthors.c
+ $(CC) -c listauthors.c -o listauthors.o `pkg-config --cflags gtk+-2.0`
+
+listwriter.o: listwriter.c
+ $(CC) -c listwriter.c -o listwriter.o `pkg-config --cflags gtk+-2.0`
+
+listyears.o: listyears.c
+ $(CC) -c listyears.c -o listyears.o `pkg-config --cflags gtk+-2.0`
+
+listpubyear.o: listpubyear.c
+ $(CC) -c listpubyear.c -o listpubyear.o `pkg-config --cflags gtk+-2.0`
+
+listref.o: listref.c
+ $(CC) -c listref.c -o listref.o `pkg-config --cflags gtk+-2.0`
+
+listuplinks.o: listuplinks.c
+ $(CC) -c listuplinks.c -o listuplinks.o `pkg-config --cflags gtk+-2.0`
+
+
+clean:
+ rm -f *.o xbibfile
+
+
+
+
+
diff --git a/biblio/bibtex/utils/xbibfile/README b/biblio/bibtex/utils/xbibfile/README
new file mode 100644
index 0000000000..42b332c011
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/README
@@ -0,0 +1,69 @@
+Xbibfile is an interactive program to assist in preparing and using your BibTeX
+references.
+
+Xbibfile is designed to work in the X Window environment. It is written in
+standard C (well, GNU GCC) and uses the public domain GTK+ graphics package (see
+URL www.gtk.org). Because of the activity of porting GTK+ to the Windows
+environment, the success in that effort will enable Xbibfile to operate in that
+environment in the future. All development work has been done under Linux.
+
+Xbibfile has been under my development and use for over four years now. It
+arose out of my realisation early in my PhD candidature in the School of
+Information Technology at Murdoch University that I needed software to handle my
+research references. The closes that I could find on CTAN that fulfilled my
+requirements was XbibTeX by Nicolas Kelly and Christian Bischof. But I would
+need to make changes. That I judged to be too difficult and thought writing my
+own would be a fruitful way to go. Initially the windows for creating the
+various reference types was the total of Xbibfile. The addition of windows to
+search for references by author name, publication date, from word used in the
+summary of the reference, etc. were only recently added. When those additions
+were made, the human interface was also revised thanks to suggestions from
+members of the School. May be now the program is fit for wider use.
+
+This package consists, when compiled, of one executable "Xbibfile" and three
+Perl scripts. The main thrust is Xbibfile but the Perl scripts are a useful
+leftovers from an earlier version of the executable. Their function is now
+performed withing Xbibfile. However, if such results are wanted for routing to
+a printer, then the Perl scripts become necessary.
+
+A primitive Makefile is included in this distribution to compile Xbibfile.
+Initial development work was done using Gtk version 1.2.10. In version 0.7 of
+Xbibfile, the conversion to GTK+ 2.0 was undertaken in an attempt use the
+library procedures recommended in the documentation that accompanied that later
+release. A major part of the Xbibfile upgrade was the modification of the
+manner of accessing the GTK library in the Makefile.
+
+At this stage of the development there is no documentation. Yes, I know, that
+is unforgivable. But my interest has been in creating the software to fulfil my
+needs. Hopefully the documentation will follow in future releases of this
+package.
+
+Initial versions of the GTK+ package implemented a subset of the Emacs
+keystrokes when the user entered data. However, the widgets on which they
+operated are now recommended not for use. Thus the editing facilities available
+to assist user data entry are primitive. This is particularly noticed in the
+screen field used for entering your summaries of the referennce. It is these
+summaries that are used in the "word search" provided under Xbibfile. If you
+need to make changes to the BibTeX file after it has be saved under Xbibfile,
+then your favourate text editor must be used.
+
+There are a number of error screens that can appear. When these occur, click
+somewhere in that error window and the window will disappear. Each such error
+window is implemented as a window compose of a button only; to clear the window
+you click the button.
+
+As with most open source software, you use this software at your own risk. This
+software has, however, worked successfully for me. I would appreciate it if you
+could drop me a line indicating if you find this software useful.
+
+This software is released under the conditions of the LaTeX Project Public
+License.
+
+Enjoy.
+
++-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=
+Ross Maloney | email: rmaloney@murdoch.edu.au
+School of Information Technology |
+Murdoch University |
+Perth, W.A., Australia | A graduate student aiming to understand
++-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=
diff --git a/biblio/bibtex/utils/xbibfile/article.c b/biblio/bibtex/utils/xbibfile/article.c
new file mode 100644
index 0000000000..fdcdd2dfb8
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/article.c
@@ -0,0 +1,476 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file contains procedures that handle the BibTeX article style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label10, *data10;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label16, *data16;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+/* input text fields and labels used BibTeX format windows handled in
+ * this file */
+
+
+
+
+/* The procedure to save the article style */
+
+void save_article(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate3[];
+ extern char slate10[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate16[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate23[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 1) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate10, gtk_entry_get_text(GTK_ENTRY(data10)));
+ length[10] = strlen(slate10);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[20] && length[10] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@ARTICLE{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " journal = {%s},\n", slate10);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[16])
+ fprintf(finput, ",\n pages = {%s}", slate16);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate22);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[2] = 0;
+ length[23] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[16] = 0;
+ length[12] = 0;
+ length[22] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the article optional fields for subsequent saving */
+
+void save_artoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate2[];
+ extern char slate12[];
+ extern char slate22[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate16[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
+ length[16] = strlen(slate16);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_artoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[2] = 0;
+ length[23] = 0;
+ length[14] = 0;
+ length[16] = 0;
+ length[12] = 0;
+ length[22] = 0;
+ length[13] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional article style fields on the screen */
+
+void artoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_artoptions();
+ void save_artoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 570);
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Optional article fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14),TINY);
+ label14 = gtk_label_new("Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data16 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
+ label16 = gtk_label_new("Pages:");
+ gtk_widget_set_usize(GTK_WIDGET(label16), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_artoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_artoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic article style on the screen */
+
+void article(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void artoption(GtkWidget *);
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+
+ format = 1; /* indicate processing of an ARTICLE */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Article type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 330);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 8);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data10 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data10), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(data10), 345, -1);
+ label10 = gtk_label_new("Journal:");
+ gtk_widget_set_usize(GTK_WIDGET(label10), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label10, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data10, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(artoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Article fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_article), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Article reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Article entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Article",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 1;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/book.c b/biblio/bibtex/utils/xbibfile/book.c
new file mode 100644
index 0000000000..6fe2358d31
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/book.c
@@ -0,0 +1,522 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of article.c so that it handles the
+ * book BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label6, *data6;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the book style */
+
+void save_book(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate6[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate23[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 2) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!((length[3] || length[7])
+ && length[20] && length[17] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@BOOK{%s,\n", slateX);
+ if (length[3]) fprintf(finput, " author = {%s},\n", slate3);
+ if (length[7]) fprintf(finput, " editor = {%s},\n", slate7);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " publisher = {%s},\n", slate17);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[6])
+ fprintf(finput, ",\n edition = {%s}", slate6);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[6] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[19] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the book optional fields for subsequent saving */
+
+void save_bookoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate6[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate19[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate6, gtk_entry_get_text(GTK_ENTRY(data6)));
+ length[6] = strlen(slate6);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_bookoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[19] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[6] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional book style fields on the screen */
+
+void bookoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_bookoptions();
+ void save_bookoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 635);
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Optional book fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data19 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data6 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data6), SMALL);
+ label6 = gtk_label_new("Edition:");
+ gtk_widget_set_usize(GTK_WIDGET(label6), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_bookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_bookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic book style on the screen */
+
+void book(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void bookoptions();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 2; /* indicate processing of an BOOK */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Book type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 355);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("|| Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data7), 345, -1);
+ label7 = gtk_label_new("|| Editors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data17), 345, -1);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new_with_max_length(SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(bookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Book fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_book), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Book reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Book entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Book",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 2;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/booklet.c b/biblio/bibtex/utils/xbibfile/booklet.c
new file mode 100644
index 0000000000..f7d48b1cd6
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/booklet.c
@@ -0,0 +1,444 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of phd.c so that it handles the
+ * Booklet BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label8, *data8;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Booklet thesis style */
+
+void save_booklet(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate3[];
+ extern char slate2[];
+ extern char slate8[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 3) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ if (!(length[20] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@BOOKLET{%s,\n", slateX);
+ fprintf(finput, " title = {%s}", slate20);
+ if (length[3])
+ fprintf(finput, ",\n author = {%s}", slate3);
+ if (length[8])
+ fprintf(finput, ",\n howpublished = {%s}", slate8);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[24])
+ fprintf(finput, ",\n year = {%s}", slate24);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[8] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Booklet optional fields for subsequent saving */
+
+void save_bookletoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate8[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate22[];
+ extern char slate24[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate8, gtk_entry_get_text(GTK_ENTRY(data8)));
+ length[8] = strlen(slate8);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_bookletoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[1] = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[8] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Booklet style fields on the screen */
+
+void bookletoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_bookletoptions();
+ void save_bookletoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 605);
+ decoration = gtk_frame_new("Optional Booklet fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data8 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data8), SMALL);
+ label8 = gtk_label_new("Howpublished:");
+ gtk_widget_set_usize(GTK_WIDGET(label8), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label8, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data8, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 85, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_bookletoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_bookletoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Booklet style on the screen */
+
+void booklet(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void bookletoptions();
+ void save_booklet();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 3; /* indicate processing of an BOOKLET */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 230);
+ decoration = gtk_frame_new("Booklet type - required fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tags/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(bookletoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Booklet fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_booklet), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Booklet reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Booklet entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Booklet",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+ format = 3;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/cleanup.c b/biblio/bibtex/utils/xbibfile/cleanup.c
new file mode 100644
index 0000000000..645c8f24c5
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/cleanup.c
@@ -0,0 +1,100 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <gtk/gtk.h>
+
+
+/* This file contains those procedures called to perform cleaning operations
+ * during the operation of the XBibFile code */
+
+
+
+/* This procedure is called to close the current window */
+
+void close_window(GtkWidget *widget)
+{
+ GtkWidget *parent;
+
+ parent = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+ gtk_widget_destroy(parent);
+}
+
+
+/* This procedure exits the program */
+
+void byebye(GtkWidget *widget)
+{
+ gtk_main_quit();
+}
+
+
+/* This procedure is called to close the entry being made */
+
+void go_ahead(GtkWidget *widget, GtkWidget *window)
+{
+ extern int format;
+
+ close_window(window);
+ close_window(widget);
+ format = 0;
+}
+
+void cancel(GtkWidget *widget)
+{
+ close_window(widget);
+}
+
+/* A dialogue to confirm cancellation request */
+
+int closure_check(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *key0;
+ GtkWidget *key1;
+ GtkWidget *label;
+ void cancel();
+ void go_ahead();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile security");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Checking request");
+ gtk_widget_set_usize(GTK_WIDGET(window), 232, 100);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+ label = gtk_label_new("Confirm CLOSE request");
+ gtk_box_pack_start(GTK_BOX(totalPane), label, FALSE, FALSE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 5);
+ key1 = gtk_button_new_with_label("Go Ahead");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(go_ahead), widget);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Perform the CLOSE request", NULL);
+ gtk_box_pack_start(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ key0 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(cancel), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Abort/Don't Do this request", NULL);
+ gtk_box_pack_start(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/conference.c b/biblio/bibtex/utils/xbibfile/conference.c
new file mode 100644
index 0000000000..42cb374424
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/conference.c
@@ -0,0 +1,569 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of inproc.c so that it handles the
+ * conference BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label4, *data4;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label15, *data15;
+GtkWidget *label16, *data16;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the conference style */
+
+void save_conference(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate4[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate23[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 4) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate4, gtk_entry_get_text(GTK_ENTRY(data4)));
+ length[4] = strlen(slate4);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[4] && length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@CONFERENCE{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " booktitle = {%s},\n", slate4);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[7])
+ fprintf(finput, ",\n editor = {%s}", slate7);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[16])
+ fprintf(finput, ",\n pages = {%s}", slate16);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[15])
+ fprintf(finput, ",\n organization = {%s}", slate15);
+ if (length[17])
+ fprintf(finput, ",\n publisher = {%s}", slate17);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[7] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[15] = 0;
+ length[16] = 0;
+ length[17] = 0;
+ length[19] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the conference optional fields for subsequent saving */
+
+void save_confoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate15, gtk_entry_get_text(GTK_ENTRY(data15)));
+ length[15] = strlen(slate15);
+ strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
+ length[16] = strlen(slate16);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_confoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[19] = 0;
+ length[17] = 0;
+ length[16] = 0;
+ length[15] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[7] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional conference style fields
+ * on the screen */
+
+void confoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *field9;
+ GtkWidget *field10;
+ GtkWidget *field11;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_confoptions();
+ void save_confoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 730);
+ decoration = gtk_frame_new("Optional Conference fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
+ label7 = gtk_label_new("Editor/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data19 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data16 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
+ label16 = gtk_label_new("Pages:");
+ gtk_widget_set_usize(GTK_WIDGET(label16), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data15 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data15), LARGE);
+ label15 = gtk_label_new("Organization:");
+ gtk_widget_set_usize(GTK_WIDGET(label15), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ field9 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field9), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field9), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);
+
+ field10 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field10), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field10), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field10, FALSE, TRUE, 2);
+
+ field11 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field11), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field11), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field11, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotes:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_confoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_confoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic conference style on the screen */
+
+void conference(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void confoptions();
+ void save_conference();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 4; /* indicate processing of an CONFERENCE */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Conference type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 325);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data4 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data4), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
+ label4 = gtk_label_new("BookTitle:");
+ gtk_widget_set_usize(GTK_WIDGET(label4), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(confoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Conference fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_conference), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Conference reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Conference entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Conference",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 4;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/count.pl b/biblio/bibtex/utils/xbibfile/count.pl
new file mode 100644
index 0000000000..fe64209197
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/count.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+#
+# this script counts the number of references (@) in a file
+#
+# This script is part of the XBibFile software package.
+# Writer: Ross Maloney
+# Date: August 2000
+#
+while ( <> ) {
+ if ( /@/ ) {
+ $count++;
+ }
+}
+print "number of references = $count\n";
diff --git a/biblio/bibtex/utils/xbibfile/default.bib b/biblio/bibtex/utils/xbibfile/default.bib
new file mode 100644
index 0000000000..539f9ae772
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/default.bib
@@ -0,0 +1,99 @@
+
+@ARTICLE{ross,
+ author = {Maloney},
+ title = {my greatest thoughts},
+ journal = {hi hopes},
+ year = {1999},
+ volume = {12},
+ number = {4},
+ pages = {56-90},
+ month = {may},
+ note = {fdertg.},
+ uplink = {ummy},
+ crosslink = {freinds, family},
+ externlink = {summary.txt} }
+
+@ARTICLE{a,
+ author = {b},
+ title = {c},
+ journal = {d},
+ year = {e},
+ volume = {f},
+ number = {g},
+ pages = {h},
+ month = {g},
+ note = {jklo},
+ uplink = {x},
+ crosslink = {y},
+ externlink = {q} }
+
+@ARTICLE{ross2,
+ author = {Maloney, Ross},
+ title = {further thoughts},
+ journal = {hi hopes},
+ year = {2000},
+ volume = {3},
+ number = {4},
+ pages = {12-90},
+ month = {may},
+ note = {defrgth.},
+ uplink = {mummy},
+ crosslink = {daddy, friends},
+ externlink = {summary.txt} }
+
+@ARTICLE{xx,
+ author = {yy},
+ title = {zz},
+ journal = {xx},
+ year = {fg} }
+
+@ARTICLE{df,
+ author = {fg},
+ title = {hj},
+ journal = {fg},
+ year = {fg} }
+
+@ARTICLE{d,
+ author = {f},
+ title = {g},
+ journal = {h},
+ year = {j},
+ volume = {d},
+ number = {f},
+ pages = {g},
+ month = {e},
+ note = {dfg},
+ uplink = {d},
+ crosslink = {f},
+ externlink = {g} }
+
+@ARTICLE{ross,
+ author = {ff},
+ title = {xx},
+ journal = {ghj},
+ year = {1990},
+ uplink = {dfg},
+ crosslink = {zxc bn},
+ externlink = {def nkl} }
+
+@INPROCEEDINGS{adc:2000,
+ author = {me},
+ title = {mine},
+ booktitle = {fgt},
+ year = {2000},
+ pages = {34--67},
+ address = {My Place},
+ organization = {Org One} }
+
+@INPROCEEDINGS{xyz:2000,
+ author = {me and mine},
+ title = {my paper},
+ booktitle = {paapers},
+ year = {2000},
+ series = {dd},
+ pages = {56--90},
+ month = {June},
+ publisher = {dfg},
+ annote = {This is a second silly test of the annotation capacity of the
+InProceedings entry field.
+} }
diff --git a/biblio/bibtex/utils/xbibfile/error.c b/biblio/bibtex/utils/xbibfile/error.c
new file mode 100644
index 0000000000..fec888f1b0
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/error.c
@@ -0,0 +1,72 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <gtk/gtk.h>
+
+extern void close_window(); /* defined in file cleanup.c */
+
+/* This file contains the error handling routines. */
+
+/* The error types are:
+ * 1 entries not saved
+ * 2 last entry not saved
+ * 3 all required fields not supplied
+ * 4 requested function not implemented
+ * 5 this reference has been saved already
+ * 6 I am sorry, but you have already saved this entry
+ * 7 cannot open that file
+ * 8 currently there is no file selected
+ * 9 format in the current BibTeX file selected */
+
+void error(GtkWidget *widget,
+ GtkWidget *type)
+{
+ GtkWidget *window;
+ GtkWidget *button;
+ GtkWidget *label;
+ char bell = '\007'; /* ASCII code for a bell */
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile security");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ button = gtk_button_new();
+ gtk_widget_set_usize(GTK_WIDGET(button), 250, 100);
+ g_signal_connect(GTK_OBJECT(button), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_container_add(GTK_CONTAINER(window), button);
+ switch (GPOINTER_TO_INT(type)) {
+ case 1: label = gtk_label_new("Entries not saved");
+ break;
+ case 2: label = gtk_label_new("Last entry not saved");
+ break;
+ case 3: label = gtk_label_new("All required fields not supplied");
+ break;
+ case 4: label = gtk_label_new("Requested function not implemented");
+ break;
+ case 5: label = gtk_label_new("This reference has been saved already");
+ break;
+ case 6: label = gtk_label_new("I am sorry,\n but you have already saved this entry");
+ break;
+ case 7: label = gtk_label_new("Cannot open that file for appending");
+ break;
+ case 8: label = gtk_label_new("Currently there is no file selected");
+ break;
+ case 9: label = gtk_label_new("Error detected in BibTeX file\n while processing it");
+ break;
+ default: label = gtk_label_new("Impossible error (ERROR)");
+ }
+ gtk_container_add(GTK_CONTAINER(button), label);
+
+ /* put the window on the screen */
+ gtk_widget_show_all(window);
+ g_print("%c", bell);
+}
+
+
+
+
diff --git a/biblio/bibtex/utils/xbibfile/filing.c b/biblio/bibtex/utils/xbibfile/filing.c
new file mode 100644
index 0000000000..5d290667bf
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/filing.c
@@ -0,0 +1,146 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2001
+ * Renamed, reformed, and reworked: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+/* This procedure get the name of the file that will be processed for
+ * cross reference information. */
+
+void ref_file(GtkWidget *widget, GtkFileSelection *ref)
+{
+ extern char slate40[];
+ extern int length[];
+ extern FILE *refFile;
+ extern void error();
+
+ if (refFile) {
+ g_print("The cross-file is currently open, I will shut it\n");
+ fclose(refFile);
+ refFile = 0;
+ }
+ strcpy(slate40, gtk_file_selection_get_filename(GTK_FILE_SELECTION(ref)));
+ length[40] = strlen(slate40);
+ refFile = fopen(slate40, "r");
+ if (!refFile) {
+ error(widget, 7);
+ return;
+ }
+}
+
+/* This procedure is very similar to the procedure new_filename().
+ * However, this procedure is designed to be called when the reference file
+ * is to be searched. It puts the selected filename in to a location
+ * from which other parts of the program can access it, and
+ * opens it, then calls the reference search tools. */
+
+void existing_filename(GtkWidget * widget, GtkFileSelection *new)
+{
+ extern char slate0[];
+ extern int length[];
+ extern FILE *refFile; /* defined in file xbibfile.c */
+ extern void error();
+ extern void explore_tools(); /* contained in explore.c */
+
+ if (refFile) {
+ g_print("A file is currently open, I will shut it\n");
+ fclose(refFile);
+ refFile = 0;
+ }
+ strcpy(slate0, gtk_file_selection_get_filename(GTK_FILE_SELECTION(new)));
+ length[0] = strlen(slate0);
+ refFile = fopen(slate0, "r");
+ if (!refFile) {
+ error(widget, 7);
+ return;
+ }
+ probe_menu(widget);
+}
+
+
+/* This procedure allows the user to select the file for exploring the
+ * reference information already stored in it */
+
+void ref_select(GtkWidget *widget)
+{
+ GtkWidget *crossFile;
+
+ crossFile = gtk_file_selection_new("BibTeX database to review");
+ gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(crossFile));
+
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(crossFile),
+ "penguin.bib");
+ g_signal_connect(GTK_OBJECT(
+ GTK_FILE_SELECTION(crossFile)->ok_button),
+ "clicked", G_CALLBACK(existing_filename), crossFile);
+ g_signal_connect_swapped(GTK_OBJECT(
+ GTK_FILE_SELECTION(crossFile)->cancel_button),
+ "clicked", G_CALLBACK(gtk_widget_destroy),
+ (gpointer) crossFile);
+
+ gtk_widget_show(crossFile);
+}
+
+
+
+/* This procedure puts the selected filename in to a location
+ * from which other parts of the program can access it, and
+ * opens it, then calls the reference creation menu. */
+
+void new_filename(GtkWidget * widget, GtkFileSelection *new)
+{
+ extern char slate0[];
+ extern int length[];
+ extern FILE *finput;
+ extern void error();
+ extern void available(); /* contained in selecting.c */
+
+ if (finput) {
+ g_print("A file is currently open, I will shut it\n");
+ fclose(finput);
+ finput = 0;
+ }
+ strcpy(slate0, gtk_file_selection_get_filename(GTK_FILE_SELECTION(new)));
+ length[0] = strlen(slate0);
+ finput = fopen(slate0, "a");
+ if (!finput) {
+ error(widget, 7);
+ return;
+ }
+ available(widget);
+}
+
+
+/* This procedure allows the user to select the file into which
+ * the references are to be written */
+
+void file_select(GtkWidget *widget)
+{
+ GtkWidget *inputFile;
+
+
+ inputFile = gtk_file_selection_new("BibTeX database to append");
+
+ gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(inputFile));
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(inputFile),
+ "penguin.bib");
+ g_signal_connect(GTK_OBJECT(
+ GTK_FILE_SELECTION(inputFile)->ok_button),
+ "clicked", G_CALLBACK(new_filename), inputFile);
+ g_signal_connect_swapped(GTK_OBJECT(
+ GTK_FILE_SELECTION(inputFile)->cancel_button),
+ "clicked", G_CALLBACK(gtk_widget_destroy),
+ (gpointer) inputFile);
+// g_signal_connect_swapped(GTK_OBJECT(
+// GTK_FILE_SELECTION(inputFile)->ok_button),
+// "clicked", G_CALLBACK(gtk_widget_destroy),
+// (gpointer) inputFile);
+
+ gtk_widget_show(inputFile);
+}
diff --git a/biblio/bibtex/utils/xbibfile/historical.note b/biblio/bibtex/utils/xbibfile/historical.note
new file mode 100644
index 0000000000..5629b778b8
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/historical.note
@@ -0,0 +1,105 @@
+XBibFile grew out of an early need in my research. I needed some
+technique to handle my research references.
+
+The School of Information Technology where I was doing my research, at
+that time was promoting the use of EndNotes for handling for referencing.
+However, EndNotes was a Windows application and not available on Unix, or
+specifically, Linux. Because of my background in Commputer Science, I
+had made a decision early in my research to use Linux as my research
+environment, using LaTeX (and possibly TeX) as my typesetting tools.
+Linux had the attributes of being available at the "right price" on both
+Intel and Digital Alpha hardware architectures which I would be using,
+was stable in operation, and contained the broad suite of tools
+available under the Open Source policy. BibTeX was to be the format
+in which my references were to be recorded and processed. Although the
+EndNotes format could be converted into BibTeX format, running a
+Windows environment for EndNotes and a Linux environment for every
+thing else appeared a little strange.
+
+The problem was that CTAN appeared not to has a program that could
+provide the support I required for my reference making and handling.
+What I required was:
+ . a method of inputting the references that presenced both the
+ required and optional fields for any of the reference types
+ handled by BibTeX;
+ . a mechanism of cross-linking references so that I could keep
+ track of the route by which that reference had been arrived,
+ e.g. this reference appears in the reference list of another
+ reference in my bibliography;
+ . a graphical means of inserting and removing cross-links between
+ references;
+ . a means of following those cross-links -- clicking on the
+ appropriate link field would bring-up a window appropriate for
+ that reference, or if already on the screen, bringing it to the
+ top;
+ . enabled the linking into each reference, the address of files which
+ were related e.g. the path and name of a text file that
+ contained a summary of the paper but was prepared independent of
+ XBibFile i.e. in addition to any notes that were recorded in the
+ "annote" field of the BibTeX recoord.
+All this was to be accomplished using the BibTeX .bib file without
+compromising its direct use with the BibTeX program.
+
+I gave myself a week to write the program to accomplish the above
+requirements or at least to demonstrate that the concept was
+achievable. The week was from Sunday 26 September 1999 until Sunday 3
+October. During that week I had no tutoring commitments and my two
+thesis supervisors were absent so I would have few obstacles to my
+progress. As a first step, this README file was prepared so that I
+could keep track of what I was trying to accomplish. As the week
+continued, additions were made to this README.
+
+I looked at a number of programs available from CTAN but none quite
+filled my requirements. XBibTeX by Nicolas J. Kelly and Christian
+H. Bischof provided the required BibTeX entry creation mechanism.
+However, I experienced problems with the operation of the program:
+with no warning the program would core-dump when saving an entry,
+loosing all the work invested in that entry. Whether that behaviour
+was due to my use of X11 R6 as opposed to the source codes stated
+need for X11 R4, I remain uncertain. But since XBibTeX only handled a
+part of my requirements, I determined that resolving that problem was not
+good use of my time. I tried BibView by Holger Martin, Peter Urban,
+and Armin Liebl but could not get it to compile. Gerd Neugebauer's
+BibTool provided manipulation capabilities for a BibTeX database which
+offered promise, but first the database had to be created.
+
+The first question was how to implement the project. My initial
+thinking was to embed my requirements somehow inside a Web browser
+because browsers have the required address linking capabilities
+already built-in. However, I anticipated difficulties with that
+approach in generating the BibTeX database entries and placing them on
+disk. The alternative was to write in C with a X toolkit. Of the
+toolkits available to me, the GIMP Toolkit (GTK+) looked the most
+promising and also I wanted to get some experience in programming with
+it. My interest in GTK+ occurred after reading the documentation that
+accompanied version 1.0. However, that documentation contained many
+gaps in the information. With Red Hat Linux 6.0 came version 1.2.1 of
+GTK+ and that resolved may of those perceived shortcomings. The
+writing of XBibFile was accompanied by my learning to program with the
+GTK+.
+
+The development environment used was a Toshiba Satellite 4060XCDT
+laptop computer with a 14.1" colour display and 64MB of memory. On
+that hardware, Red Hat Linux 6.0 was run which consisted of a 2.2.5
+Linux kernel with egcs version 1.1.2, and GTK+ version 1.2.1.
+
+During that first week, the majority of time was taken up in learning
+to use the GTK toolkit. First the latest version (1.2.5) available on
+the Internet was downloaded. It was hoped that the developers of the
+package would have improved the state of ddocumentation included in
+earlier distributions. That was not the case. To supplement the
+documentation, the examples included in the distribution allowed a
+level of understanding to be obtained. By the afternoon of Friday,
+enough of an understanding of GTK had been obtained to enable work on
+XBibFile to commence.
+
+It took 10 days of fairly intensive work to get the first stage of the
+program completed. By that time, a reference could be created and
+stored. Work then ceased. Upon using BibTeX for another project, I
+realised that the NOTE entry was incorrect. That entry was ment for
+introducing annotation with each reference but was not supposed to be
+included when a reference list was generated via BibTeX. Kopka and
+Daly[1999] indicate that such a field should be titled ANNOTE. Also
+Kopka and Daly[1999] indicate that the NOTE field was required in an
+entry of type UNPUBLISHED; it was optional in all others. ANNOTE was
+adopted in XBibFile as it appeared to be more appropriate.
diff --git a/biblio/bibtex/utils/xbibfile/inbook.c b/biblio/bibtex/utils/xbibfile/inbook.c
new file mode 100644
index 0000000000..f9cccf1d5c
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/inbook.c
@@ -0,0 +1,581 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of book.c so that it handles the
+ * inbook BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label5, *data5;
+GtkWidget *label6, *data6;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label16, *data16;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label21, *data21;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to insave the book style */
+
+void save_inbook(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate5[];
+ extern char slate6[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate23[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 5) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate5, gtk_entry_get_text(GTK_ENTRY(data5)));
+ length[5] = strlen(slate5);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
+ length[16] = strlen(slate16);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!((length[3] || length[7]) && length[20] && length[5]
+ && length[16] && length[17] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@INBOOK{%s,\n", slateX);
+ if (length[3]) fprintf(finput, " author = {%s},\n", slate3);
+ if (length[7]) fprintf(finput, " editor = {%s},\n", slate7);
+ fprintf(finput, " title = {%s},\n", slate20);
+ if (length[5]) fprintf(finput, " chapter = {%s},\n", slate5);
+ if (length[16]) fprintf(finput, " pages = {%s},\n", slate16);
+ fprintf(finput, " publisher = {%s},\n", slate17);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[21])
+ fprintf(finput, ",\n type = {%s}", slate21);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[6])
+ fprintf(finput, ",\n edition = {%s}", slate6);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[6] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[19] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the inbook optional fields for subsequent saving */
+
+void save_inbookoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate6[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate19[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate6, gtk_entry_get_text(GTK_ENTRY(data6)));
+ length[6] = strlen(slate6);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
+ length[21] = strlen(slate21);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_inbookoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[21] = 0;
+ length[19] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[6] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional inbook style fields on the screen */
+
+void inbookoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *field9;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_inbookoptions();
+ void save_inbookoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 665);
+ decoration = gtk_frame_new("Optional Inbook fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data19 =gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data21 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
+ label21 = gtk_label_new("Type:");
+ gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data6 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data6), SMALL);
+ label6 = gtk_label_new("Edition:");
+ gtk_widget_set_usize(GTK_WIDGET(label6), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ field9 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field9), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field9), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_inbookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_inbookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic inbook style on the screen */
+
+void inbook(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void inbookoptions();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+
+ format = 5; /* indicate processing of an INBOOK */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("InBook type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 415);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("|| Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data7), 345, -1);
+ label7 = gtk_label_new("|| Editors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data5 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data5), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data5), 345, -1);
+ label5 = gtk_label_new("|| Chapter:");
+ gtk_widget_set_usize(GTK_WIDGET(label5), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label5, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data5, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data16 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data16), 345, -1);
+ label16 = gtk_label_new("|| Pages:");
+ gtk_widget_set_usize(GTK_WIDGET(label16), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data17), 345, -1);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(inbookoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Inbook fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_inbook), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Inbook reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Inbook entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Inbook",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 5;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/incol.c b/biblio/bibtex/utils/xbibfile/incol.c
new file mode 100644
index 0000000000..770e095c81
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/incol.c
@@ -0,0 +1,605 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of inproc.c so that it handles the
+ * incollection BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label4, *data4;
+GtkWidget *label5, *data5;
+GtkWidget *label6, *data6;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label16, *data16;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label21, *data21;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the incollection style */
+
+void save_incol(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate4[];
+ extern char slate5[];
+ extern char slate6[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate23[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 6) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate4, gtk_entry_get_text(GTK_ENTRY(data4)));
+ length[4] = strlen(slate4);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[4] && length[17] && length[20] && length[24]
+ && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@INCOLLECTION{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " booktitle = {%s},\n", slate4);
+ fprintf(finput, " publisher = {%s},\n", slate17);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[7])
+ fprintf(finput, ",\n editor = {%s}", slate7);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[21])
+ fprintf(finput, ",\n type = {%s}", slate21);
+ if (length[5])
+ fprintf(finput, ",\n chapter = {%s}", slate5);
+ if (length[16])
+ fprintf(finput, ",\n pages = {%s}", slate16);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[6])
+ fprintf(finput, ",\n edition = {%s}", slate6);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[5] = 0;
+ length[6] = 0;
+ length[7] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[16] = 0;
+ length[19] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the incollection optional fields for subsequent saving */
+
+void save_incoloptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate5[];
+ extern char slate6[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate16[];
+ extern char slate19[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate5, gtk_entry_get_text(GTK_ENTRY(data5)));
+ length[5] = strlen(slate5);
+ strcpy(slate6, gtk_entry_get_text(GTK_ENTRY(data6)));
+ length[6] = strlen(slate6);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
+ length[16] = strlen(slate16);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
+ length[21] = strlen(slate21);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_incoloptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[21] = 0;
+ length[19] = 0;
+ length[16] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[7] = 0;
+ length[6] = 0;
+ length[5] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional incollection style fields
+ * on the screen */
+
+void incoloptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *field9;
+ GtkWidget *field10;
+ GtkWidget *field11;
+ GtkWidget *field12;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_incoloptions();
+ void save_incoloptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 760);
+ decoration = gtk_frame_new("Optional InCollection fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
+ label7 = gtk_label_new("Editor/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data19 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data21 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
+ label21 = gtk_label_new("Type:");
+ gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data5 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data5), TINY);
+ label5 = gtk_label_new("Chapter:");
+ gtk_widget_set_usize(GTK_WIDGET(label5), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label5, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data5, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data16 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
+ label16 = gtk_label_new("Pages:");
+ gtk_widget_set_usize(GTK_WIDGET(label16), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ field9 = gtk_hbox_new(FALSE, 0);
+ data6 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data6), SMALL);
+ label6 = gtk_label_new("Edition:");
+ gtk_widget_set_usize(GTK_WIDGET(label6), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field9), label6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field9), data6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);
+
+ field10 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field10), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field10), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field10, FALSE, TRUE, 2);
+
+ field11 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field11), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field11), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field11, FALSE, TRUE, 2);
+
+ field12 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field12), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field12), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field12, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_incoloptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_incoloptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic incollection style on the screen */
+
+void incol(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void incoloptions();
+ void save_incol();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 6; /* indicate processing of an INCOLLECTION */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("InCollection type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 355);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data4 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data4), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
+ label4 = gtk_label_new("BookTitle:");
+ gtk_widget_set_usize(GTK_WIDGET(label4), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(incoloptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Incollection fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_incol), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Incollection reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Incollection entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Incollection",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 6;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/inproc.c b/biblio/bibtex/utils/xbibfile/inproc.c
new file mode 100644
index 0000000000..814ea35f1a
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/inproc.c
@@ -0,0 +1,571 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of article.c so that it handles the
+ * inproceedings BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label4, *data4;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label15, *data15;
+GtkWidget *label16, *data16;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the inproceedings style */
+
+void save_inproc(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate4[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate23[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 7) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate4, gtk_entry_get_text(GTK_ENTRY(data4)));
+ length[4] = strlen(slate4);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[4] && length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@INPROCEEDINGS{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " booktitle = {%s},\n", slate4);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[7])
+ fprintf(finput, ",\n editor = {%s}", slate7);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[16])
+ fprintf(finput, ",\n pages = {%s}", slate16);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[15])
+ fprintf(finput, ",\n organization = {%s}", slate15);
+ if (length[17])
+ fprintf(finput, ",\n publisher = {%s}", slate17);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[7] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[15] = 0;
+ length[16] = 0;
+ length[17] = 0;
+ length[19] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the inproceedings optional fields for subsequent saving */
+
+void save_inprocoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate15, gtk_entry_get_text(GTK_ENTRY(data15)));
+ length[15] = strlen(slate15);
+ strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
+ length[16] = strlen(slate16);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_inprocoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[19] = 0;
+ length[17] = 0;
+ length[16] = 0;
+ length[15] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[7] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional inproceedings style fields
+ * on the screen */
+
+void inprocoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *field9;
+ GtkWidget *field10;
+ GtkWidget *field11;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_inprocoptions();
+ void save_inprocoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 730);
+ decoration = gtk_frame_new("Optional InProceedings fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
+ label7 = gtk_label_new("Editor/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data19 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data16 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
+ label16 = gtk_label_new("Pages:");
+ gtk_widget_set_usize(GTK_WIDGET(label16), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data16, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data15 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data15), LARGE);
+ label15 = gtk_label_new("Organization:");
+ gtk_widget_set_usize(GTK_WIDGET(label15), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ field9 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field9), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field9), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);
+
+ field10 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field10), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field10), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field10, FALSE, TRUE, 2);
+
+ field11 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field11), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field11), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field11, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_inprocoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_inprocoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic inproceedings style on the screen */
+
+void inproc(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void inprocoptions();
+ void save_inproc();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 7; /* indicate processing of an INPROCEEDINGS */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("InProceedings type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 320);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Authors/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data4 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data4), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
+ label4 = gtk_label_new("BookTitle:");
+ gtk_widget_set_usize(GTK_WIDGET(label4), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(inprocoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Inproceedings fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_inproc), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Inproceedings reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Inproceedings entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Inproceedings",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 7;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/linking.c b/biblio/bibtex/utils/xbibfile/linking.c
new file mode 100644
index 0000000000..35064b23a6
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/linking.c
@@ -0,0 +1,140 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ *
+ */
+
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+
+
+/* input text fields and labels used BibTeX format windows handled in
+ * this file */
+
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+
+/* Procedure to cancel the linking window and remove links */
+
+void cancel_linking(GtkWidget *widget)
+{
+ extern int length[];
+ extern close_window();
+
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget);
+}
+
+
+
+/* Procedure to take data from the linking window */
+
+void save_linking(GtkWidget *widget)
+{
+ extern void close_window(); /* defined in file cleanup.c */
+ extern int length[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+
+ strcpy(slate30, gtk_entry_get_text(GTK_ENTRY(data30)));
+ length[30] = strlen(slate30);
+ strcpy(slate31, gtk_entry_get_text(GTK_ENTRY(data31)));
+ length[31] = strlen(slate31);
+ strcpy(slate32, gtk_entry_get_text(GTK_ENTRY(data32)));
+ length[32] = strlen(slate32);
+ close_window(widget);
+}
+
+
+/* Procedure to put window on screen for the common linking process */
+
+void linkwindow(widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *key0;
+ GtkWidget *key1;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ extern int format;
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 170);
+ decoration = gtk_frame_new("Linking Labels");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE, 0);
+ label30 = gtk_label_new("Up link:");
+ gtk_widget_set_usize(GTK_WIDGET(label30), 60, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label30, FALSE, FALSE, 10);
+ data30 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data30), 300, -1);
+ gtk_box_pack_start(GTK_BOX(field1), data30, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ label31 = gtk_label_new("Cross link:");
+ gtk_widget_set_usize(GTK_WIDGET(label31), 60, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label31, FALSE, FALSE, 10);
+ data31 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data31), 300, -1);
+ gtk_box_pack_start(GTK_BOX(field2), data31, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 0);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ label32 = gtk_label_new("Externals:");
+ gtk_widget_set_usize(GTK_WIDGET(label32), 60, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label32, FALSE, FALSE, 10);
+ data32 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data32), 300, -1);
+ gtk_box_pack_start(GTK_BOX(field3), data32, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 10);
+
+ /* finally, put the cancel and save buttons
+ * in the window */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(cancel_linking), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_linking), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 0);
+
+ /* make the composite window visible on the screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/listall.c b/biblio/bibtex/utils/xbibfile/listall.c
new file mode 100644
index 0000000000..2820a69ad6
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listall.c
@@ -0,0 +1,177 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+GtkWidget *summary;
+GtkWidget *text, *textblock, *scrollblock;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+extern FILE *refFile; /* defined in xbibfile.c */
+
+void all(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *controls;
+ GtkWidget *key0, *key1;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ extern void error(); /* defined in file error.c */
+ void put_refs_inplace(GtkWidget *);
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 500);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("References found in the database");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ /* put the required text into the window */
+ put_refs_inplace(widget);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+/* This procedure performs the required searching and returns its results
+ * in the text window create in the all() procedure
+ */
+
+void put_refs_inplace(GtkWidget *widget)
+{
+ int i, count;
+ char *start, *end;
+ char holder[200], temp[100], report[30];
+
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ i = 0;
+ count = 0;
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ if ( holder[0] == '@' ) {
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedngs ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Report ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "blackface", "point", "font", NULL);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start+1, -1,
+ "emphasis", "point", "font", NULL);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ count++;
+ }
+ i = 0;
+ if ( start = strstr( holder, " title = {" ) )
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 10;
+ *start = ' ';
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listauthors.c b/biblio/bibtex/utils/xbibfile/listauthors.c
new file mode 100644
index 0000000000..b212ad4312
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listauthors.c
@@ -0,0 +1,204 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GdkColor search, show;
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void allauthors(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_all_authors();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 470);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("All author fields in database");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 20);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "trigger",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ put_all_authors(widget);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure word() above
+ */
+
+void put_all_authors(GtkWidget *widget)
+{
+ int i, count, length;
+ char *start, *end;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedings ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Rerort ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ strcpy(type, temp);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ }
+ /* if the line starts with 'author = {' */
+ if ( start = strstr(holder, " author = {") ) {
+ end = strstr(holder, "}");
+ *end = '\n';
+ end++;
+ *end = '\0';
+ strcpy(temp, start+12);
+ }
+ /* if the line starts with 'title = {' */
+ if ( start = strstr( holder, " title = {" ) ) {
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 11;
+ strcpy(title, start);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ type, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ title, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "trigger", "point", "font", NULL);
+ count++;
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listpubyear.c b/biblio/bibtex/utils/xbibfile/listpubyear.c
new file mode 100644
index 0000000000..4a66baf691
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listpubyear.c
@@ -0,0 +1,214 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void find_year(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1, *key3;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_text_pubyear();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 510);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("References found in the database containing specified publication year");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Year to find:");
+ gtk_box_pack_start(GTK_BOX(selector), searchlabel, FALSE, TRUE, 10);
+ searchword = gtk_entry_new_with_max_length(100);
+ gtk_box_pack_start(GTK_BOX(selector), searchword, FALSE, TRUE, 10);
+ g_signal_connect(GTK_OBJECT(searchword), "activate",
+ G_CALLBACK(put_text_pubyear), NULL);
+ key3 = gtk_button_new_with_label("Execute");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(put_text_pubyear), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Execute search with this new word", NULL);
+ gtk_box_pack_end(GTK_BOX(selector), key3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(panel), selector, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure find_year() above
+ */
+
+void put_text_pubyear(GtkWidget *widget)
+{
+ int i, count, start_flag, print_flag, length;
+ char *start, *end;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+ strcpy(seek, gtk_editable_get_chars(GTK_EDITABLE(searchword), 0, -1));
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ print_flag = 0;
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedings ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Rerort ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ strcpy(type, temp);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ }
+ /* if the line starts with 'year = {' */
+ if ( start = strstr(holder, " year = {") ) {
+ end = strstr(holder, "}");
+ *end = '\n';
+ end++;
+ *end = '\0';
+ strcpy(temp, start+10);
+ if ( strstr(holder, seek) ) {
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ type, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ title, -1,
+ "blackface", "point", "font", NULL);
+ count++;
+ }
+ }
+ /* if the line starts with 'title = {' */
+ if ( start = strstr( holder, " title = {" ) ) {
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 11;
+ strcpy(title, start);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listref.c b/biblio/bibtex/utils/xbibfile/listref.c
new file mode 100644
index 0000000000..947c4c254a
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listref.c
@@ -0,0 +1,156 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *vscroll;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void viewref(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1, *key3;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_text_ref();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 550, 510);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("References found in the database containing specified tag");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Tag to find:");
+ gtk_box_pack_start(GTK_BOX(selector), searchlabel, FALSE, TRUE, 10);
+ searchword = gtk_entry_new_with_max_length(100);
+ gtk_box_pack_start(GTK_BOX(selector), searchword, FALSE, TRUE, 10);
+ g_signal_connect(GTK_OBJECT(searchword), "activate",
+ G_CALLBACK(put_text_ref), NULL);
+ key3 = gtk_button_new_with_label("Execute");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(put_text_ref), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Execute search with this new word", NULL);
+ gtk_box_pack_end(GTK_BOX(selector), key3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(panel), selector, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure viewref() above
+ */
+
+void put_text_ref(GtkWidget *widget)
+{
+ int i, count, print_flag, length;
+ char *start;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+ strcpy(seek, gtk_entry_get_text(GTK_ENTRY(searchword)));
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ print_flag = 0;
+ if ( start = strstr(holder, seek) ) {
+ *start = '\0';
+ length = strlen(seek);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ holder, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ seek, -1,
+ "emphasis", "point", "font", NULL);
+ start += length;
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ count++;
+ print_flag = 1;
+ }
+ }
+ else
+ if ( print_flag )
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ holder, -1,
+ "blackface", "point", "font", NULL);
+/* gtk_text_insert(GTK_TEXT(text), text->style->font,
+ NULL, NULL,
+ holder, -1); */
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listuplinks.c b/biblio/bibtex/utils/xbibfile/listuplinks.c
new file mode 100644
index 0000000000..d5f1891a53
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listuplinks.c
@@ -0,0 +1,189 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+#define SIZE 20
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void alluplinks(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_all_uplinks();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 300, 470);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("All dependency fields in database");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 20);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ put_all_uplinks(widget);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure alluplinks() above
+ */
+
+void put_all_uplinks(GtkWidget *widget)
+{
+ int i, count, flag, k, pass;
+ char *start, *end;
+ struct tag_list {
+ char item[90];
+ int total;
+ };
+ struct tag_list links[20];
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+
+ /* first, find all the uplink fields present */
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ /* if the line starts with 'uplink = {' */
+ if ( start = strstr(holder, " uplink = {") ) {
+ end = strstr(holder, "}");
+ *end = '\0';
+ /* find where this uplink is to be stored */
+ flag = 0;
+ for (k=0; k<count; k++)
+ if ( strstr(links[k].item, start+12) ) {
+ links[k].total++;
+ flag = 1;
+ }
+ if ( !flag ) {
+ strcpy(links[count].item, start+12);
+ links[count].total = 1;
+ count++;
+ }
+ }
+ }
+ i++;
+ }
+ /* display all the uplanks and their sources */
+ for (k=0; k<count; k++) {
+ i = 0;
+ rewind(refFile);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ links[k].item, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ "\n", -1,
+ "blackface", "point", "font", NULL);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ /* if the line starts with '@' */
+ if ( holder[1] == '@' )
+ if ( start = strstr(holder, "{") )
+ if ( end = strstr(holder, ",") ) {
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error found in BibTeX file - no terminating ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error found in BibTeX file - no { after @");
+ }
+ /* if the line starts with 'uplink = {' */
+ if ( start = strstr(holder, " uplink = {") ) {
+ end = strstr(holder, "}");
+ *end = '\0';
+ strcpy(temp, start+12);
+ if ( strstr(links[k].item, start+12) ) {
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ "\n", -1,
+ "blackface", "point", "font", NULL);
+ }
+ }
+ }
+ i++;
+ }
+ }
+ sprintf(report, "%d link chains found", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listword.c b/biblio/bibtex/utils/xbibfile/listword.c
new file mode 100644
index 0000000000..e5fb87583a
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listword.c
@@ -0,0 +1,239 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void word(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1, *key3;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_text_inplace();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 510);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("References found in the database containing search word");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Word to find:");
+ gtk_box_pack_start(GTK_BOX(selector), searchlabel, FALSE, TRUE, 10);
+ searchword = gtk_entry_new_with_max_length(100);
+ gtk_box_pack_start(GTK_BOX(selector), searchword, FALSE, TRUE, 10);
+ g_signal_connect(GTK_OBJECT(searchword), "activate",
+ G_CALLBACK(put_text_inplace), NULL);
+ key3 = gtk_button_new_with_label("Execute");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(put_text_inplace), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Execute search with this new word", NULL);
+ gtk_box_pack_end(GTK_BOX(selector), key3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(panel), selector, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure word() above
+ */
+
+void put_text_inplace(GtkWidget *widget)
+{
+ int i, count, start_flag, print_flag, length;
+ char *start, *end;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+ strcpy(seek, gtk_entry_get_text(GTK_ENTRY(searchword)));
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ start_flag = 0;
+ print_flag = 0;
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedings ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Rerort ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ strcpy(type, temp);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ }
+ /* if the line starts with 'title = {' */
+ if ( start = strstr( holder, " title = {" ) )
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 11;
+ strcpy(title, start);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ /* if the line starts with 'annote = {' */
+ strcpy(temp, holder);
+ if ( start = strstr(temp, " annote = {") ) {
+ start_flag = 1;
+ strcpy(temp, start+12);
+ }
+ /* if the line contains the terminator '} }' */
+ if ( start_flag ) {
+ if ( start = strstr(temp, seek) ) {
+ if ( !print_flag ) {
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ type, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ title, -1,
+ "blackface", "point", "font", NULL);
+ print_flag = 1;
+ count++;
+ }
+ *start = '\0';
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ seek, -1,
+ "target", "point", "font", NULL);
+ length = strlen(seek);
+ start += length;
+ if ( end = strstr(start, "} }") ) {
+ *end = '\0';
+ end++;
+ *end = '\n';
+ start_flag = 0;
+ }
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ }
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listwriter.c b/biblio/bibtex/utils/xbibfile/listwriter.c
new file mode 100644
index 0000000000..bab5d793ac
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listwriter.c
@@ -0,0 +1,234 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void find_author(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1, *key3;
+ GtkEditable *summarypad;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_text_author();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 510);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("References found in the database containing specified author");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Author to find:");
+ gtk_box_pack_start(GTK_BOX(selector), searchlabel, FALSE, TRUE, 10);
+ searchword = gtk_entry_new_with_max_length(100);
+ gtk_box_pack_start(GTK_BOX(selector), searchword, FALSE, TRUE, 10);
+ g_signal_connect(GTK_OBJECT(searchword), "activate",
+ G_CALLBACK(put_text_author), NULL);
+ key3 = gtk_button_new_with_label("Execute");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(put_text_author), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Execute search with this new word", NULL);
+ gtk_box_pack_end(GTK_BOX(selector), key3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(panel), selector, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure find_author() above
+ */
+
+void put_text_author(GtkWidget *widget)
+{
+ int i, count, start_flag, print_flag, length;
+ char *start, *end;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+ strcpy(seek, gtk_editable_get_chars(GTK_EDITABLE(searchword), 0, -1));
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ print_flag = 0;
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedings ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Rerort ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ strcpy(type, temp);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ }
+ /* if the line starts with 'author = {' */
+ if ( start = strstr(holder, " author = {") ) {
+ end = strstr(holder, "}");
+ *end = '\n';
+ end++;
+ *end = '\0';
+ strcpy(temp, start+12);
+ if ( strstr(temp, seek) )
+ print_flag = 1;
+ }
+ /* if the line starts with 'title = {' */
+ if ( start = strstr( holder, " title = {" ) ) {
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 11;
+ strcpy(title, start);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ if ( print_flag ) {
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ type, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ title, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ start = strstr(temp, seek);
+ *start = '\0';
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ seek, -1,
+ "target", "point", "font", NULL);
+ length = strlen(seek);
+ start += length;
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ count++;
+ print_flag = 0;
+ }
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/listyears.c b/biblio/bibtex/utils/xbibfile/listyears.c
new file mode 100644
index 0000000000..2b1f79a060
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listyears.c
@@ -0,0 +1,203 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+GtkWidget *searchlabel, *searchword;
+GtkWidget *text, *textblock, *scrollblock;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void allyears(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_all_years();
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 470);
+ panel = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ description = gtk_label_new("All publication date fields in database");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+
+ /* create the text display part of the window */
+ textblock = gtk_scrolled_window_new(NULL, NULL);
+ textpad = gtk_text_buffer_new(NULL);
+ text = gtk_text_view_new_with_buffer(textpad);
+ gtk_container_add(GTK_CONTAINER(textblock), text);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), textblock);
+
+ /* put the window control buttons in place */
+ controls = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Finish this reference probe", NULL);
+ gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10);
+ /* and put the summary line in place */
+ summary = gtk_entry_new();
+ gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE);
+ gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20);
+ gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10);
+ gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 20);
+
+ /* now put the 'style' for the text output */
+ gtk_text_buffer_create_tag(textpad, "blackface",
+ "foreground", "black", NULL);
+ gtk_text_buffer_create_tag(textpad, "emphasis",
+ "foreground", "red", NULL);
+ gtk_text_buffer_create_tag(textpad, "target",
+ "foreground", "green", NULL);
+ gtk_text_buffer_create_tag(textpad, "point",
+ "size", 11 * PANGO_SCALE, NULL);
+ gtk_text_buffer_create_tag(textpad, "font",
+ "style", PANGO_STYLE_NORMAL, NULL);
+
+ put_all_years(widget);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* This procedure performs the searching of the BibTeX database and returns
+ * its results to the text window created in the procedure allyears() above
+ */
+
+void put_all_years(GtkWidget *widget)
+{
+ int i, count, length;
+ char *start, *end;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+
+ i = 0;
+ count = 0;
+ rewind(refFile);
+ gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0);
+ while ( ( holder[i] = getc(refFile) ) != EOF ) {
+ if ( holder[i] == '\n' ) {
+ holder[i+1] = '\0';
+ i = 0;
+ if ( holder[0] == '@' ) {
+ if ( strstr( holder, "ARTICLE") )
+ strcpy(temp, "Article ");
+ if ( strstr( holder, "BOOK") )
+ strcpy(temp, "Book ");
+ if ( strstr( holder, "BOOKLET") )
+ strcpy(temp, "Booklet ");
+ if ( strstr( holder, "CONFERENCE") )
+ strcpy(temp, "Conference ");
+ if ( strstr( holder, "INBOOK") )
+ strcpy(temp, "inBook ");
+ if ( strstr( holder, "INCOLLECTION") )
+ strcpy(temp, "Incollection ");
+ if ( strstr( holder, "INPROCEEDINGS") )
+ strcpy(temp, "inProceedings ");
+ if ( strstr( holder, "MANUAL") )
+ strcpy(temp, "Manual ");
+ if ( strstr( holder, "MASTERSTHESIS") )
+ strcpy(temp, "Masters ");
+ if ( strstr( holder, "MISC") )
+ strcpy(temp, "Misc ");
+ if ( strstr( holder, "PHDTHESIS") )
+ strcpy(temp, "PhD Thesis ");
+ if ( strstr( holder, "PROCEEDINGS") )
+ strcpy(temp, "Proceedings ");
+ if ( strstr( holder, "TECHREPORT") )
+ strcpy(temp, "Tech Rerort ");
+ if ( strstr( holder, "UNPUBLISHED") )
+ strcpy(temp, "Unpublished ");
+ strcpy(type, temp);
+ if ( start = strstr( holder, "{" ) )
+ if ( end = strstr( holder, "," ) ) {
+ *end = ' ';
+ end++;
+ *end = ' ';
+ end++;
+ *end = '\0';
+ strcpy(tag, start+1);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,");
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no {");
+ }
+ }
+ /* if the line starts with 'year = {' */
+ if ( start = strstr(holder, " year = {") ) {
+ end = strstr(holder, "}");
+ *end = '\n';
+ end++;
+ *end = '\0';
+ strcpy(temp, start+10);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ type, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ tag, -1,
+ "emphasis", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ title, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "target", "point", "font", NULL);
+ count++;
+ }
+ /* if the line starts with 'title = {' */
+ if ( start = strstr( holder, " title = {" ) ) {
+ if ( end = strstr( holder, "}," ) ) {
+ if ( (end - start) > 60 )
+ end = start + 60;
+ *end = '\n';
+ end++;
+ *end = '\0';
+ start += 11;
+ strcpy(title, start);
+ }
+ else {
+ error(widget, GINT_TO_POINTER(9));
+ g_print("Format error in this BibTeX file - no ending ,}");
+ }
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}
diff --git a/biblio/bibtex/utils/xbibfile/manual.c b/biblio/bibtex/utils/xbibfile/manual.c
new file mode 100644
index 0000000000..f946d885dc
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/manual.c
@@ -0,0 +1,457 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of phd.c so that it handles the
+ * Manual BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label6, *data6;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label15, *data15;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Manual style */
+
+void save_manual(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate6[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate15[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 8) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ if (!length[20] && lengthX) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@MANUAL{%s,\n", slateX);
+ fprintf(finput, " title = {%s}", slate20);
+ if (length[3])
+ fprintf(finput, ",\n author = {%s}", slate3);
+ if (length[15])
+ fprintf(finput, ",\n organization = {%s}", slate15);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[6])
+ fprintf(finput, ",\n edition = {%s}", slate6);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[24])
+ fprintf(finput, ",\n year = {%s}", slate24);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[6] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[15] = 0;
+ length[20] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Manual optional fields for subsequent saving */
+
+void save_manualoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate6[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate15[];
+ extern char slate22[];
+ extern char slate24[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate6, gtk_entry_get_text(GTK_ENTRY(data6)));
+ length[6] = strlen(slate6);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate15, gtk_entry_get_text(GTK_ENTRY(data15)));
+ length[15] = strlen(slate15);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_manualoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[1] = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[6] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[15] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Manual style fields on the screen */
+
+void manualoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_mamualoptions();
+ void save_manualoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 635);
+ decoration = gtk_frame_new("Optional Manual fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new_with_max_length(LARGE);
+ label3 = gtk_label_new("Author:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data15 = gtk_entry_new_with_max_length(LARGE);
+ label15 = gtk_label_new("Organization:");
+ gtk_widget_set_usize(GTK_WIDGET(label15), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new_with_max_length(LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data6 = gtk_entry_new_with_max_length(SMALL);
+ label6 = gtk_label_new("Edition:");
+ gtk_widget_set_usize(GTK_WIDGET(label6), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data6, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new_with_max_length(TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new_with_max_length(TINY);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new_with_max_length(LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new_with_max_length(LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_manualoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_manualoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Manual style on the screen */
+
+void manual(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void manualoptions();
+ void save_manual();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 8; /* indicate processing of a MANUAL */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Manual type - required field");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 235);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new_with_max_length(SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new_with_max_length(LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 8);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(manualoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Manual fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_manual), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Manual reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Manual entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Manual",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 8;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/masters.c b/biblio/bibtex/utils/xbibfile/masters.c
new file mode 100644
index 0000000000..eaefc2dc74
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/masters.c
@@ -0,0 +1,456 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: january 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of phd.c so that it handles the
+ * Masters thesis BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label18, *data18;
+GtkWidget *label20, *data20;
+GtkWidget *label21, *data21;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Masters thesis style */
+
+void save_masters(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate18[];
+ extern char slate20[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 9) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate18, gtk_entry_get_text(GTK_ENTRY(data18)));
+ length[18] = strlen(slate18);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[18] && length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@MASTERSTHESIS{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " school = {%s},\n", slate18);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[21])
+ fprintf(finput, ",\n type = {%s}", slate21);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Masters thesis optional fields for subsequent saving */
+
+void save_mastersoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate21[];
+ extern char slate22[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
+ length[21] = strlen(slate21);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_mastersoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Masters thesis style field
+ * on the screen */
+
+void mastersoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_mastersoptions();
+ void save_mastersoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 540);
+ decoration = gtk_frame_new("Optional Masters thesis fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data21 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
+ label21 = gtk_label_new("Type:");
+ gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_mastersoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_mastersoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Masters thesis style on the screen */
+
+void masters(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void mastersoptions();
+ void save_masters();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 9; /* indicate processing of an MASTERS THESIS */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Masters thesis type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 330);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data18 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data18), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data18), 345, -1);
+ label18 = gtk_label_new("School:");
+ gtk_widget_set_usize(GTK_WIDGET(label18), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label18, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data18, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(mastersoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Masters fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_masters), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Masters reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Masters entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Masters",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 9;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/misc.c b/biblio/bibtex/utils/xbibfile/misc.c
new file mode 100644
index 0000000000..8423c479b7
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/misc.c
@@ -0,0 +1,432 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of manual.c so that it handles the
+ * Misc BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label8, *data8;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Misc style */
+
+void save_misc(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate8[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 10) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ if (!lengthX) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@MISC{%s", slateX);
+ if (length[3])
+ fprintf(finput, ",\n author = {%s}", slate3);
+ if (length[20])
+ fprintf(finput, ",\n title = {%s}", slate20);
+ if (length[8])
+ fprintf(finput, ",\n howpublished = {%s}", slate8);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[24])
+ fprintf(finput, ",\n year = {%s}", slate24);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[8] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[20] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Misc optional fields for subsequent saving */
+
+void save_miscoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate8[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate8, gtk_entry_get_text(GTK_ENTRY(data8)));
+ length[8] = strlen(slate8);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_miscoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[2] = 0;
+ length[3] = 0;
+ length[8] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[20] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Misc style fields on the screen */
+
+void miscoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_mamualoptions();
+ void save_miscoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 605);
+ decoration = gtk_frame_new("Optional Misc fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data8 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data8), SMALL);
+ label8 = gtk_label_new("Howpublished:");
+ gtk_widget_set_usize(GTK_WIDGET(label8), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label8, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data8, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 80, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_miscoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_miscoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Misc style on the screen */
+
+void misc(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void miscoptions();
+ void save_misc();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 10; /* indicate processing of a MISC */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Misc type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(decoration), 450, 195);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(miscoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Miscellaneous fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_misc), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Miscellaneous reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Miscellaneous entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Miscellaneous",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 10;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/penguin.bib b/biblio/bibtex/utils/xbibfile/penguin.bib
new file mode 100644
index 0000000000..4c780f47a7
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/penguin.bib
@@ -0,0 +1,75 @@
+
+@INCOLLECTION{blar:2000,
+ author = {Tony Blar},
+ title = {The Importance of being Tony},
+ booktitle = {My Life in a Nut Shell},
+ publisher = {British Truth Commission},
+ year = {2000},
+ editor = {Tony by himself},
+ series = {derf},
+ type = {report},
+ chapter = {3},
+ month = {March},
+ annote = {xxx} }
+
+@CONFERENCE{aa,
+ author = {bb},
+ title = {cc},
+ booktitle = {dd},
+ year = {ee},
+ editor = {ff},
+ volume = {gg},
+ number = {hh},
+ series = {ii},
+ pages = {jj},
+ address = {kk},
+ month = {ll},
+ organization = {mm},
+ publisher = {nn},
+ URL = {oo},
+ note = {pp},
+ annote = {qqrr} }
+
+@MASTERSTHESIS{aa,
+ author = {bb},
+ title = {cc},
+ school = {dd},
+ year = {ee},
+ type = {ff},
+ address = {gg},
+ month = {hh},
+ URL = {ii},
+ note = {jj},
+ annote = {kkll} }
+
+@ARTICLE{mary:2000,
+ author = {Mary Lamb},
+ title = {Caring for the Australian Economy},
+ journal = {Believe it on Not},
+ year = {2000},
+ volume = {21},
+ number = {3},
+ pages = {45--70},
+ month = {June},
+ annote = {Mary had a little lamb
+Her father shot it dead
+Now Mary takes the lamb to school
+Between two hunks of bread} }
+
+@UNPUBLISHED{mine:2000,
+ author = {me},
+ title = {another test},
+ note = {xyz},
+ month = {December},
+ year = {2000},
+ URL = {xx},
+ annote = {Go on, who is a silly boy!} }
+
+@UNPUBLISHED{other:2000,
+ author = {someone else},
+ title = {just another test},
+ note = {nothing},
+ month = {December},
+ year = {2000},
+ URL = {xx},
+ annote = {xx xx} }
diff --git a/biblio/bibtex/utils/xbibfile/phd.c b/biblio/bibtex/utils/xbibfile/phd.c
new file mode 100644
index 0000000000..3a37c8636b
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/phd.c
@@ -0,0 +1,455 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of article.c so that it handles the
+ * PhD thesis BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label18, *data18;
+GtkWidget *label20, *data20;
+GtkWidget *label21, *data21;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the PhD thesis style */
+
+void save_phd(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate18[];
+ extern char slate20[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 11) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate18, gtk_entry_get_text(GTK_ENTRY(data18)));
+ length[18] = strlen(slate18);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[18] && length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@PHDTHESIS{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " school = {%s},\n", slate18);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[21])
+ fprintf(finput, ",\n type = {%s}", slate21);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the PhD thesis optional fields for subsequent saving */
+
+void save_phdoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate21[];
+ extern char slate22[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
+ length[21] = strlen(slate21);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_phdoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional PhD thesis style fields on the screen */
+
+void phdoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_phdoptions();
+ void save_phdoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 540);
+ decoration = gtk_frame_new("Optional PhD thesis fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data21 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
+ label21 = gtk_label_new("Type:");
+ gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_phdoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_phdoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic PhD thesis style on the screen */
+
+void phd(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void phdoptions();
+ void save_phd();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 11; /* indicate processing of a PhD THESIS */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("PhD thesis type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(decoration), 450, 325);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data18 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data18), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data18), 345, -1);
+ label18 = gtk_label_new("School:");
+ gtk_widget_set_usize(GTK_WIDGET(label18), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label18, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data18, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(phdoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining PhD fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_phd), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this PhD reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this PhD entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this PhD",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 11;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/probes.c b/biblio/bibtex/utils/xbibfile/probes.c
new file mode 100644
index 0000000000..fb5babfa4d
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/probes.c
@@ -0,0 +1,163 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <gtk/gtk.h>
+
+
+//extern int format;
+
+
+/* This procedure produces a window allowing selection of the
+ * procedures for exploring the reference database */
+
+void probe_menu(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selectionKeypad, *finish;
+ GtkWidget *separator, *keycentre;
+ GtkWidget *allkey, *allauthorkey, *allyearkey;
+ GtkWidget *wordkey, *authorkey, *yearkey, *refkey, *uplinkkey;
+ GtkWidget *journalkey, *typekey, *future3;
+ GtkWidget *spacer1key, *spacer2key;
+
+ extern void close_window(); /* defined in file cleanup.c */
+ extern void all(); /* defined in file listall.c */
+ extern void word(); /* defined in file listword.c */
+ extern void allyears(); /* defined in file listyears.c */
+ extern void allauthors(); /* defined in file listauthors.c */
+ extern void find_author(); /* defined in file listwriter.c */
+ extern void find_year(); /* defined in file listpubyear.c */
+ extern void viewref(); /* defined in file listref.c */
+ extern void alluplinks(); /* defined in file listuplinks.c */
+
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ /* form the outline of the window */
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile select");
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 420, 160);
+ panel = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+ description = gtk_label_new("Select a reference database probe");
+ gtk_box_pack_start_defaults(GTK_BOX(panel), description);
+ selectionKeypad = gtk_table_new(5, 4, TRUE);
+ gtk_widget_set_usize(GTK_WIDGET(selectionKeypad), 390, 180);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), selectionKeypad);
+ separator = gtk_hseparator_new();
+ gtk_box_pack_start_defaults(GTK_BOX(panel), separator);
+ keycentre = gtk_table_new(1, 3, TRUE);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), keycentre);
+ finish = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(keycentre), 390, 30);
+ g_signal_connect(GTK_OBJECT(finish), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_table_attach_defaults(GTK_TABLE(keycentre), finish, 1, 2, 0, 1);
+ gtk_tooltips_set_tip(tooltips, finish,
+ "Finished inspecting that reference database", NULL);
+
+ /* connect the List all references present process */
+ allkey = gtk_button_new_with_label("List all");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ allkey, 0, 1, 0 ,1);
+ g_signal_connect(GTK_OBJECT(allkey), "clicked",
+ G_CALLBACK(all), NULL);
+ gtk_tooltips_set_tip(tooltips, allkey,
+ "Show all ref_type/tag/title fields", NULL);
+
+ /* List the authors of all references present */
+ allauthorkey = gtk_button_new_with_label("List all authors");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ allauthorkey, 0, 1, 1 ,2);
+ g_signal_connect(GTK_OBJECT(allauthorkey), "clicked",
+ G_CALLBACK(allauthors), NULL);
+ gtk_tooltips_set_tip(tooltips, allauthorkey,
+ "Show ref_type/tag/title tag fields for all author fields in database", NULL);
+
+ /* List the publication year of all references present */
+ allyearkey = gtk_button_new_with_label("List all years");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ allyearkey, 0, 1, 2 ,3);
+ g_signal_connect(GTK_OBJECT(allyearkey), "clicked",
+ G_CALLBACK(allyears), NULL);
+ gtk_tooltips_set_tip(tooltips, allyearkey,
+ "Show ref_type/tag/title fields for all publication fields in database", NULL);
+
+ /* connect the List references by word present */
+ wordkey = gtk_button_new_with_label("List by word");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ wordkey, 1, 2, 0 ,1);
+ g_signal_connect(GTK_OBJECT(wordkey), "clicked",
+ G_CALLBACK(word), NULL);
+ gtk_tooltips_set_tip(tooltips, wordkey,
+ "Show ref_type/tag/title fields corresponding to matches of specified word", NULL);
+
+ /* connect the List references by specified author */
+ authorkey = gtk_button_new_with_label("List by author");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ authorkey, 1, 2, 1 ,2);
+ g_signal_connect(GTK_OBJECT(authorkey), "clicked",
+ G_CALLBACK(find_author), NULL);
+ gtk_tooltips_set_tip(tooltips, authorkey,
+ "Show ref_type/tag/title fields corresponding to specified author", NULL);
+
+
+ /* connect the List references by year of publication */
+ yearkey = gtk_button_new_with_label("List by year");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ yearkey, 1, 2, 2 ,3);
+ g_signal_connect(GTK_OBJECT(yearkey), "clicked",
+ G_CALLBACK(find_year), NULL);
+ gtk_tooltips_set_tip(tooltips, yearkey,
+ "Show ref_type/tag/title fields for a specified year",
+ NULL);
+
+ /* connect the List references by publishing journal */
+ journalkey = gtk_button_new_with_label("FUTURE 1");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ journalkey, 1, 2, 3 ,4);
+ gtk_tooltips_set_tip(tooltips, journalkey,
+ "Not currently used", NULL);
+
+ /* connect the List references by reference type */
+ typekey = gtk_button_new_with_label("FUTURE 2");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ typekey, 1, 2, 4 ,5);
+ gtk_tooltips_set_tip(tooltips, typekey,
+ "Not currently used", NULL);
+ future3 = gtk_button_new_with_label("FUTURE 3");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ future3, 1, 2, 5 ,6);
+ gtk_tooltips_set_tip(tooltips, future3,
+ "Not currently used", NULL);
+
+ /* connect the List references uplinks given */
+ uplinkkey = gtk_button_new_with_label("List by uplink");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ uplinkkey, 2, 3, 0 ,1);
+ g_signal_connect(GTK_OBJECT(uplinkkey), "clicked",
+ G_CALLBACK(alluplinks), NULL);
+ gtk_tooltips_set_tip(tooltips, uplinkkey,
+ "List reference citations via 'uplink' mechanism", NULL);
+
+ /* find the whole reference via its tag */
+ refkey = gtk_button_new_with_label("View Reference");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ refkey, 3, 4, 0 ,1);
+ g_signal_connect(GTK_OBJECT(refkey), "clicked",
+ G_CALLBACK(viewref), NULL);
+ gtk_tooltips_set_tip(tooltips, refkey,
+ "View whole reference accessed via its tag", NULL);
+
+ /* make the composite window visible on the screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/proceedings.c b/biblio/bibtex/utils/xbibfile/proceedings.c
new file mode 100644
index 0000000000..1b99112e7f
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/proceedings.c
@@ -0,0 +1,523 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of inproc.c so that it handles the
+ * proceedings BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label7, *data7;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label15, *data15;
+GtkWidget *label17, *data17;
+GtkWidget *label19, *data19;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label23, *data23;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the proceedings style */
+
+void save_proceedings(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate23[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 12) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@PROCEEDINGS{%s,\n", slateX);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[7])
+ fprintf(finput, ",\n editor = {%s}", slate7);
+ if (length[23])
+ fprintf(finput, ",\n volume = {%s}", slate23);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[19])
+ fprintf(finput, ",\n series = {%s}", slate19);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[15])
+ fprintf(finput, ",\n organization = {%s}", slate15);
+ if (length[17])
+ fprintf(finput, ",\n publisher = {%s}", slate17);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[7] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[15] = 0;
+ length[17] = 0;
+ length[19] = 0;
+ length[22] = 0;
+ length[23] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the proceedings optional fields for subsequent saving */
+
+void save_procoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate7[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate15[];
+ extern char slate16[];
+ extern char slate17[];
+ extern char slate19[];
+ extern char slate22[];
+ extern char slate23[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
+ length[7] = strlen(slate7);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate15, gtk_entry_get_text(GTK_ENTRY(data15)));
+ length[15] = strlen(slate15);
+ strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
+ length[17] = strlen(slate17);
+ strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
+ length[19] = strlen(slate19);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
+ length[23] = strlen(slate23);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_procoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[23] = 0;
+ length[22] = 0;
+ length[19] = 0;
+ length[17] = 0;
+ length[15] = 0;
+ length[14] = 0;
+ length[13] = 0;
+ length[12] = 0;
+ length[7] = 0;
+ length[2] = 0;
+ length[1] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional proceedings style fields
+ * on the screen */
+
+void procoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *field7;
+ GtkWidget *field8;
+ GtkWidget *field9;
+ GtkWidget *field10;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_procoptions();
+ void save_procoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 700);
+ decoration = gtk_frame_new("Optional Proceedings fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data7 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
+ label7 = gtk_label_new("Editor/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label7), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data7, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data23 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
+ label23 = gtk_label_new("|| Volume:");
+ gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data23, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("|| Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data19 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
+ label19 = gtk_label_new("Series:");
+ gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data19, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ field7 = gtk_hbox_new(FALSE, 0);
+ data15 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data15), LARGE);
+ label15 = gtk_label_new("Organization:");
+ gtk_widget_set_usize(GTK_WIDGET(label15), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field7), label15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field7), data15, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);
+
+ field8 = gtk_hbox_new(FALSE, 0);
+ data17 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
+ label17 = gtk_label_new("Publisher:");
+ gtk_widget_set_usize(GTK_WIDGET(label17), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field8), label17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field8), data17, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);
+
+ field9 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field9), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field9), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);
+
+ field10 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field10), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field10), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field10, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_procoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_procoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic proceedings style on the screen */
+
+void proceedings(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void procoptions();
+ void save_proceedings();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 12; /* indicate processing of an PROCEEDINGS */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Proceedings type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 268);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 8);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(procoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Proceedings fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_proceedings), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Proceedings reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Proceedings entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Proceedings",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 12;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/ramblings.txt b/biblio/bibtex/utils/xbibfile/ramblings.txt
new file mode 100644
index 0000000000..de2060b3b6
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/ramblings.txt
@@ -0,0 +1,15 @@
+At the outset of my PhD studies the importance of handling reference
+material was clear. Systems such as BibTeX would automatically
+prepare the entries for a paper's reference section from the citations
+included in the paper's text. But to provide links between those
+references, for historic, logical, or theme reasons required some
+other method of handling this reference material.
+
+Looking on the Internet showed no available software of the type
+required. I asked a question on the comp.text.tex usenet newsgroup in
+regard to how others had addressed this problem, but received no
+replies. My conclusion was that to get such software I would have to
+write it. That software available only fulfilled paprt of my
+requirements. In the case of XBibTeX, the software was unstable, and
+crashed without warning, resulting in loss of information entered
+using it. BibTool offered good promise, but it was not GUI orientated.
diff --git a/biblio/bibtex/utils/xbibfile/searchrefs.pl b/biblio/bibtex/utils/xbibfile/searchrefs.pl
new file mode 100644
index 0000000000..72d2417ab0
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/searchrefs.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+#
+# Script to print the key, the reference type, and the first part of the
+# title of ALL references in n BiBTeX database matching a given search
+# string.
+#
+#
+# This script is part of the XBibFile software package.
+# Writer: Ross Maloney
+# Date: August 2000
+#
+
+$count = 0;
+while ( <> ) {
+ chomp;
+ if ( /@/ ) {
+ $type = 'x';
+ $ptr_flag = 0;
+ $note_flag = 0;
+ if ( /\@ARTICLE/ ) { $type = 'A' } ;
+ if ( /\@BOOK/ ) { $type = 'B' } ;
+ if ( /\@INCOLLECTION/ ) { $type = 'C' } ;
+ if ( /\@INPROCEEDINGS/ ) { $type = 'P' } ;
+ if ( /\@PHDTHESIS/ ) { $type = 'T' } ;
+ @reftype = split(/{/, $_);
+ $reftype[1] =~ s/,//;
+ }
+ elsif ( /^ +title = \{/ ) {
+ @fields = split(/{/, $_);
+ $fields[1] =~ s/},//;
+ }
+ elsif ( /^ +annote = \{/ ) {
+ $note_flag = 1;
+ }
+ if ( $note_flag ) {
+ if ( /poem/i ) { # check for test string being present
+ if ( $ptr_flag == 0 ) {
+ $count++ ;
+ printf "\n%s %s", $type, $reftype[1];
+ printf "\t%s", substr($fields[1], 0, 50) ;
+ $ptr_flag = 1;
+ }
+ printf "\n* %s", $_;
+ }
+ }
+}
+print "\nnumber of references = $count\n" ;
diff --git a/biblio/bibtex/utils/xbibfile/selecting.c b/biblio/bibtex/utils/xbibfile/selecting.c
new file mode 100644
index 0000000000..6a77ec339d
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/selecting.c
@@ -0,0 +1,208 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Renamed, reformed, and reworked: January 2002
+ *
+ */
+
+#include <gtk/gtk.h>
+
+
+//extern void close_window(); /* contained in cleanup.c */
+//extern void article(); /* contained in article.c */
+//extern void book(); /* contained in book.c */
+//extern void linkwindow();
+//extern int format;
+
+
+/* This procedure produces a window allowing selection of the
+ * 14 BibTeX reference formats */
+
+void available(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selectionKeypad, *separ, *finish;
+ GtkWidget *artkey, *bookkey;
+ GtkWidget *bookletkey, *confkey;
+ GtkWidget *inbookkey, *incolkey;
+ GtkWidget *inprockey, *mankey;
+ GtkWidget *masterskey, *misckey;
+ GtkWidget *procedkey, *phdkey;
+ GtkWidget *techkey, *unpubkey;
+
+ extern void article();
+ extern void book();
+ extern void inproc();
+ extern void phd();
+ extern void masters();
+ extern void incol();
+ extern void booklet(); /* contained in file booklet.c */
+ extern void conference(); /* contained in file conference.c */
+ extern void inbook(); /* contained in file inbook.c */
+ extern void unpublished(); /* contained in file unpublished.c */
+ extern void manual(); /* contained in file manual.c */
+ extern void misc(); /* contained in file misc.c */
+ extern void proceedings(); /* contained in file proceedings.c */
+ extern void techreport(); /* contained in file techreport.c */
+ extern void close_window(GtkWidget); /* contained in file cleanup.c */
+
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ /* form the outline of the window */
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile select");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 250, 300);
+ panel = gtk_vbox_new(FALSE, 10);
+ description = gtk_label_new("Select a reference type");
+ gtk_box_pack_start_defaults(GTK_BOX(panel), description);
+ selectionKeypad = gtk_table_new(7, 2, TRUE);
+ gtk_widget_set_usize(GTK_WIDGET(selectionKeypad), 230, 210);
+ gtk_container_add(GTK_CONTAINER(window), panel);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), selectionKeypad);
+ separ = gtk_hseparator_new();
+ gtk_box_pack_start_defaults(GTK_BOX(panel), separ);
+ finish = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(finish), 130, 30);
+ g_signal_connect(GTK_OBJECT(finish), "clicked",
+ G_CALLBACK(close_window), NULL);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), finish);
+ gtk_tooltips_set_tip(tooltips, finish,
+ "Finished inserting into this reference database", NULL);
+
+ /* connect the Article reference type */
+ artkey = gtk_button_new_with_label("Article");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ artkey, 0, 1, 0 ,1);
+ g_signal_connect(GTK_OBJECT(artkey), "clicked",
+ G_CALLBACK(article), NULL);
+ gtk_tooltips_set_tip(tooltips, artkey,
+ "Make an Article reference", NULL);
+
+ /* connect the Book reference type */
+ bookkey = gtk_button_new_with_label("Book");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ bookkey, 0, 1, 1 ,2);
+ g_signal_connect(GTK_OBJECT(bookkey), "clicked",
+ G_CALLBACK(book), NULL);
+ gtk_tooltips_set_tip(tooltips, bookkey,
+ "Make a Book reference", NULL);
+
+ /* connect the Booklet reference type */
+ bookletkey = gtk_button_new_with_label("Booklet");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ bookletkey, 0, 1, 2 ,3);
+ g_signal_connect(GTK_OBJECT(bookletkey), "clicked",
+ G_CALLBACK(booklet), NULL);
+ gtk_tooltips_set_tip(tooltips, bookletkey,
+ "Make a Booklet reference", NULL);
+
+ /* connect the Conference reference type */
+ confkey = gtk_button_new_with_label("Conference");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ confkey, 0, 1, 3 ,4);
+ g_signal_connect(GTK_OBJECT(confkey), "clicked",
+ G_CALLBACK(conference), NULL);
+ gtk_tooltips_set_tip(tooltips, confkey,
+ "Make a reference to a Conference", NULL);
+
+ /* connect the InBook reference type */
+ inbookkey = gtk_button_new_with_label("In Book");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ inbookkey, 0, 1, 4 ,5);
+ g_signal_connect(GTK_OBJECT(inbookkey), "clicked",
+ G_CALLBACK(inbook), NULL);
+ gtk_tooltips_set_tip(tooltips, inbookkey,
+ "Make an In Book reference", NULL);
+
+ /* connect the InCollection reference type */
+ incolkey = gtk_button_new_with_label("In Collection");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ incolkey, 0, 1, 5 ,6);
+ g_signal_connect(GTK_OBJECT(incolkey), "clicked",
+ G_CALLBACK(incol), NULL);
+ gtk_tooltips_set_tip(tooltips, incolkey,
+ "Make an In Collection reference", NULL);
+
+ /* connect the InProceedings reference type */
+ inprockey = gtk_button_new_with_label("In Proceedings");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ inprockey, 0, 1, 6 ,7);
+ g_signal_connect(GTK_OBJECT(inprockey), "clicked",
+ G_CALLBACK(inproc), NULL);
+ gtk_tooltips_set_tip(tooltips, inprockey,
+ "Make an In Proceedings reference", NULL);
+
+ /* connect the Manual reference type */
+ mankey = gtk_button_new_with_label("Manual");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ mankey, 1, 2, 0 ,1);
+ g_signal_connect(GTK_OBJECT(mankey), "clicked",
+ G_CALLBACK(manual), NULL);
+ gtk_tooltips_set_tip(tooltips, mankey,
+ "Make a reference to a Manual", NULL);
+
+ /* connect the Masters reference type */
+ masterskey = gtk_button_new_with_label("Masters thesis");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ masterskey, 1, 2, 1 ,2);
+ g_signal_connect(GTK_OBJECT(masterskey), "clicked",
+ G_CALLBACK(masters), NULL);
+ gtk_tooltips_set_tip(tooltips, masterskey,
+ "Make a reference to a Masters thesis", NULL);
+
+ /* connect the Misc reference type */
+ misckey = gtk_button_new_with_label("Misc");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ misckey, 1, 2, 2 ,3);
+ g_signal_connect(GTK_OBJECT(misckey), "clicked",
+ G_CALLBACK(misc), NULL);
+ gtk_tooltips_set_tip(tooltips, misckey,
+ "Make a reference to a Miscellaneous type document", NULL);
+
+ /* connect the PhDthesis reference type */
+ phdkey = gtk_button_new_with_label("PhD thesis");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ phdkey, 1, 2, 3 ,4);
+ g_signal_connect(GTK_OBJECT(phdkey), "clicked",
+ G_CALLBACK(phd), NULL);
+ gtk_tooltips_set_tip(tooltips, phdkey,
+ "Make a reference to a PhD thesis", NULL);
+
+ /* connect the Proceedings reference type */
+ procedkey = gtk_button_new_with_label("Proceedings");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ procedkey, 1, 2, 4 ,5);
+ g_signal_connect(GTK_OBJECT(procedkey), "clicked",
+ G_CALLBACK(proceedings), NULL);
+ gtk_tooltips_set_tip(tooltips, procedkey,
+ "Make a reference to a Proceedings", NULL);
+
+ /* connect the TechReport reference type */
+ techkey = gtk_button_new_with_label("Tech Report");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ techkey, 1, 2, 5 ,6);
+ g_signal_connect(GTK_OBJECT(techkey), "clicked",
+ G_CALLBACK(techreport), NULL);
+ gtk_tooltips_set_tip(tooltips, techkey,
+ "Make a reference to a Technical Report", NULL);
+
+ /* connect the Unpublished reference type */
+ unpubkey = gtk_button_new_with_label("Unpublished");
+ gtk_table_attach_defaults(GTK_TABLE(selectionKeypad),
+ unpubkey, 1, 2, 6 ,7);
+ g_signal_connect(GTK_OBJECT(unpubkey), "clicked",
+ G_CALLBACK(unpublished), NULL);
+ gtk_tooltips_set_tip(tooltips, unpubkey,
+ "Make a reference to an Unpublished document", NULL);
+
+
+ /* make the composite window visible on the screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/showrefs.pl b/biblio/bibtex/utils/xbibfile/showrefs.pl
new file mode 100644
index 0000000000..ea1c03ab8f
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/showrefs.pl
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+#
+# Script to print the key, the reference type, and the first part of the
+# title of ALL the references in a BiBTeX database.
+#
+#
+# This script is part of the XBibFile software package.
+# Writer: Ross Maloney
+# Date: August 2000
+#
+
+while ( <> ) {
+ chomp;
+ if ( /@/ ) {
+ $count++ ;
+ $type = 'x';
+ if ( /\@ARTICLE/ ) { $type = 'A' } ;
+ if ( /\@BOOK/ ) { $type = 'B' } ;
+ if ( /\@INCOLLECTION/ ) { $type = 'C' } ;
+ if ( /\@INPROCEEDINGS/ ) { $type = 'P' } ;
+ if ( /\@PHDTHESIS/ ) { $type = 'T' } ;
+ @fields = split(/{/, $_);
+ $fields[1] =~ s/,//;
+ printf "\n%s %s", $type, $fields[1];
+ }
+ else { if ( /^ +title = \{/ ) {
+ @fields = split(/{/, $_);
+ $fields[1] =~ s/},//;
+ printf "\t%s", substr($fields[1], 0, 50) ;
+ }
+ }
+}
+print "\nnumber of references = $count\n" ;
diff --git a/biblio/bibtex/utils/xbibfile/techreport.c b/biblio/bibtex/utils/xbibfile/techreport.c
new file mode 100644
index 0000000000..95ee47aca1
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/techreport.c
@@ -0,0 +1,475 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of phd.c so that it handles the
+ * Technical Report BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label1, *data1;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label9, *data9;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label14, *data14;
+GtkWidget *label20, *data20;
+GtkWidget *label21, *data21;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Technical Reporot style */
+
+void save_techreport(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate9[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate20[];
+ extern char slate21[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 13) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate9, gtk_entry_get_text(GTK_ENTRY(data9)));
+ length[9] = strlen(slate9);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ if (!(length[3] && length[9] && length[20] && length[24] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@TECHREPORT{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " institution = {%s},\n", slate9);
+ fprintf(finput, " year = {%s}", slate24);
+ if (length[21])
+ fprintf(finput, ",\n type = {%s}", slate21);
+ if (length[14])
+ fprintf(finput, ",\n number = {%s}", slate14);
+ if (length[1])
+ fprintf(finput, ",\n address = {%s}", slate1);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[2])
+ fprintf(finput, ",\n note = {%s}", slate2);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Technical Report optional fields for subsequent saving */
+
+void save_techoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate1[];
+ extern char slate2[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate14[];
+ extern char slate21[];
+ extern char slate22[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
+ length[1] = strlen(slate1);
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
+ length[14] = strlen(slate14);
+ strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
+ length[21] = strlen(slate21);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_techoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[1] = 0;
+ length[2] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[14] = 0;
+ length[21] = 0;
+ length[22] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Technical Report style
+ * fields on the screen */
+
+void techoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ GtkWidget *field6;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_techoptions();
+ void save_techoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 570);
+ decoration = gtk_frame_new("Optional Technical Report fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data21 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
+ label21 = gtk_label_new("Type:");
+ gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data21, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data14 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
+ label14 = gtk_label_new("Number:");
+ gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data14, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data1 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
+ label1 = gtk_label_new("Address:");
+ gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ field6 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ label2 = gtk_label_new("note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field6), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field6), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_techoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_techoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Technical Report style on the screen */
+
+void techreport(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ GtkWidget *field5;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void techoptions();
+ void save_techreport();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 13; /* indicate processing of a TECHREPORT */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Technical Report type - required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 325);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 8);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data9 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data9), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(data9), 345, -1);
+ label9 = gtk_label_new("Institution:");
+ gtk_widget_set_usize(GTK_WIDGET(label9), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label9, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data9, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ field5 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field5), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field5), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(techoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining Tech Report fields",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_techreport), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Tech Report reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Tech Report entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Tech Report",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 13;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
+
+
diff --git a/biblio/bibtex/utils/xbibfile/unpublished.c b/biblio/bibtex/utils/xbibfile/unpublished.c
new file mode 100644
index 0000000000..f8007e97c3
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/unpublished.c
@@ -0,0 +1,403 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Modified: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+/* This file is a modified copy of phd.c so that it handles the
+ * Unpublished BibTeX reference style */
+
+
+GtkWidget *labelX, *dataX;
+GtkWidget *label0, *data0;
+GtkWidget *label2, *data2;
+GtkWidget *label3, *data3;
+GtkWidget *label12, *data12;
+GtkWidget *label13, *data13, *textscroll;
+GtkWidget *label20, *data20;
+GtkWidget *label22, *data22;
+GtkWidget *label24, *data24;
+GtkWidget *label30, *data30;
+GtkWidget *label31, *data31;
+GtkWidget *label32, *data32;
+GtkTextBuffer *text13;
+GtkTextIter start, end;
+PangoFontDescription *font_desc;
+
+
+
+
+/* The procedure to save the Unpublished style */
+
+void save_unpublished(GtkWidget *widget)
+{
+ extern int format;
+ extern int length[];
+ extern char slate[][];
+ extern int lengthX;
+ extern char slateX[];
+ extern char slate2[];
+ extern char slate3[];
+ extern char slate12[];
+ extern char slate13[];
+ extern char slate20[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate30[];
+ extern char slate31[];
+ extern char slate32[];
+ extern void error(); /* defined in file error.c */
+ extern FILE *finput; /* defined in file xbibfile.c */
+ extern void close_window(); /* defined in file cleanup.c */
+
+ if (format != 14) {
+ error(widget, GINT_TO_POINTER(5));
+ return;
+ }
+ strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
+ lengthX = strlen(slateX);
+ strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
+ length[3] = strlen(slate3);
+ strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
+ length[2] = strlen(slate2);
+ strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
+ length[20] = strlen(slate20);
+ if (!(length[3] && length[2] && length[20] && lengthX)) {
+ error(widget, GINT_TO_POINTER(3));
+ return;
+ }
+ if (!finput) {
+ error(widget, GINT_TO_POINTER(8));
+ return;
+ }
+ /* finput = stdout; */
+ fprintf(finput, "\n@UNPUBLISHED{%s,\n", slateX);
+ fprintf(finput, " author = {%s},\n", slate3);
+ fprintf(finput, " title = {%s},\n", slate20);
+ fprintf(finput, " note = {%s}", slate2);
+ if (length[12])
+ fprintf(finput, ",\n month = {%s}", slate12);
+ if (length[24])
+ fprintf(finput, ",\n year = {%s}", slate24);
+ if (length[22])
+ fprintf(finput, ",\n URL = {%s}", slate22);
+ if (length[13])
+ fprintf(finput, ",\n annote = {%s}", slate13);
+ if (length[30])
+ fprintf(finput, ",\n uplink = {%s}", slate30);
+ if (length[31])
+ fprintf(finput, ",\n crosslink = {%s}", slate31);
+ if (length[32])
+ fprintf(finput, ",\n externlink = {%s}", slate32);
+ fprintf(finput, " }\n");
+ /* indicate that the reference is saved */
+ format = 0;
+ length[2] = 0;
+ length[3] = 0;
+ length[12] = 0;
+ length[13] = 0;
+ length[20] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ length[30] = 0;
+ length[31] = 0;
+ length[32] = 0;
+ close_window(widget); /* remove this reference window */
+}
+
+
+/* Save the Unpublished optional fields for subsequent saving */
+
+void save_unpublishedoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+ extern char slate12[];
+ extern char slate22[];
+ extern char slate24[];
+ extern char slate13[];
+ char *text_in_field;
+ int count;
+
+ strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
+ length[12] = strlen(slate12);
+ strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
+ length[24] = strlen(slate24);
+ strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
+ length[22] = strlen(slate22);
+ count = gtk_text_buffer_get_char_count(text13);
+ gtk_text_buffer_get_iter_at_offset(text13, &end, count);
+ gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
+ strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE));
+ length[13] = count;
+ close_window(widget);
+}
+
+
+
+
+/* Close the option entry window, but first delete the entries */
+
+void close_unpublishedoptions(GtkWidget *widget)
+{
+ extern void close_window();
+ extern int length[];
+
+ length[12] = 0;
+ length[22] = 0;
+ length[24] = 0;
+ length[13] = 0;
+ close_window(widget);
+}
+
+
+/* The procedure to put the optional Unpublished style fields on the screen */
+
+void unpublishedoptions(GtkWidget *widget)
+{
+ extern int format;
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *key0;
+ GtkWidget *key1;
+
+ void close_unpublishedoptions();
+ void save_unpublishedoptions();
+
+ if (format == 0) {
+ error (widget, GINT_TO_POINTER(6));
+ return;
+ }
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ gtk_widget_set_usize(GTK_WIDGET(window), 400, 480);
+ decoration = gtk_frame_new("Optional Unpublished fields");
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ /* put the text fields in place */
+ field1 = gtk_hbox_new(FALSE, 0);
+ data12 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
+ label12 = gtk_label_new("Month:");
+ gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field1), label12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), data12, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field2 = gtk_hbox_new(FALSE, 0);
+ data24 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
+ label24 = gtk_label_new("Year:");
+ gtk_widget_set_usize(GTK_WIDGET(label24), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data24, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data22 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
+ label22 = gtk_label_new("URL:");
+ gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data22, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ text13 = gtk_text_buffer_new(NULL);
+ data13 = gtk_text_view_new_with_buffer(text13);
+ textscroll = gtk_scrolled_window_new(NULL, NULL);
+ font_desc = pango_font_description_from_string("Sans 12");
+ gtk_widget_modify_font(data13, font_desc);
+ gtk_container_add(GTK_CONTAINER(textscroll), data13);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
+ label13 = gtk_label_new("Annotation:");
+ gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);
+
+ /* finally, put the cancel button in place */
+ field0 = gtk_hbox_new(FALSE, 0);
+ key0 = gtk_button_new_with_label("CANCEL");
+ gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
+ g_signal_connect(GTK_OBJECT(key0), "clicked",
+ G_CALLBACK(close_unpublishedoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key0,
+ "Discard the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_unpublishedoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store the contents of this window", NULL);
+ gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);
+
+
+ /* put the composite window on the screen */
+ gtk_widget_show_all(window);
+}
+
+
+
+/* The procedure to put the basic Unpublished style on the screen */
+
+void unpublished(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window;
+ GtkWidget *decoration;
+ GtkWidget *totalPane;
+ GtkWidget *opDecoration;
+ GtkWidget *field0;
+ GtkWidget *field1;
+ GtkWidget *option;
+ GtkWidget *controls;
+ GtkWidget *key1;
+ GtkWidget *key2;
+ GtkWidget *key3;
+ GtkWidget *key4;
+ GtkWidget *field2;
+ GtkWidget *field3;
+ GtkWidget *field4;
+ extern int format;
+ extern char slate0[];
+
+ extern void linkwindow();
+ extern void closure_check(); /* defined in file cleanup.c */
+ extern void close_window(); /* defined in file cleanup.c */
+ void unpublishedoptions();
+ void save_unpublished();
+
+ /* create the tooltip help feature */
+
+ tooltips = gtk_tooltips_new();
+
+ format = 14; /* indicate processing of UNPUBLISHED */
+
+ /* create the wondow and its top panel */
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
+ gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
+ decoration = gtk_frame_new("Unpublished type required fields");
+ gtk_widget_set_usize(GTK_WIDGET(window), 450, 300);
+ gtk_container_add(GTK_CONTAINER(window), decoration);
+ totalPane = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(decoration), totalPane);
+
+ field1 = gtk_hbox_new(FALSE,0);
+ dataX = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
+ gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
+ labelX = gtk_label_new("Tag/s:");
+ gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);
+
+ field0 = gtk_hbox_new(FALSE, 0);
+ data0 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
+ label0 = gtk_label_new("File used:");
+ gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
+ gtk_entry_set_text(GTK_ENTRY(data0), slate0);
+ gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);
+
+ /* position the remaining field entries */
+ field2 = gtk_hbox_new(FALSE, 0);
+ data3 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
+ label3 = gtk_label_new("Author/s:");
+ gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 8);
+
+ field3 = gtk_hbox_new(FALSE, 0);
+ data20 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
+ label20 = gtk_label_new("Title:");
+ gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);
+
+ field4 = gtk_hbox_new(FALSE, 0);
+ data2 = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
+ gtk_widget_set_usize(GTK_WIDGET(data2), 345, -1);
+ label2 = gtk_label_new("Note:");
+ gtk_widget_set_usize(GTK_WIDGET(label2), 65, -1);
+ gtk_box_pack_start(GTK_BOX(field4), label2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(field4), data2, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);
+
+ /* put the control keys on to the window */
+ option = gtk_hbox_new(FALSE, 0);
+ key2 = gtk_button_new_with_label("Optional fields");
+ gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
+ g_signal_connect(GTK_OBJECT(key2), "clicked",
+ G_CALLBACK(unpublishedoptions), NULL);
+ gtk_tooltips_set_tip(tooltips, key2,
+ "Click here to get window containing remaining fields for Unpublished",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
+ controls = gtk_hbox_new(FALSE, 0);
+ key1 = gtk_button_new_with_label("Save");
+ gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
+ g_signal_connect(GTK_OBJECT(key1), "clicked",
+ G_CALLBACK(save_unpublished), NULL);
+ gtk_tooltips_set_tip(tooltips, key1,
+ "Store this Unpublished reference in database", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
+ key3 = gtk_button_new_with_label("Cancel");
+ gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
+ g_signal_connect(GTK_OBJECT(key3), "clicked",
+ G_CALLBACK(closure_check), NULL);
+ gtk_tooltips_set_tip(tooltips, key3,
+ "Discard this Unpublished entry", NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
+ key4 = gtk_button_new_with_label("Linking");
+ gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
+ g_signal_connect(GTK_OBJECT(key4), "clicked",
+ G_CALLBACK(linkwindow), NULL);
+ gtk_tooltips_set_tip(tooltips, key4,
+ "Click here for window to create links for this Unpublished reference",
+ NULL);
+ gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
+ gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
+ gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);
+
+
+ format = 14;
+
+ /* make the composite visible on screen */
+ gtk_widget_show_all(window);
+}
diff --git a/biblio/bibtex/utils/xbibfile/xbibfile.c b/biblio/bibtex/utils/xbibfile/xbibfile.c
new file mode 100644
index 0000000000..3c755a923f
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/xbibfile.c
@@ -0,0 +1,165 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ * Renamed and reworked: January 2002
+ *
+ */
+
+/* History
+ *
+ * Version Date
+ * 0.1 October 1999 Initial release with Join and Lookup
+ * outputing to the console terminal window.
+ * 0.2 December 1999 In an attempt to solve the limited fields
+ * for some data entry, the code for assigning
+ * field-lengths was generalised.
+ * 0.3 May 2000 Added the URL field to reference type fields
+ * and error corrections
+ * 0.4 July 2000 Added the note field and commented out the
+ * actions of the Join and Lookup buttons
+ * 0.5 December 2000 Replace gtk_widget_show() with
+ * gtk_widget_show_all(), and add tooltips for
+ * help
+ * 0.6 January 2002 Major revision of software layout and computer
+ * graphics/human interface
+ * 0.7 November 2002 Upgrade the Gtk routines used internally in the
+ * source code from version 1.2 to 2.0
+ */
+
+/* This file initiates XBibFile */
+
+#include <stdio.h>
+#include <gtk/gtk.h>
+
+#include "xbibfile.h"
+
+
+/* These memory locations contain the input text fields and labels
+ * used by all the windows that enter the various BibTeX reference
+ * types. */
+
+int format; /* the BibTeX format being currently used */
+FILE *finput;
+FILE *refFile;
+char slateX[SMALL]; /* search key */
+int lengthX;
+int length[40]; /* length of strings entered via windows */
+char slate0[LARGE]; /* file currently being used for receiving */
+char slate1[LARGE]; /* address */
+char slate2[LARGE]; /* note */
+char slate3[LARGE]; /* author */
+char slate4[LARGE]; /* booktitle */
+char slate5[TINY]; /* chapter */
+char slate6[SMALL]; /* edition */
+char slate7[LARGE]; /* editor */
+char slate8[SMALL]; /* howpublished */
+char slate9[SMALL]; /* institution */
+char slate10[SMALL]; /* journal */
+char slate11[SMALL]; /* key */
+char slate12[TINY]; /* month */
+char slate13[HUGE]; /* annote */
+char slate14[SMALL]; /* number */
+char slate15[LARGE]; /* organization */
+char slate16[LARGE]; /* pages */
+char slate17[LARGE]; /* publisher */
+char slate18[LARGE]; /* school */
+char slate19[SMALL]; /* series */
+char slate20[LARGE]; /* title */
+char slate21[TINY]; /* type */
+char slate22[LARGE]; /* URL */
+char slate23[TINY]; /* volume */
+char slate24[TINY]; /* year */
+char slate30[LARGE]; /* Up Link */
+char slate31[LARGE]; /* Cross Link */
+char slate32[LARGE]; /* External Link */
+char slate40[LARGE]; /* name of file for cross-reference forming */
+GtkWidget *root; /* the widget that is the root of the current
+ * tree */
+
+
+int main(int argc, char *argv[])
+{
+ GtkTooltips *tooltips;
+ GtkWidget *top, *panel, *buttonBox, *buttonFrame;
+ GtkWidget *button1, *button2, *button3;
+ GtkWidget *description1, *description2, *separator;
+ int i;
+ extern byebye(GtkWidget); /* in cleanup.c */
+ extern file_select(GtkWidget); /* in file filing.c */
+ extern ref_select(GtkWidget *); /* in file filing.c */
+
+
+ format = 0; /* indicate start condition */
+ strcpy(slate0, "GO BACK and SELECT a FILE");
+ strcpy(slate40, "GO BACK and SELECT a REF FILE");
+ length[0] = strlen(slate0);
+ length[40] = strlen(slate40);
+ finput = 0;
+ refFile = 0;
+
+ /* initialise the string storage areas */
+ for (i=0; i<40; i++) {
+ length[i] = 0;
+ }
+ lengthX = 0;
+/* slateX = 1; */
+
+ /* create the initial window panel for the program */
+ gtk_init(&argc, &argv);
+
+ /* create the tooltip help feature */
+ tooltips = gtk_tooltips_new();
+
+ top = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(top), "XBibFile 0.7");
+ gtk_window_set_default_size(GTK_WINDOW(top), 150, 250);
+ panel = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(top), panel);
+ gtk_container_set_border_width(GTK_CONTAINER(top), 10);
+ description1 = gtk_label_new("Build and handle the \nBibTeX database");
+ gtk_box_pack_start_defaults(GTK_BOX(panel), description1);
+ description2 = gtk_label_new("\nVersion 0.7.1\n");
+ gtk_box_pack_start_defaults(GTK_BOX(panel), description2);
+ buttonBox = gtk_vbox_new(FALSE, 10);
+ gtk_widget_set_usize(GTK_WIDGET(buttonBox), 140, 130);
+ gtk_box_pack_start_defaults(GTK_BOX(panel), buttonBox);
+
+ button1 = gtk_button_new_with_label("Create New");
+ gtk_widget_set_usize(GTK_WIDGET(button1), 100, 30);
+ g_signal_connect(GTK_OBJECT(button1), "button-press-event",
+ G_CALLBACK(file_select), NULL);
+ gtk_tooltips_set_tip(tooltips, button1,
+ "Create a new BibTeX database entry", NULL);
+
+ gtk_box_pack_start_defaults(GTK_BOX(buttonBox), button1);
+
+ button2 = gtk_button_new_with_label("Find Reference");
+ gtk_widget_set_usize(GTK_WIDGET(button2), 100, 30);
+ g_signal_connect(GTK_OBJECT(button2), "button-press-event",
+ G_CALLBACK(ref_select), NULL);
+ gtk_tooltips_set_tip(tooltips, button2,
+ "Search database for an existing reference", NULL);
+ gtk_box_pack_start_defaults(GTK_BOX(buttonBox), button2);
+
+ separator = gtk_hseparator_new();
+ gtk_box_pack_start_defaults(GTK_BOX(buttonBox), separator);
+
+ button3 = gtk_button_new_with_label("exit");
+ gtk_widget_set_usize(GTK_WIDGET(button3), 100, 30);
+ g_signal_connect(GTK_OBJECT(button3), "button-press-event",
+ G_CALLBACK(byebye), NULL);
+ gtk_tooltips_set_tip(tooltips, button3,
+ "Exit this program", NULL);
+ gtk_box_pack_start_defaults(GTK_BOX(buttonBox), button3);
+
+ /* make this composite window visible on the screen */
+
+ gtk_widget_show_all(top);
+
+ /* process all signals associated with this application */
+ gtk_main();
+
+ /* The End */
+ return(0);
+}
diff --git a/biblio/bibtex/utils/xbibfile/xbibfile.h b/biblio/bibtex/utils/xbibfile/xbibfile.h
new file mode 100644
index 0000000000..acfb7968bc
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/xbibfile.h
@@ -0,0 +1,18 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: October 1999
+ *
+ */
+
+/* Definitions of the lengths of data fields used */
+
+#define TINY 50
+#define SMALL 100
+#define LARGE 200
+#define HUGE 2200
+
+#define NO_SPACING 0
+#define NO_PADDING 0
+#define FILL_YES TRUE
+#define EXPAND_YES TRUE
diff --git a/biblio/bibtex/utils/xbibtex/README b/biblio/bibtex/utils/xbibtex/README
new file mode 100644
index 0000000000..1b73ffcd4c
--- /dev/null
+++ b/biblio/bibtex/utils/xbibtex/README
@@ -0,0 +1,22 @@
+This directory contains the xbibtex, bibsearch, and bibprocess
+utilities for bibtex.
+
+The xbibtex utility provides an X Window interface for inserting
+entries into a bibliography database in bibtex format. xbibtex
+provides a template of the required and optional fields for each entry
+type defined by \bibtex. In addition, xbibtex accommodates two
+additional entries named ``keyword'' and ``annote'' for maintaining an
+annotated bibliography. The user enters the information to be stored
+in the database; xbibtex automatically inserts the entry in the
+bibliography file in a format that conforms to bibtex's
+specifications. bibprocess allows one to merge the contents of
+user-defined fields into a .bbl file produced by bibtex; bibsearch
+allows one to retrieve the latex key of publications that contain
+user-specified keywords.
+
+Nicholas J. Kelly Christian H. Bischof
+nkelly@nis.naitc.com bischof@mcs.anl.gov
+Nielsen Advanced Technology Ctr. Mathematics and Computer Science Div.
+Bannockburn Lake Office Plaza Argonne National Laboratory
+2201 Wauckegan Rd., Ste. S-200 9700 S. Cass Ave.
+Bannockburn, IL 60015 Argonne, IL 60439-4801
diff --git a/biblio/bibtex/utils/xbibtex/bibutils.shar.gz b/biblio/bibtex/utils/xbibtex/bibutils.shar.gz
new file mode 100644
index 0000000000..73f6a5fe5e
--- /dev/null
+++ b/biblio/bibtex/utils/xbibtex/bibutils.shar.gz
Binary files differ
diff --git a/biblio/bibtex/utils/xbibtex/man.shar.gz b/biblio/bibtex/utils/xbibtex/man.shar.gz
new file mode 100644
index 0000000000..aba35c5001
--- /dev/null
+++ b/biblio/bibtex/utils/xbibtex/man.shar.gz
Binary files differ
diff --git a/biblio/bibtex/utils/xbibtex/userguide.ps b/biblio/bibtex/utils/xbibtex/userguide.ps
new file mode 100644
index 0000000000..1249d88c53
--- /dev/null
+++ b/biblio/bibtex/utils/xbibtex/userguide.ps
@@ -0,0 +1,4322 @@
+%!PS-Adobe-2.0
+%%Creator: dvips, version 5.4 (C) 1986-90 Radical Eye Software
+%%Title: paper.dvi
+%%Pages: 14 1
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%%BeginProcSet: tex.pro
+/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+Resolution VResolution vsize neg mul TR}B /@letter{/vsize 10 N}B /@landscape{
+/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{/vsize 15.5531 N
+}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{statusdict
+/manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0
+]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0
+]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N
+/FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N
+/Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[
+}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype
+ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B
+/ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3
+sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data
+dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff
+ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height
+true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{
+/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S
+ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr
+ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI
+save N @rigin 0 0 moveto}B /eop{clear SI restore showpage userdict /eop-hook
+known{eop-hook}if}B /@start{userdict /start-hook known{start-hook}if
+/VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1
+string dup 0 3 index put cvn put}for}B /p /show load N /RMat[1 0 0 -1 0 0]N
+/BDot 8 string N /v{/ruley X /rulex X V}B /V{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}B /a{moveto}B /delta 0 N /tail{
+dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{
+-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p
+-4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t
+{p 4 w}B /w{0 rmoveto}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
+/eos{clear SS restore}B end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs
+792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N
+/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{
+@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true
+N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}
+B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B
+/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx
+defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{
+itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2
+roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll
+itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array
+astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{
+PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR
+pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if
+yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270
+rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not
+and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip
+not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}
+ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
+TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if}
+if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{
+DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save
+N userdict maxlength dict begin /magscale false def normalscale currentpoint
+TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx
+sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx
+psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N
+/erasepage{}N /copypage{}N @MacSetUp}N /doclip{psf$llx psf$lly psf$urx psf$ury
+currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S
+lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState
+restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults}B /@setspecial{CLIP{newpath 0 0 moveto hs 0
+rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo TR
+hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg
+TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}B /@endspecial{grestore
+clear SpecialSave restore end}B /@defspecial{SDict begin}B /@fedspecial{end}B
+/li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1
+setlinecap newpath}B /st{stroke SaveX SaveY moveto}B /fil{fill SaveX SaveY
+moveto}B /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix
+currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix
+setmatrix}B end
+%%EndProcSet
+TeXDict begin 1000 300 300 @start /Fa 60 122 df<00FC000182000703000607000E0200
+0E00000E00000E00000E00000E0000FFFF000E07000E07000E07000E07000E07000E07000E0700
+0E07000E07000E07000E07000E07000E07000E07007F0FE0131A809915>12
+D<60F0F0F0F0F0F060606060606060606060200000000060F0F060041A7D990B>33
+D<60C0F1E0F9F068D0081008100810102010202040C1800C0B7F9913>I<01C000000320000006
+1000000E1000000E1000000E1000000E1000000E2000000E4000000E40000007807F8007001E00
+07000800078010000B80100013C0200031C0200060E04000E0F08000E0788000E0390000E01E00
+80E00E0080700F01003873C3000F807C00191A7E991E>38 D<00800100020004000C0008001800
+3000300030006000600060006000E000E000E000E000E000E000E000E000E000E0006000600060
+006000300030003000180008000C00040002000100008009267D9B0F>40
+D<8000400020001000180008000C00060006000600030003000300030003800380038003800380
+0380038003800380038003000300030003000600060006000C0008001800100020004000800009
+267E9B0F>I<60F0F07010101020204080040B7D830B>44 D<FFC0FFC00A0280880D>I<60F0F060
+04047D830B>I<0004000C00180018001800300030003000600060006000C000C000C001800180
+01800300030003000600060006000C000C000C00180018001800300030003000600060006000C0
+00C0000E257E9B13>I<60F0F060000000000000000060F0F06004107D8F0B>58
+D<000C0000000C0000000C0000001E0000001E0000003F00000027000000270000004380000043
+8000004380000081C0000081C0000081C0000100E0000100E00001FFE000020070000200700006
+007800040038000400380008001C0008001C001C001E00FF00FFC01A1A7F991D>65
+D<FFFF000E01C00E00E00E00700E00780E00780E00780E00780E00780E00F00E00E00E03C00FFF
+800E01E00E00700E00780E003C0E003C0E003C0E003C0E003C0E00380E00780E00F00E01E0FFFF
+80161A7E991B>I<003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F0
+0000F00000F00000F00000F00000F000007000027000027800023800041C00041C00080E000803
+003001C0C0003F00171A7E991C>I<FFFF000E01C00E00E00E00300E00380E001C0E001C0E000E
+0E000E0E000F0E000F0E000F0E000F0E000F0E000F0E000F0E000F0E000E0E000E0E001E0E001C
+0E00380E00380E00700E01C0FFFF00181A7E991D>I<FFFFF00E00700E00300E00100E00180E00
+080E00080E00080E04000E04000E04000E0C000FFC000E0C000E04000E04000E04000E00040E00
+040E00080E00080E00080E00180E00380E0070FFFFF0161A7E991A>I<FFFFE00E00E00E00600E
+00200E00300E00100E00100E00100E04000E04000E04000E0C000FFC000E0C000E04000E04000E
+04000E00000E00000E00000E00000E00000E00000E00000E0000FFF000141A7E9919>I<003F02
+0001C0C60003002E000E001E001C000E001C00060038000600780002007000020070000200F000
+0000F0000000F0000000F0000000F0000000F001FFC070000E0070000E0078000E0038000E001C
+000E001C000E000E000E000300160001C06600003F82001A1A7E991E>I<FFE7FF0E00700E0070
+0E00700E00700E00700E00700E00700E00700E00700E00700E00700FFFF00E00700E00700E0070
+0E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF181A7E991D>I<FFE0
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E00FFE00B1A7F990E>I<FFE07F800E001E000E0018000E0010000E0020000E
+0040000E0080000E0100000E0200000E0400000E0800000E1C00000E2E00000E4E00000E870000
+0F0380000E0380000E01C0000E00E0000E00E0000E0070000E0070000E0038000E001C000E003E
+00FFE0FF80191A7E991E>75 D<FFF0000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00200E00200E00200E00600E00
+400E00400E00C00E03C0FFFFC0131A7E9918>I<FF0003FC0F0003C00F0003C00B8005C00B8005
+C00B8005C009C009C009C009C009C009C008E011C008E011C008E011C0087021C0087021C00838
+41C0083841C0083841C0081C81C0081C81C0081C81C0080F01C0080F01C0080F01C0080601C01C
+0601C0FF861FFC1E1A7E9923>I<FE01FF0F00380F00100B80100B801009C01008E01008E01008
+7010087010083810081C10081C10080E10080E100807100803900803900801D00801D00800F008
+00700800700800301C0030FF8010181A7E991D>I<007F000001C1C000070070000E0038001C00
+1C003C001E0038000E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0
+000780F0000780F000078078000F0078000F0038000E003C001E001C001C000E00380007007000
+01C1C000007F0000191A7E991E>I<FFFF000E03C00E00E00E00700E00700E00780E00780E0078
+0E00780E00700E00700E00E00E03C00FFF000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E0000FFE000151A7E991A>I<FFFC00000E0780000E01C0000E00E0000E
+00F0000E00F0000E00F0000E00F0000E00F0000E00E0000E01C0000E0780000FFC00000E060000
+0E0300000E0180000E01C0000E01C0000E01C0000E01E0000E01E0000E01E0000E01E0800E00F0
+800E007100FFE03E00191A7E991C>82 D<0FC21836200E6006C006C002C002C002E00070007E00
+3FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0101A7E9915>I<7FFF
+FF00701C0700401C0100401C0100C01C0180801C0080801C0080801C0080001C0000001C000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000
+001C0000001C0000001C0000001C0000001C000003FFE000191A7F991C>I<FFE1FF0E00380E00
+100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00
+100E00100E00100E00100E001006002007002003004001804000C180003E00181A7E991D>I<FF
+83FF0FF03C007801C01C007800801C007800800E007801000E007801000E009C010007009C0200
+07009C020007010E020007010E020003810E04000382070400038207040001C207080001C40388
+0001C403880000E403900000E403900000E801D000007801E000007801E000007000E000007000
+E000003000C0000020004000241A7F9927>87 D<7FC0FF000F003C000700300007802000038060
+0001C0400001E0800000E1800000710000007A0000003C0000001C0000001E0000001E00000017
+000000278000004380000041C0000081E0000100E0000100700002007800040038000C001C001E
+003E00FF80FFC01A1A7F991D>I<FF801FE01E0007000E0006000F000400070008000780080003
+C0100001C0300001E0200000F04000007040000078800000388000001D0000001F0000000E0000
+000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E000000FFE0
+001B1A7F991D>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0FEFE07257D9B0B>91 D<1830204040804080810081008100B160F9F078F030600C0B7B
+9913>I<FEFE060606060606060606060606060606060606060606060606060606060606060606
+FEFE0725809B0B>I<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB
+1E3C10107E8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00
+001CF8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03
+001E07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E000E000E000E000E000
+7000300438080C1807E00E107F8F11>I<007E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E0
+0E00600E00700E00381E001C2E0007CFC0121A7F9915>I<07C01C3030187018600CE00CFFFCE0
+00E000E000E0006000300438080C1807E00E107F8F11>I<01F0031807380E100E000E000E000E
+000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00D1A
+80990C>I<0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE600F
+C003C003C003C0036006381C07E010187F8F13>I<FC00001C00001C00001C00001C00001C0000
+1C00001C00001C00001C00001CF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E00
+1C0E001C0E001C0E001C0E001C0E001C0E00FF9FC0121A7F9915>I<18003C003C001800000000
+000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+FF80091A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C3F801C1E001C18001C10001C20001C40001DC0001FE0001CE0001C70001C78001C38001C1C00
+1C1E001C1F00FF3FC0121A7F9914>107 D<FC001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A>I<FC
+7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0
+1C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I<FCF8001D0C001E0E
+001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00FF9F
+C012107F8F15>I<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807
+E010107F8F13>I<FCF8001F0E001E07001C03801C03801C01C01C01C01C01C01C01C01C01C01C
+01C01C03801C03001E07001F0C001CF0001C00001C00001C00001C00001C00001C0000FF800012
+177F8F15>I<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00
+700E00700E00381E001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC012177F
+8F14>I<FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FFC00C107F
+8F0F>I<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F
+8F0F>I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C
+201C201C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E001C0E001C0E00
+1C0E001C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15>I<FF1F803C06
+001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C00001C00001C0
+0000800011107F8F14>I<FF3F9F803C0E0700380E06001C1604001C1704001E170C000E230800
+0E2388000F239800074190000741D00003C1E0000380E0000380E0000180C0000100400019107F
+8F1C>I<FF3F803C1C001C18000E100007200007600003C00001C00001E00003E0000270000438
+00083800181C00381E00FC3FC012107F8F14>I<FF1F803C06001C04001C04001E0C000E08000E
+080007100007100007900003A00003A00001C00001C00001C000008000008000010000010000E1
+0000E20000E4000078000011177F8F14>I E /Fb 1 98 df<01E3000717000C0F00180F00380E
+00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
+0011127E9116>97 D E /Fc 15 121 df<3078F06005047C830C>46 D<000F8200706200C01603
+801E07000C0E000C1C000C18000C380008300008700000700000E00000E00000E00000E00000E0
+0020E00020E00020E000406000406000803001001006000C180003E000171A7A991B>67
+D<007E007E00C000C000C000C00180018001800180030003000300030006000600060006000C00
+0C000C000C00180018001800180030003000300030006000600060006000C000FC00FC000F257E
+9B0C>91 D<007E007E000C000C000C000C00180018001800180030003000300030006000600060
+006000C000C000C000C00180018001800180030003000300030006000600060006000C00FC00FC
+000F25819B0C>93 D<03CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F26134
+1E180F107C8F14>97 D<7E000E000E000E001C001C001C001C00380038003BC03C307830701870
+187018E038E038E038E038C070C060C0E060C063801E000D1A7C9912>I<01F006080C18183830
+1070006000E000E000E000E000E008E010602030C01F000D107C8F12>I<001F80000380000380
+000380000700000700000700000700000E00000E0003CE000E2E00181C00381C00301C00701C00
+E03800E03800E03800E03800C07200C07200C0720060F2006134001E1800111A7C9914>I<01E0
+06181C08380870087010FFE0E000E000E000E000E0086010602030C01F000D107C8F12>I<0307
+06000000000000384C4E8E9C9C1C3838707272E2E4643808197C980C>105
+D<1F8003800380038007000700070007000E000E000E0E0E131C271C431C801F003C003F8039C0
+38E070E270E270E270E4E0646038101A7E9912>107 D<3F0707070E0E0E0E1C1C1C1C38383838
+70707070E4E4E4E46830081A7D990A>I<307C005986009E07009E07009C07009C0700380E0038
+0E00380E00381C00701C80701C80703880703900E01900600E0011107C8F16>110
+D<030F000590C009E0C009C06009C06009C0600380E00380E00380E00380E00701C00701800703
+800703000E8E000E78000E00000E00001C00001C00001C00001C0000FF00001317808F14>112
+D<078F0008D18010F38020E18020E00020E00001C00001C00001C00001C000038200038200C382
+00E78400C5880078F00011107E8F12>120 D E /Fd 52 126 df<60F0F0F0F0F0F0F0F0F0F0F0
+F0F0600000000060F0F0600417789614>33 D<C060E0E0E0E0E0E0E0E0C060C060C060C060C060
+40400B0B7C9614>I<00C001C0030006000C001C0038003000700070006000E000E000E000E000
+E000E000E000600070007000300038001C000C000600030001C000C00A1D7A9914>40
+D<8000C0006000300018001C000E00060007000700030003800380038003800380038003800300
+0700070006000E001C00180030006000C0008000091D7C9914>I<70F8FCFC7C0C1830E0C0060A
+798414>44 D<FFFEFFFEFFFE0F037E8C14>I<70F8F8F8700505798414>I<0300030007000F003F
+00F7004700070007000700070007000700070007000700070007000700070007007FF07FF00C17
+7C9614>49 D<0FC01FF03838701C701C201C001C001C0038007007E007F00038001C000E000E40
+0EE00EE00E701C78383FF00FC00F177E9614>51 D<00780000F80001B80001B800033800033800
+0638000E38000C38001C3800383800303800703800E03800FFFF80FFFF80003800003800003800
+00380000380001FF0001FF0011177F9614>I<E000FFFEFFFEE01CE0380030007000E000C001C0
+01800380038007000700070007000E000E000E000E000E000E0004000F187E9714>55
+D<0FE03FF8783C701CE00EE00EE00EE00E701C1EF003801FF03838701CE00EE00EE00EE00EF01E
+701C38381FF007C00F177E9614>I<07C01FE038307038601CE01CE00CE00EE00E601E701E383E
+1FEE07CE000E001C001C001C7038707070E03FC01F000F177E9614>I<70F8F8F8700000000000
+0070F8F8F8700510798F14>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF
+8011097F8F14>61 D<01E007F00E38181C38FC71FC739E739EE70EE70EE70EE70EE70EE70EE70E
+739C739C71F838F018060E1E07F801F00F177E9614>64 D<FFF0FFFC381E380E38073807380738
+07380E381E3FFC3FFC381E380E38073807380738073807380E381EFFFCFFF810177F9614>66
+D<03C60FFE1C3E181E381E700E700E600EE000E000E000E000E000E000E000600E700E700E380C
+181C1C380FF003C00F177E9614>I<FFE000FFF800383C00381E00380E00380700380700380700
+380380380380380380380380380380380380380380380380380700380700380E00381E00383C00
+FFF800FFE00011177F9614>I<FE3F80FE3F80380E00380E00380E00380E00380E00380E00380E
+00380E003FFE003FFE00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F
+80FE3F8011177F9614>72 D<FFF8FFF80700070007000700070007000700070007000700070007
+000700070007000700070007000700FFF8FFF80D177D9614>I<FFF0FFFC381E380E3807380738
+0738073807380E381E3FFC3FF038003800380038003800380038003800FE00FE0010177F9614>
+80 D<FFE000FFF800383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000
+383800381C00381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>
+82 D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE00E
+E00EF01CF838FFF0C7E00F177E9614>I<FE0FE0FE0FE038038038038038038038038038038038
+03803803803803803803803803803803803803803803803803803803803803801C07001C07000E
+0E0007FC0001F0001317809614>85 D<FC1F80FC1F807007007007007007007007007007007007
+0030060031C6003BEE003BEE003B6E003B6E003B6E003B6E003B6E001B6C001B6C001A2C001E3C
+001E3C001E3C0011177F9614>87 D<C000E000E00070007000380038001C001C000E000E000700
+070003800380038001C001C000E000E00070007000380038001C001C000E000E00060F1D7E9914
+>92 D<1FC0007FF000707800201800001C00001C0007FC001FFC003C1C00701C00E01C00E01C00
+E01C00707C003FFF800F8F8011107E8F14>97 D<FC0000FC00001C00001C00001C00001C00001C
+00001CF8001DFE001F07001E03001C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E
+03001F0E001DFC000CF8001217809614>I<03F80FFC1C1C380870006000E000E000E000E00060
+007000380E1C1E0FFC03F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E00
+07CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00
+383E001FEFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE000600070
+00380E1C1E0FFC03F00F107E8F14>I<007C00FE01CE03840380038003807FFEFFFE0380038003
+800380038003800380038003800380038003807FFC7FFC0F177F9614>I<07CF001FFF80383B80
+301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC003FFE00
+700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14>I<FC0000FC00
+001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C07001C07001C07001C07
+001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE01317809614>I<03000780078003
+0000000000000000007F807F80038003800380038003800380038003800380038003800380FFFC
+FFFC0E187D9714>I<006000F000F0006000000000000000001FF01FF000700070007000700070
+007000700070007000700070007000700070007000700070007040E0E0C07F803F000C207E9714
+>I<FC0000FC00001C00001C00001C00001C00001C00001DFF801DFF801C3C001C78001CF0001D
+E0001FC0001FC0001FE0001EF0001C70001C38001C38001C1C00FE3F80FE3F8011177F9614>I<
+FF80FF800380038003800380038003800380038003800380038003800380038003800380038003
+800380FFFEFFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038
+E38038E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F8600
+1E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE0
+1310808F14>I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C783C3C781FF007C0
+0F107E8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C01C01C01C01C01C01C01
+C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C00001C00001C0000FF8000FF80
+001218808F14>I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E00000E00000E
+00000E00000E00000E0000FFF000FFF00011107F8F14>114 D<0FD83FF86038C038C038F0007F
+803FF007F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<030007000700070007007FFCFF
+FC07000700070007000700070007000700070E070E070E070C03FC00F00F157F9414>I<FC3F00
+FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F00
+0FFFE003E7E01310808F14>I<FE3F80FE3F801C1C001C1C001C1C001C1C000E38000E38000E38
+0006300007700007700007700003E00003E00003E00011107F8F14>I<FF7F80FF7F80380E0038
+0E00380E00380E0039CE0039CE0019CC001B6C001B6C001A6C001A6C001E7C000E78000E780011
+107F8F14>I<FE3F80FE3F801C1C001C1C001C1C000E1C000E38000E3800073800073000073000
+03700003700001E00001E00001E00001C00001C00001C0000380007380007700007E00003C0000
+11187F8F14>121 D<003E00FE01E003800380038003800380038003800380038003807F00FE00
+7F00038003800380038003800380038003800380038001E000FE003E0F1D7E9914>123
+D<7800FE000F00038003800380038003800380038003800380038001FC00FE01FC038003800380
+03800380038003800380038003800F00FE0078000F1D7E9914>125 D E
+/Fe 1 98 df<00200000700000700000700000B80000B80000B800011C00011C00011C00020E00
+020E0004070004070007FF000803800803800803801801C03803C0FE0FF815157F9419>97
+D E /Ff 45 124 df<183C3C3C0404080810204080060C779C0D>39 D<18387838080810102040
+4080050C7D830D>44 D<3078F06005047C830D>46 D<00020006000C001C007C039C0038003800
+380038007000700070007000E000E000E000E001C001C001C001C003800380038003800780FFF0
+0F1C7C9B15>49 D<0001800001C0000380000380000380000300000700000700000600000E0000
+0C00001C0000180000180000300000300000600000400000C600018E00010E00020E00061C000C
+1C00181C003F1C0040F800803F0000380000380000700000700000700000700000E00000600012
+247E9B15>52 D<0000180000001800000038000000380000007800000078000000B8000001B800
+000138000002380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C
+00007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C00
+1E00FF00FFC01A1D7E9C1F>65 D<01FFFE00003C0780003803C0003801C0003801C0003801C000
+7001C0007003C0007003C00070078000E0070000E00E0000E03C0000FFF80001C01C0001C00E00
+01C00F0001C00F0003800F0003800F0003800F0003800F0007001E0007001C0007003C00070078
+000E01E000FFFF80001A1C7D9B1D>I<0003F020001E0C60003002E000E003C001C001C0038001
+C0070000C00E0000801E0000801C0000803C0000803C000000780000007800000078000000F000
+0000F0000000F0000000F0000000F0000400F0000400F0000400F0000800700008007000100038
+002000180040000C0180000706000001F800001B1E7A9C1E>I<0003F020001E0C60003002E000
+E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078000000
+7800000078000000F0000000F0000000F001FFC0F0001E00F0001C00F0001C00F0001C00F0001C
+00700038007000380038003800180078000C0090000707100001F800001B1E7A9C20>71
+D<01FFC0003C0000380000380000380000380000700000700000700000700000E00000E00000E0
+0000E00001C00001C00001C00001C0000380000380000380000380000700000700000700000700
+000F0000FFE000121C7E9B10>73 D<01FFE0003C00003800003800003800003800007000007000
+00700000700000E00000E00000E00000E00001C00001C00001C00001C000038008038008038008
+0380100700100700300700600700E00E03C0FFFFC0151C7D9B1A>76 D<01FE0007F8003E000780
+002E000F00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E
+00008E011C00008E011C00008E021C00008E021C00010704380001070438000107083800010710
+38000207107000020720700002072070000207407000040740E000040780E000040700E0000C07
+00E0001C0601E000FF861FFC00251C7D9B25>I<0007F000001C1C0000700E0000E0070001C003
+8003800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C07800
+03C0F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0003C007000380070
+0070007800E0003801C0001C0380000E0E000003F800001A1E7A9C20>79
+D<0007F000001C1C0000700E0000E0070001C0078003800380070003800E0003C01E0003C01C00
+03C03C0003C03C0003C0780003C0780003C0780003C0F0000780F0000780F0000780F0000F00F0
+000F00F0000E00F0001E00F0001C0070783800708070007104E0003905C0001D0780000F0E0400
+03FE040000060C0000060800000E1800000FF0000007F0000007E000000380001A257A9C20>81
+D<01FFF800003C0E00003807000038038000380380003803800070078000700780007007800070
+0F0000E00E0000E01C0000E0700000FFC00001C0C00001C0600001C0700001C070000380700003
+80700003807000038070000700F0000700F0400700F0400700F0800F007880FFE0790000001E00
+1A1D7D9B1E>I<000F8400304C00403C0080180100180300180300180600100600100600000700
+0007000003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001
+80600180600300600200F00400CC180083E000161E7D9C17>I<1FFFFFC01C0701C0300E00C020
+0E0080600E0080400E0080401C0080801C0080801C0080001C0000003800000038000000380000
+003800000070000000700000007000000070000000E0000000E0000000E0000000E0000001C000
+0001C0000001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018
+000E0010000E0010000E0010001C0020001C0020001C0020001C00200038004000380040003800
+40003800400070008000700080007000800070008000E0010000E0010000E0010000E0020000E0
+020000E0040000E00400006008000030300000104000000F800000191D779B1F>I<FF803FC01C
+000F001C0004001C0008001C0008001C0010001C0010001C0020001C0040001C0040001E008000
+0E0080000E0100000E0200000E0200000E0400000E0400000E0800000E1800000E1000000E2000
+00072000000740000007C0000007800000070000000700000006000000060000001A1D779B1F>
+I<FF83FF0FF03C007001C038007001803800F001003800F0020038017002003801700400380270
+040038027008001C047008001C047010001C087010001C087020001C107020001C107040001C20
+7040001C207080001C407180001C407100001C807200001D807200001D007400001E007400001E
+007800001C007800001C00700000180070000018006000001000600000241D779B29>I<01FF81
+FE001E00F0001C0060001E0080000E0180000E0100000F02000007040000070800000790000003
+A0000003C0000001C0000001C0000001E0000002E0000004E0000008F000001070000020700000
+6038000040380000803C0001001C0002001C0006001E001E001E00FF80FFC01F1C7E9B1F>I<03
+CC063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F127B91
+15>97 D<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870
+387038E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C38
+38300070007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F800003
+80000380000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C
+00383800303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264
+003C3800111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000E008
+6010602030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C00003800003800
+00380000380000380003FF8000700000700000700000700000700000E00000E00000E00000E000
+00E00001C00001C00001C00001C00001C000038000038000038000030000030000070000C60000
+E60000CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C38
+1C383830383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC000
+01C00001C0000380000380000380000380000700000700000700000700000E78000E8C000F0E00
+0E0E001C0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100
+E03200601C00111D7D9C15>I<01800380010000000000000000000000000000001C0026004700
+47008E008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<0FC0
+0001C00001C0000380000380000380000380000700000700000700000700000E0F000E11000E23
+800E43801C83001C80001D00001E00003F800039C00038E00038E00070E20070E20070E20070E4
+00E06400603800111D7D9C13>107 D<1F800380038007000700070007000E000E000E000E001C
+001C001C001C0038003800380038007000700070007000E400E400E400E40068003800091D7C9C
+0B>I<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C0
+1C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C
+9122>I<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C
+00381C40381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C300E70
+0E700EE01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008E0C0
+08E0C011C0E011C0E001C0E001C0E00381C00381C00381C0038180070380070300070700070600
+0E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C3C
+26C2468747078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112
+>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F
+000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E
+001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E03002707004707004707
+00870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C59
+00078E0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818083808
+181018200C4007800F127C9113>I<1E01832703874703874703838707018707010E07010E0701
+1C0E021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>I<1E03
+270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000
+E0E0C0E1C0818047003C00101A7C9114>121 D<038207C20FEC08381008001000200040008001
+000200040008081008383067F043E081C00F127D9111>I<FFFFC012017C8B15>I
+E /Fg 2 122 df<0C000C008C40EDC07F800C007F80EDC08C400C000C000A0B7D8B10>3
+D<1818181818FFFF18181818181818181818181818181808167D900E>121
+D E /Fh 2 16 df<FFFFFF80FFFFFF8019027D8A20>0 D<03C00FF01FF83FFC7FFE7FFEFFFFFF
+FFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E9115>15 D E /Fi 60
+122 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000000F8000
+000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C000F807C000F80
+7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C007FE1FF807F
+E1FF80191D809C1B>12 D<78FCFCFEFE7A0202040408083040070E7D850D>44
+D<78FCFCFCFC7806067D850D>46 D<000180000380000380000700000700000700000E00000E00
+001C00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001C000
+01C0000380000380000380000700000700000E00000E00000E00001C00001C00001C0000380000
+380000700000700000700000E00000E00000C0000011297D9E18>I<03F8000F1E001C07003C07
+803803807803C07803C07803C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803
+E0F803E0F803E0F803E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>I<00
+600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E00003
+E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF807F
+FF80111B7D9A18>I<07F8001FFE00383F80780FC0FC07C0FC07E0FC03E0FC03E07803E00007E0
+0007C00007C0000F80001F00001E0000380000700000E0000180600300600600600800E01FFFC0
+3FFFC07FFFC0FFFFC0FFFFC0131B7E9A18>I<03F8001FFE003C1F003C0F807C07C07E07C07C07
+C03807C0000F80000F80001E00003C0003F800001E00000F800007C00007C00007E03007E07807
+E0FC07E0FC07E0FC07C0780F80781F001FFE0007F800131B7E9A18>I<00018000038000078000
+0F80001F80003F80006F8000CF80008F80018F80030F80060F800C0F80180F80300F80600F80C0
+0F80FFFFF8FFFFF8000F80000F80000F80000F80000F80000F8001FFF801FFF8151B7F9A18>I<
+1801801FFF001FFE001FFC001FF8001FC00018000018000018000018000019F8001E0E00180F80
+1007800007C00007E00007E00007E07807E0F807E0F807E0F807C0F007C0600F80381F001FFE00
+07F000131B7E9A18>I<007E0003FF000781800F03C01E07C03C07C03C0380780000780000F800
+00F8F800FB0E00FA0780FC0380FC03C0F803E0F803E0F803E0F803E07803E07803E07803C03C03
+C03C07801E0F0007FE0003F800131B7E9A18>I<6000007FFFE07FFFE07FFFC07FFF807FFF80E0
+0300C00600C00C00C0180000300000300000600000E00000E00001E00001C00003C00003C00003
+C00003C00007C00007C00007C00007C00007C00007C000038000131C7D9B18>I<03F8000FFE00
+1E0F803807803803C07803C07803C07E03C07F83807FC7003FFE001FFC000FFE0007FF801DFF80
+387FC0781FE0F007E0F003E0F001E0F001E0F001E07801C07803803E07801FFE0003F800131B7E
+9A18>I<03F8000FFE001E0F003C07807807807803C0F803C0F803C0F803E0F803E0F803E0F803
+E07807E03807E03C0BE00E1BE003E3E00003E00003C00003C03807C07C07807C0700780F00383C
+001FF8000FE000131B7E9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806127D910D>I<00
+038000000380000007C0000007C0000007C000000FE000000FE000001FF000001BF000001BF000
+0031F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003FFFF
+8003001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B24>
+65 D<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00FC007E00FC007E00FC007E00FC007E0
+0FC007E00FC007C00FC00F800FC03F000FFFFE000FC00F800FC007C00FC007E00FC003E00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C
+7E9B22>I<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E00
+00607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C
+0000607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE000
+1B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000FC
+0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01FC0FFFFFF00FFFF
+F8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC003800FC003800FC1
+81800FC181800FC181800FC180000FC380000FFF80000FFF80000FC380000FC180000FC180000F
+C180600FC180600FC000E00FC000C00FC000C00FC001C00FC001C00FC003C00FC00F80FFFFFF80
+FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC003800FC00380
+0FC001800FC181800FC181800FC180000FC180000FC380000FFF80000FFF80000FC380000FC180
+000FC180000FC180000FC180000FC000000FC000000FC000000FC000000FC000000FC00000FFFF
+0000FFFF0000191C7E9B1E>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F00
+00383E0000387E0000187C000018FC000000FC000000FC000000FC000000FC000000FC000000FC
+007FFFFC007FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E001F801FC07F8
+007FFE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003F0
+0FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC0
+03F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFFFFFF07E007E007E007E007E007E007E007E007E0
+07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF101C7F9B12
+>I<FFFC07FFFFFC07FF0FC000E00FC001C00FC003800FC006000FC00C000FC038000FC070000F
+C0E0000FC1C0000FC3C0000FC7E0000FCFE0000FFBF0000FF3F8000FE1F8000FC0FC000FC0FE00
+0FC07E000FC03F000FC01F800FC01FC00FC00FC00FC007E00FC007F0FFFC3FFFFFFC3FFF201C7E
+9B25>75 D<FFFF00FFFF000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC00E0F
+C01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00DF0000DF00D
+F0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E0061F00C3E0061F0
+0C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C301F00C07C301F00C03E601
+F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801F00C00F801F0FFC0701FFFFFC070
+1FFF281C7E9B2D>I<003FE00001F07C0003C01E000F800F801F0007C01E0003C03E0003E07E00
+03F07C0001F07C0001F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC
+0001F87C0001F07E0003F07E0003F03E0003E03F0007E01F0007C00F800F8003C01E0001F07C00
+003FE0001D1C7D9B24>79 D<FFFFF800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FF
+FC0000FFFC00001B1C7E9B21>I<003FE00001F07C0003C01E000F800F801F0007C01F0007C03E
+0003E07E0003F07C0001F07C0001F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8
+FC0001F8FC0001F87C0001F07C0001F07E0003F03E0003E03E0703E01F08C7C00F906F8003D07E
+0001F87C00003FF8080000380800003C1800003FF800001FF800001FF000000FF0000007E00000
+03C01D247D9B24>I<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000FC007E000
+0FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC03E00000FFFF000
+000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F80000FC01F80000FC01F
+80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C300FFFC01FE00211C7E9B24>I<
+07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF00
+3FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03C0
+EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F
+8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
+07FFFE0007FFFE001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000
+300FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C000FC
+0780007FFE00000FF800201C7E9B25>I<FFFC7FFE0FFCFFFC7FFE0FFC0FC007E000C00FC007F0
+00C00FE003F001C007E003F0018007E007F8018003F007F8030003F007F8030003F80CFC070001
+F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC387F0C00007E303F1800007E303F
+1800007F601FB800003F601FB000003FE01FF000003FC00FF000001FC00FE000001FC00FE00000
+0F8007C000000F8007C000000F0003C0000007000380000007000380002E1C7F9B31>87
+D<7FFE1FFE007FFE1FFE0007F001800003F803800001FC07000000FC06000000FE0C0000007F1C
+0000003F380000003FB00000001FE00000000FE00000000FE000000007F000000003F800000007
+F80000000FFC0000000CFE000000187E000000387F000000703F800000601F800000C01FC00001
+C00FE000018007F000030007F000FFF03FFF80FFF03FFF80211C7F9B24>I<0FF8001C1E003E0F
+803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780B
+C03E13F80FE1F815127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F0000
+1F00001F00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E
+1F003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F
+003C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C03
+000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F00001F00001F000
+01F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F8
+01F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C0380
+3C01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C0
+0F038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80
+000F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80
+000F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C
+07303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001F
+FFC00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<
+FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E0
+1F40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E000000000000000000000000
+00FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E
+7F9D0E>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F
+0FF81F0FF81F03801F07001F0C001F18001F70001FF8001FFC001FBC001F3E001F1F001F0F001F
+0F801F07C01F03E0FFC7FCFFC7FC161D7F9C19>107 D<FF00FF001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FF
+E0FFE00B1D7F9C0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807
+C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F8
+07C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F01F
+80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FF
+E7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8
+F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<FF3F80FFE1
+E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C1F00
+781F80F01FC1E01F3F001F00001F00001F00001F00001F00001F0000FFE000FFE000171A7F911B
+>I<03F0600F0CE01E07E03C03E07C03E07803E0F803E0F803E0F803E0F803E0F803E0F803E078
+03E07C03E03C03E01C07E00E0FE003F3E00003E00003E00003E00003E00003E00003E0001FFC00
+1FFC161A7E9119>I<FE3E00FE47001E8F801E8F801E8F801F07001F00001F00001F00001F0000
+1F00001F00001F00001F00001F00001F0000FFF000FFF00011127F9114>I<1FD830786018E018
+E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<03000300
+03000300070007000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F
+0C1F0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FF
+C1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F60001F60001FE0000
+FC0000FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F83
+E0700F83F0600F86F06007C6F0C007CEF8C007EC79C003EC7D8003F83D8001F83F0001F83F0001
+F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81800F838007C70003EE
+0001FC0001F80000F800007C0000FE0001DF00039F00070F800607C00C03E0FF07FCFF07FC1612
+7F9119>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F70001
+F60000FE0000FC0000FC00007800007800003000003000007000706000F86000F8C000F9800073
+00003E0000161A7F9119>I E /Fj 1 98 df<00800001C00001C00001C0000260000260000260
+000430000430000C18000818000FF800100C00100C00100C00300E00F81F8011117F9014>97
+D E /Fk 59 123 df<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF00
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE0
+1317809614>12 D<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700
+001C070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C07
+03801C0703801C0703801C0703801C070380FF1FCFF01C1780961D>14 D<60C0F1E0F1E070E010
+20102020402040408040800B0A7F9612>34 D<60F0F070101020204040040A7D960A>39
+D<60F0F070101020204040040A7D830A>44 D<FF80FF80090280870C>I<60F0F06004047D830A>
+I<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C3018
+1C7007C00F157F9412>48 D<03000700FF00070007000700070007000700070007000700070007
+000700070007000700070007007FF00C157E9412>I<0F8030E040708030C038E0384038003800
+700070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I<0FE03030601870
+1C701C001C00180038006007E000300018000C000E000EE00EE00EC00C401830300FE00F157F94
+12>I<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E0388030
+406020C01F000D157E9412>53 D<01F00608080C181C301C70006000E000E3E0EC30F018F00CE0
+0EE00EE00E600E600E300C3018183007C00F157F9412>I<07E018302018600C600C700C78183E
+101F600FC00FF018F8607C601EC00EC006C006C004600C38300FE00F157F9412>56
+D<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C701870186030
+20C01F800F157F9412>I<60F0F06000000000000060F0F07010102020404004147D8D0A>59
+D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107000307
+8002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE17177F961A>65
+D<FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C01C01FFF801FFFC01C00
+E01C00701C00301C00381C00381C00381C00381C00701C00E01C01C0FFFF0015177F9619>I<00
+FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E00000E0
+0000E000106000107000103000203800201C00400E008003830000FC0014177E9619>I<FFFF00
+1C01C01C00E01C00301C00381C00181C001C1C000C1C000E1C000E1C000E1C000E1C000E1C000E
+1C000E1C000C1C001C1C001C1C00381C00301C00601C01C0FFFF0017177F961B>I<FFFFE01C00
+E01C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC001C0C001C04001C04
+081C04081C00081C00181C00101C00101C00301C00F0FFFFF015177F9618>I<FFE00E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0
+0B177F960D>73 D<FF80FE1C00781C00601C00401C00801C01001C06001C08001C10001C38001C
+78001C9C001D0E001E0E001C07001C03801C01C01C01C01C00E01C00701C00781C007CFF80FF18
+177F961B>75 D<FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C00201C00201C00201C00601C00601C00401C00C01C03C0FFFFC01317
+7F9616>I<FE0003F81E0003C0170005C0170005C0170005C0138009C0138009C011C011C011C0
+11C011C011C010E021C010E021C0107041C0107041C0107041C0103881C0103881C0101D01C010
+1D01C0100E01C0100E01C0380E01C0FE040FF81D177F9620>I<FC00FE1E00381F001017001013
+801011C01011C01010E010107010103810103810101C10100E10100F101007101003901001D010
+01D01000F0100070100030380030FE001017177F961A>I<00FC000303000E01C01C00E0380070
+300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C700038700038300030
+3800701C00E00E01C003030000FC0016177E961B>I<FFFE001C03801C00C01C00601C00701C00
+701C00701C00701C00601C00C01C03801FFE001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C0000FF800014177F9618>I<FFFC001C03801C00C01C00E01C00701C00701C
+00701C00701C00E01C00C01C03801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C
+00E11C00E11C0072FF803C18177F961A>82 D<0FC4302C601C400CC004C004C004E00070007F00
+3FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E9614>I<7FFFF8603818
+403808403808803804803804803804003800003800003800003800003800003800003800003800
+00380000380000380000380000380000380000380007FFC016177F9619>I<FF80FE1C00381C00
+101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00
+101C00101C00100E0020060020030040018180007E0017177F961A>I<FF07FC3F803C01E00E00
+1C00E004001C00E004001C017004000E017008000E017008000E02380800070238100007023810
+0007041C100003841C200003841C200003880E200001C80E400001C80E400001D80F400000F007
+800000F007800000F007800000600300000060030000006003000021177F9624>87
+D<FF83FC1F01E00E008007008007810003820001C20001E40000E800007800007800003800007C
+00005E00008E000187000107800203800601C00401E00C00E01C00F0FF03FE17177F961A>I<20
+4020404080408081008100E1C0F1E0F1E060C00B0A7B9612>92 D<1FC0386038301038003803F8
+1E3830387038E039E039E07970FF1F1E100E7F8D12>97 D<FC00001C00001C00001C00001C0000
+1C00001C00001C00001C00001CF8001F06001C03001C03801C01801C01C01C01C01C01C01C01C0
+1C01801C03801C03001B0E0010F8001217809614>I<07F01838303870106000E000E000E000E0
+00600070083008183007C00D0E7F8D10>I<007E00000E00000E00000E00000E00000E00000E00
+000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00
+301E00182E0007CFC012177F9614>I<0FC0186030307038E018FFF8E000E000E0006000700830
+10183007C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C001C
+001C001C001C001C001C001C001C001C00FF800C1780960B>I<0F9E18E3306070707070707030
+6018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>I<FC0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C7C001D8E001E07001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C0700FF9FE01317809614>I<183C3C1800
+000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780960A>I<FC00001C00001C00001C00001C00
+001C00001C00001C00001C00001C3F801C1C001C18001C20001C40001CC0001FE0001CF0001C70
+001C78001C3C001C1E001C1E00FF3FC01217809613>107 D<FC001C001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091780960A>I<
+FC7C1F001D8E63801E0781C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C01C0701C01C0701C01C0701C0FF9FE7F81D0E808D1E>I<FC7C001D8E001E07001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C0700FF9FE0130E808D14>I<07C0183030
+18600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12>I<FCF8001F0E001C0300
+1C03801C01801C01C01C01C01C01C01C01C01C01801C03801C07001F0E001CF8001C00001C0000
+1C00001C00001C0000FF80001214808D14>I<07C2001C2600381E00700E00600E00E00E00E00E
+00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E00007F
+C012147F8D13>I<FCF01D381E381C101C001C001C001C001C001C001C001C001C00FF800D0E80
+8D0E>I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<08
+0008000800180018003800FF80380038003800380038003800380038403840384038401C800F00
+0A147F930E>I<FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07
+001C0F000E170003E7E0130E808D14>I<FE1F3C0E3C0C1C081C080E100E100720072003C003C0
+03C001800180100E7F8D13>I<FCFE7C3838383838101C3C201C3C201C4C200E4E400E4E400E86
+40078780078780070380030300030300160E7F8D19>I<FE1F3C0E3C0C1C081C080E100E100720
+072003C003C003C00180018001000100E200E200A400780010147F8D13>121
+D<FFF0C0E080E081C08380878007000E001E081C08381870107030FFF00D0E7F8D10>I
+E /Fl 13 117 df<70F8F8F87005057D840B>46 D<00060000000F0000000F0000001F8000001F
+8000001F80000037C0000037C0000063E0000063E00000E3F00000C1F00000C1F0000180F80001
+80F80003FFFC0003FFFC0007007E0006003E000E003F000C001F00FF80FFF0FF80FFF01C177F96
+1F>65 D<0FE0003838003C1C003C1E00181E00001E0000FE000F9E003C1E00781E00F01E00F01E
+00F01E00786FC01F87C0120F7F8E14>97 D<FC0000FC00003C00003C00003C00003C00003C0000
+3C00003DFC003F07003C03803C03C03C01C03C01E03C01E03C01E03C01E03C01E03C01C03C03C0
+3C03803B0F0031F80013177E9617>I<07F01C1C383C783C7018F000F000F000F000F000700078
+0038061C0C07F80F0F7F8E12>I<07F01C18380C78067007F007F007FFFFF000F0007000780038
+031E0603FC100F7F8E13>101 D<FC0000FC00003C00003C00003C00003C00003C00003C00003C
+7C003D8E003E0F003E0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F00FF
+3FC0FF3FC012177E9617>104 D<387C7C7C3800000000FCFC3C3C3C3C3C3C3C3C3C3C3CFFFF08
+187F970B>I<07F0001C1C00380E00700700700700F00780F00780F00780F00780F00780700700
+700700380E001C1C0007F000110F7F8E14>111 D<FDFC00FF0F003C03803C03C03C01C03C01E0
+3C01E03C01E03C01E03C01E03C01C03C03C03C07803F0F003DF8003C00003C00003C00003C0000
+FF0000FF000013157E8E17>I<F8E0F9383A783A783C303C003C003C003C003C003C003C003C00
+FF80FF800D0F7E8E11>114 D<1FF060704030C030E000FF007FE03FF00FF80078C018C018E010
+F020CFC00D0F7F8E10>I<0600060006000E000E001E003FE0FFE01E001E001E001E001E001E00
+1E001E301E301E301E300E2007C00C157F9410>I E /Fm 81 125 df<007E1F0001C1B1800303
+E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E
+01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<60F0F0F0F0F0
+F0F060606060606060606060606060000000000060F0F060041E7C9D0C>33
+D<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15>I<00030180000301
+80000301800006030000060300000603000006030000060300000C0600000C0600000C0600000C
+060000180C007FFFFFF8FFFFFFFC00301800003018000030180000301800006030000060300000
+60300000603000FFFFFFFC7FFFFFF800C060000180C0000180C0000180C0000180C00003018000
+0301800003018000030180000603000006030000060300001E257E9C23>I<60F0F86808080810
+10204080050C7C9C0C>39 D<004000800100020006000C000C0018001800300030007000600060
+006000E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000
+180018000C000C00060002000100008000400A2A7D9E10>I<800040002000100018000C000C00
+0600060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C001
+C0018001800180038003000300060006000C000C00180010002000400080000A2A7E9E10>I<60
+F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60F0F06004047C830C>
+I<00010003000600060006000C000C000C0018001800180030003000300060006000C000C000C0
+018001800180030003000300060006000C000C000C001800180018003000300030006000600060
+00C000C00010297E9E15>I<03C00C301818300C300C700E60066006E007E007E007E007E007E0
+07E007E007E007E007E007E007E00760066006700E300C300C18180C3007E0101D7E9B15>I<03
+0007003F00C7000700070007000700070007000700070007000700070007000700070007000700
+0700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807
+F8077007000F000E000E001C001C00380070006000C00180030006010C01180110023FFE7FFEFF
+FE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C00180030006007E0003000
+1C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E9B15>I<000C00000C
+00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C
+00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FF
+C0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E024302818301C200E00
+0E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E9B15>I<00F0030C06
+040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E0076007
+60077006300E300C18180C3003E0101D7E9B15>I<4000007FFF807FFF007FFF00400200800400
+80040080080000100000100000200000600000400000C00000C00001C000018000018000038000
+038000038000038000078000078000078000078000078000078000030000111D7E9B15>I<03E0
+0C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E601E600FC007C0
+03C003C003C00360026004300C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E0
+06E007E007E007E007E0076007700F300F18170C2707C700060006000E300C780C781870102030
+30C00F80101D7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060
+0000000000000000000060F0F0701010101020204080041A7C910C>I<00060000000600000006
+0000000F0000000F0000000F00000017800000178000001780000023C0000023C0000023C00000
+41E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C0002003C00
+02003C0006003E0004001E0004001E000C001F001E001F00FF80FFF01C1D7F9C1F>65
+D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780F01
+F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F000F0F000F0F001E0F001E0F00
+3C0F0078FFFFE0181C7E9B1D>I<001F808000E0618001801980070007800E0003801C0003801C
+00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F0000000
+F0000000F0000000F0000000700000807800008078000080380000801C0001001C0001000E0002
+00070004000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E
+000F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F
+0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00040F
+00040F00060F00020F00020F02020F02000F02000F02000F06000FFE000F06000F02000F02000F
+02000F02010F00010F00020F00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C>I<
+FFFFF80F00780F00180F00080F00080F000C0F00040F00040F02040F02000F02000F02000F0600
+0FFE000F06000F02000F02000F02000F02000F00000F00000F00000F00000F00000F00000F0000
+0F8000FFF800161C7E9B1B>I<001F808000E0618001801980070007800E0003801C0003801C00
+018038000180780000807800008070000080F0000000F0000000F0000000F0000000F0000000F0
+000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E000780
+07000B800180118000E06080001F80001C1E7E9C21>I<FFF3FFC00F003C000F003C000F003C00
+0F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC
+000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
+3C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FFF00F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+00FFF00C1C7F9B0F>I<1FFF00F800780078007800780078007800780078007800780078007800
+780078007800780078007800787078F878F878F878F0F040E021C01F00101D7F9B15>I<FFF03F
+E00F000F000F000C000F0008000F0010000F0020000F0040000F0080000F0100000F0200000F04
+00000F0E00000F1F00000F2F00000F2780000F4780000F83C0000F01E0000F01E0000F00F0000F
+00F8000F0078000F003C000F003C000F001E000F001F000F001F80FFF07FF01C1C7E9B20>I<FF
+F8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00300F00700F
+01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000F8000BC00178000BC00178000BC0
+01780009E002780009E002780008F004780008F004780008F00478000878087800087808780008
+78087800083C107800083C107800083C107800081E207800081E207800081E207800080F407800
+080F40780008078078000807807800080780780008030078001C03007800FF8307FF80211C7E9B
+26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F8040008780400
+083C0400083C0400081E0400080F0400080F0400080784000807C4000803C4000801E4000801E4
+000800F40008007C0008007C0008003C0008003C0008001C0008000C001C000C00FF8004001A1C
+7E9B1F>I<003F800000E0E0000380380007001C000E000E001C0007003C000780380003807800
+03C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0
+0001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F001E
+0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<003F800000E0E000038038
+0007001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F000
+01E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C038
+0003803C0E07801C1107000E208E0007205C0003A0780000F0E020003FE0200000602000003060
+000038E000003FC000003FC000001F8000000F001B257E9C20>I<FFFF00000F01E0000F007800
+0F003C000F001C000F001E000F001E000F001E000F001E000F001C000F003C000F0078000F01E0
+000FFF00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F0078000F0078000F00
+78000F0078100F0078100F0038100F003C20FFF01C20000007C01C1D7E9B1F>I<07E0801C1980
+300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0003FF8001FFE00
+07FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C00180E00300D00200
+CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F
+0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
+001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004000F0004000F000400
+0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
+000F0004000F0004000F0004000F0004000F0004000F0004000700080007800800038010000180
+100000C020000070C000001F00001A1D7E9B1F>I<FFE00FF01F0003C00F0001800F0001000F80
+0300078002000780020003C0040003C0040003C0040001E0080001E0080001F0080000F0100000
+F0100000F830000078200000782000003C4000003C4000003C4000001E8000001E8000001F8000
+000F0000000F00000006000000060000000600001C1D7F9B1F>I<FFE0FFE0FF1F001F003C1E00
+1E00180F001F00100F001F00100F001F001007801F00200780278020078027802003C027804003
+C043C04003C043C04003E043C04001E081E08001E081E08001E081E08000F100F10000F100F100
+00F100F100007900FA00007A007A00007A007A00003E007C00003C003C00003C003C00003C003C
+00001800180000180018000018001800281D7F9B2B>I<7FF0FFC00FC03E000780180003C01800
+03E0100001E0200001F0600000F0400000788000007D8000003D0000001E0000001F0000000F00
+00000F8000000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C000300
+3C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>I<FFF007FC0F8001E00780008007C0
+018003C0010003E0020001F0020000F0040000F8040000780800007C1800003C1000001E200000
+1F2000000F4000000FC00000078000000780000007800000078000000780000007800000078000
+00078000000780000007800000078000007FF8001E1C809B1F>I<FEFEC0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07297C9E0C>91
+D<08081010202040404040808080808080B0B0F8F8787830300D0C7A9C15>I<FEFE0606060606
+0606060606060606060606060606060606060606060606060606060606060606FEFE0729809E0C
+>I<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E0
+1C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00001C7C001D86001E03001C01801C01C01C00C01C00
+E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01801E030019060010F800131D7F9C17
+>I<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007C00E
+127E9112>I<003F00000700000700000700000700000700000700000700000700000700000700
+03E7000C1700180F00300700700700600700E00700E00700E00700E00700E00700E00700600700
+700700300700180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE0
+00E000E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E
+000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C
+001818001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000
+C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C
+00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C
+17>I<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C00000
+0000000000000000000000000FE000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E060E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C
+00001C00001C00001C00001C00001C00001C00001C00001C00001C3FC01C0F001C0C001C08001C
+10001C20001C40001CE0001DE0001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF
+9FE0131D7F9C16>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0
+001C838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
+1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
+C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014127F9117>I<03F0
+000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003
+803003001806000E1C0003F00012127F9115>I<FC7C001D86001E03001C01801C01C01C00C01C
+00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C
+00001C00001C00001C00001C00001C0000FF8000131A7F9117>I<03C1000C3300180B00300F00
+700700700700E00700E00700E00700E00700E00700E00700600700700700300F00180F000C3700
+07C700000700000700000700000700000700000700000700003FE0131A7E9116>I<FCE01D301E
+781E781C301C001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F
+9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F91
+10>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C00
+1C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B8003E3F014
+127F9117>I<FF07E03C03801C01001C01000E02000E0200070400070400070400038800038800
+03D80001D00001D00000E00000E00000E00000400013127F9116>I<FF3FCFE03C0F03801C0701
+801C0701001C0B01000E0B82000E0B82000E1182000711C4000711C4000720C40003A0E80003A0
+E80003C0680001C0700001C0700001803000008020001B127F911E>I<7F8FF00F03800F030007
+020003840001C80001D80000F00000700000780000F800009C00010E00020E000607000403801E
+07C0FF0FF81512809116>I<FF07E03C03801C01001C01000E02000E0200070400070400070400
+03880003880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000
+F10000F300006600003C0000131A7F9116>I<7FFC70386038407040F040E041C003C003800700
+0F040E041C043C0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<FFFFFFFFFF8029
+01808B2A>I E /Fn 40 127 df<E038F078F078F078F078F078F078F078E038E03860300D0B7C
+9816>34 D<FFFF80FFFF80FFFF8011037E8D16>45 D<70F8F8F8700505788416>I<E00000FFFF
+80FFFF80FFFF80E00F00E01E00001C0000380000780000700000E00000E00001C00001C00001C0
+00038000038000038000038000070000070000070000070000070000070000070000111A7E9916
+>55 D<07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC0007F000
+1FFC003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001FFC0007F000
+11197E9816>I<70F8F8F870000000000000000070F8F8F8700512789116>58
+D<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC00003E00
+000F800007C00001F00000F800003E00001F8000078000018011157E9616>60
+D<7FFF00FFFF80FFFF80000000000000000000000000000000FFFF80FFFF807FFF00110B7E9116
+>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F80000780001F8000
+3E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616>I<00F80003FC00
+07FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381C0E381C0E381C0
+E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC0012197E9816>64
+D<7FE000FFF8007FFC001C1E001C0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8
+001FFC001C1C001C0E001C0E001C0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C01419
+7F9816>82 D<FFF0FFF0FFF0E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000FFF0FFF0FFF00C20789C16>91
+D<C00000E00000E000007000007000003800003800001C00001C00000E00000E00000700000700
+0003800003800001C00001C00000E00000E000007000007000003800003800001C00001C00000E
+00000E0000070000070000038000038000018011207E9C16>I<FFF0FFF0FFF000700070007000
+700070007000700070007000700070007000700070007000700070007000700070007000700070
+007000700070FFF0FFF0FFF00C207F9C16>I<1FE0003FF0007FF800783C00300E00000E00000E
+0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116
+>97 D<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E0
+0E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C00
+1419809816>I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC
+0FF803F010127D9116>I<003F00007F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00700F003C1F001F
+FFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000
+700778073C0F1FFE0FFC03F010127D9116>I<001F00007F8000FF8001E78001C30001C00001C0
+007FFF00FFFF00FFFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C0003FFE007FFF003FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E0038
+0E00380E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8078
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000
+FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E0380
+0E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>
+I<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C001C0
+01C001C001C001C07FFFFFFF7FFF101A7D9916>I<7E0000FE00007E00000E00000E00000E0000
+0E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E00
+0E0E000E07000E07807F87F0FFCFF07F87F01419809816>107 D<FFC000FFC000FFC00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFF
+E03C78E03C78E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7C
+F8FE7CF8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E
+03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E000
+0FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780700700780F00
+3C1E001FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00
+700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00
+000E00000E00000E00000E00007FC000FFE0007FC000141B809116>I<FF0FC0FF3FE0FF7FE007
+F04007C000078000078000070000070000070000070000070000070000070000070000FFFC00FF
+FC00FFFC0013127F9116>114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE0
+0EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FFFF00
+FFFF00070000070000070000070000070000070000070000070100070380070380070380078700
+03FE0001FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03
+800E03800E03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F
+1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003
+B80003B80001F00001F00000E00013127F9116>I<FF1FE0FFBFE0FF1FE0380380380380380380
+38038038E38019F30019F30019B3001DB7001DB7001DB7001DB7000F1E000F1E000F1E0013127F
+9116>I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B8
+00073C00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E
+07000E0E000E0E00070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000
+F00000E00000E00000E00001C00079C0007BC0007F80003F00003C0000131B7F9116>I<001F80
+007F8000FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C000
+7F8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001E00000FF80007F80001F8011207E9C16>123 D<7C0000FF0000FF800003C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001E00000FF00007F80007F8000FF00
+01E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C000FF8000FF0000
+7C000011207E9C16>125 D<1C303F78FFF8F7E061C00D057C9816>I E /Fo
+2 122 df<020002000200C218F2783AE00F800F803AE0F278C2180200020002000D0E7E8E12>3
+D<06000600060006000600060006000600FFF0FFF0060006000600060006000600060006000600
+06000600060006000600060006000600060006000C1D7E9611>121 D E
+/Fp 21 122 df<387CFEFEFE7C3807077C8610>46 D<FFFFFF8000FFFFFFE00007F001F80007F0
+00FC0007F0007E0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007E0007F000FE0007F000FC0007F003F80007FFFFF00007FFFFF00007F001FC0007F0007E00
+07F0003F0007F0003F8007F0001F8007F0001FC007F0001FC007F0001FC007F0001FC007F0001F
+C007F0001FC007F0003F8007F0003F8007F0007F0007F001FE00FFFFFFF800FFFFFFC00022227E
+A128>66 D<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007
+801F800007803F000003803F000003807F000001807E000001807E00000180FE00000000FE0000
+0000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E00
+0001807F000001803F000001803F000003801F800003000F8000030007C000060003F0000C0001
+F800380000FF00F000001FFFC0000003FE000021227DA128>I<FFFF83FFFEFFFF83FFFE07F000
+1FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
+001FC007F0001FC007F0001FC007F0001FC007F0001FC007FFFFFFC007FFFFFFC007F0001FC007
+F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0
+07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0FFFF83FFFEFFFF83FF
+FE27227EA12C>72 D<03FFFF03FFFF0007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F01807F07E07F0FF07F0FF07F0FF07F0FF07E07E0FE07C1FC01FFF0007F80018227FA11D>
+74 D<FFFF803FFCFFFF803FFC07F000038007F000070007F0000E0007F000180007F000300007
+F000E00007F001C00007F003800007F007000007F00E000007F018000007F038000007F0FC0000
+07F1FE000007F3FE000007F77F000007FE7F800007F83F800007F01FC00007F01FE00007F00FE0
+0007F007F00007F007F80007F003F80007F001FC0007F001FE0007F000FF0007F0007F0007F000
+7F8007F0003FC0FFFF83FFFCFFFF83FFFC26227EA12C>I<FFF8001FFEFFFC001FFE07FC0000C0
+07FE0000C006FF0000C0067F8000C0063FC000C0061FE000C0060FE000C0060FF000C00607F800
+C00603FC00C00601FE00C00600FE00C00600FF00C006007F80C006003FC0C006001FE0C006000F
+F0C0060007F0C0060007F8C0060003FCC0060001FEC0060000FFC00600007FC00600007FC00600
+003FC00600001FC00600000FC006000007C006000003C006000003C0FFF00001C0FFF00000C027
+227EA12C>78 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FD
+F01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B
+>97 D<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000
+FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE0014167E9519>99
+D<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC00
+00FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>101
+D<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F80
+00FFFC00FFFC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
+000F80000F80000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<FF000000
+FF0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
+001F0000001F0000001F07E0001F1FF8001F307C001F403C001F803E001F803E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>104 D<1C003E007F007F007F003E
+001C000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I<FF000000FF0000001F00
+00001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F
+0000001F00FF801F00FF801F0038001F0060001F01C0001F0380001F0700001F0E00001F1C0000
+1F7E00001FFF00001FCF00001F0F80001F07C0001F03E0001F01E0001F01F0001F00F8001F007C
+001F003C00FFE0FFC0FFE0FFC01A237EA21E>107 D<FF00FF001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F00FFE0FFE00B237EA210>I<FF07E000FF1FF8001F307C001F403C001F80
+3E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>110
+D<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC00
+7EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<FE1F00FE
+3FC01E67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F00001F00001F00001F0000FFF000FFF00013167E9517>114
+D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF
+00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011167E9516>I<01800001
+80000180000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F
+80000F80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F
+81800F830007C30003FE0000F80011207F9F16>I<FFE01FE0FFE01FE00F8006000F8006000FC0
+0E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F86000007CC00000
+7CC000007FC000003F8000003F8000001F0000001F0000000E0000000E0000000C0000000C0000
+0018000078180000FC380000FC300000FC60000069C000007F8000001F0000001B207F951E>
+121 D E /Fq 8 116 df<FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000FFC0003FF000FFC000
+07F800FFC00003F800FFC00000F800FFC00000F800FFC000007800FFC000007800FFC000003800
+FFC000003800FFC000003800FFC000001C00FFC000001C00FFC007001C00FFC007001C00FFC007
+000000FFC007000000FFC007000000FFC00F000000FFC01F000000FFC03F000000FFFFFF000000
+FFFFFF000000FFFFFF000000FFC03F000000FFC01F000000FFC00F000000FFC007000000FFC007
+000000FFC007000000FFC007000000FFC007000000FFC000000000FFC000000000FFC000000000
+FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000
+000000FFC000000000FFC0000000FFFFFFF00000FFFFFFF00000FFFFFFF000002E317EB034>70
+D<007FF8000003FFFF000007FFFFC0000FE01FE0001FF007F0001FF003F8001FF003FC001FF001
+FE000FE001FE0007C001FE00010001FE00000001FE00000001FE000001FFFE00003FFFFE0001FF
+F1FE0007FE01FE000FF001FE001FC001FE003F8001FE007F8001FE00FF0001FE00FF0001FE00FF
+0001FE00FF0001FE00FF0003FE007F8003FE007FC00EFE003FF03CFF000FFFF87FF807FFF03FF8
+00FF800FF825207E9F28>97 D<00000007E0000003FFE0000003FFE0000003FFE00000003FE000
+00001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0
+0000001FE00000001FE00000001FE00000001FE00000001FE0000FF81FE0007FFF1FE001FFFFDF
+E003FE03FFE007F800FFE00FE0003FE01FE0001FE03FC0001FE03FC0001FE07F80001FE07F8000
+1FE07F80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80
+001FE0FF80001FE07F80001FE07F80001FE07F80001FE03FC0001FE03FC0001FE01FC0003FE00F
+E0007FE007F001FFE003FC07DFF001FFFF9FFF007FFE1FFF000FF01FFF28327DB12E>100
+D<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E003FC000
+7E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFF
+FFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003FC00000003F
+C00003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE000
+0003FF000021207E9F26>I<01C00007F0000FF8000FF8001FFC001FFC001FFC000FF8000FF800
+07F00001C00000000000000000000000000000000000000000000000000001F800FFF800FFF800
+FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+FFFF80FFFF80FFFF8011337DB217>105 D<03F007F80000FFF03FFF0000FFF07FFF8000FFF0F0
+3FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF00007FC000FF00007FC000FF000
+07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
+0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000
+07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1
+FFFF80FFFFC1FFFF80FFFFC1FFFF8029207D9F2E>110 D<03F03F00FFF07FC0FFF1FFE0FFF3C7
+F00FF38FF807F70FF807F60FF807FE0FF807FC07F007FC03E007FC008007F8000007F8000007F8
+000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007
+F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE000FFFFE0001D207E9F
+22>114 D<00FF870007FFEF001FFFFF003F007F003C001F0078000F00F8000700F8000700F800
+0700FC000700FF000000FFF800007FFFC0003FFFF0003FFFFC000FFFFE0007FFFF0001FFFF8000
+1FFF800000FFC000001FC060000FC0E00007C0E00007C0F00007C0F8000780F8000F80FE000F00
+FF803E00FFFFFC00F3FFF800C07FC0001A207D9F21>I E /Fr 6 106 df<FFFFFFFFFFFFE00000
+FFFFFFFFFFFFFE0000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF800001FFF
+800001FFFE00001FFF8000007FFF00001FFF8000003FFF80001FFF8000001FFFC0001FFF800000
+0FFFC0001FFF80000007FFE0001FFF80000007FFF0001FFF80000007FFF0001FFF80000003FFF0
+001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF
+80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF800000
+03FFF0001FFF80000007FFF0001FFF80000007FFE0001FFF8000000FFFE0001FFF8000000FFFC0
+001FFF8000001FFF80001FFF8000003FFF00001FFF8000007FFE00001FFF800001FFFC00001FFF
+800007FFF000001FFFFFFFFFFFC000001FFFFFFFFFFE0000001FFFFFFFFFFF8000001FFFFFFFFF
+FFF000001FFF800000FFFC00001FFF8000003FFF00001FFF8000000FFFC0001FFF80000007FFE0
+001FFF80000003FFF0001FFF80000003FFF8001FFF80000001FFF8001FFF80000001FFFC001FFF
+80000000FFFC001FFF80000000FFFE001FFF80000000FFFE001FFF80000000FFFE001FFF800000
+00FFFF001FFF800000007FFF001FFF800000007FFF001FFF800000007FFF001FFF800000007FFF
+001FFF80000000FFFF001FFF80000000FFFF001FFF80000000FFFF001FFF80000000FFFE001FFF
+80000000FFFE001FFF80000001FFFE001FFF80000001FFFC001FFF80000003FFFC001FFF800000
+07FFF8001FFF80000007FFF0001FFF8000001FFFE0001FFF8000003FFFE0001FFF800001FFFF80
+FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFC000FFFFFF
+FFFFFFF8000048477CC654>66 D<FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFF
+FE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFF00001FFFC00001FFFF00001FFFC000001FFF0000
+1FFFC0000007FF00001FFFC0000003FF00001FFFC0000000FF00001FFFC00000007F00001FFFC0
+0000007F00001FFFC00000003F00001FFFC00000003F80001FFFC00000001F80001FFFC0000000
+1F80001FFFC00000001F80001FFFC00000000F80001FFFC00000000F80001FFFC0007C000F8000
+1FFFC0007C000F80001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0
+007C0007C0001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC001FC00
+0000001FFFC003FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFFFFFC00000000
+1FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC01FFC000000001FFFC0
+03FC000000001FFFC001FC000000001FFFC000FC000000001FFFC000FC000000001FFFC000FC00
+0000001FFFC0007C00007C001FFFC0007C00007C001FFFC0007C00007C001FFFC0007C0000F800
+1FFFC0007C0000F8001FFFC0007C0000F8001FFFC000000000F8001FFFC000000001F8001FFFC0
+00000001F0001FFFC000000001F0001FFFC000000001F0001FFFC000000003F0001FFFC0000000
+03F0001FFFC000000007F0001FFFC000000007E0001FFFC00000000FE0001FFFC00000001FE000
+1FFFC00000003FE0001FFFC00000007FE0001FFFC0000000FFE0001FFFC0000003FFC0001FFFC0
+00000FFFC0001FFFC00000FFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFF
+FF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF8046467CC54E>69 D<3FFFFFFFFFFFFFFFFF003F
+FFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF00
+3FFF0003FFF8003FFF007FF80003FFF80007FF807FE00003FFF80001FF807FC00003FFF80000FF
+807F800003FFF800007F807F000003FFF800003F807F000003FFF800003F807E000003FFF80000
+1F807E000003FFF800001F807E000003FFF800000F807C000003FFF800000F807C000003FFF800
+000F807C000003FFF800000F807C000003FFF800000F80FC000003FFF800000FC0F8000003FFF8
+000007C0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FF
+F8000007C000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003
+FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000000
+03FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000
+0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000
+000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000
+00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000000
+0000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000
+000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800
+00000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8
+0000000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FF
+F80000000000000003FFF8000000000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFF
+FFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800004A467CC553>84
+D<7FFFFFFFF801FFFFFFF0007FFFFFFFF801FFFFFFF0007FFFFFFFF801FFFFFFF0007FFFFFFFF8
+01FFFFFFF0007FFFFFFFF801FFFFFFF000000FFFF8000003FF800000000FFFF80000007E000000
+0007FFFC000000FC0000000003FFFE000001F80000000003FFFE000003F80000000001FFFF0000
+03F00000000000FFFF800007E000000000007FFFC0000FC000000000007FFFC0001FC000000000
+003FFFE0001F8000000000001FFFF0003F0000000000001FFFF0007E0000000000000FFFF800FE
+00000000000007FFFC00FC00000000000003FFFC01F800000000000003FFFE03F0000000000000
+01FFFF07F000000000000000FFFF87E000000000000000FFFF8FC0000000000000007FFFDF8000
+0000000000003FFFFF80000000000000003FFFFF00000000000000001FFFFE0000000000000000
+0FFFFC000000000000000007FFFC000000000000000007FFFC000000000000000003FFFE000000
+000000000001FFFF000000000000000001FFFF000000000000000000FFFF800000000000000000
+7FFFC000000000000000003FFFE000000000000000007FFFE000000000000000007FFFF0000000
+0000000000FFFFF80000000000000001FFFFF80000000000000003FFFFFC0000000000000003F3
+FFFE0000000000000007E1FFFE000000000000000FC1FFFF000000000000001FC0FFFF80000000
+0000001F807FFFC00000000000003F007FFFC00000000000007E003FFFE0000000000000FE001F
+FFF0000000000000FC001FFFF0000000000001F8000FFFF8000000000003F00007FFFC00000000
+0007F00003FFFE000000000007E00003FFFE00000000000FC00001FFFF00000000001F800000FF
+FF80000000003F800000FFFF80000000003F0000007FFFC0000000007E0000003FFFE000000000
+FC0000001FFFF000000001FC0000001FFFF000000001F80000000FFFF800000003F000000007FF
+FC00000007E000000007FFFC0000001FFC00000003FFFE0000FFFFFFF80003FFFFFFFF80FFFFFF
+F80003FFFFFFFF80FFFFFFF80003FFFFFFFF80FFFFFFF80003FFFFFFFF80FFFFFFF80003FFFFFF
+FF8051477CC65A>88 D<007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000
+000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC000
+0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0
+000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF
+C0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001
+FFC0000000000001FFC0000000000001FFC0000000000001FFC00FFC00000001FFC07FFFC00000
+01FFC3FFFFF0000001FFCFFFFFFC000001FFDFF00FFF000001FFFF8003FF800001FFFE0001FFC0
+0001FFF800007FE00001FFF000007FF00001FFE000003FF80001FFE000001FFC0001FFE000001F
+FC0001FFE000001FFE0001FFE000001FFE0001FFE000000FFF0001FFE000000FFF0001FFE00000
+0FFF0001FFE000000FFF0001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000
+000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE0
+00000FFF8001FFE000000FFF8001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FF
+E000001FFE0001FFE000001FFE0001FFE000001FFC0001FFE000001FFC0001FFE000003FF80001
+FFF000003FF80001FFF800007FF00001FFFC0000FFE00001FFFE0001FFC00001FFBF0007FF8000
+01FF1FE01FFE000001FE0FFFFFFC000001FC03FFFFF0000001F800FFFF80000001F0001FF80000
+0039487CC742>98 D<00FC0001FE0003FF0007FF800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE0
+1FFFE00FFFC007FF8003FF0001FE0000FC00000000000000000000000000000000000000000000
+000000000000000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>
+105 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin @letter /letter where {pop letter} if
+%%EndSetup
+%%Page: 1 1
+bop 730 337 a Fr(XBibT)1065 360 y(E)1130 337 y(X)763 450 y
+Fq(and)28 b(F)-7 b(riends)757 618 y Fp(Nic)n(k)n(olas)19 b(J.)f(Kelly)1175
+600 y Fo(\003)735 667 y Fn(kilroy@naitc.naitc.)o(com)715 746
+y Fp(Christian)h(H.)f(Bisc)n(hof)1217 728 y Fo(y)768 795 y
+Fn(bischof@mcs.anl.g)o(ov)566 892 y Fm(Mathematics)13 b(and)h(Computer)f
+(Science)i(Division)705 942 y(Argonne)f(National)f(Lab)q(oratory)711
+992 y(Argonne,)h(Illinois)26 b(60439-4801)739 1101 y(Preprin)o(t)15
+b(MCS{P193{1190)135 1203 y Fl(Abstract.)h Fk(The)8 b(XBibT)488
+1210 y(E)508 1203 y(X)i(utilit)o(y)c(pro)o(vides)h(an)h(X)h(Windo)o(w)f(in)o
+(terface)e(for)i(inserting)f(en)o(tries)g(in)o(to)g(a)i(bibliograph)n(y)d
+(database)75 1243 y(in)12 b(BibT)191 1250 y(E)211 1243 y(X)h(format.)18
+b(XBibT)483 1250 y(E)503 1243 y(X)13 b(pro)o(vides)e(a)i(template)d(of)i(the)
+g(required)f(and)h(optional)e(\014elds)i(for)g(eac)o(h)g(en)o(try)f(t)o(yp)q
+(e)h(de\014ned)f(b)o(y)75 1282 y(BibT)149 1289 y(E)169 1282
+y(X.)f(In)f(addition,)f(XBibT)505 1289 y(E)525 1282 y(X)j(accommo)q(d)o(ate)o
+(s)d(t)o(w)o(o)i(additional)d(en)o(tries)h(named)g(\\k)o(eyw)o(ord")g(and)h
+(\\annote")e(for)j(main)o(tainin)o(g)75 1321 y(an)j(annotated)e(bibliograph)o
+(y)m(.)19 b(The)14 b(user)f(en)o(ters)g(the)g(information)e(to)i(b)q(e)h
+(stored)e(in)i(the)f(database;)g(XBibT)1604 1328 y(E)1624 1321
+y(X)h(automaticall)o(y)75 1361 y(inserts)f(the)h(en)o(try)f(in)h(the)g
+(bibliograph)n(y)e(\014le)i(in)g(a)g(format)f(that)g(conforms)f(to)i(BibT)
+1270 1368 y(E)1290 1361 y(X's)h(sp)q(eci\014cation)o(s.)21
+b(W)m(e)15 b(also)f(in)o(tro)q(duce)75 1400 y(t)o(w)o(o)g(related)e
+(utilities,)g Fl(bibpro)q(cess)h Fk(and)g Fl(bibsearc)o(h)p
+Fk(.)21 b(The)14 b(\014rst)f(allo)o(ws)g(one)g(to)g(merge)g(the)g(con)o(ten)o
+(ts)e(of)j(user-de\014ned)c(\014elds)75 1440 y(in)o(to)k(a)g(.bbl)g(\014le)g
+(pro)q(duced)e(b)o(y)i(BibT)599 1447 y(E)618 1440 y(X;)h(the)f(second)f(allo)
+o(ws)h(one)g(to)g(retriev)o(e)f(the)h(L)1276 1436 y Fj(a)1291
+1440 y Fk(T)1310 1450 y(E)1330 1440 y(X)h(k)o(ey)f(of)h(publicatio)o(ns)d
+(that)h(con)o(tain)75 1479 y(user-sp)q(eci\014ed)8 b(k)o(eyw)o(ords.)15
+b(This)d(rep)q(ort)f(con)o(tains)e(a)j(users)f(guide)g(as)g(w)o(ell)h(as)g
+(installation)d(and)i(customizatio)o(n)e(instructions)g(for)75
+1519 y(XBibT)175 1526 y(E)195 1519 y(X,)j Fl(bibpro)q(cess)p
+Fk(,)f(and)f Fl(bibsearc)o(h)p Fk(.)75 1665 y Fi(1)48 b(An)15
+b(Example)g(of)h(Ho)o(w)g(to)f(Use)h(XBibT)875 1674 y(E)899
+1665 y(X)137 1744 y Fm(BibT)224 1753 y(E)247 1744 y(X)11 b(is)f(a)g
+(bibliographical)e(database)i(utilit)o(y)f(describ)q(ed)j(in)e([2)o(].)16
+b(While)10 b(BibT)1428 1753 y(E)1451 1744 y(X)g(pro)o(vides)h(a)f(con)o(v)o
+(enien)o(t)75 1794 y(mec)o(hanism)h(for)i(storing)g(and)g(retrieving)g
+(bibliographic)f(records,)i(it)f(lac)o(ks)g(a)g(con)o(v)o(enien)o(t)g(means)g
+(for)f(en)o(tering)75 1844 y(new)20 b(items.)32 b(The)20 b(user)g(can)f
+(easily)g(mak)o(e)f(mistak)o(es|for)f(example,)i(forgetting)f(the)i(required)
+g(\014elds,)g(the)75 1894 y(double)14 b(quotes,)g(or)g(the)g(commas)e
+(surrounding)i(the)g(information)d(in)i(an)h(en)o(try)m(.)137
+1945 y(XBibT)255 1954 y(E)279 1945 y(X)27 b(minimi)o(zes)12
+b(these)k(errors)f(b)o(y)137 2032 y Fh(\017)21 b Fm(displa)o(ying)12
+b(a)i(template)f(with)g(all)g(the)h(\014elds)h(de\014ned)g(for)e(a)h
+(particular)f(t)o(yp)q(e)i(of)e(bibliographic)f(en)o(try)m(,)137
+2122 y Fh(\017)21 b Fm(making)11 b(sure)k(that)f(information)d(for)j
+(required)g(\014elds)h(is)f(indeed)g(pro)o(vided,)f(and)137
+2211 y Fh(\017)21 b Fm(storing)13 b(the)i(information)c(in)i(a)h(format)e
+(that)i(is)g(guaran)o(teed)g(to)g(b)q(e)g(syn)o(tactially)f(correct.)p
+75 2252 720 2 v 121 2278 a Fg(\003)139 2290 y Fk(P)o(articipan)o(t)c(in)k
+(the)e(Spring)g(1990)g(Science)g(and)h(Engineering)d(Researc)o(h)i(Semester)f
+(Program)h(at)h(Argonne.)17 b(This)c(program)75 2329 y(is)h(co)q(ordinated)d
+(b)o(y)j(the)g(Division)e(of)i(Educational)e(Programs.)22 b(Kelly's)13
+b(curren)o(t)g(address)f(is)j(Nielsen)e(Adv)n(anced)g(Informatio)o(n)75
+2369 y(T)m(ec)o(hnology)c(Cen)o(ter,)i(Banno)q(c)o(kbur)o(n)e(Lak)o(e)i
+(O\016ce)h(Plaza,)e(2201)g(W)m(auk)o(egan)g(Rd.,)h(Ste.)j(S-200,)c(Banno)q(c)
+o(kburn)o(,)f(IL)i(60015.)122 2398 y Fg(y)139 2410 y Fk(The)e(w)o(ork)h(of)g
+(this)f(author)f(w)o(as)i(supp)q(orted)d(b)o(y)j(the)f(Applied)g
+(Mathematical)e(Sciences)g(subprogram)g(of)j(the)f(O\016ce)h(of)g(Energy)75
+2449 y(Researc)o(h,)f(U.)j(S.)g(Departmen)o(t)c(of)j(Energy)m(,)f(under)g
+(Con)o(tract)g(W-31-109-Eng-38)o(.)p eop
+%%Page: 2 2
+bop 566 266 a
+ 12903577 7458719 7038648 18484674 33219788 33614479 startTexFig
+566 266 a
+%%BeginDocument: application.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+450 1172 translate
+330 191 5 bitdump
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfffffc00
+8e000fffffffffffffffd5555555555555555555555555555555555555555555555555555557fc001c00
+0effefffe3f23fffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfddddc00
+8e8faffff3f33fbfffffd5555555555555555555555555555555555555555555555555555557fddddc00
+0ec76ffff3ff3f3fffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfddddc00
+8ec6eff11063061c623fd5555555555555555555555555555555555555555555555555555557fc1ddc00
+0ee2eff93333333b327feaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdfddc00
+8ef5effc7333333338ffd5555555555555555555555555555555555555555555555555555557fdfddc00
+0ee8effc7333333038ffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdfddc00
+8ed8effc73333323f8ffd5555555555555555555555555555555555555555555555555555557fc01dc00
+0edc6ff933333311b27feaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdffdc00
+8ebe2ff114614798623fd5555555555555555555555555555555555555555555555555555557fdffdc00
+0effefffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdffdc00
+8e000fffffffffffffffd5555555555555555555555555555555555555555555555555555557fc001c00
+0fffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffc000000000000000000000000000000000000000000000000000000000000000000000000000ffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdfffffffffffffffffffffffffee87fbe0feeffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffffffffffffffffffeedbbbfbfeeffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffff5dbfbfbff5ffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffff5db387bc75ffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffbc7bbbbbbbffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffff5dbbbbb835ffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffff5dbbbbbbf5ffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffffffffffffffffffeedbbbbbbaeffffffffffffffffffffffffffffffffffffffeffc00
+8ffdfffffffffffffffffffffffffee87187bc6effffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffeefeeffffbfffffffff3ffffffffffffe7fffffffffffffcffffffffffffffffffffffeffc00
+0ffdffffeefeeefffbfffffffffbeffff7efffffdbfffffffffbfffeffdfbfffffffffffffffffeffc00
+8ffdfffff5feeffffbfffffffffbfffff7ffffffdffffffffffffffeffdfffffffffffffffffffeffc00
+0ffdfffff5feece9c31bbfc6187bcf1c61cf1a7fdf1a7f971a7386eef1873a71ffffffffffffffeffc00
+8ffdfffffb82aee6baebbffaebbbeeefb7eee9bf86e9bfabe9bbbaeefedfb9aeffffffffffffffeffc00
+0ffdfffff5feaeeebaeabfc2ebbbeefc37eeebbfdeebffab0bbbbaeef0dfbbaeffffffffffffffeffc00
+8ffdfffff5feaeeebaeabfbaebbbeefbb7eeebbfdeebffaaebbbbaeeeedfbbaeffffffffffffffeffc00
+0ffdffffeefe4eeebaeabfba187beeebb6eeebbfdeebffaaebbb86ceeedbbbb0ffffffffffffffeffc00
+8ffdffffeefeec6ec31d7fc2fbf1c71c39c71bbfdf1bffbb0bb1bf2c70e71bbeffffffffffffffeffc00
+0ffdfffffffffffffffffffefbffffffffffffffffffffffffffbfffffffffeeffffffffffffffeffc00
+8ffdfffffffffffffffffffefbffffffffffffffffffffffffffbffffffffff1ffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffbfffe1fef83fbbfbffbf3fffffffffbffffeffffeffffffffffffffffffffffffeffc00
+8ffdffffffff7bffff6eefeffbbfbfbbfbeffffffffbffffeff7feffffffffffffffffffffffffeffc00
+0ffdffffffff7bffff6fefeffd7fbffbfbfffffffffbffffeff7feffffffffffffffffffffffffeffc00
+8ffdfffffffe1a71ff6ce1ef1d7f87387bcf1c69c61a6eff0c61c61c71c7ffffffffffffffffffeffc00
+0ffdffffffff79aeff1eeeeeeeffbbbbbbeeeba6fae9aefeefb7faefaebbffffffffffffffffffeffc00
+8ffdffffffff7ba0ff6eeeee0d7fbbbbbbeeebafc2ebaefeec37c2ec3383ffffffffffffffffffeffc00
+0ffdffffffff7bafff6eeeeefd7fbbbbbbeeebafbaebacfeebb7baebbdbfffffffffffffffffffeffc00
+8ffdffffffff6baeff6eeeeeebbfbbbbbbeeec2fba1bb2feebb6baebaebbbfffffffffffffffffeffc00
+0ffdffffffff9bb1fe1c61ef1bbf871871c71fafc2fbbeff0c39c21c31c71fffffffffffffffffeffc00
+8ffdfffffffffffffffffffffffffffffffffbbffeffeeffffffffffffffbfffffffffffffffffeffc00
+0ffdfffffffffffffffffffffffffffffffffc7ffefff1ffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+8ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffc000000000000000000000000000000000000000000000000000000000000000000000000000ffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8fffc00000000001ffff0000001ffff000000000000000000007fffc0000000000000007fffffffffc00
+0fff1ffffffffffc7ffc7fffffc7ffc7fffffffffffffffffff1fff1fffffffffffffff1fffffffffc00
+8ffe7fffffffffff3ff9fffffff3ff9ffffffffffffffffffffcffe7fffffffffffffffcfffffffffc00
+0ffeffffffffffffbffbfffffffbffbffffffffffffffffffffeffeffffffffffffffffefffffffffc00
+8ffcffffffffffffbff3fffffffbff3ffffffffffffffffffffeffcffffffffffffffffefffffffffc00
+0ffdfbffffffcfffbff787ffeffbff7c7fffffffffffbffffffeffde0fffbffffffffffefffffffffc00
+8ffdf5ff7effefffbff7dbffeffbff7effffffffffffbbfffffeffdfbfffbffffffffdfefffffffffc00
+0ffdeeff7fffefffbff7dbffeffbff7effffffffffffbffffffeffdfbfffbffffffffdfefffffffffc00
+8ffdeea61cf1ef1fbff7db1c6dfbff7ee9869c71c71c33a71c7effdfbc71a69c61c6987efffffffffc00
+0ffdee9b7eeeeeefbff7c6ebabfbff7ee6ba6baebaebbb9aebbeffdfbbae9a6baeba6dfefffffffffc00
+8ffde0bf7eefee0fbff7daeba7fbff7eeebafbaf820bbbbaecfeffdfb82fbaf82ebafdfefffffffffc00
+0ffdeebf7eefeeffbff7daebabfbff7eeebafbafbefbbbbaef7effdfbbefbafbeebafdfefffffffffc00
+8ffdeebf6eeeeeefbff7daebadfbff7eee86fbaebaebbbbb0bbeffdfbbaebafba1bafdbefffffffffc00
+0ffdeebf9c71c71fbff7871c6efbff7c6ebefc71c71c31bbec7effdfbc71bafc6fc6fe7efffffffffc00
+8ffdffffffffffffbff7fffffffbff7fffbffffffffffffeeffeffdfffffffffeffffffefffffffffc00
+0ffcffffffffffffbff3fffffffbff3fffbfffffffffffff1ffeffcfffffffffeffffffefffffffffc00
+8ffeffffffffffffbffbfffffffbffbffffffffffffffffffffeffeffffffffffffffffefffffffffc00
+0ffe7fffffffffff3ff9fffffff3ff9ffffffffffffffffffffcffe7fffffffffffffffcfffffffffc00
+8fff0000000000007ffc00000007ffc000000000000000000001fff00000000000000001fffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fffc0000000007fffc00000000000001ffff0000001fffffffffffffffffffffffffffffffffffffc00
+8fff1fffffffff1fff1fffffffffffffc7ffc7fffffc7ffffffffffffffffffffffffffffffffffffc00
+0ffe7fffffffffcffe7ffffffffffffff3ff9fffffff3ffffffffffffffffffffffffffffffffffffc00
+8ffeffffffffffeffefffffffffffffffbffbfffffffbffffffffffffffffffffffffffffffffffffc00
+0ffcffffffffffeffcfffffffffffffffbff3fffffffbffffffffffffffffffffffffffffffffffffc00
+8ffdf1feffffffeffdf1cfffe1fffffefbff7c6ec60fbffffffffffffffffffffffffffffffffffffc00
+0ffdeedeffffffeffdeeefbff6fffffefbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+8ffdeedeffffffeffdefeffff6fffffefbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+0ffdee869c69c7effdefef3876c71a70fbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+8ffdeede6ba6bbeffdefefbbb1bbe9aefbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+0ffdeedee82fcfeffdefefbbb6bb0beefbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+8ffdeedeebeff7effdefefbbb6baebeefbff7baeefbfbffffffffffffffffffffffffffffffffffffc00
+0ffdeedaebafbbeffdeeefb876baebeefbff7aaeefbfbffffffffffffffffffffffffffffffffffffc00
+8ffdf1e6ec6fc7effdf1c71be1c70bf0fbff7c71c7bfbffffffffffffffffffffffffffffffffffffc00
+0ffdffffffffffeffdfffffbfffffffffbff7fbfffffbffffffffffffffffffffffffffffffffffffc00
+8ffcffffffffffeffcfffffbfffffffffbff3fffffffbffffffffffffffffffffffffffffffffffffc00
+0ffeffffffffffeffefffffffffffffffbffbfffffffbffffffffffffffffffffffffffffffffffffc00
+8ffe7fffffffffcffe7ffffffffffffff3ff9fffffff3ffffffffffffffffffffffffffffffffffffc00
+0fff00000000001fff0000000000000007ffc00000007ffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 566 266 a
+ endTexFig
+697 829 a Fm(Figure)14 b(1:)j(Application)c(Windo)o(w)137 973
+y(T)m(o)k(demonstrate)h(the)h(con)o(v)o(enience)g(pro)o(vided)f(b)o(y)f
+(XBibT)1105 982 y(E)1128 973 y(X,)h(let)g(us)g(go)g(through)f(an)h(example.)
+29 b(W)m(e'll)75 1022 y(assume)13 b(that)h(XBibT)426 1031 y(E)449
+1022 y(X)g(has)g(b)q(een)h(prop)q(erly)f(installed)f(\(see)i(Section)f(4\).)k
+(Start)c(it)f(up)h(b)o(y)f(t)o(yping)g(\\xbibtex.")137 1078
+y(The)j Fi(Application)e(Windo)o(w)h Fm(in)g(Figure)h(1)f(will)f(app)q(ear.)
+24 b(This)15 b(windo)o(w)g(con)o(tains)g(a)h(men)o(u)e(of)h(options)75
+1127 y(whic)o(h)f(the)g(user)h(ma)o(y)d(select)j(b)o(y)f(pressing)h(the)f
+(left)g(mouse)f(button)h(o)o(v)o(er)g(the)g(appropriate)g(option.)137
+1183 y(The)j Ff(A)o(rticle)p Fm(,)f Ff(Bo)n(ok)p Fm(,)h Ff(Inpr)n(o)n(c)n(e)n
+(e)n(dings)p Fm(,)g(and)g Ff(T)m(e)n(chr)n(ep)n(ort)e Fm(buttons)i(are)g
+(bibliograph)o(y)e(en)o(try)i(t)o(yp)q(es)h(de\014ned)75 1232
+y(b)o(y)e(BibT)222 1241 y(E)245 1232 y(X.)g(A)h(men)o(u)e(con)o(taining)h
+(the)h(other)g(\(in)f(our)g(exp)q(erience,)j(less)e(common\))d(en)o(try)j(t)o
+(yp)q(es)g(kno)o(wn)f(to)75 1282 y(XBibT)193 1291 y(E)216 1282
+y(X)e(p)q(ops)g(up)g(when)h(the)f(user)h(presses)h(the)f Ff(Others)e
+Fm(button.)137 1337 y(Let)e(us)h(assume)e(that)h(y)o(ou)f(wish)g(to)h(en)o
+(ter)h(an)e(article)h(in)o(to)f(y)o(our)h(bibliograph)o(y)d(database.)18
+b(Press)12 b(the)f Ff(A)o(rticle)75 1387 y Fm(button.)18 b(The)13
+b(Article)h Fi(En)o(try)g(Windo)o(w)e Fm(displa)o(y)o(ed)g(in)h(Figure)g(2)g
+(will)e(p)q(op)i(up,)g(but)h(with)e(empt)o(y)g(text)i(\014elds.)75
+1437 y(Y)m(ou)g(ma)o(y)f(notice)i(that)g(all)e(of)h(the)h(buttons)h(in)e(the)
+h Fi(Application)e(Windo)o(w)g Fm(ha)o(v)o(e)i(b)q(een)h(gra)o(y)o(ed)e
+(except)i(for)75 1487 y(the)e Ff(ClipBo)n(ar)n(d)26 b Fm(button.)19
+b(This)13 b(\\grey-out")g(protects)i(y)o(ou)e(from)f(exiting)h(the)h
+(application)e(while)h(en)o(tering)h(an)75 1537 y(en)o(try)m(.)k(\(The)d
+Ff(ClipBo)n(ar)n(d)27 b Fm(is)13 b(discussed)j(in)d(Section)i(2.\))137
+1592 y(There)j(are)e(t)o(w)o(o)g(kinds)g(of)f(\014elds:)23
+b(\\required")17 b(and)f(\\optional")e(\014elds.)25 b(The)17
+b(\\required")g(\014elds)f(m)o(ust)f(b)q(e)75 1642 y(\014lled)10
+b(in)h(for)f(XBibT)397 1650 y(E)420 1642 y(X)h(not)g(to)g(complain.)j(F)m(or)
+d(example,)e(let)i(us)h(assume)e(that)h(the)g(author)g(is)g(Ronald)e(Reagan;)
+75 1691 y(the)14 b(title)f(of)f(the)i(article)f(is)h(\\It)f(nev)o(er)h(rains)
+f(in)g(Southern)h(California";)c(the)k(date)g(of)e(publication)g(is)h(1987;)f
+(the)75 1741 y(page)f(range)h(is)f(33{44;)g(and)g(the)h(v)o(olume,)e(issue,)i
+(and)f(journal)g(title)g(are)h(V)m(ol.)k(1,)11 b(No.)17 b(3,)11
+b Ff(Sunny)j(Side)f(Up.)k Fm(Then)75 1791 y(y)o(ou)12 b(w)o(ould)f(en)o(ter)j
+(the)e(text)h(as)g(displa)o(y)o(ed)e(in)h(Figure)g(2.)17 b(Note)c(that)f(y)o
+(ou)g(do)g(not)g(t)o(yp)q(e)h(the)g(double)f(quotes)h(that)75
+1841 y(surround)i(information)c(in)i(BibT)611 1850 y(E)634
+1841 y(X)h(en)o(tries.)19 b(XBibT)946 1850 y(E)970 1841 y(X)14
+b(will)e(automatically)f(generate)k(those.)137 1896 y(In)j(addition,)e(y)o
+(ou)h(no)o(w)g(m)o(ust)g(sp)q(ecify)h(a)f(\\k)o(ey";)h(w)o(e'll)f(en)o(ter)h
+(\\Ronnie87.")27 b(Y)m(ou)17 b(also)g(ha)o(v)o(e)g(to)g(sp)q(ecify)75
+1946 y(a)h(directory)g(where)i(y)o(our)d(database)i(\(.bib\))e(\014les)i(are)
+f(k)o(ept.)31 b(The)18 b(path)g(can)g(b)q(e)h(an)f(absolute)g(path)g(or)g
+(can)75 1996 y(b)q(e)f(relativ)o(e)f(to)g(the)h(directory)g(from)e(whic)o(h)h
+(XBibT)930 2004 y(E)953 1996 y(X)g(w)o(as)h(started.)26 b(The)17
+b(path)f(en)o(tered)i(is)e(not)g(expanded)75 2045 y(b)o(y)f(the)i(shell,)e
+(so)h(the)g(tilde)f(\()p Fn(~)p Fm(\))h(notation)f(do)q(es)h(not)g(w)o(ork,)f
+(for)g(example,)g(to)g(sp)q(ecify)h(y)o(our)g(home)e(directory)m(.)75
+2095 y(Since)i(database)f(\014les)g(are)h(usually)e(k)o(ept)i(in)e(one)h
+(directory)m(,)h(y)o(ou)e(can)i(set)g(the)f(en)o(vironmen)o(t)f(v)n(ariable)g
+(XBIB-)75 2145 y(TEX)p 166 2145 13 2 v 15 w(D)o(A)m(T)m(ABASE)p
+409 2145 V 15 w(P)m(A)m(TH)e(to)g(sp)q(ecify)h(this)g(path)f(so)g(it)g(need)i
+(not)e(b)q(e)h(reen)o(tered)i(ev)o(ery)e(time)e(\(see)j(Section)f(2\).)137
+2200 y(When)i(all)e(the)j(information)11 b(has)k(b)q(een)h(en)o(tered,)g
+(press)g(the)f Ff(Save)g Fm(button.)21 b(The)15 b Fi(Article)f(Windo)o(w)f
+Fm(will)75 2250 y(disapp)q(ear,)f(and)f(the)h Fi(Con\014rmation)f(Windo)o(w)f
+Fm(\(see)j(Figure)e(3\))h(will)e(app)q(ear)h(since)i(the)f(database)g(\014le)
+f Fn(r.bib)75 2300 y Fm(do)q(es)h(not)f(y)o(et)h(exist.)18
+b(Up)q(on)11 b(con\014rmation,)f(the)i Fi(Message)h(Windo)o(w)d
+Fm(\(see)i(Figure)g(4\))f(will)f(b)q(e)i(displa)o(y)o(ed.)17
+b(The)75 2350 y Fi(Message)e(Windo)o(w)c Fm(iden)o(ti\014es)j(the)g(k)o(ey)f
+(that)g(y)o(ou)f(should)h(use)h(from)d(no)o(w)i(on)g(in)g(a)f(L)1468
+2345 y Fe(a)1487 2350 y Fm(T)1510 2362 y(E)1534 2350 y(X)h
+Fn(\\cite)f Fm(command)75 2399 y(to)e(refer)i(to)e(this)g(en)o(try)m(.)17
+b(Y)m(ou)10 b(will)f(notice)h(that)h(the)g(L)900 2394 y Fe(a)919
+2399 y Fm(T)942 2412 y(E)965 2399 y(X)f(k)o(ey)h(is)f(not)g(the)h(same)f(as)g
+(the)h(XBibT)1588 2408 y(E)1611 2399 y(X)g(k)o(ey)f(that)g(y)o(ou)75
+2449 y(en)o(tered|the)17 b(L)333 2444 y Fe(a)352 2449 y Fm(T)375
+2462 y(E)399 2449 y(X)e(k)o(ey)h(is)f(the)h(XBibT)756 2458
+y(E)779 2449 y(X)g(k)o(ey)f(with)g(an)g(\\)p Ff(a)p Fm(")g(app)q(ended)i(to)e
+(it.)22 b(XBibT)1557 2458 y(E)1581 2449 y(X)15 b(automatically)965
+2574 y(2)p eop
+%%Page: 3 3
+bop 488 325 a
+ 15383599 20511477 7564902 9472573 32561971 42560798 startTexFig
+488 325 a
+%%BeginDocument: article.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+483 604 translate
+528 697 3 bitdump
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff0
+0e000fffffffffffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff00070
+0effefff3fffcff1ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff77770
+0e8fafff3ffdcff9ffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff77770
+0ec76ffe1ff9fff9ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff77770
+0ec6effe9c808e39e3ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff07770
+0ee2effcce49cd99d9ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7f770
+0ef5effdce79c99999ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff7f770
+0ee8effc0e79c9f981ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7f770
+0ed8eff9e67949f99fff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff00770
+0edc6ffbe678c8d98dffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7ff70
+0ebe2ff1c03c8430c3ff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff7ff70
+0effefffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff7ff70
+0e000fffffffffffffff555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ff00070
+0fffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffddfffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffddfffffffffd87fffffffc60ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffdbfffdfffffdbbffffeffbbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffd78dd8fffffdbbfffffffbbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffcf75ddfffffdbb1a69cf1bbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffd705dffffffd86e9a6eeec7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffdb7d9ffffffdaeebaeee0bbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffdd765dfffffdb6ebaeeefbb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0fffdd8fd8fffffdbaebaeeeebb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffdddfffffdbb1baec71c77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffe3ffffffdffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdfffffffffffe1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdfffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff0
+0ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffc3ffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffeddfffffbfffffffffffdfaeffffbfffffefffeffffffbffc7ebfffffbffe7efffffebffbfffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffedffffffbfffffdfffffdfa6ff7fbfffffefffeffffffbffbbebfbfffbffdbedffffebfbbf7fffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffed9d38e30e34dd8fffffdf66ff7f7fffffefffdffffffbffbbdbfffffbffdfddffffdbffbf7fffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffeddcd75dbdd35ddfffffdf6ac61f71871a6dbbdc61c69b6efbd873c71a71dfd871bbd873861c6effffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffedddf05fbdd7ddffffffdeeabb7eeebbe9abbbbbaefa6aeef7bbbbbae9ae87bdeed7bbbbbb7bb5ffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffedddf7dfbdd7d9ffffffddec837df3bb0be7bb7ceec2f9eeef7bbbcefbaedf7de0ef7bbbbb783bffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffedddf75db5d7e5dfffffddecbf7dfdbaebebb37f6ebafaecdf7bbbf6fbaedf7defef7bbbbb7bfbffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffc38df8e3ce37fd8fffffdbeebb6bee86ebedcafba1bafb72befbbbbaebaedefdaed6fbbbbb6bb5ffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffdddfffffdbeec79bf1bf0beefafc6fc2fbbe82f871c71bb1defe71baf871879c6effffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffe3ffffffd3ffffffffbfffffbbffefffffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffc1ffffffffbfffffc7ffeffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff0
+0fffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffc00000001ffff000000007fffc0000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fff1fffffffc7ffc7fffffff1fff1ffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffe7ffffffff3ff9ffffffffcffe7ffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffefffffffffbffbffffffffeffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffcfffffffffbff3ffffffffeffcfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdf1cffffffbff7eeffffffeffdf1fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeeeffffffbff7d6ffffdfeffdeefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdefeffffffbff7baffffdfeffdeffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdefef1c69fbff7ba1c6987effdefc6ec7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdefeeefa6fbff7baeba6dfeffdf1faebbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdefee0c2ffbff782ebafdfeffdfec2e83effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdefeefbaffbff7baebafdfeffdfebb5bfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeeeeebaffbff7baebafdbeffdeebb5bbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdf1c71c2ffbff7ba1c6fe7effdf1c3bc7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdfffffffffbff7ffffffffeffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffcfffffffffbff3ffffffffeffcfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffefffffffffbffbffffffffeffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffe7ffffffff3ff9ffffffffcffe7ffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fff0000000007ffc000000001fff00000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff0ffffffffffdfc3fdf9fffffffffdffff07ffe7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff77ffffdffffdfedddfdf7fffffffdffff7f7ff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff77fffffffffdfedfdfdfffffffffdffff7ffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff76385d9d38e1fed9c3de78e34e30d377f7e78f7863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff0dd75ddcd75dfe3ddddf775d37d74d77f0f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff5c175dddf05dfedddddf775d7e175d77f7f7077767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff6df75dddf7ddfedddddf775d7dd75d67f7f77f777bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff75d859ddf75dfedddddf77617dd0dd97f7f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff763f658df8e1fc38c38e38fd7e17ddf7f7e38e3863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffffffff7fffffffffffffffffddfff7ff77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffffffff7fffffffffffffffffe3fff7ff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0ffff7fff7ffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffebfef7ffffffffff61fffff3fbf87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffddfef7ffff7fffff6efffffbfbfbbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd7434e34e3fffff6efffffbfbfbbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd76f35d377fffff6ec69c7bc3fbb1c71c69ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffc176f75d7fffffff61ba6fbbbbf86efaefa6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd76f75d7fffffff6bbaec3bbbfae0c2ec2effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd66d75d7f7fffff6dbaebbbbbfb6fbaebaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd9737637e3fffff6ebaebbbbbfbaebb0baeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffff7fffff6ec6ec31c3fbb1c3ec2effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7ffffffffffffffeefff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffff1ffe1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7ffffffffffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffc1fff9ffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7defdffffffffdc7fffffffffffffffffffffffffc7ffffbfffffff1ff3ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7fefdffdfffffdef7ffffffffffffffbfffffbfffbbfff7bffffffeeffbef6fffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff79c3de38fffffdef7ffffffffffffffffffffffffbffff7bffffffefffbff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7defddddfffffdee1fe9c6ec69fe9c73a71ff3a7fbf1ba1a71a69fefc7bcf7c69a73c7fffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7defdc1ffffffdef7fe6baeba6fe6fbb9aeffb9bfc6ebb79ae9a6feffbbee1ba69bbfbfffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7defddfffffffdef7fee82e82ffefc3bbb3ffbbbffaebb7ba0beefefc3bef7bafbbbc3fffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff7dedddddfffffdef7feebf5beffefbbbbbdffbbbffaebb7bafbeefefbbbef7bafbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffff78f38e38fffffdef6feebb5baffefbbbbaeffbbbfbaeb36baebeefeebbbef7bafbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffdfffffdc79feec7bc6ffefc31bb1ff1bbfc71cb9bb1beeff1c31c77c6fbb1c3fffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffff33ffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffff1fffffffe7ffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffbffffffff7ffffffdc7fffffffc7ffbffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffbffffffff7dfffffdbbfffffffbbbfbffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffb8dd4d38f78fffffdbffffffffbfffbffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffb75d34df77dfffffdbeea69bbfbf3c31fee87ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffb75d7dd877ffffffdc6e9a6bbfc7bbaefeebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffb75d7dd777ffffffdfaebaebbffbbba0feebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0fffdb7597dd777dfffffdfaebaeb3ffbbbaffeebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0fffe78e57dd8638fffffdbacbaecbfbbbbaefee87ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffdfffffdc72baefbfc71c31ff1bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffbbffffffffffbcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffc7ffffffffffb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdfffffffffffffffffff33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff0
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffddfffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffddfffffffffff7bc7183ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffebfffff7fffff73baefbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffeb8e34e3fffff6bbaef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffff777d377fffff7bbaef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffff70617fffffff7bc31efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffff77dd7fffffff7bfaeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffff775d7f7fffff7bfaedfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffff78e17e3fffff7bbaedfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffff7fffff60c71dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7fffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7fffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7fffff33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff8fffffffffe7fc3fdf9fffffffffdffff07ffe7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff77fbf7fffff7fedddfdf7fffffffdffff7f7ff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff77fbfffffff7fedfdfdfffffffffdffff7ffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff7430e78d38f7fed9c3de78e34e30d377f7e78f7863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff75dbf774df77fe3ddddf775d37d74d77f0f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff75dbf775d877fedddddf775d7e175d77f7f7077767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff75dbf775d777fedddddf775d7dd75d67f7f77f777bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff743b7775d777fedddddf77617dd0dd97f7f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffffffffffff8dfce38dd863fc38c38e38fd7e17ddf7f7e38e3863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffdffffffffffffffffffffddfff7ff77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffdffffffffffffffffffffe3fff7ff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffddfe7fffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffddff7fffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffddff7fffff7fffff73ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd8f774b8e3fffff6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffeb777755777fffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffeb77775507ffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffeb7777557fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0ffff7777655777fffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0ffff78e395d8e3fffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffff7fffff60ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7ccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffddfff7ffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffcdfff7ffffffffff60ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffcdfff7ffff7fffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffd574b0e34e3fffff7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffd575575d377fffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffd97557417fffffff71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffd975575f7fffffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd65575d7f7fffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffdd95d0e37e3fffff6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffff7fffff71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7ccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff0
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffc3ffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffddffffffffffffd820ffdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffddffffffdfffffdfbeffdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdd8e38e38fffffdf7dff9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffc3f5d75ddfffffdefbff5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdf85d067ffffffdc71835d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdf75d7fbffffffdfbefedb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdf76175ddfffffdfbefe083fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdf87d8e38fffffdbaeffdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffffffddfffdfffffdc71ffdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0ffffffe3fffffffffdfffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffff87ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffff33ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffddffffdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffddfffbdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffc9fffbdfdfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffd58d30d38fffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffd574dbcddfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdd75dbddffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdd75dbddffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdd75db5ddfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffdd8ddcdd8fffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffdfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffd3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff0
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffddfffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffcdfefffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffcdfefff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffd58c38e3fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffd576f777fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffd976f07ffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffd976f7fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffdd76d777fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0fffdd8f38e3fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff0
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fffc0000000000007fffc0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fff1ffffffffffff1fff1fffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffe7ffffffffffffcffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffefffffffffffffeffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffcfffffffffffffeffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeeffffffffeffeffdfbffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeeffffffffeffeffdf5fffff7ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdedffffffffeffeffdeefffff7ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdebc6ebb1a70c7effdeea69c61c7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffde7baebae9aebbeffdee9a6bb7bbefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeb82eaaebeecfeffde0baebb783efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdedbecaaebeef7effdeebaebb7bfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeebb2aaebeebbeffdeebaebb6bbefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdeec7ed71bf0c7effdeebaec79c7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffdfffeeffffffffeffdffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffcffff1ffffffffeffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffefffffffffffffeffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffe7ffffffffffffcffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0fff00000000000001fff00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 488 325 a
+ endTexFig
+621 1716 a Fm(Figure)14 b(2:)k(En)o(try)c(Windo)o(w)f(for)h(an)f
+Ff(A)o(rticle)378 1877 y
+ 18861221 6526379 7564902 21707980 32693534 30391173 startTexFig
+378 1877 a
+%%BeginDocument: confirmation.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+480 1377 translate
+530 182 3 bitdump
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfffffc00
+0e000fffffffffffffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fc001c00
+0effeffe17fffe27ffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfddddc00
+0e8faffce7fffca7ffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fddddc00
+0ec76ff9f7fffcffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfddddc00
+0ec6eff9f61898448133ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fc1ddc00
+0ee2eff9fccc4ce64889ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdfddc00
+0ef5eff9fccccce67999ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fdfddc00
+0ee8eff9fccccce67999ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdfddc00
+0ed8eff9f4cccce67999ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fc01dc00
+0edc6ffce4cccce67999ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdffdc00
+0ebe2ffe0e18c0403088ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fdffdc00
+0effefffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfdffdc00
+0e000fffffffffffffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fc001c00
+0fffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffbbb86ec6ec7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffbb5ba6ee6bbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffbaeba6ee6bfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffbaebaaeeabfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffaae86aeeabfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffaa0aeceecb3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffaaeb6ceecbbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffff92ebaeeeebbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffbaebaec6ec7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffc7fff3fbfffffffe7fffeffeffffefffffffe7fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbbfffbfbffffdffdbbffeffeff7fefffffffdbbefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbffffbfbffffdffdffffeffeff7fefffffffdffeffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbf1bbbc3fa7187fdf3a70ff0c61c61c71c7fdf3ef1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbeebbbbbf9aedff87b9aefeefb7faefaebbf87beeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbeebbbbbfbaedffdfbbaefeec37c2ec3383fdfbee0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbeebbbbbfbaedffdfbbaefeebb7baebbdbffdfbeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbaeb3bbbfbaedbfdfbbaefeebb6baebaebbfdfbeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffc71cb1c3fbb1e7fdf1bb0ff0c39c21c31c7fdf1c71c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffebbfffeffffffbfffbfffffefff1fafffffefff9fbfffffaffeffffffefffbffbffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffe9bfdfeffffffbfffbfffffeffeefafefffefff6fb7ffffafeefdffffefffbfbbffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffd9bfdfdffffffbfff7fffffeffeef6fffffefff7f77ffff6ffefdffffdfffbffbffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffdab187dc61c69b6ef71871a6dbbef61cf1c69c77f61c6ef61ce1871bbda7f87387fffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffbaaedfbbaefa6aeeeeebbe9abbbdeeeeeeba6ba1ef7bb5eeeeeedeed7b9bfbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffff7b20df7ceec2f9eedf3bb0be7bbbdeeef3beebb7df783bdeeeeede0ef7bffbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffff7b2fdf7f6ebafaecdfdbaebebb37deeefdbeebb7df7bfbdeeeeedefef7bffbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffefbaedafba1bafb72bee86ebedcafbeeeeebaebb7bf6bb5beeeeedaed6fbfbbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffefbb1e6fc6fc2fbbebf1bf0beefa0be1c71c6ec77bf9c6ebe1c61e71bafbf187187fffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffffffefffffeefffbfffffbbfffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffffffffffffeffffff1fffbfffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbbfff3fbfffffffcffbfffffbffffeffffefffffffe7fcffffffffbfffffffffffffec7ffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbbfffbfbfffffffefbbffff7bffffeff7fefffffffdbbeffff7fffbffffffffff7ffebbffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbbfffbfbfffffffeffbffff7bffffeff7fefffffffdffeffff7fffbffffffffff7ffebbffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbb1bbbc3fbb1bbfef3b71fe1a71ff0c61c61c71c7fdf3ef1fe1c7f871ff1a71c61c70fbffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffaaebbbbbfbaebbfefbaeeff79aefeefb7faefaebbf87beeeff7bbfbaefee9aefb7baef7ffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffaaebbbbbfbaebbfefb9e0ff7ba0feec37c2ec3383fdfbee0ff7bbfba0fefbe0c3782eefffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffaaebbbbbfb2ebbfefbaefff7baffeebb7baebbdbffdfbeefff7bbfbaffefbefbb7beeefffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfff92eb3bbbfcaeb3fefbb6eff6baefeebb6baebaebbfdfbeeeff6bbfbaefeebeebb6baeffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdfffbb1cb1c3ffb1cbfc71bb1ff9bb1ff0c39c21c31c7fdf1c71ff9c7f871ff1bf1c39c70efffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffc00
+0ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fffc00000000001ffff0000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fff1ffffffffffc7ffc7ffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffe7fffffffffff3ff9ffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffeffffffffffffbffbffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffcffffffffffffbff3ffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdf1fffe7fffffbff7c7ffffff3fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdeefffdbbffffbff7bbffffffbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdeffffdffffffbff7bfffffffbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdefc69df3a65fbff7bf1a71c7bfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdefba687b9aafbff7bfe9aebbbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdefbaedfbbeafbff7bf0baf83bfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdefbaedfbbeafbff7beebafbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdeebaedfbbeafbff7baebaebbbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdf1c6edf1beefbff7c70bb1c71fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffdffffffffffffbff7ffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffcffffffffffffbff3ffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffeffffffffffffbffbffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffe7fffffffffff3ff9ffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0fff0000000000007ffc00000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 378 1877 a
+ endTexFig
+640 2381 a Fm(Figure)h(3:)j(The)e(Con\014rmation)c(Windo)o(w)965
+2574 y(3)p eop
+%%Page: 4 4
+bop 279 266 a
+ 21984564 5594039 5657231 22365798 34666987 29733355 startTexFig
+279 266 a
+%%BeginDocument: msgsaved.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+360 1417 translate
+610 155 3 bitdump
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffee87186082efee831c7bc60fffc7fffffefffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffffffffffffffffff7befffeedbbdbbbeefeebeebb5bafff5bbfffbef7ffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffeeaabfff5dbbdbbbf5fe4befbeebefff5bfffeaabbffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffde083fff5dbbdbbbf5feabefbeebeffe0bfffe083dffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffbf1c7fffbc7bc7b87bfea871c6ebe1ff587fff1c7effffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffde083fff5dbbdbbbf5feebfefa0b2ffe0bbffe083dffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffeeaabfff5dbbdbbbf5feebfefaebafff5bbffeaabbffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffffffffffffffffff7befffeedbbdbbbeefeebeebaebafff5bbfffbef7ffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffee87187b82efee831c6ec60fffc7fffffefffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffe1fefcfffffffffeffff83fffffffc7fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6eefefbfffffffeffffbffdfffffeffdbffffff7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6fefefffffffffeffffbffdfffffeffdfffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6ce1ef3c71a71869bbfbe9869bbfee9df1a65c61cf1a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff1eeeefbbae9beba6bbf866de6bbfee686e9aafb7eee9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6eeeefbbaebf0baebbfbeedefbbfeeedeebeac37eeebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6eeeefbbaebeebaeb3fbeedefb3feeedeebeabb7eeebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffff6eeeefbbb0bee86ecbfbeedafcbfeeedeebeabb6eeebbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffe1c61c71c7ebf0beefbf82ee6ffbfc6edf1beec39c71bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffeefffbffbbfffffffbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffff1fffbffc7fffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffe0ffffffffffffffffffff5ffffffff3ff5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbffffffffffffffffffff5fffdfbffbff5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbfffffbffffffffffffff5fffdffffbff5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbba1c71fffffffffffffffc69873c7bc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbbaebbbffffffffffffffffa6dfbbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbbae83ffffffffffffffffc2fdfbbfb83fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbb2ebfffffffffffffffffbafdfbbfbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbca1bbbfffffffffffffffbafdbbbbbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffbfafc71fffffffffffffffc2fe71c71c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffbafffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffc6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffeeffffffffffffffffffff587fffffffc60ff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffeeffffffffffffffffffff5bbffffeffbbeff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffedfffeffffffffffffffff5bbfffffffbbdff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffebc6ec7ffffffffffffffffbb1a69cf1bbdc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffe7baeefffffffffffffffff86e9a6eeec7bfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffeb82effffffffffffffffffaeebaeee0bbbc3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffedbecffffffffffffffffffb6ebaeeefbb7bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffeebb2efffffffffffffffffbaebaeeeebb7bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffeec7ec7ffffffffffffffffbb1baec71c77c3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffe187f83fcfffeeffffffff5faeffffbfffffefffeffffffbffc7ebfffffbffe7efffffebffbffffffbffeffefd7ffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbfbefffe6ffffffff5fa6ff7fbfffffefffeffffffbffbbebfbfffbffdbedffffebfbbf7ffffbffefeefd7ffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbffefffe6fffffbff5f66ff7f7fffffefffdffffffbffbbdbfffffbffdfddffffdbffbf7ffff7ffeffefd7ffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbf3ef1feac65c71ffff6ac61f71871a6dbbdc61c69b6efbd873c71a71dfd871bbd873861c6ef69fe1ce1ffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6c7f87beeefeafaabbbfffeeabb7eeebbe9abbbbbaefa6aeef7bbbbbae9ae87bdeed7bbbbbb7bb5ee6feeeeeffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbfbee0fecc2a83ffffdec837df3bb0be7bb7ceec2f9eeef7bbbcefbaedf7de0ef7bbbbb783bdeffeeeeeffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbfbeeffecbaabfffffdecbf7dfdbaebebb37f6ebafaecdf7bbbf6fbaedf7defef7bbbbb7bfbdeffeeeeeffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffff6dbfbfbeeefeebaabbbfffbeebb6bee86ebedcafba1bafb72befbbbbaebaedefdaed6fbbbbb6bb5befeeeeeeffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffe187fbf1c71feec2ec71fffbeec79bf1bf0beefafc6fc2fbbe82f871c71bb1defe71baf871879c6ebefc61c61ffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffbfffffbbffefffffeefffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffc7ffeffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffe1fffffffffffffefffffffffffefff3fffffffffffffbfffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffeefffffffffffffefff7dffffffefefbfffefffffefffbffffdffffeeffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffeefffffffffffffefff7dffffffefffbfffffffffffffbffffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffeea71c71ff1a6efe1ba1871a7fba9cfbc7fce9feece9c31bbf871ff0cf1973c71fe5c71c71c71fffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffe19aebaeffe9aefeebb7dee9bfba6efbbbfee6feeee6baebbfdeefeeeeeabbbaefeabaebbebaefffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffefbe0cf3ff0baefeebb7deebbfaaeefb83feeefeaeeebaeabfdeefeeef3abbcf3fea833cf0ba0fffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffefbeff7dfeebacfeebb7deebbfaaeefbbffeeefeaeeebaeabfdeefeeefdabbf7dfeabfdf6ebaffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffefbeebaefeebb2feeb36daebbfaaeefbbbfeeefeaeeebaeabfdaefeeeeeabbbaefeabaebaec2eefbefffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffefbf1c71ff0bbefe1cb9e71bbfd6ec71c7fc6eff5c6ec31d7fe71ff0c71bb1c71feec71c70fb1c71c7ffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbfefbefffffffffffffffffffffffffffffffffffffffff800
+07ffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 279 266 a
+ endTexFig
+633 711 a Fm(Figure)14 b(4:)j(A)d(Sample)f(Message)i(Windo)o(w)75
+843 y(indexes)g(en)o(tries)g(b)o(y)e(app)q(ending)h(a)g(lo)o(w)o(er-case)g
+(letter.)19 b(This)14 b(pro)q(cedure)i(allo)o(ws)c(for)i(m)o(ultiple)d(en)o
+(tries)k(to)f(ha)o(v)o(e)75 893 y(the)h(same)e(XBibT)369 902
+y(E)393 893 y(Xk)o(ey)m(,)g(but)i(has)f(the)h(restriction)h(that)e(y)o(ou)g
+(can)h(create)g(only)f(t)o(w)o(en)o(t)o(y-six)g(en)o(tries)h(with)f(the)75
+943 y(same)e(\\base")g(XBibT)428 952 y(E)452 943 y(X)g(k)o(ey)m(.)18
+b(The)13 b Fi(Message)h(Windo)o(w)d Fm(also)h(sho)o(ws)h(y)o(ou)f(in)g(whic)o
+(h)h(\014le)g(the)g(new)g(en)o(try)g(w)o(as)75 993 y(stored.)25
+b(The)16 b(database)h(\014le)e(name)g(is)h(determined)g(b)o(y)f(the)i
+(\014rst)g(c)o(haracter)g(of)e(the)i(XBibT)1574 1002 y(E)1597
+993 y(X)f(k)o(ey)g(with)f(the)75 1043 y(\\.bib")e(extension)h(app)q(ended.)
+137 1092 y(No)o(w)19 b(let)g(us)h(rep)q(eat)g(the)g(same)e(pro)q(cedure,)k
+(except)f(this)e(time)f(w)o(e'll)g(en)o(ter)i(a)f(b)q(o)q(ok,)h(sa)o(y)f
+(\\Hollyw)o(o)q(o)q(d)75 1142 y(Dreams,")c(again)h(b)o(y)g(Ronald)f(Reagan,)h
+(published)g(b)o(y)g(Bev)o(erley)i(Hills)e(Press)i(in)e(1987.)24
+b(After)17 b(op)q(ening)f(the)75 1192 y(\\b)q(o)q(ok")f(template)h(b)o(y)g
+(pressing)h(the)f(\\b)q(o)q(ok")g(button)g(in)g(the)h Fi(Applicati)o(ons)e
+(Windo)o(w)p Fm(,)g(w)o(e)h(en)o(ter)i(the)f(in-)75 1242 y(formation)d(as)i
+(sho)o(wn)g(in)g(Figure)g(5.)25 b(Note)17 b(that)f(w)o(e)g(en)o(tered)i(the)f
+(same)e(XBibT)1396 1251 y(E)1420 1242 y(X)h(k)o(ey)g(as)h(b)q(efore,)g
+(namely)m(,)75 1292 y(\\Ronnie87.")f(Since)e(there)g(is)f(already)g(an)f(en)o
+(try)i(that)f(used)h(the)g(same)e(XBibT)1354 1301 y(E)1377
+1292 y(X)h(k)o(ey)g(\(and)g(w)o(as)g(stored)h(with)75 1342
+y(the)g(L)157 1337 y Fe(a)176 1342 y Fm(T)199 1354 y(E)222
+1342 y(X)g(k)o(ey)f(\\Ronnie87a"\),)e(the)j(new)g(en)o(try)g(will)e(b)q(e)i
+(assigned)f(the)h(L)1256 1337 y Fe(a)1275 1342 y Fm(T)1298
+1354 y(E)1321 1342 y(X)g(k)o(ey)f(\\Ronnie87b.")k(Also)c(note)75
+1391 y(that)h(w)o(e)f(en)o(tered)j Fn("elpresidente)10 b Fm(in)k(the)g
+(author)f(\014eld.)18 b(If)13 b(an)h(en)o(try)g(starts)g(with)g(a)f(leading)g
+(quote)g(and)h(has)75 1441 y(no)h(spaces,)h(newlines,)f(or)f(tabs)h(in)g(it,)
+f(it)g(will)g(b)q(e)h(sa)o(v)o(ed)g(without)g(quotes)g(surrounding)g(it.)21
+b(Therefore,)15 b(if)f(y)o(ou)75 1491 y(ha)o(v)o(e)g(a)f(declaration)h(lik)o
+(e)75 1541 y Fn(@string{elpreside)o(nte)19 b(=)i("Ronald)g(Reagan"})75
+1591 y Fm(,)13 b(then)h(this)f(en)o(try)h(will)e(b)q(e)i(expanded)g
+(correctly)h(b)o(y)e(BibT)1017 1600 y(E)1040 1591 y(X.)g(The)h(W)-5
+b(ARNING!)12 b(message)h(at)h(the)g(b)q(ottom)e(of)75 1640
+y(the)k(template)f(tells)h(y)o(ou)f(that)g(if)g(y)o(ou)g(ha)o(v)o(e)h(an)f
+(editor,)h(but)g(no)f(author)h(\014eld)g(\(BibT)1463 1649 y(E)1486
+1640 y(X)g(requires)g(one)g(of)f(the)75 1690 y(t)o(w)o(o\),)f(y)o(ou'll)e(ha)
+o(v)o(e)j(to)f(edit)h(the)g(.bib)e(\014le)i(b)o(y)f(hand)g(after)h(storing)g
+(this)f(en)o(try)m(,)g(since)i(XBibT)1570 1699 y(E)1593 1690
+y(X)e(assumes)h(that)75 1740 y(the)f(\\author")g(\014eld)g(has)g(b)q(een)h
+(en)o(tered.)137 1790 y(No)o(w)j(go)f(ahead)h(and)f(press)j(the)e(\\annote")f
+(button.)30 b(Another)19 b(windo)o(w)e(p)q(ops)h(up)g(in)o(to)f(whic)o(h)g(y)
+o(ou)h(can)75 1840 y(en)o(ter)f(information)12 b(that)k(will)e(b)q(e)i
+(stored)h(as)f(an)f(additional)f(en)o(try)i(lab)q(eled)f(\\annote".)23
+b(BibT)1614 1849 y(E)1637 1840 y(X)16 b(will)e(ignore)75 1889
+y(this)e(en)o(try)h(since)g(it)f(is)g(not)h(one)f(of)g(those)h(that)f(BibT)
+916 1898 y(E)939 1889 y(X)h(kno)o(ws)f(ab)q(out.)17 b(\(The)c(\\bibpro)q
+(cess")g(utilit)o(y)e(describ)q(ed)75 1939 y(in)i(Section)i(3)e(will)g(allo)o
+(w)f(y)o(ou)h(to)h(merge)f(this)h(information)d(with)j(output)g(generated)h
+(b)o(y)f(standard)g(BibT)1784 1948 y(E)1807 1939 y(X.)137 1989
+y(After)j(y)o(ou)f(ha)o(v)o(e)h(sa)o(v)o(ed)g(this)f(en)o(try)m(,)h(the)g
+(con)o(ten)o(ts)h(of)e(the)h(BibT)1198 1998 y(E)1221 1989 y(X)f(database)h
+(\014le)g(will)e(lo)q(ok)g(as)i(follo)o(ws,)75 2039 y(assuming)12
+b(that)h(the)h(\014le)f(\\r.bib")f(did)h(not)g(exist)g(or)g(w)o(as)h(empt)o
+(y)e(b)q(efore,)h(and)g(that)h(y)o(ou)e(en)o(tered)j(\\What)e(great)75
+2089 y(stu\013")h(in)g(the)g(\\annote")g(windo)o(w.)75 2175
+y Fd(@article{R)o(on)o(nie)o(87)o(a,)114 2221 y(author)k(=)h("Ronald)e
+(Reagan",)114 2267 y(title)h(=)h("It)g(never)e(rains)h(in)h(Southern)d
+(California)o(",)114 2312 y(journal)h(=)i("Sunny)f(Side)g(Up",)114
+2358 y(year)g(=)i("1987",)114 2403 y(volume)e(=)h("1",)114
+2449 y(number)f(=)h("3",)965 2574 y Fm(4)p eop
+%%Page: 5 5
+bop 491 540 a
+ 15271722 24240837 7564902 6446612 32561971 45652541 startTexFig
+491 540 a
+%%BeginDocument: book.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+481 411 translate
+529 826 3 bitdump
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff800
+0e000ffffffffffff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f8003800
+0effeff80ffff1fffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbbbb800
+0e8faffce7fff9fff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbbbb800
+0ec76ffce7fff9fffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbbbb800
+0ec6effce61c391ff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f83bb800
+0ee2effc0cc999bffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbfbb800
+0ef5effce4c9997ff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbfbb800
+0ee8effce4c9987ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbfbb800
+0ed8effce4c9993ff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f803b800
+0edc6ffce4c9999ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbffb800
+0ebe2ff80e1c318ff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbffb800
+0effeffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbffb800
+0e000ffffffffffff5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f8003800
+0ffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffddfffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffddfffffffffd87fffffffc60ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffdbfffdfffffdbbffffeffbbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffd78dd8fffffdbbfffffffbbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffcf75ddfffffdbb1a69cf1bbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffd705dffffffd86e9a6eeec7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffdb7d9ffffffdaeebaeee0bbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffdd765dfffffdb6ebaeeefbb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0fffdd8fd8fffffdbaebaeeeebb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffdddfffffdbb1baec71c77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffe3ffffffdffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdfffffffffffe1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdfffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff800
+0ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffc3ffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffeddfffffbfffffffffffdfaeffffbfffffefffeffffffbffc7ebfffffbffe7efffffebffbffffffbffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffedffffffbfffffdfffffdfa6ff7fbfffffefffeffffffbffbbebfbfffbffdbedffffebfbbf7ffffbffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffed9d38e30e34dd8fffffdf66ff7f7fffffefffdffffffbffbbdbfffffbffdfddffffdbffbf7ffff7ffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffeddcd75dbdd35ddfffffdf6ac61f71871a6dbbdc61c69b6efbd873c71a71dfd871bbd873861c6ef7ffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffedddf05fbdd7ddffffffdeeabb7eeebbe9abbbbbaefa6aeef7bbbbbae9ae87bdeed7bbbbbb7bb5efffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffedddf7dfbdd7d9ffffffddec837df3bb0be7bb7ceec2f9eeef7bbbcefbaedf7de0ef7bbbbb783bdfffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffedddf75db5d7e5dfffffddecbf7dfdbaebebb37f6ebafaecdf7bbbf6fbaedf7defef7bbbbb7bfbdfffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffc38df8e3ce37fd8fffffdbeebb6bee86ebedcafba1bafb72befbbbbaebaedefdaed6fbbbbb6bb5bfffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffdddfffffdbeec79bf1bf0beefafc6fc2fbbe82f871c71bb1defe71baf871879c6ebfffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffe3ffffffd3ffffffffbfffffbbffefffffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffc1ffffffffbfffffc7ffeffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff800
+0fffffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffc00000001ffff000000007fffc0000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fff1fffffffc7ffc7fffffff1fff1ffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffe7ffffffff3ff9ffffffffcffe7ffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffefffffffffbffbffffffffeffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffcfffffffffbff3ffffffffeffcfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdf1cffffffbff7eeffffffeffdf1fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeeeffffffbff7d6ffffdfeffdeefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdefeffffffbff7baffffdfeffdeffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdefef1c69fbff7ba1c6987effdefc6ec7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdefeeefa6fbff7baeba6dfeffdf1faebbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdefee0c2ffbff782ebafdfeffdfec2e83effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdefeefbaffbff7baebafdfeffdfebb5bfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeeeeebaffbff7baebafdbeffdeebb5bbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdf1c71c2ffbff7ba1c6fe7effdf1c3bc7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdfffffffffbff7ffffffffeffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffcfffffffffbff3ffffffffeffcfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffefffffffffbffbffffffffeffefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffe7ffffffff3ff9ffffffffcffe7ffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fff0000000007ffc000000001fff00000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff0ffffffffffdfc3fdf9fffffffffdffff07ffe7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff77ffffdffffdfedddfdf7fffffffdffff7f7ff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff77fffffffffdfedfdfdfffffffffdffff7ffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff76385d9d38e1fed9c3de78e34e30d377f7e78f7863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff0dd75ddcd75dfe3ddddf775d37d74d77f0f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff5c175dddf05dfedddddf775d7e175d77f7f7077767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff6df75dddf7ddfedddddf775d7dd75d67f7f77f777bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff75d859ddf75dfedddddf77617dd0dd97f7f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff763f658df8e1fc38c38e38fd7e17ddf7f7e38e3863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffff7fffffffffffffffffddfff7ff77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffff7fffffffffffffffffe3fff7ff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0ffff7fff7ffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffebfef7ffffffffff75ff3ffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffddfef7ffff7fffff75ffbffffffefefffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd7434e34e3fffff75ffbffffffffefffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd76f35d377fffff7fc7b869c71cf0c69871ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffc176f75d7fffffff7fbbbba6baeeeeba6deeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd76f75d7fffffff7f83bbaf833eee82ede0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd66d75d7f7fffff7fbfbbafbfdeeebeedefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd9737637e3fffff7fbbb86fbaeeeebaedaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffff7fffff7fc71befc71c70c6ee71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7ffffbffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7ffffbfffffffffffffe1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7ffffffffffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffc1fff9ffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7defdffffffffdbbfcf3fffffffbf87ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7fefdffdfffffdbbfefbfffffffbfdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff79c3de38fffffdbbfefbfffffffbfdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7defddddfffffdbb1efbbaec71c3fda9c71971fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7defdc1ffffffd82eefbbaebaebbfda6bbeaaefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7defddfffffffdbaeefbbaabaebbfdaf830ab3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff7dedddddfffffdbaeefbb2abaebbfdafbeeabdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0ffff78f38e38fffffdbaeefbcaabaebbfdafbaeaaefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffdfffffdbb1c71fb5c71c3f86fc70bb1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdffffffbbffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdffffffc7fffffffffffffffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffc3fdf9fffdffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffddfdfdf7fdffffffffffd87ffffff3ffffeeff3cfffe1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffddfdfdfffdffffdfffffddbffffffbffffeeefbefffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffdd743de78d38d38fffffddbffffffbffffeeffbefffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffc375ddf774d74ddfffffddb1bb1a7bc6efeecfbef1feea71c71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffdf75ddf79dd05fffffffdc6ebae9bbbaefe0efbeeefe19aebaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffdf75ddf7edd7dfffffffdda0ba0bfb82efeeefbef3fefbe0cf3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffdf65ddf775d75fdfffffddafd6fbfbbecfeeefbefdfefbeff7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffdf9438e38dd8df8fffffddaed6ebfbbb2feeefbeeefefbeebaeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffdfffffd871ef1bf1c7efeec71c71fefbf1c71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffeeffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdfffffffffff1fffffffffffffffffe1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdfffffffffffffffffffffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff800
+0fffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffddfffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffddfffffffffff7bc7183ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffebfffff7fffff73baefbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffeb8e34e3fffff6bbaef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffff777d377fffff7bbaef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffff70617fffffff7bc31efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffff77dd7fffffff7bfaeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffff775d7f7fffff7bfaedfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffff78e17e3fffff7bbaedfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffff7fffff60c71dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7fffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7fffff87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7fffff33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff8fffffffffe7fc3fdf9fffffffffdffff07ffe7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff77fbf7fffff7fedddfdf7fffffffdffff7f7ff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff77fbfffffff7fedfdfdfffffffffdffff7ffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff7430e78d38f7fed9c3de78e34e30d377f7e78f7863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff75dbf774df77fe3ddddf775d37d74d77f0f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff75dbf775d877fedddddf775d7e175d77f7f7077767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff75dbf775d777fedddddf775d7dd75d67f7f77f777bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff743b7775d777fedddddf77617dd0dd97f7f777775dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffff8dfce38dd863fc38c38e38fd7e17ddf7f7e38e3863fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffdffffffffffffffffffffddfff7ff77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffdffffffffffffffffffffe3fff7ff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffddfe7fffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffddff7fffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffddff7fffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd8f774b8e3fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffeb777755777fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffeb77775507ffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffeb7777557fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0ffff7777655777fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0ffff78e395d8e3fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff33ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffe3ffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffddfffdffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdfffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdf8d39e38e3fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffe374dddd777fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0ffffd05fdc19fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0ffffd7dfddfefffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffdd75fddd777fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffe38df8e38e3fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff33ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff800
+0fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffff7f7dffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffebf7dffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffddf7dffffffdfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdd8614e38e38fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdd75d35d75ddfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffc175d7c19e7ffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdd75d7dfefbffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdd75d7dd75ddfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdd8617e38e38fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffdfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffc1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffc1f7fffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdff77bf7fffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdff7fbfffffdfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdf8670e78d38fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffc3777bf774ddfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdf777bf775dffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdf777bf775dffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffdf777b7775ddfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0fffc1863ce38dd8fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffdfffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffd3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffc1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff800
+0ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffddffffdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffddfffbdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffc9fffbdfdfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffd58d30d38fffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffd574dbcddfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffdd75dbddffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffdd75dbddffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffdd75db5ddfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffdd8ddcdd8fffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffdfffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffd3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff800
+0fffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffddfffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffcdfefffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffcdfefff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffd58c38e3fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffd576f777fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffd976f07ffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffd976f7fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffdd76d777fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0fffdd8f38e3fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff800
+0ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffc0000000000007fffc0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fff1ffffffffffff1fff1fffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffe7ffffffffffffcffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffefffffffffffffeffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffcfffffffffffffeffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeeffffffffeffeffdfbffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeeffffffffeffeffdf5fffff7ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdedffffffffeffeffdeefffff7ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdebc6ebb1a70c7effdeea69c61c7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffde7baebae9aebbeffdee9a6bb7bbefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeb82eaaebeecfeffde0baebb783efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdedbecaaebeef7effdeebaebb7bfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeebb2aaebeebbeffdeebaebb6bbefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdeec7ed71bf0c7effdeebaec79c7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffdfffeeffffffffeffdffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffcffff1ffffffffeffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffefffffffffffffeffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffe7ffffffffffffcffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fff00000000000001fff00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbbb86ec6ec7bfffbbfffffffffeffffffffeffffffffffffffefffffffbfffffffffffeffffbfffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbb5ba6ee6bbbfffbbfffffffffeff7fffffeef7fffff7fffffefffffffbbffffffffffefff7bfffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbaeba6ee6bfbfff93fffffffffeff7fffffeff7fffff7fffffefffffffbfffffffffffefff7bfffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbaebaaeeabfbfffab1bbfa71c70fe1c7fc70ce1ff1a61a6eff0c61c69c33a71ff1a7fba9c61a71a7fffffffffffffffffffffffff800
+0fffffffffffffffffffffffffaae86aeeabfbfffabebbf9aebaeff7bbfbaeef7fee9b79aefeebaeba6bbb9aefee9bfba6bb79ae9bfffffffffffffffffffffffff800
+0fffffffffffffffffffffffffaa0aeceecb3bfffbb0bbfba082eff7bbf82eef7fe0bb7beefee82e82ebbbbaefeebbfaae837ba0bffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffaaeb6ceecbbbfffbaeb3fbafbeeff7bbfbeeef7fefbb7becfeebeebeebbbbaefeebbfaaebf7bafbffffffffffffffffffffffffff800
+0fffffffffffffffffffffffff92ebaeeeebbffffbaecbfbaebaeff6bbfbaeef6feebb6bf2feeba1baebbbbb0feebbfaaebb6baebffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbaebaec6ec7bfffbb0fbfbb1c70ff9c7fc70c79ff1bb9bfeff0c6fc6ec31bbeff1bbfd6ec79bb1bffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffffffffffffffffbbffffffffffffffffffffffffffeeffffeffffffffeeffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffff1ffffefffffffff1ffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffffffffffff9fffcfefffffffffffffeffffff5efffeffffd7fc61ff583effffffd7ffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffff7ff6effefefffffffffdfffeffffff5d7fdeffffd7fbaeff5bfeef7fffd7ffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffff7ff7fffefefffffffffdfffefffbff5bbfdeffffd7fbaeff5bfeff7fffd7ffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbb1bbfbb1a61ff7cf1ef0fe9c65c7f871fe1c71fffbae869c69fffbaefffbf0ce1c69ffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbaebbfbbe9b7fe1eeeeeefe6faabbfdeefeebbbfffbaede6ba6fffba1fff86eef7ba6ffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbaebbfab0bb7ff7ee0eeefeec2a83fdeefee83ffff82edeebaffffbabfffbeeef7bafffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffb2ebbfaaebb7ff7eefeeefeebaabffdeefeebfffffbaedeebaffffbadfffbeeef7bafffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffcaeb3faaebb6ff7eeeeeefeebaabbfdaefeebbbfffbacdaebaffffbaefffbeeef6bafffbfffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffb1cbfd70bb9ff7c71c70feec2ec7fe71fe1c71fffbb2e6ec6ffffc6efff830c79c6fff1fffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbbffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbbfcf3fffffffffffffffff3cfffffffffffe7fff3fbffffff5efffeffffd7fffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbbbefbfffff7fffff7effffbefffffffffffdbbffbfbffffff5d7fdeffffd7fffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbbfefbfffff7fffff7fffffbefffffffffffdffffbfbffffff5bbfdeffffd7fffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbb3efbff1ba1c65c61cf1c7beeeff1c6ec7fdf3c7bc3fc71fffbae869c69fffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffabbefbffebb7baafb7eeefbbeeefeefaebbf87bbbbbbffaefffbaede6ba6fffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffabbefbff0bb7baac37eefc3beeeff3c2e83fdfb83bbbfc33fff82edeebaffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffabbefbfeebb7baabb7eefbbbeecffdbb5bffdfbbfbbbfbbdfffbaedeebaffffffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffff93befbfeeb36baabb6eeebbbef2feebb5bbfdfbbbbbbfbaefffbacdaebafffbffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffbb1c71ff0cb9c6ec39c71c31c7eff1c3bc7fdf1c71c3fc31fffbb2e6ec6fff1ffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffeefffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffff800
+0fffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 491 540 a
+ endTexFig
+650 2167 a Fm(Figure)14 b(5:)k(En)o(try)c(Windo)o(w)f(for)g(a)h
+Ff(b)n(o)n(ok)p Fm(.)965 2574 y(5)p eop
+%%Page: 6 6
+bop 277 266 a
+ 22040503 3729359 5657231 23549870 34864332 28483502 startTexFig
+277 266 a
+%%BeginDocument: error.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+360 1495 translate
+610 103 3 bitdump
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffee87186082efee831c7bc60fff83fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7befffeedbbdbbbeefeebeebb5bafff5fbfffbef7fffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffeeaabfff5dbbdbbbf5fe4befbeebefff5f7ffeaabbfffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffde083fff5dbbdbbbf5feabefbeebeffe0efffe083dfffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffbf1c7fffbc7bc7b87bfea871c6ebe1ff5c7fff1c7efffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffde083fff5dbbdbbbf5feebfefa0b2ffe0fbffe083dfffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffeeaabfff5dbbdbbbf5feebfefaebafff5fbffeaabbfffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7befffeedbbdbbbeefeebeebaebafff5bbfffbef7fffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffee87187b82efee831c6ec60fffc7fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffe0861c61effff1fffffffffffffffffffffffffffffffeffefcfffffffffefffffbffffbfffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbaebaeefffeeffffffff7ffffffffffffdfffffdfffefeefefbfffffffefffffbfdffbfffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbaebaeefffefffffffff7ffffffffffffdfffffdfffeffefefffffffffefffffbfdffbfffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbaebaeefffefc69fe9c61ff1c6ec7fc69869bbf871fe1ce1ef3c71a71869bbfc31871871c71ffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffe1861ba1efffeffa6fe6bb7feefaebbfba6de6bbfdeefeeeeeefbbae9beba6bbfbbedfebbebaeffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefaebbabefffefc2efeebb7ff3c2e83f82edefbbfdeefeeeeeefbbaebf0baebbfbb0df0bb0ce0ffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefb6dbadefffefbaefeebb7ffdbb5bffbeedefb3fdeefeeeeeefbbaebeebaeb3fbaedeebaef6fffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbaebaeffffeebaefeebb6feebb5bbfbaedafcbfdaefeeeeeefbbb0bee86ecbfbaedaebaebaeefffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffe0baec6eeffff1c2efeec79ff1c3bc7fc6ee6ffbfe71fe1c61c71c7ebf0beefbfc30e70870c71c7ffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbffffffffffffffeefffbffbbfffffffffffffefffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffff1fffbffc7fffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffe1fffffffffffffefffffffffffefff3fffffffffffffbfffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffeefffffffffffffefff7dffffffefefbfffefffffefffbffffdffffeeffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffeefffffffffffffefff7dffffffefffbfffffffffffffbffffdffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffeea71c71ff1a6efe1ba1871a7fba9cfbc7fce9feece9c31bbf871ff0cf1973c71fe5c71c71c71ffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffe19aebaeffe9aefeebb7dee9bfba6efbbbfee6feeee6baebbfdeefeeeeeabbbaefeabaebbebaeffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbe0cf3ff0baefeebb7deebbfaaeefb83feeefeaeeebaeabfdeefeeef3abbcf3fea833cf0ba0ffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbeff7dfeebacfeebb7deebbfaaeefbbffeeefeaeeebaeabfdeefeeefdabbf7dfeabfdf6ebafffffffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbeebaefeebb2feeb36daebbfaaeefbbbfeeefeaeeebaeabfdaefeeeeeabbbaefeabaebaec2eefbeffffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffefbf1c71ff0bbefe1cb9e71bbfd6ec71c7fc6eff5c6ec31d7fe71ff0c71bb1c71feec71c70fb1c71c7fffffffffffffffffffffffffffffffffff80
+7ffffffffffffffffffffffffffffffffffffffffffffffeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbbfefbeffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 277 266 a
+ endTexFig
+688 593 a Fm(Figure)14 b(6:)j(Sample)c(error)i(message)114
+726 y Fd(pages)j(=)h("33--44")114 772 y(})75 863 y(@book{Ronn)o(ie)o(87b)o(,)
+114 909 y(author)f(=)h(elpreside)o(nte)o(,)114 955 y(title)f(=)h("Hollywood)d
+(Dreams",)114 1000 y(publisher)g(=)k("Beverley)c(Hills)h(Press",)114
+1046 y(year)h(=)i("1987",)114 1092 y(annote)e(=)h("What)e(great)h(stuff!")114
+1137 y(})137 1275 y Fm(T)m(o)13 b(exit)h(XBibT)398 1284 y(E)422
+1275 y(X,)f(no)o(w)g(press)j(the)e Ff(Quit)g Fm(button.)75
+1385 y Fi(2)48 b(More)15 b(Detail)137 1462 y Fm(The)c(example)f(in)g(the)h
+(preceding)g(section)h(pro)o(vided)e(a)g(\015a)o(v)o(or)g(of)g(the)i
+(functionalit)o(y)d(that)h(XBibT)1677 1471 y(E)1700 1462 y(X)h(a\013ords.)75
+1512 y(In)j(summary)m(,)c(XBibT)434 1521 y(E)458 1512 y(X)k(has)g(the)g
+(follo)o(wing)d(features:)137 1596 y Fh(\017)21 b Fm(Automatically)15
+b(pro)o(vides)j(a)g(template)f(of)h(the)h(required)g(and)f(optional)e
+(\014elds)j(asso)q(ciated)g(with)e(eac)o(h)179 1646 y(en)o(try)d(t)o(yp)q(e)h
+(as)f(de\014ned)h(b)o(y)e(BibT)719 1654 y(E)742 1646 y(X.)137
+1730 y Fh(\017)21 b Fm(Ensures)15 b(that)f(the)h(required)g(\014elds)f(of)f
+(a)h(sp)q(eci\014c)h(en)o(try)g(are)f(\014lled.)137 1814 y
+Fh(\017)21 b Fm(Pro)q(duces)15 b(a)f(unique)g(L)539 1809 y
+Fe(a)558 1814 y Fm(T)581 1826 y(E)604 1814 y(X)g(k)o(ey)g(b)o(y)g(whic)o(h)g
+(en)o(tries)h(are)f(referenced.)137 1898 y Fh(\017)21 b Fm(Automatically)11
+b(inserts)k(en)o(tries)g(in)e(alphab)q(etical)g(order)i(in)o(to)e(the)i
+(database.)137 1982 y Fh(\017)21 b Fm(Pro)o(vides)d(a)f(clipb)q(oard)h(that)f
+(can)h(b)q(e)h(initialized)d(to)h(displa)o(y)g(a)h(sp)q(eci\014ed)h(\014le.)
+29 b(This)18 b(feature)g(can)g(b)q(e)179 2032 y(useful)c(for)f(displa)o(ying)
+g(an)g(abbreviations)h(\014le)g(from)e(whic)o(h)h(to)h(cut)h(and)e(paste.)137
+2116 y Fh(\017)21 b Fm(Pro)o(vides)10 b(t)o(w)o(o)e(new)i(\014elds,)g
+(\\annote")f(and)h(\\k)o(eyw)o(ords,")f(that)h(are)f(useful)h(for)f(main)o
+(taining)d(an)j(annotated)179 2166 y(bibliograph)o(y)m(.)137
+2250 y(Before)17 b(discussing)f(XBibT)583 2259 y(E)607 2250
+y(X's)f(default)h(settings,)g(en)o(vironmen)o(t)f(v)n(ariables,)g(X)h(windo)o
+(w)f(resources,)j(and)75 2300 y(input)f(restrictions,)i(let)e(use)h(sa)o(y)f
+(a)g(few)g(w)o(ords)g(ab)q(out)h(XBibT)1112 2309 y(E)1135 2300
+y(X's)f(messages.)28 b(W)m(e'v)o(e)16 b(already)h(sho)o(wn)g(the)75
+2350 y(con\014rmation)11 b(message)i(that)g(is)g(displa)o(y)o(ed)g(when)g(an)
+g(application)f(is)h(sa)o(v)o(ed.)18 b(Figure)13 b(6)g(sho)o(ws)g(a)g(sample)
+f(error)75 2399 y(message)h(when)g(not)g(enough)g(information)d(is)j(pro)o
+(vided.)18 b(When)13 b(suc)o(h)g(a)g(message)g(is)g(displa)o(y)o(ed,)f
+(access)j(to)d(the)75 2449 y(rest)k(of)d(the)i(application)e(is)i(susp)q
+(ended.)21 b(This)14 b(pause)i(allo)o(ws)d(y)o(ou)h(to)g(read)h(the)g
+(message)f(and)g(determine)g(the)965 2574 y(6)p eop
+%%Page: 7 7
+bop 275 266 a
+ 22096444 5594039 5591449 22365798 34732769 29733355 startTexFig
+275 266 a
+%%BeginDocument: clipboard.ps
+
+/bitdump % stk: width, height, iscale
+{
+ % read arguments
+ /iscale exch def
+ /height exch def
+ /width exch def
+
+ % scale appropriately
+ width iscale mul height iscale mul scale
+
+ % allocate space for one scanline of input
+ /picstr % picstr holds one scan line
+ width 7 add 8 idiv % width of image in bytes = ceiling(width/8)
+ string
+ def
+
+ % read and dump the image
+ width height 1 [width 0 0 height neg 0 height]
+ { currentfile picstr readhexstring pop }
+ image
+} def
+72 300 div dup scale
+355 1419 translate
+613 154 3 bitdump
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff80
+0e000ffffffffffffffffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f800380
+0effeffe1473ff01ffffff1ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbbbb80
+0e8faffce673ff9cffffff9ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbbbb80
+0ec76ff9f67fff9cffffff9ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbbbb80
+0ec6eff9f662279cc386441ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f83bb80
+0ee2eff9fe7313819933219ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbfbb80
+0ef5eff9fe73339c99f3399ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbfbb80
+0ee8eff9fe73339c9983399ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbfbb80
+0ed8eff9f673339c9933399ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f803b80
+0edc6ffce673339c9933399ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbffb80
+0ebe2ffe0c210701c3881c4ff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557fbffb80
+0effefffffff3ffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffbffb80
+0e000fffffff3ffffffffffff55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557f800380
+0ffffffffffe1ffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb8ffffffffff9fff9fffffffffffaf7ffffffffffddfffffffff9ff7ff7ffffffffffffff77ffdfffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbffdffff7fffdfffffffffffaebffffffffffcdfefdfffffdff7ff7fffffbffffffff77fbdfffffefdfffffffff7fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbfffffff7fffdfffffffffffaddffffffffffcdfefffffffdff7ff7fffffbffffffff27fbdfffffefffffffffff7fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb6630d39d38f78d3dffffffff07ffdd4e38d34e3fd58c39e34e3dff7e30e34e30e34ddfff5630d38cb8c39e38ff8d387fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb55dbcddcd74ff4ddffffffffffffdd35d74d35dfd5f6fddd37ddff7fd75d37dbdd35dfff57dbcd755f6fddd77ff4d77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb567bdfddd77785ddffffffffffffc17dd75d741fd986fddd761dff7e175d7e1bdd7ddfff761bdd05586fddf9ff85d77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb4fbbdfddd77775ddffffffff07ffdd7dd75d75ffd976fddd75ddff7dd75d7ddbdd7d9fff75dbdd7d576fddfeff75d77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb7ddb5fddd87775ddffffffffffffdd7e175d75dfdd76dddd75ddff7dd75d7ddb5d7e5cff75db5d75576dddd77f75d77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb863cdf8ddf7985d8ffffffffffffdd7fd8dd763fdd8738e37618ff0610e37e1ce37fddff761cdd8dd8738e38ff85d87fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff77ffffffffffffffffffffddffffffffffffffffffffffffffffffffffddbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff8fffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffd555bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdaaabffffffffffff8ffffffffffffe3ffffffffffc3ffffffffffeb3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffd555bffffffffffff77fffffefffffddff7fffffffeddffdffdfffebdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdaaabffffffffffff7ffffffefffffdfffffffffffedffffffffffebdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffd555bffffffffffff7e32c37438d3fdf8e78d38e3fed9dd9e39e34ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdaaabffffffffffff7dd55d76f74dfe377774d75dfedddddddddd37fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffd555bffffffffffff7dd55d76f05fffd7f705d7c1feddddde7ddd77fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7dd55d76f7dfffd7f77dd7dffeddebdfbddd77fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff75d54366d75ffdd77775d75dfeddebdddddd77fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff8e375f9738dffe38e38dd8e3fc38f78e38e377f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb8ffffffffff9fffffdffffffffffffaddfffffffffffffffff3fe39e7fffffffffffffddfdfffffff8dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbffdffff7fffffdffffffffffffaddff7ffffffdefffffedff7df7dffff7ffffeffddfdfffffff75fffffffdfffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbfffffff7fffffdffffffffffffaddffffffffffefffffefff7df7ffffffffffeffddfdfffffff7dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb6630d39d38f78e34e1fffffffff07ffdd4e77634e39c377f8efff7df79d38e78ff8c3fdd4c38d38ff7d38cb0e39e34ffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb55dbcddcd74f75d35dfffffffffffffdd37775d35ddef77f743ff7df7dcd77777ff6ffdd35df4df417cdf5577dddd37fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb567bdfddd7777e77ddfffffffffffffdd7777417e7def77f76fff7df7ddd7779ff86ffdd7dd85d87f7dd855761ddd77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb4fbbdfddd7777fb7ddfffffffff07ffdd777adf7fbdef67f76fff7df7ddd777eff76ffdd7dd75d77f7dd75575dddd77fffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb7ddb5fddd87775d7ddfffffffffffffdd777add7ddded97f76fff7df7ddd77777f76dfdd7dd75d77f75d7550ddde1773ffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb863cdf8ddf798e37e1fffffffffffffe3763de37e38f3f7f8effe38e38dd8e38ff873fe37c385d87f8dd85d7e18fd777ffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff77ffffffffffffffffffffffffffffffffff77ffffffffffffffffffffffffffffffffffffffff7fffddfefffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff8fffffffffffffffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffff7fffe3fffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff8ffffffffff3ffffe3fffffffffffffffffffff0fffffffffdffffffdfc3ffffe7fffffffffacfffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff77ffefffffedffffddfffffffffffffefdfffff77ffffffffdffffffdfedfffff7fffffffefaf7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7fffefffffefffffdffffffffffffffefffffff77ffffffffdffffffdfedfffff7fffffffefaf7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7e34c38d3fef8d3fdf7438d38e32c37439d38ff7638e38d38d3fe34e1fed8dd8f78c32e34c3ff7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7dd36f74dfc374dfe375d74d75d55d76fdcd77f0dd75df4d74dffd35dfed75d77775d55d36fff9ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7c176f05ffef75fffd75d05f7dd55d76fddd77f5c19c185f7ddfe175dfed05d07775d54176fff7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff7df76f7dffef75fffd75d7df7dd55d76fddd77f6dfedf75f7ddfdd75dfed7eb7f775d55f76fff7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff75d76d75ffef75ffdd64375f75d54366dddd87f75d75d75f75dfdd75dfed76b77774355d76dff7ffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffff8e37738dffef8dffe395f8df8e375f9738ddf7f7638e385f8ddfe1761fc38f78e38df763773fcfffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffffffffffffffffffffffffffdffffffffdfffffff77fffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffffffffffffffffffffffffffdffffffffdfffffff8ffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb8ffffffffff9fff9fffffffffffaddfe7fff77ffffffffffffffff0fffffffffffffffffcff8ffffffffffffe3fffffffffacfffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbffdffff7fffdfffffffffffaddff7fff77fdfffffff7bfffffb7fffffefffffeffffb7f77fffffefffffddff7ffffffaf7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb77fbfffffff7fffdfffffffffffaebff7fff77ffffffffffbfffffb7fffffefffffeffffbff7ffffffefffffdffffffffffaf7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb6630d39d38f7763de3ffffff07ffeb8f78ff7539dd8d38e70ddfffb630e34c32e34c3fe3bff7e32c37438d3fdf8e78d38e3ff7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb55dbcddcd74f77ddddfffffffffff7f7777f74dddd74d777bddfffb5d77d36f55d36ffdd0ff7dd55d76f74dfe377774d75dff9ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb567bdfddd777761dc1fffffffffff787707f75dddd05f9f7bddfffb417617ef54176ffddbff7dd55d76f05fffd7f705d7c1ff7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb4fbbdfddd77765dddfffffff07fff77777ff75ddeb7dfef7bd9fffb5f75d7ef55f76ffddbff7dd55d76f7dfffd7f77dd7dfff7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb7ddb5fddd87795ddddfffffffffff777777f75ddeb75f777b65cffb5d0dd7ed55d76dfddbff75d54366d75ffdd77775d75dff7ffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffb863cdf8ddf79f618e3fffffffffff78638ff8dd8f78df8e3cfddff0e37e17f3763773fe3bff8e375f9738dffe38e38dd8e3fcfffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff77f77fffffffffffffffffffffffffffffffffffddbfffff7fffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbfffffffff8ff8ffffffffffffffffffffffffffffffffffffe3ffffff7fffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff80
+0ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffc0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fff1fffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdf1ffffffcfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdeeffffffefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdefffffffefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdefc69c71efefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdeffa6baeefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdefc2ebe0efefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdefbaebefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdeebaebaeefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdf1c2ec71c7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffdffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffcffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffeffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0ffe7fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fff00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+showpage
+%%EndDocument
+ 275 266 a
+ endTexFig
+712 711 a Fm(Figure)14 b(7:)j(Clipb)q(oard)c(Windo)o(w)75 841
+y(action)k(to)g(b)q(e)h(tak)o(en.)28 b(Once)19 b(y)o(ou)d(ha)o(v)o(e)h(read)h
+(the)g(message,)f(y)o(ou)g(can)h(eliminate)d(it)i(b)o(y)g(placing)f(the)i
+(cursor)75 891 y(within)13 b(the)h Fi(Message)h(Windo)o(w)d
+Fm(and)h(pressing)h(an)o(y)f(mouse)g(button.)18 b(The)c(App)q(endix)g(con)o
+(tains)f(a)g(listing)g(of)75 940 y(all)g(of)g(XBibT)298 949
+y(E)321 940 y(X's)h(messages;)g(w)o(e)g(will)e(refer)j(to)f(messages)g(b)o(y)
+f(the)i(n)o(um)o(b)q(ers)e(listed)h(there.)75 1028 y Fi(Bac)o(kup)h(File)g
+(Directory:)j Fm(The)f(\014rst)g(and)e(most)g(imp)q(ortan)o(t)f(thing)i(to)f
+(do)h(b)q(efore)h(starting)f(up)g(XBibT)1821 1037 y(E)1844
+1028 y(X)179 1077 y(is)g(to)f(mak)o(e)g(sure)i(that)f(there)h(is)f(a)g
+(directory)h(for)e(XBibT)1119 1086 y(E)1142 1077 y(X)i(to)e(store)i(its)f
+(temp)q(orary)g(\014les)g(in)o(to.)24 b(The)179 1127 y(default)14
+b(directory)h(is)g(\\/tmp.")i(If)e(this)f(directory)h(do)q(es)h(not)e(exist,)
+h(Message)g(#8)f(will)f(b)q(e)i(displa)o(y)o(ed)f(at)179 1177
+y(the)j(startup)h(of)f(the)g(application.)26 b(Y)m(ou)17 b(should)f(exit)h
+(XBibT)1193 1186 y(E)1217 1177 y(X)g(and)g(set)h(the)f(en)o(vironmen)o(t)f(v)
+n(ariable)179 1227 y(XBIBTEX)p 374 1227 13 2 v 16 w(BA)o(CKUP)p
+570 1227 V 16 w(P)m(A)m(TH)d(to)h(a)g(directory)g(to)g(whic)o(h)g(y)o(ou)f
+(ha)o(v)o(e)h(write)g(access.)179 1292 y(If)c(y)o(our)f(database)i(ev)o(er)g
+(b)q(ecomes)f(corrupted)i(b)q(ecause)g(of)d(a)h(system)g(sh)o(utdo)o(wn)g
+(while)g(y)o(ou)f(are)i(mo)q(difying)179 1342 y(the)16 b(\014le,)f(y)o(ou)g
+(can)h(go)f(to)g(the)h(bac)o(kup)f(directory)i(to)e(retriev)o(e)i(the)f(v)o
+(ersion)f(since)h(y)o(our)g(last)f(sa)o(v)o(e.)23 b(The)179
+1392 y(bac)o(kup)14 b(\014le)g(name)e(is)i Fc(xbib[pid].bk)o(p)c
+Fm(,)j(where)i Ff(pid)f Fm(is)g(the)g(pro)q(cess)i(ID)e(of)f(this)h(XBibT)
+1539 1401 y(E)1562 1392 y(X)g(application.)75 1474 y Fi(Database)h(P)o(ath)f
+(and)i(Files:)j Fm(Once)g(y)o(ou)f(ha)o(v)o(e)g(decided)h(where)g(y)o(our)f
+(database)h(\014le\(s\))g(will)d(b)q(e)j(lo)q(cated,)179 1523
+y(y)o(ou)12 b(ma)o(y)f(wish)i(to)g(set)h(the)g(en)o(vironmen)o(t)e(v)n
+(ariable)g(XBIBTEX)p 1212 1523 V 16 w(D)o(A)m(T)m(ABASE)p 1456
+1523 V 15 w(P)m(A)m(THto)g(this)h(directory)179 1573 y(path.)19
+b(This)14 b(step)h(will)e(sa)o(v)o(e)i(y)o(ou)e(the)i(time)e(of)h(t)o(yping)f
+(the)i(database)g(path)f(for)g(ev)o(ery)h(en)o(try)m(.)k(The)c(path)179
+1623 y(can)g(b)q(e)h(sp)q(eci\014ed)h(either)g(as)e(an)g(absolute)h(path)f
+(or)h(as)f(a)g(path)h(relativ)o(e)f(to)g(the)h(directory)g(from)e(whic)o(h)
+179 1673 y(XBibT)297 1682 y(E)320 1673 y(X)g(is)g(started)h(up.)179
+1738 y(BibT)266 1747 y(E)289 1738 y(X)d(requires)i(that)e(bibliograph)o(y)f
+(database)h(\014les)h(ha)o(v)o(e)f(the)h(\\.bib")e(extension.)18
+b(XBibT)1671 1747 y(E)1694 1738 y(X)13 b(extends)179 1788 y(this)i(b)o(y)f
+(splitting)g(the)h(database)g(\014le)g(in)o(to)f(t)o(w)o(en)o(t)o(y-six)h
+(\014les)g(\(a.bib)e(through)i(z.bib\).)21 b(F)m(or)14 b(instance,)h(all)179
+1838 y(en)o(tries)f(with)f(k)o(eys)g(b)q(eginning)g(with)f(\\)p
+Ff(b)p Fm(")h(will)f(b)q(e)h(placed)h(in)e(the)i(\014le)f(\\b.bib".)k(In)c
+(addition,)e(en)o(tries)k(are)179 1888 y(stored)g(alphab)q(etically)d(in)i
+(eac)o(h)g(\014le.)179 1953 y(If)d(y)o(ou)g(do)h(not)f(ha)o(v)o(e)h(write)f
+(access)j(to)d(the)i(directory)f(or)g(database)f(\014le,)h(XBibT)1445
+1962 y(E)1468 1953 y(X)g(will)e(displa)o(y)h(Message)179 2003
+y(#17)k(or)i(Message)h(#18)d(resp)q(ectiv)o(ely)m(.)27 b(If)17
+b(the)g(directory)g(path)g(do)q(es)g(not)f(exist,)i(Message)f(#5)f(will)f(b)q
+(e)179 2053 y(displa)o(y)o(ed.)75 2134 y Fi(ClipBoard:)k Fm(If)d(y)o(ou)g
+(wish)h(to)g(mak)o(e)e(the)i(ClipBoard)f(op)q(erational,)g(y)o(ou)h(m)o(ust)e
+(set)j(the)f(en)o(vironmen)o(t)f(v)n(ari-)179 2184 y(able)c(XBIBTEX)p
+460 2184 V 16 w(CLIPBO)o(ARD.)g(By)h(setting)g(XBIBTEX)p 1145
+2184 V 17 w(CLIPBO)o(ARD)f(to)h(the)g(name)e(of)h(a)g(\014le)h(that)179
+2234 y(con)o(tains)h(frequen)o(tly)h(used)h(information,)c(y)o(ou)i(can)h(p)q
+(op)f(up)h(\(b)o(y)g(pressing)g(the)h Ff(ClipBo)n(ar)n(d)28
+b Fm(button\),)15 b(a)179 2284 y(read-only)g(windo)o(w)g(con)o(taining)g(the)
+h(information)d(stored)k(in)f(this)f(\014le,)h(and)g(cut-and-paste)h(from)d
+(this)179 2334 y(windo)o(w)f(in)o(to)g(others.)19 b(A)14 b(sample)f
+Fi(ClipBoard)g(Windo)o(w)g Fm(is)g(sho)o(wn)h(in)g(Figure)g(7.)179
+2399 y(If)h(XBIBTEX)p 417 2399 V 17 w(CLIPBO)o(ARD)h(has)g(not)f(b)q(een)i
+(set,)g(XBibT)1149 2408 y(E)1173 2399 y(X)f(will)e(displa)o(y)h(Message)i
+(#12)e(when)h(y)o(ou)179 2449 y(press)j(the)g Ff(ClipBo)n(ar)n(d)36
+b Fm(button.)31 b(If)18 b(this)g(en)o(vironmen)o(t)f(v)n(ariable)g(has)h(an)g
+(in)o(v)n(alid)e(path)i(or)h(\014lename,)965 2574 y(7)p eop
+%%Page: 8 8
+bop 179 307 a Fm(Message)15 b(#9)e(will)f(b)q(e)j(displa)o(y)o(ed.)i(When)d
+(the)h(clipb)q(oard)e(\014le)h(is)f(displa)o(y)o(ed,)g(the)i
+Ff(ClipBo)n(ar)n(d)27 b Fm(button,)13 b(is)179 357 y(gra)o(y)o(ed)i(to)g(mak)
+o(e)f(it)g(inop)q(erativ)o(e.)22 b(That)15 b(is,)g(y)o(ou)g(can)g(displa)o(y)
+f(only)h(one)g Fi(ClipBoard)g(Windo)o(w)f Fm(at)h(a)179 407
+y(time.)75 496 y Fi(Application)d(Resources:)20 b Fm(Y)m(ou)9
+b(ma)o(y)e(wish)j(to)f(load)f(the)j(resources)g(\014le)f(\\.xbibrc")f(to)g
+(the)h(resource)i(database)179 545 y(using)i(the)h(command)d(\\xrdb)j(-merge)
+f(.xbibrc.")19 b(This)c(will)e(giv)o(e)h(y)o(our)h(application)e(color)h
+(\(if)g(y)o(ou)g(ha)o(v)o(e)179 595 y(a)f(color)h(monitor\).)75
+684 y Fi(Clear/Ab)q(ort)g(Buttons:)19 b Fm(Practically)c(all)g(text)h(for)g
+(an)f(en)o(try)h(can)g(b)q(e)h(lost)e(b)o(y)h(pressing)g(either)h(the)f
+Ff(Cle)n(ar)179 734 y Fm(or)d(the)i Ff(A)o(b)n(ort)d Fm(buttons,)i(so)g
+(caution)f(m)o(ust)g(b)q(e)h(tak)o(en.)k(The)c Ff(Cle)n(ar)f
+Fm(button)h(clears)g(all)e(text)i(\014elds)h(except)179 784
+y(the)f(directory)h(and)f(k)o(ey)g(\014eld.)19 b(The)14 b Ff(A)o(b)n(ort)f
+Fm(button)i(p)q(ops)f(do)o(wn)g(the)g Fi(En)o(try)h(Windo)o(w)e
+Fm(\(e.g.,)g Fi(Article)179 834 y(Windo)o(w)p Fm(\),)f(in)h(e\013ect)j
+(killing)c(all)g(text)j(en)o(tered)g(in)f(text)g(\014elds.)75
+923 y Fi(Key:)22 b Fm(A)15 b(v)n(alid)g(XBibT)461 931 y(E)484
+923 y(X)h(k)o(ey)g(m)o(ust)f(b)q(egin)g(with)h(a)f(letter)i(\()p
+Fb(a)p Fh(\000)p Fm(z\).)25 b(If)15 b(this)h(is)g(not)g(the)g(case,)h
+(Message)g(#10)179 972 y(or)d(Message)i(#11)d(will)g(b)q(e)i(displa)o(y)o
+(ed.)j(The)d(k)o(ey)f(ma)o(y)f(b)q(e)i(en)o(tered)h(in)e(upp)q(ercase)i(or)e
+(lo)o(w)o(ercase)h(letters;)179 1022 y(but)f(when)h(it)e(is)h(sa)o(v)o(ed,)g
+(the)h(\014rst)g(c)o(haracter)g(is)f(con)o(v)o(erted)i(to)e(upp)q(er)h(case)g
+(and)f(the)g(remaining)e(ones)j(to)179 1072 y(lo)o(w)o(er)e(case.)179
+1141 y(XBibT)297 1150 y(E)320 1141 y(X)k(app)q(ends)h(an)f(index)h(letter)g
+(from)d Ff(a)j Fm(through)f Ff(z)g Fm(to)g(ev)o(ery)h(XBibT)1444
+1150 y(E)1467 1141 y(X)g(k)o(ey)f(to)g(generate)h(the)179 1191
+y(L)190 1186 y Fe(a)209 1191 y Fm(T)232 1204 y(E)255 1191 y(X)c(k)o(ey)m(.)j
+(This)c(w)o(a)o(y)g(y)o(ou)g(ma)o(y)f(use)i(the)g(same)f(XBibT)1097
+1200 y(E)1120 1191 y(X)g(k)o(ey)h(more)e(than)i(once,)f(and)h(XBibT)1743
+1200 y(E)1766 1191 y(X)f(will)179 1241 y(generate)k(di\013eren)o(t)g(L)524
+1236 y Fe(a)543 1241 y Fm(T)566 1253 y(E)590 1241 y(X)f(k)o(eys.)26
+b(This)16 b(metho)q(d)f(do)q(es)i(ha)o(v)o(e)f(the)h(restriction)g(that)f(y)o
+(ou)g(cannot)g(reuse)179 1291 y(an)o(y)d(giv)o(en)h(XBibT)484
+1300 y(E)507 1291 y(X)g(k)o(ey)g(more)f(than)h(t)o(w)o(en)o(t)o(y-six)f
+(times.)75 1380 y Fi(Required)h Ff(vs)i Fi(Optional)d(Fields:)18
+b Fm(Required)e(\014elds)f(are)h(those)g(that)f(m)o(ust)f(con)o(tain)h(text)h
+(for)f(XBibT)1769 1389 y(E)1792 1380 y(X)g(to)179 1429 y(sa)o(v)o(e)g(an)f
+(en)o(try)h(to)g(the)g(BibT)647 1438 y(E)670 1429 y(X)g(database.)21
+b(If)14 b(y)o(ou)g(fail)f(to)i(en)o(ter)h(text)f(in)o(to)f(these)i(\014elds,)
+f(Message)h(#1)179 1479 y(will)c(b)q(e)j(displa)o(y)o(ed.)179
+1549 y(T)m(o)h(simplify)e(programmi)o(ng)g(for)j(less)g(frequen)o(tly)g(used)
+h(en)o(tries,)g(w)o(e)f(ha)o(v)o(e)g(made)f(the)h(follo)o(wing)e(\014elds)179
+1598 y(mandatory)m(,)c(ev)o(en)k(though)e(they)i(are)f(optional)e(in)i(BibT)
+1093 1607 y(E)1116 1598 y(X:)p 504 1664 752 4 v 502 1714 4
+50 v 577 1699 a Fi(En)o(try)h(T)o(yp)q(e)p 891 1714 V 891 1714
+V 146 w(T)l(ext)h(Field)p 1254 1714 V 504 1717 752 4 v 502
+1767 4 50 v 545 1752 a Fm(Bo)q(oklet)p 891 1767 V 249 w(Author)p
+1254 1767 V 502 1817 V 891 1817 V 934 1802 a(Y)m(ear)p 1254
+1817 V 504 1820 752 4 v 502 1870 4 50 v 545 1855 a(Man)o(ual)p
+891 1870 V 252 w(Y)m(ear)p 1254 1870 V 504 1873 752 4 v 502
+1923 4 50 v 545 1908 a(Misc)p 891 1923 V 305 w(Title)p 1254
+1923 V 504 1926 752 4 v 502 1976 4 50 v 545 1961 a(Unpublished)p
+891 1976 V 162 w(Y)m(ear)p 1254 1976 V 504 1979 752 4 v 179
+2061 a(In)c(the)h(Bo)q(ok)f(and)g(In)o(b)q(o)q(ok)g(en)o(try)h(t)o(yp)q(es,)g
+(BibT)936 2070 y(E)959 2061 y(X)f(requires)h(either)g(an)f(\\Author")h(or)f
+(an)g(\\Editor")f(\014eld.)179 2111 y(XBibT)297 2120 y(E)320
+2111 y(X)k(allo)o(ws)f(y)o(ou)h(to)g(sp)q(ecify)h(an)f(author;)g(if)g(y)o(ou)
+g(wish)g(to)g(store)h(an)f(editor,)g(y)o(ou)g(should)g(store)h(it)179
+2161 y(as)h(author)h(and)f(then)h(edit)g(the)g(BibT)802 2170
+y(E)825 2161 y(X)g(database)f(\014le)h(generated)h(b)o(y)e(XBibT)1493
+2170 y(E)1516 2161 y(X.)g(Similarly)l(,)e(in)i(the)179 2211
+y(In)o(b)q(o)q(ok)c(en)o(try)h(t)o(yp)q(e,)f(BibT)617 2220
+y(E)640 2211 y(X)g(pro)o(vides)h(the)g(option)e(of)h(\\Chapter")g(and/or)g
+(\\P)o(ages")g(\014eld)g(t)o(yp)q(e.)19 b(Here)179 2261 y(XBibT)297
+2270 y(E)320 2261 y(X)14 b(pro)o(vides)g(for)g(\\Chapter"only)m(.)75
+2350 y Fi(Quotes:)20 b Fm(Double)13 b(quotes)j(en)o(tered)g(in)e(a)g(text)h
+(\014eld)f(are)h(remo)o(v)o(ed)f(unless)h(they)g(app)q(ear)f(at)h(the)g(b)q
+(eginning)f(of)179 2399 y(the)h(text,)f(in)g(whic)o(h)h(case)g(they)g
+(signify)e(that)i(the)g(text)g(is)f(to)g(b)q(e)h(written)g(to)f(the)h
+(database)g(\014le)f Ff(without)179 2449 y Fm(double)h(quotes)g(around)g(it.)
+21 b(Suc)o(h)15 b(a)g(\014eld)g(ma)o(y)e(not)i(con)o(tain)f(an)o(y)h(spaces,)
+h(tabs,)f(or)g(newlines;)g(it)g(m)o(ust)965 2574 y(8)p eop
+%%Page: 9 9
+bop 179 307 a Fm(b)q(e)17 b(a)f(constan)o(t)h(string)f(of)g(c)o(haracters.)27
+b(If)17 b(y)o(ou)e(violate)h(these)i(rules,)f(Message)g(#13)f(or)g(Message)i
+(#14)179 357 y(will)12 b(b)q(e)j(displa)o(y)o(ed.)75 446 y
+Fi(Keyw)o(ords)g(and)h(Annote)e(Fields:)19 b Fm(XBibT)835 454
+y(E)858 446 y(X)14 b(pro)o(vides)g(the)h Ff(keywor)n(ds)e Fm(and)h
+Ff(annote)h Fm(\014elds)f(for)g(the)g(main-)179 495 y(tenance)h(of)e(an)h
+(annotated)g(bibliograph)o(y)e(database.)18 b(Dep)q(ending)c(on)g(the)h
+(\014eld)e(selected,)j(an)d(item)179 545 y Fn(keywords)20 b(=)i
+("<information)d(you)i(entered>")179 595 y Fm(or)179 645 y
+Fn(annote)f(=)i("<information)d(you)43 b(entered>")179 695
+y Fm(is)12 b(added)i(to)e(the)i(bibliograph)o(y)d(en)o(try)m(.)17
+b(If)c(an)f(\\annote")h(or)g(\\k)o(eyw)o(ords")f(windo)o(w)g(w)o(as)h(op)q
+(ened,)h(it)e(m)o(ust)179 744 y(either)j(b)q(e)f(cancelled)h(or)e(b)q(e)i
+(nonempt)o(y)m(.)h(Otherwise)g(Message)f(#1)e(will)f(b)q(e)j(displa)o(y)o
+(ed.)75 860 y Fi(3)48 b(bibpro)q(cess)13 b(and)i(bibsearc)o(h)137
+939 y Fm(In)f(this)g(section)h(w)o(e)f(describ)q(e)h(t)o(w)o(o)f(related)g
+(utilities:)96 1026 y Fi(bibpro)q(cess)p Fm(:)h(whic)o(h)e(allo)o(ws)e(y)o
+(ou)i(to)g(merge)f(the)i(con)o(text)g(of)e(additional)g(\014elds)h(added)g
+(to)g(.bib)g(\014les)g(in)o(to)f(the)179 1076 y(.bbl)h(\014les)h(pro)q(duced)
+h(b)o(y)f(BibT)671 1085 y(E)694 1076 y(X,)f(and)96 1164 y Fi(bibsearc)o(h)p
+Fm(:)19 b(whic)o(h)c(allo)o(ws)g(y)o(ou)g(to)h(searc)o(h)h(for)e(the)h(L)982
+1159 y Fe(a)1001 1164 y Fm(T)1024 1177 y(E)1048 1164 y(X)g(k)o(eys)g(of)f
+(bibliograph)o(y)f(en)o(tries)j(con)o(taining)d(the)179 1214
+y(desired)h(information.)75 1329 y Fi(3.1)48 b(bibpro)q(cess)137
+1409 y Fm(By)18 b(no)o(w,)g(y)o(ou)f(ma)o(y)f(b)q(e)j(w)o(ondering)e(ho)o(w)g
+(to)h(merge)f(the)i(information)14 b(pro)o(vided)k(in)f(the)i(\\annote")e
+(and)75 1458 y(\\k)o(eyw)o(ords")d(\014elds)h(in)o(to)e(the)i(output)g
+(created)h(b)o(y)e(BibT)988 1467 y(E)1011 1458 y(X.)g(As)g(w)o(e)h(men)o
+(tioned)e(b)q(efore,)i(BibT)1617 1467 y(E)1640 1458 y(X)f(will)f(ignore)75
+1508 y(these)i(t)o(w)o(o)f(\014elds.)137 1559 y(Consider)k(the)g(output)g
+(pro)q(duced)g(b)o(y)f(BibT)861 1568 y(E)885 1559 y(X)g(when)h(w)o(e)g(cite)f
+(\\Ronnie87a")f(and)h(\\Ronnie87b.")27 b(\(F)m(or)75 1609 y(future)14
+b(reference,)i(assume)e(that)g(it)f(w)o(as)h(written)g(to)g
+Fn(test.bbl)p Fm(.\))75 1703 y Fd(\\begin{the)o(bi)o(bli)o(og)o(rap)o(hy})o
+({1)o(})75 1795 y(\\bibitem{R)o(on)o(nie)o(87)o(b})75 1840
+y(Ronald)j(Reagan.)75 1886 y(\\newblock)f({\\em)i(Hollywood)e(Dreams}.)75
+1932 y(\\newblock)g(Beverley)h(Hills)g(Press,)h(1987.)75 2023
+y(\\bibitem{R)o(on)o(nie)o(87)o(a})75 2069 y(Ronald)f(Reagan.)75
+2114 y(\\newblock)f(It)j(never)f(rains)f(in)i(southern)e(californi)o(a.)75
+2160 y(\\newblock)f({\\em)i(Sunny)g(Side)g(Up},)g(1\(3\):33--4)o(4,)e(1987.)
+75 2251 y(\\end{thebi)o(bl)o(iog)o(ra)o(phy)o(})137 2348 y
+Fm(Since)e(\\annote")f(is)g(a)f(k)o(eyw)o(ord)h(that)h(is)f(not)g(kno)o(wn)f
+(to)h(BibT)1130 2357 y(E)1153 2348 y(X,)g(the)h(information)c(in)i(the)i
+(\\annote")f(\014eld)75 2398 y(\(i.e.,)g(\\what)g(great)h(stu\013)s(!"\))19
+b(w)o(as)14 b(ignored.)137 2449 y(The)h Fi(bibpro)q(cess)c
+Fm(utilit)o(y)h(allo)o(ws)h(y)o(ou)g(to)h(merge)f(this)h(information)d(in)o
+(to)j(the)g(.bbl)f(\014le.)18 b(Its)c(syn)o(tax)g(is)965 2574
+y(9)p eop
+%%Page: 10 10
+bop 75 307 a Fn(bibprocess)20 b(<bibfile>)g([)h(<bibfile>)f(...)h(])h
+(<bblfile>)315 357 y(-f)f(<formatfile>)315 407 y(-k)g(<keyword>)f([)i(-k)f
+(<keyword>)f(...)h(])315 457 y([)g(-o)h(<outputfile>)d(])137
+536 y Fm(Giv)o(en)11 b(a)h Fn(<bblfile>)d Fm(\()j(a)f(\014le)h(with)f(a)g
+(.bbl)g(extension)i(\))e(pro)q(duced)i(b)o(y)f(BibT)1356 545
+y(E)1379 536 y(X)f(from)f(a)i(set)g(of)f Fn(<bibfiles>)75 586
+y Fm(\(\014les)i(with)g(a)g(.bib)f(extension)i(\),)e Fi(bibpro)q(cess)f
+Fm(app)q(ends)j(the)f(con)o(ten)o(ts)h(of)f(the)g(\014elds)h(sp)q(eci\014ed)g
+(b)o(y)f Fn(<keyword>)75 636 y Fm(to)g(the)g(corresp)q(onding)h(en)o(tries)g
+(in)f Fn(<bblfile>)p Fm(.)j(The)d(output)g(is)g(written)g(to)g
+Fn(<outputfile>)e Fm(if)h(the)h Fn(-o)g Fm(option)75 686 y(is)h(presen)o(t,)h
+(and)f(to)f Fn(stdout)g Fm(otherwise.)19 b(The)14 b Fn(<formatfile>)e
+Fm(sp)q(eci\014es)j(ho)o(w)f(the)g(new)h(information)c(is)j(to)f(b)q(e)75
+735 y(formatted.)137 785 y(Again,)d(things)g(are)g(easiest)h(to)f(understand)
+h(with)e(an)h(example.)16 b(Assume)10 b(that)g(w)o(e)g(wish)g(to)f(merge)h
+(the)g(\\k)o(ey-)75 835 y(w)o(ords")j(and)f(\\annote")h(information)d(that)j
+(XBibT)901 844 y(E)924 835 y(X)g(allo)o(w)o(ed)e(us)i(to)g(sp)q(ecify)m(.)18
+b(The)13 b(original)e(BibT)1686 844 y(E)1709 835 y(X)i(output)75
+885 y(is)d(in)f Fn(test.bbl)p Fm(,)g(the)h(bibliograph)o(y)e(\014le)i(w)o(as)
+g Fn(r.bib)p Fm(,)f(and)g(the)i(merged)e(output)h(should)g(go)f(to)h
+Fn(testmerged.bbl)75 935 y Fm(\(sa)o(y\).)18 b(W)m(e)c(issue)g(the)h(command)
+75 1014 y Fn(bibprocess)20 b(r.bib)g(test.bbl)h(-f)g(merge.fmt)f(-k)h
+(keywords)f(-k)i(annote)315 1064 y(-o)f(testmerged.bbl)75 1144
+y Fm(The)14 b(\014le)g Fn(merge.fmt)e Fm(con)o(tains)i(the)g(follo)o(wing)e
+(information:)75 1223 y Fn(annote)75 1273 y(before:)20 b(@\\newblock)g
+({{\\bf)h(annote:})f(@)75 1323 y(after:)h(@}@)75 1422 y(keywords)75
+1472 y(before:)f(@\\newblock)g({{\\bf)h(keywords:})f(@)75 1522
+y(after:)h(@}@)75 1597 y Fm(W)m(e)d(see)h(that)f(w)o(e)h(ha)o(v)o(e)f(an)g
+(en)o(try)h(for)f(eac)o(h)g(k)o(eyw)o(ord)g(that)h(is)f(to)g(b)q(e)h(merged,)
+f(and)g(for)g(eac)o(h)h(k)o(eyw)o(ord)f(w)o(e)75 1643 y(sp)q(ecify)c(what)g
+(string)g(to)g(place)g Ff(b)n(efor)n(e)f Fm(and)h Ff(after)f
+Fm(the)i(information)c(to)i(b)q(e)i(merged.)j(The)c(\\at")f(sign)h
+Fn(@)f Fm(is)h(used)75 1689 y(as)j(a)h(delimiter,)e(the)i(en)o(tries)g(m)o
+(ust)e(b)q(e)i(separated)h(b)o(y)e(blank)g(lines,)h(and)f(the)h
+Fn(<keywords>)d Fm(\(\\annote")i(and)75 1734 y(\\k)o(eyw)o(ords")g(in)g(our)h
+(example\))e(m)o(ust)g(b)q(e)i(sp)q(eci\014ed)h(with)e(lo)o(w)o(er-case)h(c)o
+(haracters.)31 b Fn(testmerged.bbl)14 b Fm(then)75 1780 y(con)o(tains)g(the)g
+(follo)o(wing)e(information:)75 1856 y Fd(\\begin{the)o(bi)o(bli)o(og)o(rap)o
+(hy})o({1)o(})75 1947 y(\\bibitem{R)o(on)o(nie)o(87)o(b})75
+1993 y(Ronald)17 b(Reagan.)75 2038 y(\\newblock)f({\\em)i(Hollywood)e
+(Dreams}.)75 2084 y(\\newblock)g(Beverley)h(Hills)g(Press,)h(1987.)75
+2130 y(\\newblock)e({{\\bf)i(annote:})e(What)i(great)g(stuff!})75
+2221 y(\\bibitem{R)o(on)o(nie)o(87)o(a})75 2267 y(Ronald)f(Reagan.)75
+2312 y(\\newblock)f(It)j(never)f(rains)f(in)i(southern)e(californi)o(a.)75
+2358 y(\\newblock)f({\\em)i(Sunny)g(Side)g(Up},)g(1\(3\):33--4)o(4,)e(1987.)
+75 2449 y(\\end{thebi)o(bl)o(iog)o(ra)o(phy)o(})954 2574 y
+Fm(10)p eop
+%%Page: 11 11
+bop 137 307 a Fm(W)m(e)16 b(see)i(that)e(the)h(\\annote")f(information)d(has)
+j(b)q(een)i(app)q(ended)f(to)f(the)h(\\Ronnie87a")d(en)o(try)j(using)f(the)75
+357 y(format)c(sp)q(eci\014ed)k(in)d Fn(merge.fmt)p Fm(.)k(There)e(w)o(as)f
+(no)f(\\k)o(eyw)o(ords")h(information,)d(so)j(no)f(\014elds)i(w)o(ere)g
+(created)g(for)75 407 y(it.)137 457 y(Using)g Fi(bibpro)q(cess)20
+b Fm(y)o(ou)15 b(can)h(th)o(us)f(augmen)o(t)f(the)i(functionalit)o(y)e(of)h
+(BibT)1371 466 y(E)1394 457 y(X)g(and)g(augmen)o(t)f(its)i(output)75
+507 y(with)e(an)o(y)f(n)o(um)o(b)q(er)g(of)g(user-de\014ned)j(\014elds.)75
+616 y Fi(3.2)48 b(bibsearc)o(h)137 693 y Fm(The)15 b(syn)o(tax)e(of)h
+Fi(bibsearc)o(h)d Fm(is)j(as)g(follo)o(ws:)75 776 y Fn(bibsearch)20
+b(<bibfile>)g(-k)h(<keyword>)f([-k)h(<keyword>])293 826 y([-o)g
+(<outputfile>])e(-s)j(<searchword>)75 910 y Fi(bibsearc)o(h)16
+b Fm(searc)o(hes)22 b(the)e Fn(title)e Fm(\014eld)h(and)g(the)h(\014elds)g
+(sp)q(eci\014ed)g(b)o(y)g Fn(<keyword>)d Fm(in)i(a)g(bibliograph)o(y)e
+(\014le)75 960 y Fn(<bibfile>)f Fm(for)i(an)g(o)q(ccurrence)j(of)c
+Fn(<searchword>)f Fm(and)i(prin)o(ts)g(the)h(L)1256 955 y Fe(a)1275
+960 y Fm(T)1298 972 y(E)1321 960 y(X)f(k)o(eys)h(of)e(all)g(en)o(tries)i
+(either)g(to)75 1009 y Fn(<outputfile>)11 b Fm(or)j Fn(stdout)p
+Fm(.)j(F)m(or)c(example,)75 1093 y Fn(bibsearch)20 b(r.bib)h(-k)g(annote)g
+(-s)g("great)g(stuff")75 1177 y Fm(will)12 b(pro)q(duce)75
+1261 y Fn(Ronnie87b)75 1344 y Fm(on)i(the)h(standard)g(output.)k(Note)c(that)
+f(one)h(m)o(ust)e(enclose)j(the)f(searc)o(h)g(string)f(in)g(quotes)h(if)f(it)
+g(con)o(tains)g(more)75 1394 y(than)g(one)g(w)o(ord.)137 1444
+y(In)20 b(summary)m(,)e Fi(bibsearc)o(h)f Fm(is)j(useful)g(for)f(retrieving)i
+(citations)e(con)o(taining)g(information)e(on)i(sp)q(eci\014ed)75
+1494 y(w)o(ords|in)13 b(particular,)g(if)g(one)i(main)o(tains)c(a)j(\\k)o
+(eyw)o(ords")f(en)o(try)i(in)e(the)i(BibT)1350 1503 y(E)1373
+1494 y(X)f(database.)75 1603 y Fi(4)48 b(Installati)o(on)13
+b(Guide)137 1680 y Fm(This)h(section)h(describ)q(es)h(ho)o(w)d(to)h(install)f
+(XBibT)928 1689 y(E)951 1680 y(X,)g Fi(bibpro)q(cess,)f Fm(and)i
+Fi(bibsearc)o(h.)75 1789 y(4.1)48 b(XBibT)320 1798 y(E)344
+1789 y(X)16 b(Installation)137 1866 y Fm(Belo)o(w)e(is)g(a)f(list)h(of)f
+(\014les)h(needed)i(for)d(XBibT)856 1875 y(E)880 1866 y(X)g(:)p
+255 1953 1154 4 v 253 2002 4 50 v 297 1988 a(Mak)o(e\014le:)p
+622 2002 V 206 w(mak)o(e.xbibtex)p 1407 2002 V 255 2006 1154
+4 v 253 2056 4 50 v 297 2041 a(X-Resource)i(\014le:)p 622 2056
+V 83 w(.xbibrc)p 1407 2056 V 255 2059 1154 4 v 253 2109 4 50
+v 297 2094 a(C-Header)g(\014le:)p 622 2109 V 118 w(xbibtex.h)p
+1407 2109 V 255 2112 1154 4 v 253 2162 4 50 v 297 2147 a(C-Source)g(\014les:)
+p 622 2162 V 110 w(xbibtex.c)159 b(lev)o(els.c)83 b(con\014rm.c)p
+1407 2162 V 253 2212 V 622 2212 V 666 2197 a(\014eld.c)219
+b(en)o(try)m(.c)89 b(opt.c)p 1407 2212 V 253 2261 V 622 2261
+V 666 2247 a(sa)o(v)o(e.c)p 1407 2261 V 255 2265 1154 4 v 137
+2357 a(F)m(or)14 b(XBibT)330 2366 y(E)353 2357 y(X)g(to)g(compile)e(and)i
+(execute)h(prop)q(erly)m(,)f(y)o(ou)f(m)o(ust)g(c)o(hec)o(k)i(that)137
+2449 y Fh(\017)21 b Fm(y)o(ou)13 b(are)h(running)g(X11)g(release)h(4;)954
+2574 y(11)p eop
+%%Page: 12 12
+bop 137 307 a Fh(\017)21 b Fm(y)o(ou)13 b(ha)o(v)o(e)h(access)i(to)d(the)i
+(X-T)m(o)q(olkit)d(library)h(\(see)i([1]\);)137 396 y Fh(\017)21
+b Fm(y)o(ou)13 b(ha)o(v)o(e)h(the)g(X-A)o(thena)h(Widget)e(Set)i(\(see)g([3)o
+(]\);)137 484 y Fh(\017)21 b Fm(the)14 b(mak)o(e\014le,)e(header)j(\014le,)f
+(and)f(all)g(source)i(\014les)f(are)h(con)o(tained)f(in)f(the)h(same)g
+(directory;)137 572 y Fh(\017)21 b Fm(the)14 b(macro)f(X)p
+408 572 13 2 v 15 w(DIR)g(in)h(\\mak)o(e\014le")d(is)j(set)h(to)f(the)g
+(directory)h(where)g(X)f(stores)h(its)f(header)h(\014les;)f(and)137
+661 y Fh(\017)21 b Fm(y)o(ou)13 b(ha)o(v)o(e)h(access)i(to)d(the)i(libX11,)d
+(libXt,)h(libXa)o(w,)f(libXm)o(u,)f(and)j(libXext)f(libraries.)75
+758 y(If)h(these)h(conditions)e(are)i(satis\014ed,)f(t)o(yping)75
+846 y Fn(make)21 b(-f)g(make.xbibtex)75 933 y Fm(will)12 b(create)k
+(\\xbibtex")d(in)h(the)g(curren)o(t)h(directory)m(.)75 1048
+y Fi(4.2)48 b(bibpro)q(cess)13 b(and)i(bibsearc)o(h)e(Installation)137
+1127 y Fm(Belo)o(w)h(is)g(a)f(list)h(of)f(the)i(\014les)f(needed)h(for)f
+Fi(bibpro)q(cess)d Fm(and)j Fi(bibsearc)o(h)p Fm(:)p 255 1174
+1160 4 v 253 1224 4 50 v 297 1209 a(Mak)o(e\014le:)p 595 1224
+V 179 w(mak)o(e.bibutils)p 1413 1224 V 255 1227 1160 4 v 253
+1277 4 50 v 297 1262 a(C-Header)h(\014le:)p 595 1277 V 91 w(globalbib.h)p
+1413 1277 V 255 1280 1160 4 v 253 1330 4 50 v 297 1315 a(C-Source)g(\014les:)
+p 595 1330 V 83 w(bibpro)q(cess.c)108 b(bibsearc)o(h.c)p 1413
+1330 V 253 1380 V 595 1380 V 639 1365 a(hash.c)212 b(init.c)190
+b(input.c)p 1413 1380 V 253 1430 V 595 1430 V 639 1415 a(parse.c)201
+b(sa)o(v)o(e.c)p 1413 1430 V 255 1433 1160 4 v 137 1526 a(T)m(o)13
+b(compile)g Fi(bibsearc)o(h)e Fm(and)i Fi(bibpro)q(cess)f Fm(in)h(the)i
+(curren)o(t)g(directo)o(y)m(,)e(issue)i(the)f(command)75 1615
+y Fn(make)21 b(-f)g(make.bibutils)e(<target>)75 1702 y Fm(where)e
+Fn(<target>)d Fm(is)h(either)i Fn(bibsearch)d Fm(or)i Fn(bibprocess)p
+Fm(,)d(or)j(missing,)e(in)h(whic)o(h)h(case)g(b)q(oth)g(programs)f(are)75
+1752 y(compiled.)75 1867 y Fi(Ac)o(kno)o(wledgmen)o(ts)137
+1946 y Fm(W)m(e)f(thank)g(Bill)e(Gropp)i(and)g(Rem)o(y)e(Ev)n(ard)i(for)f
+(their)h(friendly)g(help)g(with)f(X)h(Windo)o(ws)f(programming.)75
+2061 y Fi(App)q(endix:)19 b(XBibT)449 2070 y(E)474 2061 y(X)d(Messages)137
+2140 y Fm(Eac)o(h)d(message)f(has)h(a)f(sev)o(erit)o(y)h(lev)o(el)f(asso)q
+(ciated)h(with)f(it)g(indicating)g(the)h(seriousness)h(of)e(the)h
+(information)75 2190 y(rep)q(orted.)20 b(A)14 b(summary)d(is)j(giv)o(en)f(in)
+g(T)m(able)h(A-1.)137 2241 y(T)m(able)f(A-1:)18 b Fi(Message)e(Sev)o(erit)o
+(y)d(Lev)o(els)i(and)g(Their)f(In)o(terpretati)o(on)75 2338
+y(1)21 b Fm(ADD)p 217 2338 13 2 v 14 w(REQ)p 322 2338 V 15
+w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(3\))179 2388 y Fa(ERR)o(OR!)26
+b(T)m(ext)12 b(not)i(en)o(tered)f(in)h([\014eld)g(name])f(\014eld.)179
+2449 y(Either)h(en)o(ter)f(text)g(to)g(this)h(\014eld)g(or)f(eliminate)i
+(this)f(\014eld)g(with)g(the)f Fc(Canc)n(el)f Fa(button.)954
+2574 y Fm(12)p eop
+%%Page: 13 13
+bop 75 269 1314 4 v 73 319 4 50 v 117 304 a Fm(Sev)o(erit)o(y)14
+b(Lev)o(el)p 411 319 V 83 w(In)o(terpretation)p 1387 319 V
+75 322 1314 4 v 73 372 4 50 v 233 357 a(1)p 411 372 V 200 w(Information|)d
+(no)i(action)h(required)p 1387 372 V 75 375 1314 4 v 73 425
+4 50 v 233 410 a(2)p 411 425 V 200 w(P)o(ossible)g(mo)q(di\014cations)e(in)h
+(BibT)1003 419 y(E)1027 410 y(X)g(\014le)h(needed)p 1387 425
+V 75 428 1314 4 v 73 478 4 50 v 233 463 a(3)p 411 478 V 200
+w(Required)g(information)d(for)j(sa)o(ving)f(an)g(en)o(try)i(missing)p
+1387 478 V 75 482 1314 4 v 73 531 4 50 v 233 516 a(5)p 411
+531 V 200 w(XBibT)572 525 y(E)595 516 y(X)f(error)p 1387 531
+V 75 535 1314 4 v 75 655 a Fi(2)21 b Fm(A)o(UT)p 213 655 13
+2 v 15 w(EDI)p 303 655 V 15 w(MSG)13 b(\(Sev)o(erit)o(y)h(Lev)o(el)g(2\))179
+705 y Fa(W)l(ARNING!)25 b(Ma)o(y)13 b(need)h(to)f(edit)h(en)o(try)f(dep)q
+(ending)j(on)d(whether)179 755 y(y)o(ou)g(w)o(an)o(t)g(\014eld)h(name)g(to)f
+(b)q(e)g(\\Author")h(or)f(\\Editor.")179 805 y(Will)i(automatically)h(sa)o(v)
+o(e)e(\014eld)g(as)f(\\Author.")75 886 y Fi(3)21 b Fm(CANT)p
+244 886 V 15 w(SA)-5 b(VE)p 367 886 V 16 w(MSG)13 b(\(Sev)o(erit)o(y)i(Lev)o
+(el)f(3\))179 935 y Fa(ERR)o(OR!)26 b(Cannot)13 b(sa)o(v)o(e)h(en)o(try)f(to)
+g(bibliograp)q(h)o(y)j(database.)75 1066 y Fi(4)21 b Fm(CHA)p
+214 1066 V 15 w(P)m(A)o(G)p 317 1066 V 14 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o
+(el)g(2\))179 1116 y Fa(W)l(ARNING!)25 b(Ma)o(y)13 b(need)h(to)f(edit)h(en)o
+(try)f(dep)q(ending)j(on)d(whether)179 1166 y(y)o(ou)g(wish)h(the)f(\014eld)h
+(name)g(to)f(b)q(e)g(\\Chapter")h(and/or)g(\\P)o(ages.")179
+1216 y(Will)h(automatically)h(sa)o(v)o(e)e(\014eld)g(as)f(\\Chapter.")75
+1297 y Fi(5)21 b Fm(DIR)p 200 1297 V 14 w(EXIST)p 341 1297
+V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(3\))179 1347
+y Fa(ERR)o(OR!)26 b(Could)14 b(not)f(\014nd)h(Directory)g(\\[path].")75
+1428 y Fi(6)21 b Fm(ENTR)m(Y)p 270 1428 V 14 w(INF)o(O)p 388
+1428 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(1\))179
+1477 y Fa(Bibliography)i(En)o(try)d(Information)208 1527 y(T)o(yp)q(e:)193
+b(\\[en)o(try)14 b(t)o(yp)q(e]")208 1577 y(Key:)211 b(\\[reference)13
+b(k)o(ey]")208 1627 y(DB)h(File)g(Name:)24 b(\\[database)14
+b(path)f(&)g(\014le)h(name]")75 1708 y Fi(7)21 b Fm(GET)p 213
+1708 V 14 w(LEV)p 312 1708 V 16 w(MSG)13 b(\(Sev)o(erit)o(y)i(Lev)o(el)f(5\))
+179 1758 y Fa(Program)f(ERR)o(OR!)179 1808 y(Chec)o(k)g(all)h(calls)h(to)e
+(function)h(GetWidget)p 815 1808 12 2 v 16 w(from)p 909 1808
+V 14 w(Lev)o(el\(\).)179 1857 y(T)m(rying)g(to)f(access)g(widget)h(from)f(in)
+o(v)n(alid)i(lev)o(el.)75 1938 y Fi(8)21 b Fm(INV)p 199 1938
+13 2 v 15 w(BKP)m(A)m(TH)p 389 1938 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o
+(el)g(5\))179 1988 y Fa(The)f(en)o(vironmen)o(t)i(v)n(ariable)g(\\XBIBTEX)p
+824 1988 12 2 v 13 w(BA)o(CKUP)p 1005 1988 V 14 w(P)m(A)m(TH")d(w)o(as)h(set)
+f(to)h(an)h(in)o(v)n(alid)h(path.)179 2038 y(Exit)f(XBibT)m(eX)f(and)g(set)g
+(XBIBTEX)p 751 2038 V 14 w(BA)o(CKUP)p 933 2038 V 13 w(P)m(A)m(TH)f(to)h(a)g
+(v)n(alid)i(path.)75 2119 y Fi(9)21 b Fm(INV)p 199 2119 13
+2 v 15 w(CLIPFILE)p 409 2119 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g
+(2\))179 2169 y Fa(Cannot)f(access)h(the)f(\014le)h(sp)q(eci\014ed)h(b)o(y)e
+(the)g(en)o(vironmen)o(t)179 2219 y(v)n(ariable)i(\\XBIBTEX)p
+524 2219 12 2 v 14 w(CLIPBO)o(ARD".)179 2268 y(The)e(\\ClipBoard")i(button)f
+(will)h(b)q(e)e(disabled.)75 2350 y Fi(10)20 b Fm(KEY)p 236
+2350 13 2 v 16 w(FMT)p 347 2350 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g
+(3\))179 2399 y Fa(The)f(k)o(ey)g(\\[Key]")g(is)g(incorrectly)j(formatted.)
+179 2449 y(The)d(\014rst)g(c)o(haracter)h(m)o(ust)f(b)q(e)g(a)g(letter.)954
+2574 y Fm(13)p eop
+%%Page: 14 14
+bop 75 307 a Fi(11)20 b Fm(KEY)p 236 307 13 2 v 16 w(REQ)p
+343 307 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(3\))179
+357 y Fa(ERR)o(OR!)26 b(No)13 b(k)o(ey)g(en)o(tered!)k(En)o(ter)d(a)f(v)n
+(alid)h(k)o(ey)m(,)f(and)h(re-sa)o(v)o(e.)75 440 y Fi(12)20
+b Fm(NO)p 208 440 V 16 w(CLIPENV)p 413 440 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g
+(Lev)o(el)g(2\))179 490 y Fa(The)f(en)o(vironmen)o(t)i(v)n(ariable:)k
+(\\XBIBTEX)p 839 490 12 2 v 13 w(CLIPBO)o(ARD")13 b(has)h(not)f(b)q(een)h
+(set.)179 540 y(The)f(\\ClipBoard")i(button)f(will)h(b)q(e)e(disabled.)75
+623 y Fi(13)20 b Fm(QUOTE)p 298 623 13 2 v 16 w(FMT)p 409 623
+V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(3\))179 672 y
+Fa(T)m(ext)e(\014eld)j(\\[\014eld)f(name]")f(is)h(not)f(in)h(correct)f
+(format)g(for)f(an)i(abbreviation.)75 756 y Fi(14)20 b Fm(RM)p
+214 756 V 15 w(QUOTES)p 405 756 V 16 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g
+(1\))179 805 y Fa([n)o(um)f(of)s(])f(double)j(quote\(s\))f(remo)o(v)o(ed)f
+(from)g(En)o(try)g(\014eld)i(\\[\014eld)f(name].")75 888 y
+Fi(15)20 b Fm(STORE)p 289 888 V 16 w(LEV)p 390 888 V 15 w(MSG)13
+b(\(Sev)o(erit)o(y)i(Lev)o(el)f(5\))179 938 y Fa(Program)f(ERR)o(OR!)179
+988 y(Chec)o(k)g(all)h(calls)h(to)e(the)g(function)h(StoreWidget)p
+906 988 12 2 v 16 w(to)p 956 988 V 14 w(Lev)o(el\(\).)179 1038
+y(T)m(rying)g(to)f(store)g(widget)g(to)g(in)o(v)n(alid)j(lev)o(el.)75
+1121 y Fi(16)k Fm(TXT)p 236 1121 13 2 v 16 w(REQ)p 343 1121
+V 15 w(MSG)13 b(\(Sev)o(erit)o(y)h(Lev)o(el)g(3\))179 1171
+y Fa(ERR)o(OR!)26 b(T)m(ext)12 b(not)i(en)o(tered)f(in)h(\\[\014eld)g(name]")
+f(\014eld.)75 1254 y Fi(17)20 b Fm(WR)m(T)p 246 1254 V 14 w(FILE)p
+356 1254 V 15 w(MSG)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(3\))179
+1303 y Fa(Y)m(ou)f(do)g(not)g(ha)o(v)o(e)h(write)f(access)h(to)e(\014le)179
+1353 y(\\[\014le)i(name].")75 1436 y Fi(18)20 b Fm(WR)m(T)p
+246 1436 V 14 w(P)m(A)m(TH)p 374 1436 V 15 w(MSG)13 b(\(Sev)o(erit)o(y)i(Lev)
+o(el)f(3\))179 1486 y Fa(Y)m(ou)f(do)g(not)g(ha)o(v)o(e)h(write)f(access)h
+(to)e(directory)179 1536 y(\\[path)h(name].")75 1619 y Fi(19)20
+b Fm(default)14 b(\(Sev)o(erit)o(y)g(Lev)o(el)g(5\))179 1669
+y Fa(Program)f(ERR)o(OR!)179 1719 y(Chec)o(k)g(all)h(calls)h(to)e(function)h
+(P)o(opup)p 739 1719 12 2 v 15 w(Messageshell\(\).)179 1768
+y(Unkno)o(wn)f(error)h(t)o(yp)q(e)f(passed)h(to)f(function.)75
+1876 y Fi(References)75 1953 y Fm([1])20 b(Jo)q(el)11 b(McCormac)o(k,)f(P)o
+(aul)h(Asen)o(te,)h(and)f(Ralph)f(R.)g(Swic)o(k,)h Ff(X)h(T)m(o)n(olkit)g
+(Intrinsics)f({)i(C)f(L)n(anguage)i(Interfac)n(e,)140 2003
+y(X)g(Window)i(System,)f(X)f(V)m(ersion)h(11,)g(R)n(ele)n(ase)g(4)p
+Fm(,)e(Decem)o(b)q(er)h(1989.)75 2086 y([2])20 b(Leslie)d(Lamp)q(ort,)f(L)458
+2081 y Fe(a)477 2086 y Fm(T)500 2098 y(E)523 2086 y(X)i Ff(User's)f(Guide)h
+(and)h(R)n(efer)n(enc)n(e)e(Manual)p Fm(,)h(Addison-W)m(esley)m(,)f(Reading,)
+f(Mass.,)140 2136 y(1986.)75 2219 y([3])k(Chris)c(D.)f(P)o(eterson,)j
+Ff(A)o(thena)f(Widget)g(Set)g({)g(C)g(L)n(anguage)h(Interfac)n(e,)e(X)h
+(Window)g(System,)h(X)e(V)m(ersion)140 2268 y(11,)f(R)n(ele)n(ase)g(4)p
+Fm(,)e(Decem)o(b)q(er)h(1989.)954 2574 y(14)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/biblio/bibtex/utils/xbibtex/xbibtex.shar.gz b/biblio/bibtex/utils/xbibtex/xbibtex.shar.gz
new file mode 100644
index 0000000000..3f48b71716
--- /dev/null
+++ b/biblio/bibtex/utils/xbibtex/xbibtex.shar.gz
Binary files differ